diff --git a/.github/ISSUE_TEMPLATE/3_Support_question.md b/.github/ISSUE_TEMPLATE/3_Support_question.md index a53ef6fa7..d6c5e5020 100644 --- a/.github/ISSUE_TEMPLATE/3_Support_question.md +++ b/.github/ISSUE_TEMPLATE/3_Support_question.md @@ -1,5 +1,5 @@ --- -name: "🧐 Support Question" +name: "❔ Support Question" about: 'This repository is only for reporting bugs or problems. If you need help, see: https://github.com/bagisto/bagisto#documentation' --- @@ -8,4 +8,4 @@ This repository is only for reporting bugs or issues. If you need support, pleas 1. Create support ticket on https://bagisto.uvdesk.com -Thanks! \ No newline at end of file +Thanks! diff --git a/composer.json b/composer.json index 143e4c3b9..381676d04 100755 --- a/composer.json +++ b/composer.json @@ -2,9 +2,10 @@ "name": "bagisto/bagisto", "description": "Bagisto Laravel ECommerce", "keywords": [ - "framework", - "laravel" + "framework", + "laravel" ], + "license": "MIT", "type": "project", "require": { @@ -17,6 +18,7 @@ "ext-pdo_mysql": "*", "ext-tokenizer": "*", "astrotomic/laravel-translatable": "^11.0.0", + "alkhachatryan/laravel-web-console": "1.5.1", "barryvdh/laravel-dompdf": "0.8.3", "doctrine/dbal": "2.9.2", "fideloper/proxy": "^4.0", @@ -33,94 +35,103 @@ "prettus/l5-repository": "2.6.32", "tymon/jwt-auth": "1.0.0-rc.4" }, + "require-dev": { - "barryvdh/laravel-debugbar": "^3.1", - "filp/whoops": "^2.0", - "fzaninotto/faker": "^1.4", - "laravel/dusk": "^4.0", - "mockery/mockery": "^1.0", - "nunomaduro/collision": "^2.0", - "phpunit/phpunit": "^7.0" + "barryvdh/laravel-debugbar": "^3.1", + "filp/whoops": "^2.0", + "fzaninotto/faker": "^1.4", + "laravel/dusk": "^4.0", + "mockery/mockery": "^1.0", + "nunomaduro/collision": "^2.0", + "phpunit/phpunit": "^7.0" }, + "replace": { - "bagisto/laravel-user": "v0.1.0", - "bagisto/laravel-admin": "v0.1.0", - "bagisto/laravel-ui": "v0.1.0", - "bagisto/laravel-core": "v0.1.0", - "bagisto/laravel-attribute": "v0.1.0", - "bagisto/laravel-checkout": "v0.1.0", - "bagisto/laravel-customer": "v0.1.0", - "bagisto/laravel-inventory": "v0.1.0", - "bagisto/laravel-category": "v0.1.0", - "bagisto/laravel-product": "v0.1.0", - "bagisto/laravel-shop": "v0.1.0", - "bagisto/laravel-theme": "v0.1.0", - "bagisto/laravel-shipping": "v0.1.0", - "bagisto/laravel-payment": "v0.1.0", - "bagisto/laravel-sales": "v0.1.0", - "bagisto/laravel-tax": "v0.1.0", - "bagisto/laravel-api": "v0.1.0", - "bagisto/laravel-paypal": "v0.1.0", - "bagisto/laravel-discount": "v0.1.0" + "bagisto/laravel-user": "v0.1.0", + "bagisto/laravel-admin": "v0.1.0", + "bagisto/laravel-ui": "v0.1.0", + "bagisto/laravel-core": "v0.1.0", + "bagisto/laravel-attribute": "v0.1.0", + "bagisto/laravel-checkout": "v0.1.0", + "bagisto/laravel-customer": "v0.1.0", + "bagisto/laravel-inventory": "v0.1.0", + "bagisto/laravel-category": "v0.1.0", + "bagisto/laravel-product": "v0.1.0", + "bagisto/laravel-shop": "v0.1.0", + "bagisto/laravel-theme": "v0.1.0", + "bagisto/laravel-shipping": "v0.1.0", + "bagisto/laravel-payment": "v0.1.0", + "bagisto/laravel-sales": "v0.1.0", + "bagisto/laravel-tax": "v0.1.0", + "bagisto/laravel-api": "v0.1.0", + "bagisto/laravel-paypal": "v0.1.0", + "bagisto/laravel-discount": "v0.1.0" }, + "autoload": { - "classmap": [ - "database/seeds", - "database/factories" - ], - "psr-4": { - "App\\": "app/", - "Webkul\\User\\": "packages/Webkul/User/src", - "Webkul\\Admin\\": "packages/Webkul/Admin/src", - "Webkul\\Ui\\": "packages/Webkul/Ui/src", - "Webkul\\Category\\": "packages/Webkul/Category/src", - "Webkul\\Checkout\\": "packages/Webkul/Checkout/src", - "Webkul\\Attribute\\": "packages/Webkul/Attribute/src", - "Webkul\\Shop\\": "packages/Webkul/Shop/src", - "Webkul\\Core\\": "packages/Webkul/Core/src", - "Webkul\\Customer\\": "packages/Webkul/Customer/src", - "Webkul\\Inventory\\": "packages/Webkul/Inventory/src", - "Webkul\\Product\\": "packages/Webkul/Product/src", - "Webkul\\Theme\\": "packages/Webkul/Theme/src", - "Webkul\\Shipping\\": "packages/Webkul/Shipping/src", - "Webkul\\Payment\\": "packages/Webkul/Payment/src", - "Webkul\\Paypal\\": "packages/Webkul/Paypal/src", - "Webkul\\Sales\\": "packages/Webkul/Sales/src", - "Webkul\\Tax\\": "packages/Webkul/Tax/src", - "Webkul\\API\\": "packages/Webkul/API", - "Webkul\\Discount\\": "packages/Webkul/Discount/src", - "Webkul\\CMS\\": "packages/Webkul/CMS/src" - } + "classmap": [ + "database/seeds", + "database/factories" + ], + "psr-4": { + "App\\": "app/", + "Webkul\\User\\": "packages/Webkul/User/src", + "Webkul\\Admin\\": "packages/Webkul/Admin/src", + "Webkul\\Ui\\": "packages/Webkul/Ui/src", + "Webkul\\Category\\": "packages/Webkul/Category/src", + "Webkul\\Checkout\\": "packages/Webkul/Checkout/src", + "Webkul\\Attribute\\": "packages/Webkul/Attribute/src", + "Webkul\\Shop\\": "packages/Webkul/Shop/src", + "Webkul\\Core\\": "packages/Webkul/Core/src", + "Webkul\\Customer\\": "packages/Webkul/Customer/src", + "Webkul\\Inventory\\": "packages/Webkul/Inventory/src", + "Webkul\\Product\\": "packages/Webkul/Product/src", + "Webkul\\Theme\\": "packages/Webkul/Theme/src", + "Webkul\\Shipping\\": "packages/Webkul/Shipping/src", + "Webkul\\Payment\\": "packages/Webkul/Payment/src", + "Webkul\\Paypal\\": "packages/Webkul/Paypal/src", + "Webkul\\Sales\\": "packages/Webkul/Sales/src", + "Webkul\\Tax\\": "packages/Webkul/Tax/src", + "Webkul\\API\\": "packages/Webkul/API", + "Webkul\\Discount\\": "packages/Webkul/Discount/src", + "Webkul\\CMS\\": "packages/Webkul/CMS/src" + } }, + "autoload-dev": { - "psr-4": { - "Tests\\": "tests/" - } + "psr-4": { + "Tests\\": "tests/" + } }, + "extra": { - "laravel": { - "dont-discover": [ - "barryvdh/laravel-debugbar", - "laravel/dusk" - ] - } + "laravel": { + "dont-discover": [ + "barryvdh/laravel-debugbar", + "laravel/dusk" + ] + } }, + "scripts": { - "post-root-package-install": [ - "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" - ], - "post-create-project-cmd": [ - "@php artisan key:generate" - ], - "post-autoload-dump": [ - "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", - "@php artisan package:discover" - ] + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + + "post-create-project-cmd": [ + "@php artisan key:generate", + "Webkul\\Core\\Events\\ComposerEvents::postCreateProject" + ], + + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ] }, "config": { - "preferred-install": "stable", - "sort-packages": true, - "optimize-autoloader": true + "preferred-install": "stable", + "sort-packages": true, + "optimize-autoloader": true }, "minimum-stability": "dev" - } \ No newline at end of file + } diff --git a/config/laravelwebconsole.php b/config/laravelwebconsole.php new file mode 100644 index 000000000..1e3be3bce --- /dev/null +++ b/config/laravelwebconsole.php @@ -0,0 +1,51 @@ + false, + + // Single-user credentials (REQUIRED) + 'user' => [ + 'name' => env('CONSOLE_USER_NAME', 'root'), + 'password' => env('CONSOLE_USER_PASSWORD', 'root'), + ], + + // Multi-user credentials (OPTIONAL) + // Example: 'user' => 'password', 'user1' => 'password1' + 'accounts' => [ + // 'user' => 'password', + ], + + // Hash incoming password + // By default it's sha256 + 'password_hash_algorithm' => '', + + // Home directory (multi-user mode supported) + // Example: 'home_dir' => '/tmp'; + // 'home_dir' => array('user1' => '/home/user1', 'user2' => '/home/user2'); + 'home_dir' => '', +]; diff --git a/packages/Webkul/API/Http/Resources/Catalog/Product.php b/packages/Webkul/API/Http/Resources/Catalog/Product.php index 711ed1c42..c4a1ec895 100644 --- a/packages/Webkul/API/Http/Resources/Catalog/Product.php +++ b/packages/Webkul/API/Http/Resources/Catalog/Product.php @@ -3,6 +3,7 @@ namespace Webkul\API\Http\Resources\Catalog; use Illuminate\Http\Resources\Json\JsonResource; +use Webkul\Product\Helpers\ProductType; class Product extends JsonResource { @@ -44,7 +45,7 @@ class Product extends JsonResource 'base_image' => $this->productImageHelper->getProductBaseImage($product), 'variants' => Self::collection($this->variants), 'in_stock' => $product->haveSufficientQuantity(1), - $this->mergeWhen($product->type == 'configurable', [ + $this->mergeWhen($product->getTypeInstance()->isComposite(), [ 'super_attributes' => Attribute::collection($product->super_attributes), ]), 'special_price' => $this->when( diff --git a/packages/Webkul/Admin/src/Config/menu.php b/packages/Webkul/Admin/src/Config/menu.php index 22fe5e904..cfa9d6877 100755 --- a/packages/Webkul/Admin/src/Config/menu.php +++ b/packages/Webkul/Admin/src/Config/menu.php @@ -182,6 +182,12 @@ return [ 'sort' => 2, 'icon-class' => '' ], [ + 'key' => 'settings.development', + 'name' => 'admin::app.settings.development.title', + 'route' => 'admin.development.index', + 'sort' => 8, + 'icon-class' => '' + ],[ 'key' => 'promotions', 'name' => 'admin::app.layouts.promotion', 'route' => 'admin.cart-rule.index', diff --git a/packages/Webkul/Admin/src/Http/Controllers/Development/DashboardController.php b/packages/Webkul/Admin/src/Http/Controllers/Development/DashboardController.php new file mode 100755 index 000000000..89dbecf9a --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Development/DashboardController.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class DashboardController extends Controller +{ + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + return view('admin::settings.development.dashboard'); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/Controllers/Development/WebConsoleController.php b/packages/Webkul/Admin/src/Http/Controllers/Development/WebConsoleController.php new file mode 100755 index 000000000..649f3c730 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Development/WebConsoleController.php @@ -0,0 +1,24 @@ + + * @copyright 2018 Webkul Software Pvt Ltd (http://www.webkul.com) + */ +class WebConsoleController extends Controller +{ + /** + * Show the Web Console. + * + * @return \Illuminate\View\View|\Illuminate\Contracts\View\Factory + */ + public function index(){ + return LaravelWebConsole::show(); + } +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php index 95984bc46..22bd07448 100755 --- a/packages/Webkul/Admin/src/Http/routes.php +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -278,7 +278,7 @@ Route::group(['middleware' => ['web']], function () { Route::post('/products/upload-file/{id}', 'Webkul\Product\Http\Controllers\ProductController@uploadLink')->name('admin.catalog.products.upload_link'); Route::post('/products/upload-sample/{id}', 'Webkul\Product\Http\Controllers\ProductController@uploadSample')->name('admin.catalog.products.upload_sample'); - + //product delete Route::post('/products/delete/{id}', 'Webkul\Product\Http\Controllers\ProductController@destroy')->name('admin.catalog.products.delete'); @@ -760,6 +760,15 @@ Route::group(['middleware' => ['web']], function () { // 'redirect' => 'admin.cms.index' // ])->name('admin.cms.delete'); }); + + // Development settings + Route::prefix('development')->group(function () { + Route::get('/', 'Webkul\Admin\Http\Controllers\Development\DashboardController@index') + ->name('admin.development.index'); + + Route::get('webconsole', 'Webkul\Admin\Http\Controllers\Development\WebConsoleController@index') + ->name('admin.development.webconsole'); + }); }); }); }); \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php index 486e1d0f8..50f5f977d 100644 --- a/packages/Webkul/Admin/src/Resources/lang/ar/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -726,6 +726,10 @@ return [ 'update-error' => 'خطأ! معدل الضرائب لا يمكن تحديثه', 'delete' => 'معدل الضريبة محذوف بنجاح', 'atleast-one' => 'لا يستطيع حذف الأخير ضريبة معدل' + ], + 'development' => [ + 'title' => 'تطوير', + 'webconsole' => 'وحدة تحكم الويب', ] ], diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php index 926e6648a..12994e9e1 100755 --- a/packages/Webkul/Admin/src/Resources/lang/en/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -835,6 +835,10 @@ return [ 'update-error' => 'Error! Tax Rate Cannot Be Updated', 'delete' => 'Tax Rate Deleted Successfully', 'atleast-one' => 'Cannot Delete Last Tax Rate' + ], + 'development' => [ + 'title' => 'Development', + 'webconsole' => 'Web Console', ] ], diff --git a/packages/Webkul/Admin/src/Resources/lang/fa/app.php b/packages/Webkul/Admin/src/Resources/lang/fa/app.php index 47ea90265..d2e1db49e 100644 --- a/packages/Webkul/Admin/src/Resources/lang/fa/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/fa/app.php @@ -761,6 +761,10 @@ return [ 'update-error' => 'خطا! نرخ مالیات نمی تواند به روز شود', 'delete' => 'نرخ مالیات با موفقیت حذف شد', 'atleast-one' => 'آخرین نرخ مالیات نمی تواند حذف شود' + ], + 'development' => [ + 'title' => 'توسعه', + 'webconsole' => 'کنسول وب', ] ], diff --git a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php index 36295dd3f..3bf3b157a 100755 --- a/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php +++ b/packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php @@ -584,7 +584,6 @@ return [ 'title' => 'Idiomas', 'add-title' => 'Add Idioma', 'edit-title' => 'Editar Idioma', - 'add-title' => 'Add Idioma', 'save-btn-title' => 'Salvar Idioma', 'general' => 'Geral', 'code' => 'Código', @@ -753,6 +752,10 @@ return [ 'update-error' => 'Erro! Taxas de Impostos Não Poderam ser Atualizadas', 'delete' => 'Taxas de Impostos Excluídas com Sucesso', 'atleast-one' => 'Não é Possível Excluir a Última Taxa de Impostos' + ], + 'development' => [ + 'title' => 'Desenvolvimento', + 'webconsole' => 'Console da Web', ] ], 'customers' => [ diff --git a/packages/Webkul/Admin/src/Resources/views/catalog/products/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/catalog/products/edit.blade.php index 2b4d5a239..e76ff2035 100755 --- a/packages/Webkul/Admin/src/Resources/views/catalog/products/edit.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/catalog/products/edit.blade.php @@ -17,7 +17,8 @@

- + {{ __('admin::app.catalog.products.edit-title') }}

@@ -26,7 +27,8 @@ @foreach (core()->getAllLocales() as $localeModel) - @@ -66,31 +69,37 @@ {!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.' . $attributeGroup->name . '.before', ['product' => $product]) !!} - +
{!! view_render_event('bagisto.admin.catalog.product.edit_form_accordian.' . $attributeGroup->name . '.controls.before', ['product' => $product]) !!} @foreach ($customAttributes as $attribute) is_required) - array_push($validations, 'required'); + if ($attribute->is_required) { + array_push($validations, 'required'); + } - if ($attribute->type == 'price') - array_push($validations, 'decimal'); + if ($attribute->type == 'price') { + array_push($validations, 'decimal'); + } - array_push($validations, $attribute->validation); + array_push($validations, $attribute->validation); - $validations = implode('|', array_filter($validations)); + $validations = implode('|', array_filter($validations)); ?> @if (view()->exists($typeView = 'admin::catalog.products.field-types.' . $attribute->type)) -
type == 'multiselect') :class="[errors.has('{{ $attribute->code }}[]') ? 'has-error' : '']" @else :class="[errors.has('{{ $attribute->code }}') ? 'has-error' : '']" @endif> +
type == 'multiselect') :class="[errors.has('{{ $attribute->code }}[]') ? 'has-error' : '']" + @else :class="[errors.has('{{ $attribute->code }}') ? 'has-error' : '']" @endif> -
@@ -173,4 +194,4 @@ }); }); -@endpush \ No newline at end of file +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php index 8a273df8b..e0e0ac3d1 100755 --- a/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php +++ b/packages/Webkul/Admin/src/Resources/views/sales/refunds/create.blade.php @@ -241,14 +241,14 @@ @foreach ($order->items as $item) - {{ $item->type == 'configurable' ? $item->child->sku : $item->sku }} + {{ Webkul\Product\Helpers\ProductType::hasVariants($item->type) ? $item->child->sku : $item->sku }} {{ $item->name }} @if (isset($item->additional['attributes']))
- + @foreach ($item->additional['attributes'] as $attribute) {{ $attribute['attribute_name'] }} : {{ $attribute['option_label'] }}
@endforeach @@ -417,7 +417,7 @@ if (! response.data) { window.flashMessages = [{ 'type': 'alert-error', - 'message': "{{ __('admin::app.sales.refunds.invalid-qty') }}" + 'message': "{{ __('admin::app.sales.refunds.invalid-qty') }}" }]; this_this.$root.addFlashMessages() diff --git a/packages/Webkul/Admin/src/Resources/views/settings/development/dashboard.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/development/dashboard.blade.php new file mode 100755 index 000000000..1b4bcc7ae --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/development/dashboard.blade.php @@ -0,0 +1,28 @@ +@extends('admin::layouts.content') + +@section('page_title') + {{ __('admin::app.settings.development.title') }} +@stop + +@section('content') +
+ + + +
+@stop \ No newline at end of file diff --git a/packages/Webkul/Core/src/Events/ComposerEvents.php b/packages/Webkul/Core/src/Events/ComposerEvents.php new file mode 100644 index 000000000..0ee700715 --- /dev/null +++ b/packages/Webkul/Core/src/Events/ComposerEvents.php @@ -0,0 +1,15 @@ +writeln(file_get_contents(__DIR__ . '/../Templates/on-boarding.php')); + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Templates/on-boarding.php b/packages/Webkul/Core/src/Templates/on-boarding.php new file mode 100644 index 000000000..e5311fbd6 --- /dev/null +++ b/packages/Webkul/Core/src/Templates/on-boarding.php @@ -0,0 +1,14 @@ + + ____ _ _ +| __ ) __ _ __ _(_)___| |_ ___ +| _ \ / _` |/ _` | / __| __/ _ \ +| |_) | (_| | (_| | \__ \ || (_) | +|____/ \__,_|\__, |_|___/\__\___/ + |___/ + + + +Welcome to the Bagisto project! Bagisto Community is an open-source e-commerce ecosystem +which is built on top of top of Laravel and Vue.js. + +Made with 💖 by the Bagisto Team. Happy helping :) diff --git a/packages/Webkul/Discount/src/Helpers/Catalog/Apply.php b/packages/Webkul/Discount/src/Helpers/Catalog/Apply.php index 962d65389..95c8f22e0 100644 --- a/packages/Webkul/Discount/src/Helpers/Catalog/Apply.php +++ b/packages/Webkul/Discount/src/Helpers/Catalog/Apply.php @@ -6,6 +6,7 @@ use Webkul\Discount\Repositories\CatalogRuleRepository as CatalogRule; use Webkul\Discount\Repositories\CatalogRuleProductsRepository as CatalogRuleProducts; use Webkul\Discount\Repositories\CatalogRuleProductsPriceRepository as CatalogRuleProductsPrice; use Webkul\Discount\Helpers\Catalog\ConvertXToProductId as ConvertX; +use Webkul\Product\Helpers\ProductType; use Webkul\Product\Repositories\ProductRepository as Product; use Webkul\Discount\Helpers\Catalog\Sale; @@ -451,7 +452,7 @@ class Apply extends Sale foreach ($productIDs as $productID) { $product = $products->find($productID); - if ($product->type == 'configurable') { + if (ProductType::hasVariants($product->type)) { $variants = $product->variants; foreach($variants as $variant) { diff --git a/packages/Webkul/Discount/src/Helpers/Catalog/ConvertXToProductId.php b/packages/Webkul/Discount/src/Helpers/Catalog/ConvertXToProductId.php index c71d6c4e4..b44eaea8b 100644 --- a/packages/Webkul/Discount/src/Helpers/Catalog/ConvertXToProductId.php +++ b/packages/Webkul/Discount/src/Helpers/Catalog/ConvertXToProductId.php @@ -6,6 +6,7 @@ use Webkul\Discount\Repositories\CatalogRuleRepository as CatalogRule; use Webkul\Attribute\Repositories\AttributeRepository as Attribute; use Webkul\Attribute\Repositories\AttributeOptionRepository as AttributeOption; use Webkul\Category\Repositories\CategoryRepository as Category; +use Webkul\Product\Helpers\ProductType; use Webkul\Product\Repositories\ProductRepository as Product; use Webkul\Product\Models\ProductAttributeValue as ProductAttributeValue; @@ -110,7 +111,7 @@ class ConvertXToProductId $products = collect(); foreach ($attributeOptions as $attributeOption) { - if (isset($attributeOption->type) && $attributeOption->name != null && $attributeOption->condition != null && $attributeOption->value != [] && $attributeOption->type != null) { + if (isset($attributeOption->type) && $attributeOption->attribute != null && $attributeOption->condition != null && $attributeOption->value != [] && $attributeOption->type != null) { $selectedOptions = $attributeOption->value; if ($attributeOption->type == 'select' || $attributeOption->type == 'multiselect') { @@ -154,17 +155,17 @@ class ConvertXToProductId if ($testCondition == '{}') { $foundProducts = $this->product->findWhere([ ['sku', 'like', '%' . $testValue . '%'], - ['type', '!=', 'configurable'] - ])->flatten()->all(); + ['type', 'NOT IN', ProductType::getAllTypesHavingVariants()] + ])->flatten()->all(); } else if ($testCondition == '!{}') { $foundProducts = $this->product->findWhere([ ['sku', 'not like', '%' . $testValue . '%'], - ['type', '!=', 'configurable'] + ['type', 'NOT IN', ProductType::getAllTypesHavingVariants()] ])->flatten()->all(); } else if ($testCondition == '=') { $foundProducts = $this->product->findWhere([ ['sku', '=', $testValue], - ['type', '!=', 'configurable'] + ['type', 'NOT IN', ProductType::getAllTypesHavingVariants()] ])->flatten()->all(); } } diff --git a/packages/Webkul/Product/src/Helpers/ProductType.php b/packages/Webkul/Product/src/Helpers/ProductType.php new file mode 100644 index 000000000..103b1ed58 --- /dev/null +++ b/packages/Webkul/Product/src/Helpers/ProductType.php @@ -0,0 +1,39 @@ +hasVariants(); + } + + /** + * Get all ProductTypes that are allowed to have variants + * + * @return array of product_types->keys + */ + public static function getAllTypesHavingVariants(): array + { + foreach (config('product_types') as $type) { + if (self::hasVariants($type['key'])) { + array_push($havingVariants, $type['key']); + } + } + + return $havingVariants; + } +} \ No newline at end of file diff --git a/packages/Webkul/Product/src/Http/Controllers/ProductController.php b/packages/Webkul/Product/src/Http/Controllers/ProductController.php index 0a4d0da0c..9134991d4 100755 --- a/packages/Webkul/Product/src/Http/Controllers/ProductController.php +++ b/packages/Webkul/Product/src/Http/Controllers/ProductController.php @@ -4,6 +4,7 @@ namespace Webkul\Product\Http\Controllers; use Illuminate\Support\Facades\Event; use Webkul\Product\Http\Requests\ProductForm; +use Webkul\Product\Helpers\ProductType; use Webkul\Category\Repositories\CategoryRepository; use Webkul\Product\Repositories\ProductRepository; use Webkul\Product\Repositories\ProductDownloadableLinkRepository; @@ -140,13 +141,13 @@ class ProductController extends Controller public function store() { if (! request()->get('family') - && request()->input('type') == 'configurable' + && ProductType::hasVariants(request()->input('type')) && request()->input('sku') != '') { return redirect(url()->current() . '?type=' . request()->input('type') . '&family=' . request()->input('attribute_family_id') . '&sku=' . request()->input('sku')); } - if (request()->input('type') == 'configurable' + if (ProductType::hasVariants(request()->input('type')) && (! request()->has('super_attributes') || ! count(request()->get('super_attributes')))) { diff --git a/packages/Webkul/Product/src/Listeners/ProductFlat.php b/packages/Webkul/Product/src/Listeners/ProductFlat.php index a993a58ae..ecb8ffe9a 100644 --- a/packages/Webkul/Product/src/Listeners/ProductFlat.php +++ b/packages/Webkul/Product/src/Listeners/ProductFlat.php @@ -6,6 +6,7 @@ use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Webkul\Attribute\Repositories\AttributeRepository; use Webkul\Attribute\Repositories\AttributeOptionRepository; +use Webkul\Product\Helpers\ProductType; use Webkul\Product\Repositories\ProductFlatRepository; use Webkul\Product\Repositories\ProductAttributeValueRepository; use Webkul\Product\Models\ProductAttributeValue; @@ -148,7 +149,7 @@ class ProductFlat { $this->createFlat($product); - if ($product->type == 'configurable') { + if (ProductType::hasVariants($product->type)) { foreach ($product->variants()->get() as $variant) { $this->createFlat($variant, $product); } diff --git a/packages/Webkul/Product/src/Type/AbstractType.php b/packages/Webkul/Product/src/Type/AbstractType.php index 75abbba1e..39568653d 100644 --- a/packages/Webkul/Product/src/Type/AbstractType.php +++ b/packages/Webkul/Product/src/Type/AbstractType.php @@ -3,6 +3,7 @@ namespace Webkul\Product\Type; use Illuminate\Support\Facades\Storage; +use phpDocumentor\Reflection\Types\Boolean; use Webkul\Attribute\Repositories\AttributeRepository; use Webkul\Product\Repositories\ProductRepository; use Webkul\Product\Repositories\ProductAttributeValueRepository; @@ -57,7 +58,7 @@ abstract class AbstractType /** * Product Image helper instance - * + * * @var ProductImage */ protected $productImageHelper; @@ -104,6 +105,13 @@ abstract class AbstractType */ protected $canBeMovedFromWishlistToCart = true; + /** + * Has child products aka variants + * + * @var boolean + */ + protected $hasVariants = false; + /** * Create a new product type instance. * @@ -159,17 +167,21 @@ abstract class AbstractType $product->update($data); foreach ($product->attribute_family->custom_attributes as $attribute) { - if ($attribute->type == 'boolean') + if ($attribute->type == 'boolean') { $data[$attribute->code] = isset($data[$attribute->code]) && $data[$attribute->code] ? 1 : 0; + } - if (! isset($data[$attribute->code])) + if (! isset($data[$attribute->code])) { continue; + } - if ($attribute->type == 'date' && $data[$attribute->code] == '') + if ($attribute->type == 'date' && $data[$attribute->code] == '') { $data[$attribute->code] = null; + } - if ($attribute->type == 'multiselect' || $attribute->type == 'checkbox') + if ($attribute->type == 'multiselect' || $attribute->type == 'checkbox') { $data[$attribute->code] = implode(",", $data[$attribute->code]); + } if ($attribute->type == 'image' || $attribute->type == 'file') { $data[$attribute->code] = gettype($data[$attribute->code]) == 'object' @@ -198,16 +210,18 @@ abstract class AbstractType ], $attributeValue->id ); - if ($attribute->type == 'image' || $attribute->type == 'file') + if ($attribute->type == 'image' || $attribute->type == 'file') { Storage::delete($attributeValue->text_value); + } } } - $route = request()->route() ? request()->route()->getName() : ""; + $route = request()->route() ? request()->route()->getName() : ""; if ($route != 'admin.catalog.products.massupdate') { - if (isset($data['categories'])) + if (isset($data['categories'])) { $product->categories()->sync($data['categories']); + } $product->up_sells()->sync($data['up_sell'] ?? []); @@ -243,9 +257,10 @@ abstract class AbstractType */ public function isSaleable() { - if (! $this->product->status) + if (! $this->product->status) { return false; - + } + return true; } @@ -260,7 +275,7 @@ abstract class AbstractType } /** - * Return true if this product can have inventory + * Return true if this product can be composite * * @return boolean */ @@ -269,6 +284,16 @@ abstract class AbstractType return $this->isComposite; } + /** + * Return true if this product can have variants + * + * @return bool + */ + public function hasVariants(): bool + { + return $this->hasVariants; + } + /** * @param integer $qty * @return bool @@ -277,7 +302,7 @@ abstract class AbstractType { return $this->haveSufficientQuantity; } - + /** * Return true if this product can have inventory * @@ -310,8 +335,9 @@ abstract class AbstractType ->pluck('id'); foreach ($this->product->inventories as $inventory) { - if (is_numeric($index = $channelInventorySourceIds->search($inventory->inventory_source_id))) + if (is_numeric($index = $channelInventorySourceIds->search($inventory->inventory_source_id))) { $total += $inventory->qty; + } } $orderedInventory = $this->product->ordered_inventories() @@ -344,11 +370,13 @@ abstract class AbstractType */ public function getEditableAttributes($group = null, $skipSuperAttribute = true) { - if ($skipSuperAttribute) + if ($skipSuperAttribute) { $this->skipAttributes = array_merge($this->product->super_attributes->pluck('code')->toArray(), $this->skipAttributes); + } - if (! $group) + if (! $group) { return $this->product->attribute_family->custom_attributes()->whereNotIn('attributes.code', $this->skipAttributes)->get(); + } return $group->custom_attributes()->whereNotIn('code', $this->skipAttributes)->get(); } @@ -380,8 +408,9 @@ abstract class AbstractType */ public function getMinimalPrice() { - if ($this->haveSpecialPrice()) + if ($this->haveSpecialPrice()) { return $this->product->special_price; + } return $this->product->price; } @@ -421,11 +450,13 @@ abstract class AbstractType */ public function haveSpecialPrice() { - if (is_null($this->product->special_price) || ! (float) $this->product->special_price) + if (is_null($this->product->special_price) || ! (float) $this->product->special_price) { return false; + } - if (core()->isChannelDateInInterval($this->product->special_price_from, $this->product->special_price_to)) + if (core()->isChannelDateInInterval($this->product->special_price_from, $this->product->special_price_to)) { return true; + } return false; } @@ -479,8 +510,9 @@ abstract class AbstractType $data = $this->getQtyRequest($data); - if (! $this->haveSufficientQuantity($data['quantity'])) + if (! $this->haveSufficientQuantity($data['quantity'])) { return trans('shop::app.checkout.cart.quantity.inventory_warning'); + } $price = $this->getFinalPrice(); @@ -514,12 +546,13 @@ abstract class AbstractType */ public function getQtyRequest($data) { - if ($item = Cart::getItemByProduct(['additional' => $data])) + if ($item = Cart::getItemByProduct(['additional' => $data])) { $data['quantity'] += $item->quantity; + } return $data; } - + /** * * @param array $options1 @@ -546,7 +579,7 @@ abstract class AbstractType return true; } - + /** * Returns additional information for items * @@ -590,8 +623,9 @@ abstract class AbstractType { $price = $item->product->getTypeInstance()->getFinalPrice(); - if ($price == $item->base_price) + if ($price == $item->base_price) { return; + } $item->base_price = $price; $item->price = core()->convertPrice($price); diff --git a/packages/Webkul/Product/src/Type/Configurable.php b/packages/Webkul/Product/src/Type/Configurable.php index 79cb4c081..6977bf5de 100644 --- a/packages/Webkul/Product/src/Type/Configurable.php +++ b/packages/Webkul/Product/src/Type/Configurable.php @@ -22,7 +22,7 @@ class Configurable extends AbstractType /** * These blade files will be included in product edit page - * + * * @var array */ protected $additionalViews = [ @@ -47,6 +47,13 @@ class Configurable extends AbstractType */ protected $showQuantityBox = true; + /** + * Has child products aka variants + * + * @var boolean + */ + protected $hasVariants = true; + /** * @param array $data * @return Product @@ -416,7 +423,7 @@ class Configurable extends AbstractType return $products; } - + /** * * @param array $options1 @@ -451,7 +458,7 @@ class Configurable extends AbstractType ]; } - return $data; + return $data; } /** diff --git a/packages/Webkul/Shop/src/Resources/views/checkout/onepage/payment.blade.php b/packages/Webkul/Shop/src/Resources/views/checkout/onepage/payment.blade.php index 20f2c30d9..ac34652ba 100755 --- a/packages/Webkul/Shop/src/Resources/views/checkout/onepage/payment.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/checkout/onepage/payment.blade.php @@ -19,12 +19,10 @@ - {{-- --}} + + {{ $payment['method_title'] }} + - - - {{ $payment['method_title'] }} -
diff --git a/packages/Webkul/Shop/src/Resources/views/products/view/configurable-options.blade.php b/packages/Webkul/Shop/src/Resources/views/products/view/configurable-options.blade.php index 154bc0815..3e4b74eca 100755 --- a/packages/Webkul/Shop/src/Resources/views/products/view/configurable-options.blade.php +++ b/packages/Webkul/Shop/src/Resources/views/products/view/configurable-options.blade.php @@ -1,4 +1,4 @@ -@if ($product->type == 'configurable') +@if (Webkul\Product\Helpers\ProductType::hasVariants($product->type)) @inject ('configurableOptionHelper', 'Webkul\Product\Helpers\ConfigurableOption') diff --git a/packages/Webkul/Ui/publishable/assets/css/ui.css b/packages/Webkul/Ui/publishable/assets/css/ui.css index 2d77a5f8d..e70650670 100644 --- a/packages/Webkul/Ui/publishable/assets/css/ui.css +++ b/packages/Webkul/Ui/publishable/assets/css/ui.css @@ -1 +1 @@ -.active .cms-icon,.active.configuration-icon,.catalog-icon,.cms-icon,.configuration-icon,.customer-icon,.dashboard-icon,.promotion-icon,.sales-icon,.settings-icon{width:48px;height:48px;display:inline-block;background-size:cover}.icon{display:inline-block;background-size:cover}.dashboard-icon{background-image:url("../images/Icon-Dashboard.svg")}.sales-icon{background-image:url("../images/Icon-Sales.svg")}.catalog-icon{background-image:url("../images/Icon-Catalog.svg")}.customer-icon{background-image:url("../images/Icon-Customers.svg")}.configuration-icon{background-image:url("../images/Icon-Configure.svg")}.settings-icon{background-image:url("../images/Icon-Settings.svg")}.promotion-icon{background-image:url("../images/icon-promotion.svg")}.cms-icon{background-image:url("../images/Icon-CMS.svg")}.angle-right-icon{background-image:url("../images/Angle-Right.svg");width:17px;height:17px}.angle-left-icon{background-image:url("../images/Angle-Left.svg");width:17px;height:17px}.arrow-down-icon{background-image:url("../images/Arrow-Down-Light.svg");width:14px;height:8px}.arrow-right-icon{background-image:url("../images/Arrow-Right.svg");width:18px;height:18px}.white-cross-sm-icon{background-image:url("../images/Icon-Sm-Cross-White.svg");width:18px;height:18px}.accordian-up-icon{background-image:url("../images/Accordion-Arrow-Up.svg");width:24px;height:24px}.accordian-down-icon{background-image:url("../images/Accordion-Arrow-Down.svg");width:24px;height:24px}.cross-icon{background-image:url("../images/Icon-Crossed.svg");width:18px;height:18px}.trash-icon{background-image:url("../images/Icon-Trash.svg");width:24px;height:24px}.remove-icon{background-image:url("../images/Icon-remove.svg");width:24px;height:24px}.pencil-lg-icon{background-image:url("../images/Icon-Pencil-Large.svg");width:24px;height:24px}.eye-icon{background-image:url("../images/Icon-eye.svg");width:24px;height:24px}.search-icon{background-image:url("../images/icon-search.svg");width:24px;height:24px}.sortable-icon{background-image:url("../images/Icon-Sortable.svg");width:24px;height:24px}.sort-down-icon,.sort-up-icon{background-image:url("../images/Icon-Sort-Down.svg");width:18px;height:18px}.sort-up-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.primary-back-icon{background-image:url("../images/Icon-Back-Primary.svg");width:24px;height:24px}.checkbox-dash-icon{background-image:url("../images/Checkbox-Dash.svg");width:24px;height:24px}.account-icon{background-image:url("../images/icon-account.svg");width:24px;height:24px}.expand-icon{background-image:url("../images/Expand-Light.svg");width:18px;height:18px}.expand-on-icon{background-image:url("../images/Expand-Light-On.svg");width:18px;height:18px}.dark-left-icon{background-image:url("../images/arrow-left-dark.svg");width:18px;height:18px}.light-right-icon{background-image:url("../images/arrow-right-light.svg");width:18px;height:18px}.folder-icon{background-image:url("../images/Folder-Icon.svg");width:24px;height:24px}.star-icon{background-image:url("../images/Star-Icon.svg");width:24px;height:24px}.arrow-down-white-icon{background-image:url("../images/down-arrow-white.svg");width:17px;height:13px}.arrow-up-white-icon{background-image:url("../images/up-arrow-white.svg");width:17px;height:13px}.profile-pic-icon{background-image:url("../images/Profile-Pic.svg");width:60px;height:60px}.graph-up-icon{background-image:url("../images/Icon-Graph-Green.svg");width:24px;height:24px}.graph-down-icon{background-image:url("../images/Icon-Graph-Red.svg");width:24px;height:24px}.no-result-icon{background-image:url("../images/limited-icon.svg");width:52px;height:47px}.note-icon{background-image:url("../images/icon-note.svg")}.list-icon,.note-icon{width:24px;height:24px}.list-icon{background-image:url("../images/Icon-Listing.svg")}.active .dashboard-icon{background-image:url("../images/Icon-Dashboard-Active.svg")}.active .sales-icon{background-image:url("../images/Icon-Sales-Active.svg")}.active .catalog-icon{background-image:url("../images/Icon-Catalog-Active.svg")}.active .customer-icon{background-image:url("../images/Icon-Customers-Active.svg")}.active .settings-icon{background-image:url("../images/Icon-Settings-Active.svg")}.active .configuration-icon{background-image:url("../images/Icon-Configure-Active.svg")}.active .promotion-icon{background-image:url("../images/icon-promotion-active.svg")}.active .cms-icon{background-image:url("../images/Icon-CMS-Active.svg")}.active>.arrow-down-icon{background-image:url("../images/Arrow-Down.svg");width:14px;height:8px}.active>.expand-icon{background-image:url("../images/Expand-Light-On.svg")}.active.dashboard-icon{background-image:url("../images/Icon-Dashboard-Active.svg")}.active.customer-icon{background-image:url("../images/Icon-Customers-Active.svg")}.active.sales-icon{background-image:url("../images/Icon-Sales-Active.svg")}.active.settings-icon{background-image:url("../images/Icon-Settings-Active.svg")}.active.configuration-icon{background-image:url("../images/Icon-Configure-Active.svg")}.active.arrow-down-icon{background-image:url("../images/Arrow-Down.svg");width:14px;height:8px}.active.expand-icon{background-image:url("../images/Expand-Light-On.svg")}.icon-404{background-image:url("../images/404-image.svg");width:255px;height:255px}.export-icon{background-image:url("../images/Icon-Export.svg");width:32px;height:32px}.import-icon{background-image:url("../images/Icon-Import.svg");width:32px;height:32px}.star-blue-icon{width:17px;height:17px;background-image:url("../images/Icon-star.svg")}.grid-container{display:block;width:100%}.filter-row-one{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.filter-row-one .dropdown-filters{position:absolute;right:25px}.filter-row-two{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:10px}.filter-row-two,.search-filter{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.search-filter .control{font-size:15px;border:2px solid #c7c7c7;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-radius:3px;height:36px;width:280px;padding-left:10px}.search-filter .contorl:focus{border-color:#0041ff}.search-filter .icon-wrapper{border:2px solid #c7c7c7;border-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0;height:36px;width:36px;margin-left:-1px}.search-filter .icon-wrapper .search-icon{margin-top:3px;margin-left:3px}.grid-dropdown-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:36px;width:200px;border:2px solid #c7c7c7;border-radius:3px;color:#8e8e8e;padding:0 5px}.grid-dropdown-header .arrow-icon-down{float:right}.dropdown-list.dropdown-container{padding:15px;width:100%;top:43px}.dropdown-list.dropdown-container ul li .control-group{margin-bottom:15px}.dropdown-list.dropdown-container .apply-filter{padding:10px;width:100%}.filter-tag{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:20px}.filter-tag,.filter-tag .wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;height:28px;border-radius:2px}.filter-tag .wrapper{margin-left:10px;padding:5px 10px;background:#e7e7e7;color:#000311;letter-spacing:-.22px}.filter-tag .wrapper .icon.cross-icon{margin-left:10px;cursor:pointer}@-webkit-keyframes jelly{0%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}70%{-webkit-transform:translateY(5px) scale(1.05);transform:translateY(5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}}@keyframes jelly{0%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}70%{-webkit-transform:translateY(5px) scale(1.05);transform:translateY(5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}}@-webkit-keyframes jelly-out{0%{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}30%{-webkit-transform:translateY(-5px) scale(1.05);transform:translateY(-5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}}@keyframes jelly-out{0%{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}30%{-webkit-transform:translateY(-5px) scale(1.05);transform:translateY(-5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}}*{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:focus{outline:none}.mb-10{margin-bottom:10px}.mb-15{margin-bottom:15px}.mb-20{margin-bottom:20px}.mb-25{margin-bottom:25px}.mb-30{margin-bottom:30px}.mb-35{margin-bottom:35px}.mb-40{margin-bottom:40px}.mb-45{margin-bottom:45px}.mb-50{margin-bottom:50px}.mb-60{margin-bottom:60px}.mb-70{margin-bottom:70px}.mb-80{margin-bottom:80px}.mb-90{margin-bottom:90px}.mt-5{margin-top:5px}.mt-10{margin-top:10px}.mt-15{margin-top:15px}.mt-20{margin-top:20px}.mt-25{margin-top:25px}.mt-30{margin-top:30px}.mt-35{margin-top:35px}.mt-40{margin-top:40px}.mt-45{margin-top:45px}.mt-50{margin-top:50px}.mt-60{margin-top:60px}.mt-70{margin-top:70px}.mt-80{margin-top:80px}.mt-90{margin-top:90px}body{letter-spacing:-.26px;line-height:19px}a:active,a:focus,a:hover,a:link,a:visited{text-decoration:none;color:#0041ff}::-moz-selection{background-color:rgba(0,64,255,.6);color:#fff}::selection{background-color:rgba(0,64,255,.6);color:#fff}textarea{resize:none}ul{margin:0;padding:0;list-style:none}h1{font-size:28px;margin-top:0}h1,h2{color:#3a3a3a}h2{font-size:24px}h3{font-size:20px}h3,h4{color:#3a3a3a}h4{font-size:16px}h5{font-size:12px;color:#3a3a3a}.hide{display:none!important}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.btn{-webkit-box-shadow:0 1px 4px 0 rgba(0,0,0,.2),0 0 8px 0 rgba(0,0,0,.1);box-shadow:0 1px 4px 0 rgba(0,0,0,.2),0 0 8px 0 rgba(0,0,0,.1);border-radius:3px;border:none;color:#fff;cursor:pointer;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1);font:inherit;display:inline-block}.btn:active,.btn:focus,.btn:hover{opacity:.75;border:none}.btn.btn-sm{padding:6px 12px}.btn.btn-md{padding:8px 16px}.btn.btn-lg{padding:10px 20px}.btn.btn-xl{padding:12px 24px;font-size:16px}.btn.btn-primary{background:#0041ff;color:#fff}.btn.btn-black{background:#000;color:#fff}.btn.btn-white{background:#fff;color:#000}.btn:disabled,.btn[disabled=disabled],.btn[disabled=disabled]:active,.btn[disabled=disabled]:hover{cursor:not-allowed;background:#b1b1ae;-webkit-box-shadow:none;box-shadow:none;opacity:1}.dropdown-btn{min-width:150px;text-align:left;background:#fff;border:2px solid #c7c7c7;border-radius:3px;font-size:14px;padding:8px 35px 8px 10px;cursor:pointer;position:relative}.dropdown-btn:active,.dropdown-btn:focus,.dropdown-btn:hover{opacity:.75;border:2px solid #c7c7c7}.dropdown-btn .icon{position:absolute;right:10px;top:50%;margin-top:-4px}.dropdown-toggle{cursor:pointer}.dropdown-open{position:relative}.dropdown-list{width:200px;margin-bottom:20px;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);border-radius:3px;background-color:#fff;position:absolute;display:none;z-index:10;text-align:left}.dropdown-list.bottom-left{top:42px;left:0}.dropdown-list.bottom-right{top:42px;right:0}.dropdown-list.top-left{bottom:0;left:42px}.dropdown-list.top-right{bottom:0;right:42px}.dropdown-list .search-box{padding:20px;border-bottom:1px solid #e8e8e8}.dropdown-list .search-box .control{background:#fff;border:2px solid #c7c7c7;border-radius:3px;width:100%;height:36px;display:inline-block;vertical-align:middle;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1);padding:0 10px;font-size:15px}.dropdown-list .search-box .control:focus{border-color:#0041ff}.dropdown-list .dropdown-container{padding:20px;overflow-y:auto}.dropdown-list .dropdown-container label{font-size:15px;display:inline-block;text-transform:uppercase;color:#9e9e9e;font-weight:700;padding-bottom:5px}.dropdown-list .dropdown-container ul{margin:0;list-style-type:none;padding:0}.dropdown-list .dropdown-container ul li{padding:5px 0}.dropdown-list .dropdown-container ul li a:active,.dropdown-list .dropdown-container ul li a:focus,.dropdown-list .dropdown-container ul li a:link,.dropdown-list .dropdown-container ul li a:visited{color:#333;display:block}.dropdown-list .dropdown-container ul li a:hover{color:#0041ff}.dropdown-list .dropdown-container ul li .checkbox{margin:0}.dropdown-list .dropdown-container ul li .control-group label{color:#3a3a3a;font-size:15px;font-weight:500;text-transform:capitalize;width:100%}.dropdown-list .dropdown-container .btn{width:100%;margin-top:10px}.section .secton-title{font-size:18px;color:#8e8e8e;padding:15px 0;border-bottom:1px solid #e8e8e8}.section .section-content{display:block;padding:20px 0}.section .section-content .row{display:block;padding:7px 0}.section .section-content .row .title{width:200px}.section .section-content .row .title,.section .section-content .row .value{color:#3a3a3a;letter-spacing:-.26px;display:inline-block}.table{width:100%}.table table{border-collapse:collapse;text-align:left;width:100%}.table table thead th{font-weight:700;padding:12px 10px;background:#f8f9fa;color:#3a3a3a}.table table tbody td{padding:10px;border-bottom:1px solid #d3d3d3;color:#3a3a3a;vertical-align:top}.table table tbody td.actions .action{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.table table tbody td.actions .icon{cursor:pointer;vertical-align:middle}.table table tbody td.empty{text-align:center}.table table tbody tr:last-child td{border-bottom:none}.table .control-group{width:100%;margin-bottom:0;min-width:140px}.table .control-group .control{width:100%;margin:0}.pagination .page-item{background:#fff;border:2px solid #c7c7c7;border-radius:3px;padding:7px 14px;margin-right:5px;font-size:16px;display:inline-block;color:#8e8e8e;vertical-align:middle;text-decoration:none}.pagination .page-item.next,.pagination .page-item.previous{padding:6px 9px}.pagination .page-item.active{background:#0041ff;color:#fff;border-color:#0041ff}.pagination .page-item .icon{vertical-align:middle;margin-bottom:3px}.checkbox{position:relative;display:block}.checkbox input{left:0;opacity:0;position:absolute;top:0;height:24px;width:24px;z-index:100}.checkbox .checkbox-view{background-image:url("../images/Checkbox.svg");height:24px;width:24px;margin:0;display:inline-block!important;vertical-align:middle;margin-right:5px}.checkbox input:checked+.checkbox-view{background-image:url("../images/Checkbox-Checked.svg")}.checkbox input:disabled+.checkbox-view{opacity:.5;cursor:not-allowed}.radio{position:relative;display:block;margin:10px 5px 5px 0}.radio input{left:0;opacity:0;position:absolute;top:0;z-index:100}.radio .radio-view{background-image:url("../images/controls.svg");background-position:-21px 0;height:20px;width:20px;margin:0;display:inline-block!important;vertical-align:middle;margin-right:5px}.radio input:checked+.radio-view{background-position:-21px -21px}.radio input:disabled+.radio-view{opacity:.5;cursor:not-allowed}.control-group{display:block;margin-bottom:25px;font-size:15px;color:#333;width:750px;max-width:100%;position:relative}.control-group label{display:block;color:#3a3a3a}.control-group label.required:after{content:"*";color:#fc6868;font-weight:700;display:inline-block}.control-group textarea.control{height:100px;padding:10px}.control-group .control{background:#fff;border:2px solid #c7c7c7;border-radius:3px;width:70%;height:36px;display:inline-block;vertical-align:middle;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1);padding:0 10px;font-size:15px;margin-top:10px;margin-bottom:5px}.control-group .control:focus{border-color:#0041ff}.control-group .control[disabled=disabled]{border-color:#d3d3d3;background-color:#d3d3d3;cursor:not-allowed}.control-group .control[multiple]{height:100px}.control-group.date:after,.control-group.datetime:after{background-image:url("../images/Icon-Calendar.svg");width:24px;height:24px;content:"";display:inline-block;vertical-align:middle;margin-left:-34px;margin-top:2px;pointer-events:none}.control-group .control-info{display:block;font-size:14px;color:#6f6f6f;font-style:italic}.control-group .control-error{display:none;color:#ff5656;margin-top:5px}.control-group.has-error .control{border-color:#fc6868}.control-group.has-error .control-error{display:block}.control-group.price .currency-code{vertical-align:middle;display:inline-block}.control-group .switch{position:relative;display:inline-block;width:60px;height:34px;margin-top:10px;margin-bottom:5px}.control-group .switch input{opacity:0;width:0;height:0}.control-group .slider{cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#8e8e8e}.control-group .slider,.control-group .slider:before{position:absolute;-webkit-transition:.2s;transition:.2s}.control-group .slider:before{content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:#fff}.control-group input:checked+.slider{background-color:#0041ff}.control-group input:focus+.slider{-webkit-box-shadow:0 0 1px #0041ff;box-shadow:0 0 1px #0041ff}.control-group input:checked+.slider:before{-webkit-transform:translateX(26px);transform:translateX(26px)}.control-group .slider.round{border-radius:34px}.control-group .slider.round:before{border-radius:50%}.button-group{margin-top:20px;margin-bottom:20px}.alert-wrapper{width:300px;top:10px;right:10px;position:fixed;z-index:100;text-align:left}.alert-wrapper .alert{width:300px;padding:15px;border-radius:3px;display:inline-block;-webkit-box-shadow:0 4px 15.36px .64px rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 4px 15.36px .64px rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.12);position:relative;-webkit-animation:jelly .5s ease-in-out;animation:jelly .5s ease-in-out;-webkit-transform-origin:center top;transform-origin:center top;z-index:500;margin-bottom:10px}.alert-wrapper .alert.alert-error{background:#fc6868}.alert-wrapper .alert.alert-info{background:#204d74}.alert-wrapper .alert.alert-success{background:#4caf50}.alert-wrapper .alert.alert-warning{background:#ffc107}.alert-wrapper .alert .icon{position:absolute;right:10px;top:10px;cursor:pointer}.alert-wrapper .alert p{color:#fff;margin:0;padding:0;font-size:15px}.tabs ul{border-bottom:1px solid #e8e8e8}.tabs ul li{display:inline-block}.tabs ul li a{padding:15px 20px;cursor:pointer;margin:0 2px;text-align:center;color:#000311;display:block}.tabs ul li.active a{border-bottom:3px solid #0041ff}.accordian,accordian{display:inline-block;width:100%}.accordian .accordian-header,.accordian div[slot*=header],accordian .accordian-header,accordian div[slot*=header]{width:100%;display:inline-block;font-size:18px;color:#3a3a3a;border-top:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8;padding:20px 15px;cursor:pointer;margin-top:-1px}.accordian .accordian-header .expand-icon,.accordian div[slot*=header] .expand-icon,accordian .accordian-header .expand-icon,accordian div[slot*=header] .expand-icon{background-image:url("../images/Expand-Light.svg");margin-right:10px;margin-top:3px}.accordian .accordian-header h1,.accordian div[slot*=header] h1,accordian .accordian-header h1,accordian div[slot*=header] h1{margin:0;font-size:20px;font-weight:500;display:inline-block}.accordian .accordian-header .icon,.accordian div[slot*=header] .icon,accordian .accordian-header .icon,accordian div[slot*=header] .icon{float:right}.accordian .accordian-header .icon.left,.accordian div[slot*=header] .icon.left,accordian .accordian-header .icon.left,accordian div[slot*=header] .icon.left{float:left}.accordian.error .accordian-header,accordian.error .accordian-header{color:#ff5656}.accordian .accordian-content,.accordian div[slot*=body],accordian .accordian-content,accordian div[slot*=body]{width:100%;padding:20px 15px;display:none;-webkit-transition:all .3s ease;transition:all .3s ease}.accordian.active>.accordian-content,accordian.active>.accordian-content{display:inline-block}.accordian.active>.accordian-header .expand-icon,accordian.active>.accordian-header .expand-icon{background-image:url("../images/Expand-Light-On.svg")}.tree-container .tree-item{padding-left:30px;display:inline-block;margin-top:10px;width:100%}.tree-container .tree-item>.tree-item{display:none}.tree-container .tree-item.active>.tree-item{display:inline-block}.tree-container .tree-item .checkbox,.tree-container .tree-item .radio{margin:0;display:inline-block}.tree-container .tree-item .expand-icon{display:inline-block;margin-right:10px;cursor:pointer;background-image:url("../images/Expand-Light.svg");width:18px;height:18px;vertical-align:middle}.tree-container .tree-item .folder-icon{vertical-align:middle;margin-right:10px}.tree-container .tree-item.active>.expand-icon{background-image:url("../images/Expand-Light-On.svg")}.tree-container>.tree-item{padding-left:0}.panel{-webkit-box-shadow:0 2px 25px 0 rgba(0,0,0,.15);box-shadow:0 2px 25px 0 rgba(0,0,0,.15);border-radius:5px;background:#fff}.panel .panel-content{padding:20px}modal{display:none}.modal-open{overflow:hidden}.modal-overlay{display:none;overflow-y:auto;z-index:10;top:0;right:0;bottom:0;left:0;position:fixed;background:#000;opacity:.7}.modal-open .modal-overlay{display:block}.modal-container{background:#fff;top:100px;width:600px;max-width:80%;left:50%;margin-left:-300px;position:fixed;z-index:11;-webkit-box-shadow:0 15px 25px 0 rgba(0,0,0,.03),0 20px 45px 5px rgba(0,0,0,.2);box-shadow:0 15px 25px 0 rgba(0,0,0,.03),0 20px 45px 5px rgba(0,0,0,.2);-webkit-animation:fade-in-white .3s ease-in-out;animation:fade-in-white .3s ease-in-out;-webkit-animation:jelly .5s ease-in-out;animation:jelly .5s ease-in-out;border-radius:5px;overflow-y:auto;max-height:80%}.modal-container .modal-header{padding:20px}.modal-container .modal-header h3{display:inline-block;font-size:20px;color:#3a3a3a;margin:0}.modal-container .modal-header .icon{float:right;cursor:pointer}.modal-container .modal-body{padding:20px}.modal-container .modal-body .control-group .control{width:100%}@media only screen and (max-width:770px){.modal-container{max-width:80%;left:10%;margin-left:0}}.label{background:#e7e7e7;border-radius:2px;padding:8px;color:#000311;display:inline-block}.label.label-sm{padding:5px}.label.label-md{padding:8px}.label.label-lg{padding:11px}.label.label-xl{padding:14px}.badge{border-radius:50px;color:#fff;padding:8px;white-space:nowrap}.badge.badge-sm{padding:5px}.badge.badge-md{padding:3px 10px}.badge.badge-lg{padding:11px}.badge.badge-xl{padding:14px}.badge.badge-success{background-color:#4caf50}.badge.badge-info{background-color:#0041ff}.badge.badge-danger{background-color:#fc6868}.badge.badge-warning{background-color:#ffc107}.image-wrapper{margin-bottom:20px;margin-top:10px;display:inline-block;width:100%}.image-wrapper .image-item{width:200px;height:200px;margin-right:20px;background:#f8f9fa;border-radius:3px;display:inline-block;position:relative;background-image:url("../images/placeholder-icon.svg");background-repeat:no-repeat;background-position:50%;margin-bottom:20px;float:left}.image-wrapper .image-item img.preview{width:100%;height:100%}.image-wrapper .image-item input{display:none}.image-wrapper .image-item .remove-image{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.08)),to(rgba(0,0,0,.24)));background-image:linear-gradient(-180deg,rgba(0,0,0,.08),rgba(0,0,0,.24));border-radius:0 0 4px 4px;position:absolute;bottom:0;width:100%;padding:10px;text-align:center;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.24);margin-right:20px;cursor:pointer}.image-wrapper .image-item:hover .remove-image{display:block}.image-wrapper .image-item.has-image{background-image:none}.vue-swatches__trigger{border:1px solid #d3d3d3}.helper-container{display:block}.helper-container .group code{font-weight:700} \ No newline at end of file +.active .cms-icon,.active.configuration-icon,.catalog-icon,.cms-icon,.configuration-icon,.customer-icon,.dashboard-icon,.promotion-icon,.sales-icon,.settings-icon{width:48px;height:48px;display:inline-block;background-size:cover}.icon{display:inline-block;background-size:cover}.dashboard-icon{background-image:url("../images/Icon-Dashboard.svg")}.sales-icon{background-image:url("../images/Icon-Sales.svg")}.catalog-icon{background-image:url("../images/Icon-Catalog.svg")}.customer-icon{background-image:url("../images/Icon-Customers.svg")}.configuration-icon{background-image:url("../images/Icon-Configure.svg")}.settings-icon{background-image:url("../images/Icon-Settings.svg")}.promotion-icon{background-image:url("../images/icon-promotion.svg")}.cms-icon{background-image:url("../images/Icon-CMS.svg")}.angle-right-icon{background-image:url("../images/Angle-Right.svg");width:17px;height:17px}.angle-left-icon{background-image:url("../images/Angle-Left.svg");width:17px;height:17px}.arrow-down-icon{background-image:url("../images/Arrow-Down-Light.svg");width:14px;height:8px}.arrow-right-icon{background-image:url("../images/Arrow-Right.svg");width:18px;height:18px}.white-cross-sm-icon{background-image:url("../images/Icon-Sm-Cross-White.svg");width:18px;height:18px}.accordian-up-icon{background-image:url("../images/Accordion-Arrow-Up.svg");width:24px;height:24px}.accordian-down-icon{background-image:url("../images/Accordion-Arrow-Down.svg");width:24px;height:24px}.cross-icon{background-image:url("../images/Icon-Crossed.svg");width:18px;height:18px}.trash-icon{background-image:url("../images/Icon-Trash.svg");width:24px;height:24px}.remove-icon{background-image:url("../images/Icon-remove.svg");width:24px;height:24px}.pencil-lg-icon{background-image:url("../images/Icon-Pencil-Large.svg");width:24px;height:24px}.eye-icon{background-image:url("../images/Icon-eye.svg");width:24px;height:24px}.search-icon{background-image:url("../images/icon-search.svg");width:24px;height:24px}.sortable-icon{background-image:url("../images/Icon-Sortable.svg");width:24px;height:24px}.sort-down-icon,.sort-up-icon{background-image:url("../images/Icon-Sort-Down.svg");width:18px;height:18px}.sort-up-icon{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.primary-back-icon{background-image:url("../images/Icon-Back-Primary.svg");width:24px;height:24px}.checkbox-dash-icon{background-image:url("../images/Checkbox-Dash.svg");width:24px;height:24px}.account-icon{background-image:url("../images/icon-account.svg");width:24px;height:24px}.expand-icon{background-image:url("../images/Expand-Light.svg");width:18px;height:18px}.expand-on-icon{background-image:url("../images/Expand-Light-On.svg");width:18px;height:18px}.dark-left-icon{background-image:url("../images/arrow-left-dark.svg");width:18px;height:18px}.light-right-icon{background-image:url("../images/arrow-right-light.svg");width:18px;height:18px}.folder-icon{background-image:url("../images/Folder-Icon.svg");width:24px;height:24px}.star-icon{background-image:url("../images/Star-Icon.svg");width:24px;height:24px}.arrow-down-white-icon{background-image:url("../images/down-arrow-white.svg");width:17px;height:13px}.arrow-up-white-icon{background-image:url("../images/up-arrow-white.svg");width:17px;height:13px}.profile-pic-icon{background-image:url("../images/Profile-Pic.svg");width:60px;height:60px}.graph-up-icon{background-image:url("../images/Icon-Graph-Green.svg");width:24px;height:24px}.graph-down-icon{background-image:url("../images/Icon-Graph-Red.svg");width:24px;height:24px}.no-result-icon{background-image:url("../images/limited-icon.svg");width:52px;height:47px}.note-icon{background-image:url("../images/icon-note.svg")}.list-icon,.note-icon{width:24px;height:24px}.list-icon{background-image:url("../images/Icon-Listing.svg")}.active .dashboard-icon{background-image:url("../images/Icon-Dashboard-Active.svg")}.active .sales-icon{background-image:url("../images/Icon-Sales-Active.svg")}.active .catalog-icon{background-image:url("../images/Icon-Catalog-Active.svg")}.active .customer-icon{background-image:url("../images/Icon-Customers-Active.svg")}.active .settings-icon{background-image:url("../images/Icon-Settings-Active.svg")}.active .configuration-icon{background-image:url("../images/Icon-Configure-Active.svg")}.active .promotion-icon{background-image:url("../images/icon-promotion-active.svg")}.active .cms-icon{background-image:url("../images/Icon-CMS-Active.svg")}.active>.arrow-down-icon{background-image:url("../images/Arrow-Down.svg");width:14px;height:8px}.active>.expand-icon{background-image:url("../images/Expand-Light-On.svg")}.active.dashboard-icon{background-image:url("../images/Icon-Dashboard-Active.svg")}.active.customer-icon{background-image:url("../images/Icon-Customers-Active.svg")}.active.sales-icon{background-image:url("../images/Icon-Sales-Active.svg")}.active.settings-icon{background-image:url("../images/Icon-Settings-Active.svg")}.active.configuration-icon{background-image:url("../images/Icon-Configure-Active.svg")}.active.arrow-down-icon{background-image:url("../images/Arrow-Down.svg");width:14px;height:8px}.active.expand-icon{background-image:url("../images/Expand-Light-On.svg")}.icon-404{background-image:url("../images/404-image.svg");width:255px;height:255px}.export-icon{background-image:url("../images/Icon-Export.svg");width:32px;height:32px}.import-icon{background-image:url("../images/Icon-Import.svg");width:32px;height:32px}.star-blue-icon{width:17px;height:17px;background-image:url("../images/Icon-star.svg")}.grid-container{display:block;width:100%}.filter-row-one{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;width:100%;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-bottom:20px}.filter-row-one .dropdown-filters{position:absolute;right:25px}.filter-row-two{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:10px}.filter-row-two,.search-filter{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.search-filter .control{font-size:15px;border:2px solid #c7c7c7;border-right:none;border-top-right-radius:0;border-bottom-right-radius:0;border-radius:3px;height:36px;width:280px;padding-left:10px}.search-filter .contorl:focus{border-color:#0041ff}.search-filter .icon-wrapper{border:2px solid #c7c7c7;border-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0;height:36px;width:36px;margin-left:-1px}.search-filter .icon-wrapper .search-icon{margin-top:3px;margin-left:3px}.grid-dropdown-header{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:36px;width:200px;border:2px solid #c7c7c7;border-radius:3px;color:#8e8e8e;padding:0 5px}.grid-dropdown-header .arrow-icon-down{float:right}.dropdown-list.dropdown-container{padding:15px;width:100%;top:43px}.dropdown-list.dropdown-container ul li .control-group{margin-bottom:15px}.dropdown-list.dropdown-container .apply-filter{padding:10px;width:100%}.filter-tag{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;margin-right:20px}.filter-tag,.filter-tag .wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;font-size:14px;height:28px;border-radius:2px}.filter-tag .wrapper{margin-left:10px;padding:5px 10px;background:#e7e7e7;color:#000311;letter-spacing:-.22px}.filter-tag .wrapper .icon.cross-icon{margin-left:10px;cursor:pointer}@-webkit-keyframes jelly{0%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}70%{-webkit-transform:translateY(5px) scale(1.05);transform:translateY(5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}}@keyframes jelly{0%{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}70%{-webkit-transform:translateY(5px) scale(1.05);transform:translateY(5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}}@-webkit-keyframes jelly-out{0%{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}30%{-webkit-transform:translateY(-5px) scale(1.05);transform:translateY(-5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}}@keyframes jelly-out{0%{-webkit-transform:translateY(0) scale(1);transform:translateY(0) scale(1);opacity:1}30%{-webkit-transform:translateY(-5px) scale(1.05);transform:translateY(-5px) scale(1.05);opacity:1}to{-webkit-transform:translateY(0) scale(.7);transform:translateY(0) scale(.7);opacity:0}}*{-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}:focus{outline:none}.mb-10{margin-bottom:10px}.mb-15{margin-bottom:15px}.mb-20{margin-bottom:20px}.mb-25{margin-bottom:25px}.mb-30{margin-bottom:30px}.mb-35{margin-bottom:35px}.mb-40{margin-bottom:40px}.mb-45{margin-bottom:45px}.mb-50{margin-bottom:50px}.mb-60{margin-bottom:60px}.mb-70{margin-bottom:70px}.mb-80{margin-bottom:80px}.mb-90{margin-bottom:90px}.mt-5{margin-top:5px}.mt-10{margin-top:10px}.mt-15{margin-top:15px}.mt-20{margin-top:20px}.mt-25{margin-top:25px}.mt-30{margin-top:30px}.mt-35{margin-top:35px}.mt-40{margin-top:40px}.mt-45{margin-top:45px}.mt-50{margin-top:50px}.mt-60{margin-top:60px}.mt-70{margin-top:70px}.mt-80{margin-top:80px}.mt-90{margin-top:90px}body{letter-spacing:-.26px;line-height:19px}a:active,a:focus,a:hover,a:link,a:visited{text-decoration:none;color:#0041ff}::-moz-selection{background-color:rgba(0,64,255,.6);color:#fff}::selection{background-color:rgba(0,64,255,.6);color:#fff}textarea{resize:none}ul{margin:0;padding:0;list-style:none}h1{font-size:28px;margin-top:0}h1,h2{color:#3a3a3a}h2{font-size:24px}h3{font-size:20px}h3,h4{color:#3a3a3a}h4{font-size:16px}h5{font-size:12px;color:#3a3a3a}.hide{display:none!important}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.btn{-webkit-box-shadow:0 1px 4px 0 rgba(0,0,0,.2),0 0 8px 0 rgba(0,0,0,.1);box-shadow:0 1px 4px 0 rgba(0,0,0,.2),0 0 8px 0 rgba(0,0,0,.1);border-radius:3px;border:none;color:#fff;cursor:pointer;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1);font:inherit;display:inline-block}.btn:active,.btn:focus,.btn:hover{opacity:.75;border:none}.btn.btn-sm{padding:6px 12px}.btn.btn-md{padding:8px 16px}.btn.btn-lg{padding:10px 20px}.btn.btn-xl{padding:12px 24px;font-size:16px}.btn.btn-primary{background:#0041ff;color:#fff}.btn.btn-black{background:#000;color:#fff}.btn.btn-white{background:#fff;color:#000}.btn:disabled,.btn[disabled=disabled],.btn[disabled=disabled]:active,.btn[disabled=disabled]:hover{cursor:not-allowed;background:#b1b1ae;-webkit-box-shadow:none;box-shadow:none;opacity:1}.dropdown-btn{min-width:150px;text-align:left;background:#fff;border:2px solid #c7c7c7;border-radius:3px;font-size:14px;padding:8px 35px 8px 10px;cursor:pointer;position:relative}.dropdown-btn:active,.dropdown-btn:focus,.dropdown-btn:hover{opacity:.75;border:2px solid #c7c7c7}.dropdown-btn .icon{position:absolute;right:10px;top:50%;margin-top:-4px}.dropdown-toggle{cursor:pointer}.dropdown-open{position:relative}.dropdown-list{width:200px;margin-bottom:20px;-webkit-box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);border-radius:3px;background-color:#fff;position:absolute;display:none;z-index:10;text-align:left}.dropdown-list.bottom-left{top:42px;left:0}.dropdown-list.bottom-right{top:42px;right:0}.dropdown-list.top-left{bottom:0;left:42px}.dropdown-list.top-right{bottom:0;right:42px}.dropdown-list .search-box{padding:20px;border-bottom:1px solid #e8e8e8}.dropdown-list .search-box .control{background:#fff;border:2px solid #c7c7c7;border-radius:3px;width:100%;height:36px;display:inline-block;vertical-align:middle;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1);padding:0 10px;font-size:15px}.dropdown-list .search-box .control:focus{border-color:#0041ff}.dropdown-list .dropdown-container{padding:20px;overflow-y:auto}.dropdown-list .dropdown-container label{font-size:15px;display:inline-block;text-transform:uppercase;color:#9e9e9e;font-weight:700;padding-bottom:5px}.dropdown-list .dropdown-container ul{margin:0;list-style-type:none;padding:0}.dropdown-list .dropdown-container ul li{padding:5px 0}.dropdown-list .dropdown-container ul li a:active,.dropdown-list .dropdown-container ul li a:focus,.dropdown-list .dropdown-container ul li a:link,.dropdown-list .dropdown-container ul li a:visited{color:#333;display:block}.dropdown-list .dropdown-container ul li a:hover{color:#0041ff}.dropdown-list .dropdown-container ul li .checkbox{margin:0}.dropdown-list .dropdown-container ul li .control-group label{color:#3a3a3a;font-size:15px;font-weight:500;text-transform:capitalize;width:100%}.dropdown-list .dropdown-container .btn{width:100%;margin-top:10px}.section .secton-title{font-size:18px;color:#8e8e8e;padding:15px 0;border-bottom:1px solid #e8e8e8}.section .section-content{display:block;padding:20px 0}.section .section-content .row{display:block;padding:7px 0}.section .section-content .row .title{width:200px}.section .section-content .row .title,.section .section-content .row .value{color:#3a3a3a;letter-spacing:-.26px;display:inline-block}.table{width:100%}.table table{border-collapse:collapse;text-align:left;width:100%}.table table thead th{font-weight:700;padding:12px 10px;background:#f8f9fa;color:#3a3a3a}.table table tbody td{padding:10px;border-bottom:1px solid #d3d3d3;color:#3a3a3a;vertical-align:top}.table table tbody td.actions .action{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.table table tbody td.actions .icon{cursor:pointer;vertical-align:middle}.table table tbody td.empty{text-align:center}.table table tbody tr:last-child td{border-bottom:none}.table .control-group{width:100%;margin-bottom:0;min-width:140px}.table .control-group .control{width:100%;margin:0}.pagination .page-item{background:#fff;border:2px solid #c7c7c7;border-radius:3px;padding:7px 14px;margin-right:5px;font-size:16px;display:inline-block;color:#8e8e8e;vertical-align:middle;text-decoration:none}.pagination .page-item.next,.pagination .page-item.previous{padding:6px 9px}.pagination .page-item.active{background:#0041ff;color:#fff;border-color:#0041ff}.pagination .page-item .icon{vertical-align:middle;margin-bottom:3px}.checkbox{position:relative;display:block}.checkbox input{left:0;opacity:0;position:absolute;top:0;height:24px;width:24px;z-index:100}.checkbox .checkbox-view{background-image:url("../images/Checkbox.svg");height:24px;width:24px;margin:0;display:inline-block!important;vertical-align:middle;margin-right:5px}.checkbox input:checked+.checkbox-view{background-image:url("../images/Checkbox-Checked.svg")}.checkbox input:disabled+.checkbox-view{opacity:.5;cursor:not-allowed}.radio{position:relative;display:block;margin:10px 5px 5px 0}.radio input{left:0;opacity:0;position:absolute;top:0;z-index:100}.radio .radio-view{background-image:url("../images/controls.svg");background-position:-21px 0;height:20px;width:20px;margin:0;display:inline-block!important;vertical-align:middle;margin-right:5px}.radio input:checked+.radio-view{background-position:-21px -21px}.radio input:disabled+.radio-view{opacity:.5;cursor:not-allowed}.control-group{display:block;margin-bottom:25px;font-size:15px;color:#333;width:750px;max-width:100%;position:relative}.control-group label{display:block;color:#3a3a3a}.control-group label.required:after{content:"*";color:#fc6868;font-weight:700;display:inline-block}.control-group textarea.control{height:100px;padding:10px}.control-group .control{background:#fff;border:2px solid #c7c7c7;border-radius:3px;width:70%;height:36px;display:inline-block;vertical-align:middle;-webkit-transition:.2s cubic-bezier(.4,0,.2,1);transition:.2s cubic-bezier(.4,0,.2,1);padding:0 10px;font-size:15px;margin-top:10px;margin-bottom:5px}.control-group .control:focus{border-color:#0041ff}.control-group .control[disabled=disabled]{border-color:#d3d3d3;background-color:#d3d3d3;cursor:not-allowed}.control-group .control[multiple]{height:100px}.control-group.date:after,.control-group.datetime:after{background-image:url("../images/Icon-Calendar.svg");width:24px;height:24px;content:"";display:inline-block;vertical-align:middle;margin-left:-34px;margin-top:2px;pointer-events:none}.control-group .control-info{display:block;font-size:14px;color:#6f6f6f;font-style:italic}.control-group .control-error{display:none;color:#ff5656;margin-top:5px}.control-group.has-error .control{border-color:#fc6868}.control-group.has-error .control-error{display:block}.control-group.price .currency-code{vertical-align:middle;display:inline-block}.control-group .switch{position:relative;display:inline-block;width:60px;height:34px;margin-top:10px;margin-bottom:5px}.control-group .switch input{opacity:0;width:0;height:0}.control-group .slider{cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#8e8e8e}.control-group .slider,.control-group .slider:before{position:absolute;-webkit-transition:.2s;transition:.2s}.control-group .slider:before{content:"";height:26px;width:26px;left:4px;bottom:4px;background-color:#fff}.control-group input:checked+.slider{background-color:#0041ff}.control-group input:focus+.slider{-webkit-box-shadow:0 0 1px #0041ff;box-shadow:0 0 1px #0041ff}.control-group input:checked+.slider:before{-webkit-transform:translateX(26px);transform:translateX(26px)}.control-group .slider.round{border-radius:34px}.control-group .slider.round:before{border-radius:50%}.button-group{margin-top:20px;margin-bottom:20px}.alert-wrapper{width:300px;top:10px;right:10px;position:fixed;z-index:100;text-align:left}.alert-wrapper .alert{width:300px;padding:15px;border-radius:3px;display:inline-block;-webkit-box-shadow:0 4px 15.36px .64px rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.12);box-shadow:0 4px 15.36px .64px rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.12);position:relative;-webkit-animation:jelly .5s ease-in-out;animation:jelly .5s ease-in-out;-webkit-transform-origin:center top;transform-origin:center top;z-index:500;margin-bottom:10px}.alert-wrapper .alert.alert-error{background:#fc6868}.alert-wrapper .alert.alert-info{background:#204d74}.alert-wrapper .alert.alert-success{background:#4caf50}.alert-wrapper .alert.alert-warning{background:#ffc107}.alert-wrapper .alert .icon{position:absolute;right:10px;top:10px;cursor:pointer}.alert-wrapper .alert p{color:#fff;margin:0;padding:0;font-size:15px}.tabs ul{border-bottom:1px solid #e8e8e8}.tabs ul li{display:inline-block}.tabs ul li a{padding:15px 20px;cursor:pointer;margin:0 2px;text-align:center;color:#000311;display:block}.tabs ul li.active a{border-bottom:3px solid #0041ff}.accordian,accordian{display:inline-block;width:100%}.accordian .accordian-header,.accordian div[slot*=header],accordian .accordian-header,accordian div[slot*=header]{width:100%;display:inline-block;font-size:18px;color:#3a3a3a;border-top:1px solid #e8e8e8;border-bottom:1px solid #e8e8e8;padding:20px 15px;cursor:pointer;margin-top:-1px}.accordian .accordian-header .expand-icon,.accordian div[slot*=header] .expand-icon,accordian .accordian-header .expand-icon,accordian div[slot*=header] .expand-icon{background-image:url("../images/Expand-Light.svg");margin-right:10px;margin-top:3px}.accordian .accordian-header h1,.accordian div[slot*=header] h1,accordian .accordian-header h1,accordian div[slot*=header] h1{margin:0;font-size:20px;font-weight:500;display:inline-block}.accordian .accordian-header .icon,.accordian div[slot*=header] .icon,accordian .accordian-header .icon,accordian div[slot*=header] .icon{float:right}.accordian .accordian-header .icon.left,.accordian div[slot*=header] .icon.left,accordian .accordian-header .icon.left,accordian div[slot*=header] .icon.left{float:left}.accordian.error .accordian-header,accordian.error .accordian-header{color:#ff5656}.accordian .accordian-content,.accordian div[slot*=body],accordian .accordian-content,accordian div[slot*=body]{width:100%;padding:20px 15px;display:none;-webkit-transition:all .3s ease;transition:all .3s ease}.accordian.active>.accordian-content,accordian.active>.accordian-content{display:inline-block}.accordian.active>.accordian-header .expand-icon,accordian.active>.accordian-header .expand-icon{background-image:url("../images/Expand-Light-On.svg")}.tree-container .tree-item{padding-left:30px;display:inline-block;margin-top:10px;width:100%}.tree-container .tree-item>.tree-item{display:none}.tree-container .tree-item.active>.tree-item{display:inline-block}.tree-container .tree-item .checkbox,.tree-container .tree-item .radio{margin:0;display:inline-block}.tree-container .tree-item .expand-icon{display:inline-block;margin-right:10px;cursor:pointer;background-image:url("../images/Expand-Light.svg");width:18px;height:18px;vertical-align:middle}.tree-container .tree-item .folder-icon{vertical-align:middle;margin-right:10px}.tree-container .tree-item.active>.expand-icon{background-image:url("../images/Expand-Light-On.svg")}.tree-container>.tree-item{padding-left:0}.panel{-webkit-box-shadow:0 2px 25px 0 rgba(0,0,0,.15);box-shadow:0 2px 25px 0 rgba(0,0,0,.15);border-radius:5px;background:#fff}.panel .panel-content{padding:20px}modal{display:none}.modal-open{overflow:hidden}.modal-overlay{display:none;overflow-y:auto;z-index:10;top:0;right:0;bottom:0;left:0;position:fixed;background:#000;opacity:.7}.modal-open .modal-overlay{display:block}.modal-container{background:#fff;top:100px;width:600px;max-width:80%;left:50%;margin-left:-300px;position:fixed;z-index:11;-webkit-box-shadow:0 15px 25px 0 rgba(0,0,0,.03),0 20px 45px 5px rgba(0,0,0,.2);box-shadow:0 15px 25px 0 rgba(0,0,0,.03),0 20px 45px 5px rgba(0,0,0,.2);-webkit-animation:fade-in-white .3s ease-in-out;animation:fade-in-white .3s ease-in-out;-webkit-animation:jelly .5s ease-in-out;animation:jelly .5s ease-in-out;border-radius:5px;overflow-y:auto;max-height:80%}.modal-container .modal-header{padding:20px}.modal-container .modal-header h3{display:inline-block;font-size:20px;color:#3a3a3a;margin:0}.modal-container .modal-header .icon{float:right;cursor:pointer}.modal-container .modal-body{padding:20px}.modal-container .modal-body .control-group .control{width:100%}@media only screen and (max-width:770px){.modal-container{max-width:80%;left:10%;margin-left:0}}.label{background:#e7e7e7;border-radius:2px;padding:8px;color:#000311;display:inline-block}.label.label-sm{padding:5px}.label.label-md{padding:8px}.label.label-lg{padding:11px}.label.label-xl{padding:14px}.badge{border-radius:50px;color:#fff;padding:8px;white-space:nowrap}.badge.badge-sm{padding:5px}.badge.badge-md{padding:3px 10px}.badge.badge-lg{padding:11px}.badge.badge-xl{padding:14px}.badge.badge-success{background-color:#4caf50}.badge.badge-info{background-color:#0041ff}.badge.badge-danger{background-color:#fc6868}.badge.badge-warning{background-color:#ffc107}.image-wrapper{margin-bottom:20px;margin-top:10px;display:inline-block;width:100%}.image-wrapper .image-item{width:200px;height:200px;margin-right:20px;background:#f8f9fa;border-radius:3px;display:inline-block;position:relative;background-image:url("../images/placeholder-icon.svg");background-repeat:no-repeat;background-position:50%;margin-bottom:20px;float:left}.image-wrapper .image-item img.preview{width:100%;height:100%}.image-wrapper .image-item input{display:none}.image-wrapper .image-item .remove-image{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.08)),to(rgba(0,0,0,.24)));background-image:linear-gradient(-180deg,rgba(0,0,0,.08),rgba(0,0,0,.24));border-radius:0 0 4px 4px;position:absolute;bottom:0;width:100%;padding:10px;text-align:center;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.24);margin-right:20px;cursor:pointer}.image-wrapper .image-item:hover .remove-image{display:block}.image-wrapper .image-item.has-image{background-image:none}.vue-swatches__trigger{border:1px solid #d3d3d3}.helper-container{display:block}.helper-container .group code{font-weight:700}div.rad-info-box{width:fit-content;text-align:center;box-shadow:1px 1px 2px 0 #ccc;padding:20px;box-shadow:0 2px 5px 0 rgba(0,0,0,.26);font-weight:700;background:#fff!important} \ No newline at end of file