commit 28c3a81b6472359cd19bc1d168311045cfff251e Author: Arturo Corro Date: Mon Jan 27 02:22:06 2025 -0600 Inicialización del módulo base diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..2298675 --- /dev/null +++ b/composer.json @@ -0,0 +1,28 @@ +{ + "name": "koneko/laravel-vuexy-admin-module", + "description": "Base modular para proyectos Laravel altamente personalizados.", + "type": "library", + "license": "MIT", + "require": { + "php": ">=8.0", + "laravel/framework": "^10.0|^11.0" + }, + "autoload": { + "psr-4": { + "Koneko\\BaseModule\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Koneko\\BaseModule\\BaseServiceProvider" + ] + } + }, + "authors": [ + { + "name": "Arturo Corro Pacheco", + "email": "arturo@koneko.mx" + } + ] +} diff --git a/src/modules/App/Actions/Fortify/CreateNewUser.php b/src/modules/App/Actions/Fortify/CreateNewUser.php new file mode 100644 index 0000000..3489fd5 --- /dev/null +++ b/src/modules/App/Actions/Fortify/CreateNewUser.php @@ -0,0 +1,40 @@ + $input + */ + public function create(array $input): User + { + Validator::make($input, [ + 'name' => ['required', 'string', 'max:255'], + 'email' => [ + 'required', + 'string', + 'email', + 'max:255', + Rule::unique(User::class), + ], + 'password' => $this->passwordRules(), + ])->validate(); + + return User::create([ + 'name' => $input['name'], + 'email' => $input['email'], + 'password' => Hash::make($input['password']), + ]); + } +} diff --git a/src/modules/App/Actions/Fortify/PasswordValidationRules.php b/src/modules/App/Actions/Fortify/PasswordValidationRules.php new file mode 100644 index 0000000..5f0d0f1 --- /dev/null +++ b/src/modules/App/Actions/Fortify/PasswordValidationRules.php @@ -0,0 +1,18 @@ +|string> + */ + protected function passwordRules(): array + { + return ['required', 'string', Password::default(), 'confirmed']; + } +} diff --git a/src/modules/App/Actions/Fortify/ResetUserPassword.php b/src/modules/App/Actions/Fortify/ResetUserPassword.php new file mode 100644 index 0000000..853b81f --- /dev/null +++ b/src/modules/App/Actions/Fortify/ResetUserPassword.php @@ -0,0 +1,29 @@ + $input + */ + public function reset(User $user, array $input): void + { + Validator::make($input, [ + 'password' => $this->passwordRules(), + ])->validate(); + + $user->forceFill([ + 'password' => Hash::make($input['password']), + ])->save(); + } +} diff --git a/src/modules/App/Actions/Fortify/UpdateUserPassword.php b/src/modules/App/Actions/Fortify/UpdateUserPassword.php new file mode 100644 index 0000000..df98d5f --- /dev/null +++ b/src/modules/App/Actions/Fortify/UpdateUserPassword.php @@ -0,0 +1,32 @@ + $input + */ + public function update(User $user, array $input): void + { + Validator::make($input, [ + 'current_password' => ['required', 'string', 'current_password:web'], + 'password' => $this->passwordRules(), + ], [ + 'current_password.current_password' => __('The provided password does not match your current password.'), + ])->validateWithBag('updatePassword'); + + $user->forceFill([ + 'password' => Hash::make($input['password']), + ])->save(); + } +} diff --git a/src/modules/App/Actions/Fortify/UpdateUserProfileInformation.php b/src/modules/App/Actions/Fortify/UpdateUserProfileInformation.php new file mode 100644 index 0000000..d78a6ae --- /dev/null +++ b/src/modules/App/Actions/Fortify/UpdateUserProfileInformation.php @@ -0,0 +1,60 @@ + $input + */ + public function update(User $user, array $input): void + { + Validator::make($input, [ + 'name' => ['required', 'string', 'max:255'], + + 'email' => [ + 'required', + 'string', + 'email', + 'max:255', + Rule::unique('users')->ignore($user->id), + ], + ])->validateWithBag('updateProfileInformation'); + + if ( + $input['email'] !== $user->email && + $user instanceof MustVerifyEmail + ) { + $this->updateVerifiedUser($user, $input); + } else { + $user->forceFill([ + 'name' => $input['name'], + 'email' => $input['email'], + ])->save(); + } + } + + /** + * Update the given verified user's profile information. + * + * @param array $input + */ + protected function updateVerifiedUser(User $user, array $input): void + { + $user->forceFill([ + 'name' => $input['name'], + 'email' => $input['email'], + 'email_verified_at' => null, + ])->save(); + + $user->sendEmailVerificationNotification(); + } +} diff --git a/src/modules/App/Console/Commands/CleanInitialAvatars.php b/src/modules/App/Console/Commands/CleanInitialAvatars.php new file mode 100644 index 0000000..e4fa315 --- /dev/null +++ b/src/modules/App/Console/Commands/CleanInitialAvatars.php @@ -0,0 +1,43 @@ +files($directory); + + foreach ($files as $file) { + $lastModified = Storage::disk('public')->lastModified($file); + + // Elimina archivos no accedidos en los últimos 30 días + if (now()->timestamp - $lastModified > 30 * 24 * 60 * 60) { + Storage::disk('public')->delete($file); + } + } + + $this->info('Avatares iniciales antiguos eliminados.'); + } +} diff --git a/src/modules/App/Helpers/Helpers.php b/src/modules/App/Helpers/Helpers.php new file mode 100644 index 0000000..99dae3d --- /dev/null +++ b/src/modules/App/Helpers/Helpers.php @@ -0,0 +1,209 @@ + 'vertical', + 'myTheme' => 'theme-default', + 'myStyle' => 'light', + 'myRTLSupport' => false, + 'myRTLMode' => true, + 'hasCustomizer' => true, + 'showDropdownOnHover' => true, + 'displayCustomizer' => true, + 'contentLayout' => 'compact', + 'headerType' => 'fixed', + 'navbarType' => 'fixed', + 'menuFixed' => true, + 'menuCollapsed' => false, + 'footerFixed' => false, + 'customizerControls' => [ + 'rtl', + 'style', + 'headerType', + 'contentLayout', + 'layoutCollapsed', + 'showDropdownOnHover', + 'layoutNavbarOptions', + 'themes', + ], + // 'defaultLanguage'=>'en', + ]; + + // if any key missing of array from custom.php file it will be merge and set a default value from dataDefault array and store in data variable + $data = array_merge($DefaultData, $data); + + // All options available in the template + $allOptions = [ + 'myLayout' => ['vertical', 'horizontal', 'blank', 'front'], + 'menuCollapsed' => [true, false], + 'hasCustomizer' => [true, false], + 'showDropdownOnHover' => [true, false], + 'displayCustomizer' => [true, false], + 'contentLayout' => ['compact', 'wide'], + 'headerType' => ['fixed', 'static'], + 'navbarType' => ['fixed', 'static', 'hidden'], + 'myStyle' => ['light', 'dark', 'system'], + 'myTheme' => ['theme-default', 'theme-bordered', 'theme-semi-dark'], + 'myRTLSupport' => [true, false], + 'myRTLMode' => [true, false], + 'menuFixed' => [true, false], + 'footerFixed' => [true, false], + 'customizerControls' => [], + // 'defaultLanguage'=>array('en'=>'en','fr'=>'fr','de'=>'de','ar'=>'ar'), + ]; + + //if myLayout value empty or not match with default options in custom.php config file then set a default value + foreach ($allOptions as $key => $value) { + if (array_key_exists($key, $DefaultData)) { + if (gettype($DefaultData[$key]) === gettype($data[$key])) { + // data key should be string + if (is_string($data[$key])) { + // data key should not be empty + if (isset($data[$key]) && $data[$key] !== null) { + // data key should not be exist inside allOptions array's sub array + if (!array_key_exists($data[$key], $value)) { + // ensure that passed value should be match with any of allOptions array value + $result = array_search($data[$key], $value, 'strict'); + if (empty($result) && $result !== 0) { + $data[$key] = $DefaultData[$key]; + } + } + } else { + // if data key not set or + $data[$key] = $DefaultData[$key]; + } + } + } else { + $data[$key] = $DefaultData[$key]; + } + } + } + $styleVal = $data['myStyle'] == "dark" ? "dark" : "light"; + $styleUpdatedVal = $data['myStyle'] == "dark" ? "dark" : $data['myStyle']; + // Determine if the layout is admin or front based on cookies + $layoutName = $data['myLayout']; + $isAdmin = Str::contains($layoutName, 'front') ? false : true; + + $modeCookieName = $isAdmin ? 'admin-mode' : 'front-mode'; + $colorPrefCookieName = $isAdmin ? 'admin-colorPref' : 'front-colorPref'; + + // Determine style based on cookies, only if not 'blank-layout' + if ($layoutName !== 'blank') { + if (isset($_COOKIE[$modeCookieName])) { + $styleVal = $_COOKIE[$modeCookieName]; + if ($styleVal === 'system') { + $styleVal = isset($_COOKIE[$colorPrefCookieName]) ? $_COOKIE[$colorPrefCookieName] : 'light'; + } + $styleUpdatedVal = $_COOKIE[$modeCookieName]; + } + } + + isset($_COOKIE['theme']) ? $themeVal = $_COOKIE['theme'] : $themeVal = $data['myTheme']; + + $directionVal = isset($_COOKIE['direction']) ? ($_COOKIE['direction'] === "true" ? 'rtl' : 'ltr') : $data['myRTLMode']; + + //layout classes + $layoutClasses = [ + 'layout' => $data['myLayout'], + 'theme' => $themeVal, + 'themeOpt' => $data['myTheme'], + 'style' => $styleVal, + 'styleOpt' => $data['myStyle'], + 'styleOptVal' => $styleUpdatedVal, + 'rtlSupport' => $data['myRTLSupport'], + 'rtlMode' => $data['myRTLMode'], + 'textDirection' => $directionVal, //$data['myRTLMode'], + 'menuCollapsed' => $data['menuCollapsed'], + 'hasCustomizer' => $data['hasCustomizer'], + 'showDropdownOnHover' => $data['showDropdownOnHover'], + 'displayCustomizer' => $data['displayCustomizer'], + 'contentLayout' => $data['contentLayout'], + 'headerType' => $data['headerType'], + 'navbarType' => $data['navbarType'], + 'menuFixed' => $data['menuFixed'], + 'footerFixed' => $data['footerFixed'], + 'customizerControls' => $data['customizerControls'], + ]; + + // sidebar Collapsed + if ($layoutClasses['menuCollapsed'] == true) { + $layoutClasses['menuCollapsed'] = 'layout-menu-collapsed'; + } + + // Header Type + if ($layoutClasses['headerType'] == 'fixed') { + $layoutClasses['headerType'] = 'layout-menu-fixed'; + } + // Navbar Type + if ($layoutClasses['navbarType'] == 'fixed') { + $layoutClasses['navbarType'] = 'layout-navbar-fixed'; + } elseif ($layoutClasses['navbarType'] == 'static') { + $layoutClasses['navbarType'] = ''; + } else { + $layoutClasses['navbarType'] = 'layout-navbar-hidden'; + } + + // Menu Fixed + if ($layoutClasses['menuFixed'] == true) { + $layoutClasses['menuFixed'] = 'layout-menu-fixed'; + } + + // Footer Fixed + if ($layoutClasses['footerFixed'] == true) { + $layoutClasses['footerFixed'] = 'layout-footer-fixed'; + } + + // RTL Supported template + if ($layoutClasses['rtlSupport'] == true) { + $layoutClasses['rtlSupport'] = '/rtl'; + } + + // RTL Layout/Mode + if ($layoutClasses['rtlMode'] == true) { + $layoutClasses['rtlMode'] = 'rtl'; + $layoutClasses['textDirection'] = isset($_COOKIE['direction']) ? ($_COOKIE['direction'] === "true" ? 'rtl' : 'ltr') : 'rtl'; + } else { + $layoutClasses['rtlMode'] = 'ltr'; + $layoutClasses['textDirection'] = isset($_COOKIE['direction']) && $_COOKIE['direction'] === "true" ? 'rtl' : 'ltr'; + } + + // Show DropdownOnHover for Horizontal Menu + if ($layoutClasses['showDropdownOnHover'] == true) { + $layoutClasses['showDropdownOnHover'] = true; + } else { + $layoutClasses['showDropdownOnHover'] = false; + } + + // To hide/show display customizer UI, not js + if ($layoutClasses['displayCustomizer'] == true) { + $layoutClasses['displayCustomizer'] = true; + } else { + $layoutClasses['displayCustomizer'] = false; + } + + return $layoutClasses; + } + + public static function updatePageConfig($pageConfigs) + { + $demo = 'custom'; + if (isset($pageConfigs)) { + if (count($pageConfigs) > 0) { + foreach ($pageConfigs as $config => $val) { + Config::set('custom.' . $demo . '.' . $config, $val); + } + } + } + } +} diff --git a/src/modules/App/Http/Controllers/AdminController.php b/src/modules/App/Http/Controllers/AdminController.php new file mode 100644 index 0000000..e5112a7 --- /dev/null +++ b/src/modules/App/Http/Controllers/AdminController.php @@ -0,0 +1,62 @@ +expectsJson(), 403, __('errors.ajax_only')); + + $VuexyAdminService = app(VuexyAdminService::class); + + return response()->json($VuexyAdminService->getVuexySearchData()); + } + + public function quickLinksUpdate(Request $request) + { + abort_if(!request()->expectsJson(), 403, __('errors.ajax_only')); + + $validated = $request->validate([ + 'action' => 'required|in:update,remove', + 'route' => 'required|string', + ]); + + $quickLinks = Setting::where('user_id', Auth::user()->id) + ->where('key', 'quicklinks') + ->first(); + + $quickLinks = $quickLinks ? json_decode($quickLinks->value, true) : []; + + if ($validated['action'] === 'update') { + // Verificar si ya existe + if (!in_array($validated['route'], $quickLinks)) + $quickLinks[] = $validated['route']; + } elseif ($validated['action'] === 'remove') { + // Eliminar la ruta si existe + $quickLinks = array_filter($quickLinks, function ($route) use ($validated) { + return $route !== $validated['route']; + }); + } + + Setting::updateOrCreate(['user_id' => Auth::user()->id, 'key' => 'quicklinks'], ['value' => json_encode($quickLinks)]); + + VuexyAdminService::clearQuickLinksCache(); + } + + public function generalSettings() + { + return view('admin::admin-settings.webapp-general-settings'); + } + + public function smtpSettings() + { + return view('admin::admin-settings.smtp-settings'); + } +} diff --git a/src/modules/App/Http/Controllers/AuthController.php b/src/modules/App/Http/Controllers/AuthController.php new file mode 100644 index 0000000..c2889a2 --- /dev/null +++ b/src/modules/App/Http/Controllers/AuthController.php @@ -0,0 +1,144 @@ + 'blank']; + + return view("admin::auth.login-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function registerView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + + + public function confirmPasswordView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.confirm-password-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function resetPasswordView() + { + if (!Features::enabled(Features::resetPasswords())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.reset-password-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function requestPasswordResetLinkView(Request $request) + { + if (!Features::enabled(Features::resetPasswords())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.reset-password-{$viewMode}", ['pageConfigs' => $pageConfigs, 'request' => $request]); + } + + + + + + + + + public function twoFactorChallengeView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.two-factor-challenge-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function twoFactorRecoveryCodesView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function twoFactorAuthenticationView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + + + + + public function verifyEmailView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.verify-email-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function showEmailVerificationForm() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + + public function userProfileView() + { + if (!Features::enabled(Features::registration())) + abort(403, 'El registro está deshabilitado.'); + + $viewMode = config('custom.custom.authViewMode'); + $pageConfigs = ['myLayout' => 'blank']; + + return view("admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]); + } + */ +} diff --git a/src/modules/App/Http/Controllers/CacheController.php b/src/modules/App/Http/Controllers/CacheController.php new file mode 100644 index 0000000..0bde8bd --- /dev/null +++ b/src/modules/App/Http/Controllers/CacheController.php @@ -0,0 +1,41 @@ +json(['success' => true, 'message' => 'Cache generado correctamente.']); + } catch (\Exception $e) { + return response()->json(['success' => false, 'message' => 'Error al generar el cache.', 'error' => $e->getMessage()], 500); + } + } + + public function generateRouteCache() + { + try { + // Lógica para generar cache de rutas + Artisan::call('route:cache'); + + return response()->json(['success' => true, 'message' => 'Cache de rutas generado correctamente.']); + } catch (\Exception $e) { + return response()->json(['success' => false, 'message' => 'Error al generar el cache de rutas.', 'error' => $e->getMessage()], 500); + } + } + + public function cacheManager(CacheConfigService $cacheConfigService) + { + $configCache = $cacheConfigService->getConfig(); + + return view('admin::cache-manager.index', compact('configCache')); + } +} diff --git a/src/modules/App/Http/Controllers/HomeController.php b/src/modules/App/Http/Controllers/HomeController.php new file mode 100644 index 0000000..6499773 --- /dev/null +++ b/src/modules/App/Http/Controllers/HomeController.php @@ -0,0 +1,32 @@ + 'blank']; + + return view('admin::pages.comingsoon', compact('pageConfigs')); + } + + public function underMaintenance() + { + $pageConfigs = ['myLayout' => 'blank']; + + return view('admin::pages.under-maintenance', compact('pageConfigs')); + } +} diff --git a/src/modules/App/Http/Controllers/PermissionController.php b/src/modules/App/Http/Controllers/PermissionController.php new file mode 100644 index 0000000..767af5a --- /dev/null +++ b/src/modules/App/Http/Controllers/PermissionController.php @@ -0,0 +1,37 @@ +ajax()) { + $permissions = Permission::latest()->get(); + + return DataTables::of($permissions) + ->addIndexColumn() + ->addColumn('assigned_to', function ($row) { + return (Arr::pluck($row->roles, ['name'])); + }) + ->editColumn('created_at', function ($request) { + return $request->created_at->format('Y-m-d h:i:s a'); + }) + ->make(true); + } + + return view('admin::permissions.index'); + } +} diff --git a/src/modules/App/Http/Controllers/RoleController.php b/src/modules/App/Http/Controllers/RoleController.php new file mode 100644 index 0000000..8bec7c9 --- /dev/null +++ b/src/modules/App/Http/Controllers/RoleController.php @@ -0,0 +1,38 @@ +input('id'); + $name = $request->input('name'); + + // Verificar si el nombre ya existe en la base de datos + $existingRole = Role::where('name', $name) + ->whereNot('id', $id) + ->first(); + + if ($existingRole) { + return response()->json(['valid' => false]); + } + + return response()->json(['valid' => true]); + } +} diff --git a/src/modules/App/Http/Controllers/SatCatalogController.php b/src/modules/App/Http/Controllers/SatCatalogController.php new file mode 100644 index 0000000..a8bfe49 --- /dev/null +++ b/src/modules/App/Http/Controllers/SatCatalogController.php @@ -0,0 +1,194 @@ +isMethod('post')) { + $validator = Validator::make($request->all(), [ + 'file' => ['required', 'mimes:xls,xlsx'], + ]); + + if ($validator->fails()) + return back()->withInput()->withErrors($validator); + + $time_start = microtime(true); + $results = [ + 'details' => [], + 'total_rows' => 0, + 'total_created' => 0, + 'total_updated' => 0, + 'total_time' => 0, + ]; + + $import = new SatCatalogsImport(); + $filePath = request()->file('file'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_FormaPago'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Forma de pago', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_Moneda'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Moneda', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_CodigoPostal_Parte_1'); + Excel::import($import, $filePath); + $import->onlySheets('c_CodigoPostal_Parte_2'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Código postal', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_RegimenFiscal'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Regimen fiscal', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_Pais'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'País', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_UsoCFDI'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Uso de CFDI', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('C_Colonia_1'); + Excel::import($import, $filePath); + $time_sheet_start = microtime(true); + $import->onlySheets('C_Colonia_2'); + Excel::import($import, $filePath); + $time_sheet_start = microtime(true); + $import->onlySheets('C_Colonia_3'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Colonia', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('c_Estado'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Estado', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('C_Localidad'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Localidad', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $time_sheet_start = microtime(true); + $import->onlySheets('C_Municipio'); + Excel::import($import, $filePath); + $results['details'][] = [ + 'name' => 'Municipio', + 'time' => round(microtime(true) - $time_sheet_start, 2), + 'created' => session('created'), + 'updated' => session('updated'), + ]; + $results['total_rows'] += session('created') + session('updated'); + $results['total_created'] += session('created'); + $results['total_updated'] += session('updated'); + + + $results['total_time'] = round(microtime(true) - $time_start, 2); + + return back()->with('results', $results); + } + + return view('system::import-sat.index'); + } +} diff --git a/src/modules/App/Http/Controllers/UserController.php b/src/modules/App/Http/Controllers/UserController.php new file mode 100644 index 0000000..6d9eaaf --- /dev/null +++ b/src/modules/App/Http/Controllers/UserController.php @@ -0,0 +1,182 @@ +ajax()) { + $users = User::when(!Auth::user()->hasRole('SuperAdmin'), function ($query) { + $query->where('id', '>', 1); + }) + ->latest() + ->get(); + + return DataTables::of($users) + ->only(['id', 'name', 'email', 'avatar', 'roles', 'status', 'created_at']) + ->addIndexColumn() + ->addColumn('avatar', function ($user) { + return $user->profile_photo_url; + }) + ->addColumn('roles', function ($user) { + return (Arr::pluck($user->roles, ['name'])); + }) + /* + ->addColumn('stores', function ($user) { + return (Arr::pluck($user->stores, ['nombre'])); + }) + y*/ + ->editColumn('created_at', function ($user) { + return $user->created_at->format('Y-m-d'); + }) + ->make(true); + } + + return view('admin::users.index'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function store(Request $request) + { + $validator = Validator::make($request->all(), [ + 'name' => 'required|max:255', + 'email' => 'required|max:255|unique:users', + 'photo' => 'nullable|mimes:jpg,jpeg,png|max:1024', + 'password' => 'required', + ]); + + if ($validator->fails()) + return response()->json(['errors' => $validator->errors()->all()]); + + // Preparamos los datos + $user_request = array_merge_recursive($request->all(), [ + 'remember_token' => Str::random(10), + 'created_by' => Auth::user()->id, + ]); + + $user_request['password'] = bcrypt($request->password); + + // Guardamos el nuevo usuario + $user = User::create($user_request); + + // Asignmos los permisos + $user->assignRole($request->roles); + + // Asignamos Tiendas + //$user->stores()->attach($request->stores); + + if ($request->file('photo')) + $user->updateProfilePhoto($request->file('photo')); + + return response()->json(['success' => 'Se agrego correctamente el usuario']); + } + + /** + * Display the specified resource. + * + * @param int User $user + * @return \Illuminate\Http\Response + */ + public function show(User $user) + { + return view('admin::users.show', compact('user')); + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int User $user + * @return \Illuminate\Http\Response + */ + public function updateAjax(Request $request, User $user) + { + // Validamos los datos + $validator = Validator::make($request->all(), [ + 'name' => 'required|max:191', + 'email' => "required|max:191|unique:users,email," . $user->id, + 'photo' => 'nullable|mimes:jpg,jpeg,png|max:2048' + ]); + + if ($validator->fails()) + return response()->json(['errors' => $validator->errors()->all()]); + + // Preparamos los datos + $user_request = $request->all(); + + if ($request->password) { + $user_request['password'] = bcrypt($request->password); + } else { + unset($user_request['password']); + } + + // Guardamos los cambios + $user->update($user_request); + + // Sincronizamos Roles + $user->syncRoles($request->roles); + + // Sincronizamos Tiendas + //$user->stores()->sync($request->stores); + + // Actualizamos foto de perfil + if ($request->file('photo')) + $user->updateProfilePhoto($request->file('photo')); + + return response()->json(['success' => 'Se guardo correctamente los cambios.']); + } + + + public function userSettings(User $user) + { + return view('admin::users.user-settings', compact('user')); + } + + public function generateAvatar(Request $request) + { + // Validación de entrada + $request->validate([ + 'name' => 'nullable|string', + 'color' => 'nullable|string|size:6', + 'background' => 'nullable|string|size:6', + 'size' => 'nullable|integer|min:20|max:1024' + ]); + + $name = $request->get('name', 'NA'); + $color = $request->get('color', '7F9CF5'); + $background = $request->get('background', 'EBF4FF'); + $size = $request->get('size', 100); + + return User::getAvatarImage($name, $color, $background, $size); + + try { + } catch (\Exception $e) { + // String base64 de una imagen PNG transparente de 1x1 píxel + $transparentBase64 = 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAACklEQVR4nGMAAQAABQABDQottAAAAABJRU5ErkJggg=='; + + return response()->make(base64_decode($transparentBase64), 200, [ + 'Content-Type' => 'image/png' + ]); + } + } +} diff --git a/src/modules/App/Http/Controllers/WebsiteSettingController.php b/src/modules/App/Http/Controllers/WebsiteSettingController.php new file mode 100644 index 0000000..ea2aabd --- /dev/null +++ b/src/modules/App/Http/Controllers/WebsiteSettingController.php @@ -0,0 +1,18 @@ +is('admin/*') && !$request->is('admin')) { + return $next($request); + } + + // Compartir variables globalmente solo si es una solicitud HTML + if (str_contains($request->header('Accept'), 'text/html')) { + $adminVars = app(AdminTemplateService::class)->getAdminVars(); + + View::share('_admin', $adminVars); + } + + return $next($request); + } +} diff --git a/src/modules/App/Http/View/Composers/VuexyTemplateComposer.php b/src/modules/App/Http/View/Composers/VuexyTemplateComposer.php new file mode 100644 index 0000000..cfe56a4 --- /dev/null +++ b/src/modules/App/Http/View/Composers/VuexyTemplateComposer.php @@ -0,0 +1,27 @@ +vuexyAdminService = $vuexyAdminService; + } + + public function compose(View $view) + { + $view->with([ + 'vuexyMenu' => $this->vuexyAdminService->getMenu(), + 'vuexySearch' => $this->vuexyAdminService->getSearch(), + 'vuexyQuickLinks' => $this->vuexyAdminService->getQuickLinks(), + 'vuexyNotifications' => $this->vuexyAdminService->getNotifications(), + 'vuexyBreadcrumbs' => $this->vuexyAdminService->getBreadcrumbs(), + ]); + } +} diff --git a/src/modules/App/Imports/SATCodigoPostalImport.php b/src/modules/App/Imports/SATCodigoPostalImport.php new file mode 100644 index 0000000..f595995 --- /dev/null +++ b/src/modules/App/Imports/SATCodigoPostalImport.php @@ -0,0 +1,78 @@ + $row) { + if ($key < 7 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_codigo_postal' => $row[0], + 'c_estado' => $row[1], + 'c_municipio' => $row[2], + 'c_localidad' => $row[3], + 'estimulo_franja_fronteriza' => $row[4], + 'fecha_inicio_de_vigencia' => $row[5] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[5])) : + null, + 'fecha_fin_de_vigencia' => $row[6] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[6])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_codigo_postal')->upsert( + $batchData, + [ + 'c_codigo_postal' + ], + [ + 'c_estado', + 'c_municipio', + 'c_localidad', + 'estimulo_franja_fronteriza', + 'fecha_inicio_de_vigencia', + 'fecha_fin_de_vigencia' + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATColoniaImport.php b/src/modules/App/Imports/SATColoniaImport.php new file mode 100644 index 0000000..2aa8738 --- /dev/null +++ b/src/modules/App/Imports/SATColoniaImport.php @@ -0,0 +1,68 @@ + $row) { + if ($key < 5 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_colonia' => $row[0], + 'c_codigo_postal' => $row[1], + 'nombre_del_asentamiento' => $row[2], + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_colonia')->upsert( + $batchData, + [ + 'c_colonia', + 'c_codigo_postal', + ], + [ + 'nombre_del_asentamiento', + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATEstadoImport.php b/src/modules/App/Imports/SATEstadoImport.php new file mode 100644 index 0000000..aac83a7 --- /dev/null +++ b/src/modules/App/Imports/SATEstadoImport.php @@ -0,0 +1,77 @@ + $row) { + if ($key < 5 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_estado' => $row[0], + 'c_pais' => $row[1], + 'nombre_del_estado' => $row[2], + 'fecha_inicio_de_vigencia' => $row[3] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[3])) : + null, + 'fecha_fin_de_vigencia' => $row[4] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_estado')->upsert( + $batchData, + [ + 'c_estado', + 'c_pais', + ], + [ + 'nombre_del_estado', + 'fecha_inicio_de_vigencia', + 'fecha_fin_de_vigencia', + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATFormaPagoImport.php b/src/modules/App/Imports/SATFormaPagoImport.php new file mode 100644 index 0000000..9907b72 --- /dev/null +++ b/src/modules/App/Imports/SATFormaPagoImport.php @@ -0,0 +1,95 @@ + $row) { + if ($key < 6 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_forma_pago' => $row[0], + 'descripcion' => $row[1], + 'bancarizado' => $row[2], + 'numero_de_operacion' => $row[3], + 'rfc_del_emisor_de_la_cuenta_ordenante' => $row[4], + 'cuenta_ordenante' => $row[5], + 'patron_para_cuenta_ordenante' => $row[6], + 'rfc_del_emisor_cuenta_de_beneficiario' => $row[7], + 'cuenta_de_benenficiario' => $row[8], + 'patron_para_cuenta_beneficiaria' => $row[9], + 'tipo_cadena_pago' => $row[10], + 'banco_emisor_de_la_cuenta_ordenante' => $row[11], + 'fecha_inicio_de_vigencia' => $row[12] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[12])) : + null, + 'fecha_fin_de_vigencia' => $row[13] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[13])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_forma_pago')->upsert( + $batchData, + [ + 'c_forma_pago', + ], + [ + 'descripcion', + 'bancarizado', + 'numero_de_operacion', + 'rfc_del_emisor_de_la_cuenta_ordenante', + 'cuenta_ordenante', + 'patron_para_cuenta_ordenante', + 'rfc_del_emisor_cuenta_de_beneficiario', + 'cuenta_de_benenficiario', + 'patron_para_cuenta_beneficiaria', + 'tipo_cadena_pago', + 'banco_emisor_de_la_cuenta_ordenante', + 'fecha_inicio_de_vigencia', + 'fecha_fin_de_vigencia', + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATLocalidadImport.php b/src/modules/App/Imports/SATLocalidadImport.php new file mode 100644 index 0000000..7f1b2ad --- /dev/null +++ b/src/modules/App/Imports/SATLocalidadImport.php @@ -0,0 +1,77 @@ + $row) { + if ($key < 5 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_localidad' => $row[0], + 'c_estado' => $row[1], + 'descripcion' => $row[2], + 'fecha_de_inicio_de_vigencia' => $row[3] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[3])) : + null, + 'fecha_de_fin_de_vigencia' => $row[4] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_localidad')->upsert( + $batchData, + [ + 'c_localidad', + 'c_estado', + ], + [ + 'descripcion', + 'fecha_de_inicio_de_vigencia', + 'fecha_de_fin_de_vigencia' + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATMonedaImport.php b/src/modules/App/Imports/SATMonedaImport.php new file mode 100644 index 0000000..9373466 --- /dev/null +++ b/src/modules/App/Imports/SATMonedaImport.php @@ -0,0 +1,79 @@ + $row) { + if ($key < 5 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_moneda' => $row[0], + 'descripcion' => $row[1], + 'decimales' => $row[2], + 'porcentaje_variacion' => $row[3], + 'fecha_inicio_de_vigencia' => $row[4] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) : + null, + 'fecha_fin_de_vigencia' => $row[5] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[5])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_moneda')->upsert( + $batchData, + [ + 'c_moneda', + ], + [ + 'descripcion', + 'decimales', + 'porcentaje_variacion', + 'fecha_inicio_de_vigencia', + 'fecha_fin_de_vigencia', + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATMunicipioImport.php b/src/modules/App/Imports/SATMunicipioImport.php new file mode 100644 index 0000000..4819853 --- /dev/null +++ b/src/modules/App/Imports/SATMunicipioImport.php @@ -0,0 +1,77 @@ + $row) { + if ($key < 5 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_municipio' => $row[0], + 'c_estado' => $row[1], + 'descripcion' => $row[2], + 'fecha_de_inicio_de_vigencia' => $row[3] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[3])) : + null, + 'fecha_de_fin_de_vigencia' => $row[4] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_municipio')->upsert( + $batchData, + [ + 'c_municipio', + 'c_estado', + ], + [ + 'descripcion', + 'fecha_de_inicio_de_vigencia', + 'fecha_de_fin_de_vigencia' + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATPaisImport.php b/src/modules/App/Imports/SATPaisImport.php new file mode 100644 index 0000000..e8c2b25 --- /dev/null +++ b/src/modules/App/Imports/SATPaisImport.php @@ -0,0 +1,74 @@ + $row) { + if ($key < 5 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_pais' => $row[0], + 'descripcion' => $row[1], + 'formato_de_codigo_postal' => $row[2], + 'formato_de_registro_de_identidad_tributaria' => $row[3], + 'validacion_del_registro_de_identidad_tributaria' => $row[4], + 'agrupaciones' => $row[5], + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_pais')->upsert( + $batchData, + [ + 'c_pais', + ], + [ + 'descripcion', + 'formato_de_codigo_postal', + 'formato_de_registro_de_identidad_tributaria', + 'validacion_del_registro_de_identidad_tributaria', + 'agrupaciones', + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATRegimenFiscalImport.php b/src/modules/App/Imports/SATRegimenFiscalImport.php new file mode 100644 index 0000000..e9d61f2 --- /dev/null +++ b/src/modules/App/Imports/SATRegimenFiscalImport.php @@ -0,0 +1,79 @@ + $row) { + if ($key < 6 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_regimen_fiscal' => $row[0], + 'descripcion' => $row[1], + 'fisica' => $row[2], + 'moral' => $row[3], + 'fecha_de_inicio_de_vigencia' => $row[4] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) : + null, + 'fecha_de_fin_de_vigencia' => $row[5] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[5])) : + null, + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_regimen_fiscal')->upsert( + $batchData, + [ + 'c_regimen_fiscal', + ], + [ + 'descripcion', + 'fisica', + 'moral', + 'fecha_de_inicio_de_vigencia', + 'fecha_de_fin_de_vigencia' + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SATUsoCFDIImport.php b/src/modules/App/Imports/SATUsoCFDIImport.php new file mode 100644 index 0000000..a77b4ae --- /dev/null +++ b/src/modules/App/Imports/SATUsoCFDIImport.php @@ -0,0 +1,81 @@ + $row) { + if ($key < 6 || !$row[1]) { + continue; + } + + $requestArray = [ + 'c_uso_cfdi' => $row[0], + 'descripcion' => $row[1], + 'aplica_para_tipo_persona_fisica' => $row[2], + 'aplica_para_tipo_persona_moral' => $row[3], + 'fecha_inicio_de_vigencia' => $row[4] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[4])) : + null, + 'fecha_fin_de_vigencia' => $row[5] ? + Carbon::instance(\PhpOffice\PhpSpreadsheet\Shared\Date::excelToDateTimeObject($row[5])) : + null, + 'regimen_fiscal_receptor' => $row[6], + ]; + + $batchData[] = $requestArray; + $processedRows++; + + if (count($batchData) >= $batchSize) { + $this->insertBatch($batchData); + $batchData = []; + } + } + + if (!empty($batchData)) { + $this->insertBatch($batchData); + } + + echo "\n\033[32mImport completed: Processed $processedRows rows.\033[0m\n"; + } + + private function insertBatch(array $batchData) + { + try { + DB::table('sat_uso_cfdi')->upsert( + $batchData, + [ + 'c_uso_cfdi', + ], + [ + 'descripcion', + 'aplica_para_tipo_persona_fisica', + 'aplica_para_tipo_persona_moral', + 'fecha_inicio_de_vigencia', + 'fecha_fin_de_vigencia', + 'regimen_fiscal_receptor', + ] + ); + } catch (\Exception $e) { + echo "Error in batch: " . $e->getMessage() . "\n"; + + foreach ($batchData as $row) { + echo "Row data: " . json_encode($row) . "\n"; + } + } + } +} diff --git a/src/modules/App/Imports/SatCatalogsImport.php b/src/modules/App/Imports/SatCatalogsImport.php new file mode 100644 index 0000000..cfa01ed --- /dev/null +++ b/src/modules/App/Imports/SatCatalogsImport.php @@ -0,0 +1,31 @@ + new SATFormaPagoImport(), + 'c_Moneda' => new SATMonedaImport(), + 'c_CodigoPostal_Parte_1' => new SATCodigoPostalImport(), + 'c_CodigoPostal_Parte_2' => new SATCodigoPostalImport(), + 'c_RegimenFiscal' => new SATRegimenFiscalImport(), + 'c_Pais' => new SATPaisImport(), + 'c_UsoCFDI' => new SATUsoCFDIImport(), + 'C_Colonia_1' => new SATColoniaImport(), + 'C_Colonia_2' => new SATColoniaImport(), + 'C_Colonia_3' => new SATColoniaImport(), + 'c_Estado' => new SATEstadoImport(), + 'C_Localidad' => new SATLocalidadImport(), + 'C_Municipio' => new SATMunicipioImport(), + ]; + } +} diff --git a/src/modules/App/Listeners/ClearUserCache.php b/src/modules/App/Listeners/ClearUserCache.php new file mode 100644 index 0000000..02a9769 --- /dev/null +++ b/src/modules/App/Listeners/ClearUserCache.php @@ -0,0 +1,25 @@ +user) { + VuexyAdminService::clearUserMenuCache(); + VuexyAdminService::clearSearchMenuCache(); + VuexyAdminService::clearQuickLinksCache(); + VuexyAdminService::clearNotificationsCache(); + } + } +} diff --git a/src/modules/App/Listeners/HandleUserLogin.php b/src/modules/App/Listeners/HandleUserLogin.php new file mode 100644 index 0000000..ba7dbe5 --- /dev/null +++ b/src/modules/App/Listeners/HandleUserLogin.php @@ -0,0 +1,26 @@ + $event->user->id, + 'ip_address' => request()->ip(), + 'user_agent' => request()->header('User-Agent'), + ]); + + // Actualizar el último login + $event->user->update(['last_login_at' => now(), 'last_login_ip' => request()->ip()]); + + // Enviar notificación de inicio de sesión + //Mail::to($event->user->email)->send(new LoginNotification($event->user)); + } +} diff --git a/src/modules/App/Livewire/AdminSettings/ApplicationSettings.php b/src/modules/App/Livewire/AdminSettings/ApplicationSettings.php new file mode 100644 index 0000000..7e9caa5 --- /dev/null +++ b/src/modules/App/Livewire/AdminSettings/ApplicationSettings.php @@ -0,0 +1,83 @@ +loadSettings(); + } + + public function loadSettings($clearcache = false) + { + $this->upload_image_logo = null; + $this->upload_image_logo_dark = null; + + $adminTemplateService = app(AdminTemplateService::class); + + if ($clearcache) { + $adminTemplateService->clearAdminVarsCache(); + } + + // Obtener los valores de las configuraciones de la base de datos + $settings = $adminTemplateService->getAdminVars(); + + $this->admin_app_name = $settings['app_name']; + $this->admin_image_logo = $settings['image_logo']['large']; + $this->admin_image_logo_dark = $settings['image_logo']['large_dark']; + } + + public function save() + { + $this->validate([ + 'admin_app_name' => 'required|string|max:255', + 'upload_image_logo' => 'nullable|image|mimes:jpeg,png,jpg,svg,webp|max:20480', + 'upload_image_logo_dark' => 'nullable|image|mimes:jpeg,png,jpg,svg,webp|max:20480', + ]); + + $adminSettingsService = app(AdminSettingsService::class); + + // Guardar título del App en configuraciones + $adminSettingsService->updateSetting('admin_app_name', $this->admin_app_name); + + // Procesar favicon si se ha cargado una imagen + if ($this->upload_image_logo) { + $adminSettingsService->processAndSaveImageLogo($this->upload_image_logo); + } + + if ($this->upload_image_logo_dark) { + $adminSettingsService->processAndSaveImageLogo($this->upload_image_logo_dark, 'dark'); + } + + $this->loadSettings(true); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.admin-settings.application-settings'); + } +} diff --git a/src/modules/App/Livewire/AdminSettings/GeneralSettings.php b/src/modules/App/Livewire/AdminSettings/GeneralSettings.php new file mode 100644 index 0000000..55717f8 --- /dev/null +++ b/src/modules/App/Livewire/AdminSettings/GeneralSettings.php @@ -0,0 +1,84 @@ +loadSettings(); + } + + public function loadSettings($clearcache = false) + { + $this->upload_image_favicon = null; + + $adminTemplateService = app(AdminTemplateService::class); + + if ($clearcache) { + $adminTemplateService->clearAdminVarsCache(); + } + + // Obtener los valores de las configuraciones de la base de datos + $settings = $adminTemplateService->getAdminVars(); + + $this->admin_title = $settings['title']; + $this->admin_favicon_16x16 = $settings['favicon']['16x16']; + $this->admin_favicon_76x76 = $settings['favicon']['76x76']; + $this->admin_favicon_120x120 = $settings['favicon']['120x120']; + $this->admin_favicon_152x152 = $settings['favicon']['152x152']; + $this->admin_favicon_180x180 = $settings['favicon']['180x180']; + $this->admin_favicon_192x192 = $settings['favicon']['192x192']; + } + + public function save() + { + $this->validate([ + 'admin_title' => 'required|string|max:255', + 'upload_image_favicon' => 'nullable|image|mimes:jpeg,png,jpg,svg,webp|max:20480', + ]); + + $adminSettingsService = app(AdminSettingsService::class); + + // Guardar título del sitio en configuraciones + $adminSettingsService->updateSetting('admin_title', $this->admin_title); + + // Procesar favicon si se ha cargado una imagen + if ($this->upload_image_favicon) { + $adminSettingsService->processAndSaveFavicon($this->upload_image_favicon); + } + + $this->loadSettings(true); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.admin-settings.general-settings'); + } +} diff --git a/src/modules/App/Livewire/AdminSettings/InterfaceSettings.php b/src/modules/App/Livewire/AdminSettings/InterfaceSettings.php new file mode 100644 index 0000000..9edc41a --- /dev/null +++ b/src/modules/App/Livewire/AdminSettings/InterfaceSettings.php @@ -0,0 +1,118 @@ +loadSettings(); + } + + + public function loadSettings() + { + $adminTemplateService = app(AdminTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $adminTemplateService->getVuexyCustomizerVars(); + + $this->vuexy_myLayout = $settings['myLayout']; + $this->vuexy_myTheme = $settings['myTheme']; + $this->vuexy_myStyle = $settings['myStyle']; + $this->vuexy_hasCustomizer = $settings['hasCustomizer']; + $this->vuexy_displayCustomizer = $settings['displayCustomizer']; + $this->vuexy_contentLayout = $settings['contentLayout']; + $this->vuexy_navbarType = $settings['navbarType']; + $this->vuexy_footerFixed = $settings['footerFixed']; + $this->vuexy_menuFixed = $settings['menuFixed']; + $this->vuexy_menuCollapsed = $settings['menuCollapsed']; + $this->vuexy_headerType = $settings['headerType']; + $this->vuexy_showDropdownOnHover = $settings['showDropdownOnHover']; + $this->vuexy_authViewMode = $settings['authViewMode']; + $this->vuexy_maxQuickLinks = $settings['maxQuickLinks']; + } + + public function save() + { + $this->validate([ + 'vuexy_maxQuickLinks' => 'required|integer|min:2|max:20', + ]); + + $globalSettingsService = app(GlobalSettingsService::class); + + // Guardar configuraciones + $globalSettingsService->updateSetting('config.custom.custom.myLayout', $this->vuexy_myLayout); + $globalSettingsService->updateSetting('config.custom.custom.myTheme', $this->vuexy_myTheme); + $globalSettingsService->updateSetting('config.custom.custom.myStyle', $this->vuexy_myStyle); + $globalSettingsService->updateSetting('config.custom.custom.hasCustomizer', $this->vuexy_hasCustomizer); + $globalSettingsService->updateSetting('config.custom.custom.displayCustomizer', $this->vuexy_displayCustomizer); + $globalSettingsService->updateSetting('config.custom.custom.contentLayout', $this->vuexy_contentLayout); + $globalSettingsService->updateSetting('config.custom.custom.navbarType', $this->vuexy_navbarType); + $globalSettingsService->updateSetting('config.custom.custom.footerFixed', $this->vuexy_footerFixed); + $globalSettingsService->updateSetting('config.custom.custom.menuFixed', $this->vuexy_menuFixed); + $globalSettingsService->updateSetting('config.custom.custom.menuCollapsed', $this->vuexy_menuCollapsed); + $globalSettingsService->updateSetting('config.custom.custom.headerType', $this->vuexy_headerType); + $globalSettingsService->updateSetting('config.custom.custom.showDropdownOnHover', $this->vuexy_showDropdownOnHover); + $globalSettingsService->updateSetting('config.custom.custom.authViewMode', $this->vuexy_authViewMode); + $globalSettingsService->updateSetting('config.custom.custom.maxQuickLinks', $this->vuexy_maxQuickLinks); + + $globalSettingsService->clearSystemConfigCache(); + + // Refrescar el componente actual + $this->dispatch('clearLocalStoregeTemplateCustomizer'); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.', + deferReload: true + ); + } + + public function clearCustomConfig() + { + $globalSettingsService = app(GlobalSettingsService::class); + + $globalSettingsService->clearVuexyCustomConfig(); + + // Refrescar el componente actual + $this->dispatch('clearLocalStoregeTemplateCustomizer'); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.', + deferReload: true + ); + } + + + public function render() + { + return view('admin::livewire.admin-settings.interface-settings'); + } +} diff --git a/src/modules/App/Livewire/AdminSettings/MailSenderResponseSettings.php b/src/modules/App/Livewire/AdminSettings/MailSenderResponseSettings.php new file mode 100644 index 0000000..aeaa6d9 --- /dev/null +++ b/src/modules/App/Livewire/AdminSettings/MailSenderResponseSettings.php @@ -0,0 +1,106 @@ + 'save']; + + const REPLY_EMAIL_CREATOR = 1; + const REPLY_EMAIL_SENDER = 2; + const REPLY_EMAIL_CUSTOM = 3; + + public $reply_email_options = [ + self::REPLY_EMAIL_CREATOR => 'Responder al creador del documento', + self::REPLY_EMAIL_SENDER => 'Responder a quien envía el documento', + self::REPLY_EMAIL_CUSTOM => 'Definir dirección de correo electrónico', + ]; + + + public function mount() + { + $this->loadSettings(); + } + + + public function loadSettings() + { + $globalSettingsService = app(GlobalSettingsService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $globalSettingsService->getMailSystemConfig(); + + $this->from_address = $settings['from']['address']; + $this->from_name = $settings['from']['name']; + $this->reply_to_method = $settings['reply_to']['method']; + $this->reply_to_email = $settings['reply_to']['email']; + $this->reply_to_name = $settings['reply_to']['name']; + } + + public function save() + { + $this->validate([ + 'from_address' => 'required|email', + 'from_name' => 'required|string|max:255', + 'reply_to_method' => 'required|string|max:255', + ], [ + 'from_address.required' => 'El campo de correo electrónico es obligatorio.', + 'from_address.email' => 'El formato del correo electrónico no es válido.', + 'from_name.required' => 'El nombre es obligatorio.', + 'from_name.string' => 'El nombre debe ser una cadena de texto.', + 'from_name.max' => 'El nombre no puede tener más de 255 caracteres.', + 'reply_to_method.required' => 'El método de respuesta es obligatorio.', + 'reply_to_method.string' => 'El método de respuesta debe ser una cadena de texto.', + 'reply_to_method.max' => 'El método de respuesta no puede tener más de 255 caracteres.', + ]); + + if ($this->reply_to_method == self::REPLY_EMAIL_CUSTOM) { + $this->validate([ + 'reply_to_email' => ['required', 'email'], + 'reply_to_name' => ['required', 'string', 'max:255'], + ], [ + 'reply_to_email.required' => 'El correo de respuesta es obligatorio.', + 'reply_to_email.email' => 'El formato del correo de respuesta no es válido.', + 'reply_to_name.required' => 'El nombre de respuesta es obligatorio.', + 'reply_to_name.string' => 'El nombre de respuesta debe ser una cadena de texto.', + 'reply_to_name.max' => 'El nombre de respuesta no puede tener más de 255 caracteres.', + ]); + } + + $globalSettingsService = app(GlobalSettingsService::class); + + // Guardar título del App en configuraciones + $globalSettingsService->updateSetting('mail.from.address', $this->from_address); + $globalSettingsService->updateSetting('mail.from.name', $this->from_name); + $globalSettingsService->updateSetting('mail.reply_to.method', $this->reply_to_method); + $globalSettingsService->updateSetting('mail.reply_to.email', $this->reply_to_method == self::REPLY_EMAIL_CUSTOM ? $this->reply_to_email : ''); + $globalSettingsService->updateSetting('mail.reply_to.name', $this->reply_to_method == self::REPLY_EMAIL_CUSTOM ? $this->reply_to_name : ''); + + $globalSettingsService->clearMailSystemConfigCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.', + ); + } + + public function render() + { + return view('admin::livewire.admin-settings.mail-sender-response-settings'); + } +} diff --git a/src/modules/App/Livewire/AdminSettings/MailSmtpSettings.php b/src/modules/App/Livewire/AdminSettings/MailSmtpSettings.php new file mode 100644 index 0000000..285d471 --- /dev/null +++ b/src/modules/App/Livewire/AdminSettings/MailSmtpSettings.php @@ -0,0 +1,175 @@ + 'SSL (Secure Sockets Layer)', + self::SMTP_ENCRYPTION_TLS => 'TLS (Transport Layer Security)', + self::SMTP_ENCRYPTION_NONE => 'Sin encriptación (No recomendado)', + ]; + + public $rules = [ + [ + 'host' => 'nullable|string|max:255', + 'port' => 'nullable|integer', + 'encryption' => 'nullable|string', + 'username' => 'nullable|string|max:255', + 'password' => 'nullable|string|max:255', + ], + [ + 'host.string' => 'El servidor SMTP debe ser una cadena de texto.', + 'host.max' => 'El servidor SMTP no puede exceder los 255 caracteres.', + 'port.integer' => 'El puerto SMTP debe ser un número entero.', + 'encryption.string' => 'El tipo de encriptación SMTP debe ser una cadena de texto.', + 'username.string' => 'El nombre de usuario SMTP debe ser una cadena de texto.', + 'username.max' => 'El nombre de usuario SMTP no puede exceder los 255 caracteres.', + 'password.string' => 'La contraseña SMTP debe ser una cadena de texto.', + 'password.max' => 'La contraseña SMTP no puede exceder los 255 caracteres.', + ] + ]; + + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $globalSettingsService = app(GlobalSettingsService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $globalSettingsService->getMailSystemConfig(); + + $this->change_smtp_settings = false; + $this->save_button_disabled = true; + + $this->host = $settings['mailers']['smtp']['host']; + $this->port = $settings['mailers']['smtp']['port']; + $this->encryption = $settings['mailers']['smtp']['encryption']; + $this->username = $settings['mailers']['smtp']['username']; + $this->password = null; + } + + public function save() + { + $this->validate($this->rules[0]); + + $globalSettingsService = app(GlobalSettingsService::class); + + // Guardar título del App en configuraciones + $globalSettingsService->updateSetting('mail.mailers.smtp.host', $this->host); + $globalSettingsService->updateSetting('mail.mailers.smtp.port', $this->port); + $globalSettingsService->updateSetting('mail.mailers.smtp.encryption', $this->encryption); + $globalSettingsService->updateSetting('mail.mailers.smtp.username', $this->username); + $globalSettingsService->updateSetting('mail.mailers.smtp.password', Crypt::encryptString($this->password)); + + $globalSettingsService->clearMailSystemConfigCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function testSmtpConnection() + { + // Validar los datos del formulario + $this->validate($this->rules[0]); + + try { + // Verificar la conexión SMTP + if ($this->validateSMTPConnection()) { + $this->save_button_disabled = false; + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Conexión SMTP exitosa, se guardó los cambios exitosamente.', + ); + } + } catch (\Exception $e) { + // Captura y maneja errores de conexión SMTP + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'danger', + message: 'Error en la conexión SMTP: ' . $e->getMessage(), + notificationTimeout: 15000 // Timeout personalizado + ); + } + } + + private function validateSMTPConnection() + { + $dsn = sprintf( + 'smtp://%s:%s@%s:%s?encryption=%s', + urlencode($this->username), // Codificar nombre de usuario + urlencode($this->password), // Codificar contraseña + $this->host, // Host SMTP + $this->port, // Puerto SMTP + $this->encryption // Encriptación (tls o ssl) + ); + + // Crear el transportador usando el DSN + $transport = Transport::fromDsn($dsn); + + // Crear el mailer con el transportador personalizado + $mailer = new Mailer($transport); + + // Enviar un correo de prueba + $email = (new Email()) + ->from($this->username) // Dirección de correo del remitente + ->to(env('MAIL_SANDBOX')) // Dirección de correo de destino + ->subject(Config::get('app.name') . ' - Correo de prueba') + ->text('Este es un correo de prueba para verificar la conexión SMTP.'); + + // Enviar el correo + $mailer->send($email); + + return true; + } + + + public function render() + { + return view('admin::livewire.admin-settings.mail-smtp-settings'); + } +} diff --git a/src/modules/App/Livewire/Cache/CacheFunctions.php b/src/modules/App/Livewire/Cache/CacheFunctions.php new file mode 100644 index 0000000..ba95461 --- /dev/null +++ b/src/modules/App/Livewire/Cache/CacheFunctions.php @@ -0,0 +1,212 @@ + 0, + 'config' => 0, + 'routes' => 0, + 'views' => 0, + 'events' => 0, + ]; + + protected $listeners = [ + 'reloadCacheFunctionsStatsEvent' => 'reloadCacheStats', + ]; + + public function mount() + { + $this->reloadCacheStats(false); + } + + public function reloadCacheStats($notify = true) + { + $cacheDriver = config('cache.default'); // Obtiene el driver configurado para caché + + // Caché General + switch ($cacheDriver) { + case 'memcached': + try { + $cacheStore = Cache::getStore()->getMemcached(); + $stats = $cacheStore->getStats(); + + $this->cacheCounts['general'] = array_sum(array_column($stats, 'curr_items')); // Total de claves en Memcached + } catch (\Exception $e) { + $this->cacheCounts['general'] = 'Error obteniendo datos de Memcached'; + } + break; + + case 'redis': + try { + $prefix = config('cache.prefix'); // Asegúrate de agregar el sufijo correcto si es necesario + $keys = Redis::connection('cache')->keys($prefix . '*'); + + $this->cacheCounts['general'] = count($keys); // Total de claves en Redis + } catch (\Exception $e) { + $this->cacheCounts['general'] = 'Error obteniendo datos de Redis'; + } + break; + + case 'database': + try { + $this->cacheCounts['general'] = DB::table('cache')->count(); // Total de registros en la tabla de caché + } catch (\Exception $e) { + $this->cacheCounts['general'] = 'Error obteniendo datos de la base de datos'; + } + break; + + case 'file': + try { + $cachePath = config('cache.stores.file.path'); + $files = glob($cachePath . '/*'); + + $this->cacheCounts['general'] = count($files); + } catch (\Exception $e) { + $this->cacheCounts['general'] = 'Error obteniendo datos de archivos'; + } + break; + + default: + $this->cacheCounts['general'] = 'Driver de caché no soportado'; + } + + // Configuración + $this->cacheCounts['config'] = file_exists(base_path('bootstrap/cache/config.php')) ? 1 : 0; + + // Rutas + $this->cacheCounts['routes'] = count(glob(base_path('bootstrap/cache/routes-*.php'))) > 0 ? 1 : 0; + + // Vistas + $this->cacheCounts['views'] = count(glob(storage_path('framework/views/*'))); + + // Configuración + $this->cacheCounts['events'] = file_exists(base_path('bootstrap/cache/events.php')) ? 1 : 0; + + if ($notify) { + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han recargado los estadísticos de caché.' + ); + } + } + + + public function clearLaravelCache() + { + Artisan::call('cache:clear'); + + sleep(1); + + $this->response('Se han limpiado las cachés de la aplicación.', 'warning'); + } + + public function clearConfigCache() + { + Artisan::call('config:clear'); + + $this->response('Se ha limpiado la cache de la configuración de Laravel.', 'warning'); + } + + public function configCache() + { + Artisan::call('config:cache'); + } + + public function clearRouteCache() + { + Artisan::call('route:clear'); + + $this->response('Se han limpiado las rutas de Laravel.', 'warning'); + } + + public function cacheRoutes() + { + Artisan::call('route:cache'); + } + + public function clearViewCache() + { + Artisan::call('view:clear'); + + $this->response('Se han limpiado las vistas de Laravel.', 'warning'); + } + + public function cacheViews() + { + Artisan::call('view:cache'); + + $this->response('Se han cacheado las vistas de Laravel.'); + } + + public function clearEventCache() + { + Artisan::call('event:clear'); + + $this->response('Se han limpiado los eventos de Laravel.', 'warning'); + } + + public function cacheEvents() + { + Artisan::call('event:cache'); + + $this->response('Se han cacheado los eventos de Laravel.'); + } + + public function optimizeClear() + { + Artisan::call('optimize:clear'); + + $this->response('Se han optimizado todos los cachés de Laravel.'); + } + + public function resetPermissionCache() + { + Artisan::call('permission:cache-reset'); + + $this->response('Se han limpiado los cachés de permisos.', 'warning'); + } + + public function clearResetTokens() + { + Artisan::call('auth:clear-resets'); + + $this->response('Se han limpiado los tokens de reseteo de contraseña.', 'warning'); + } + + /** + * Genera una respuesta estandarizada. + */ + private function response(string $message, string $type = 'success'): void + { + $this->reloadCacheStats(false); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $type, + message: $message, + ); + + $this->dispatch('reloadCacheStatsEvent', notify: false); + $this->dispatch('reloadSessionStatsEvent', notify: false); + $this->dispatch('reloadRedisStatsEvent', notify: false); + $this->dispatch('reloadMemcachedStatsEvent', notify: false); + } + + public function render() + { + return view('admin::livewire.cache.cache-functions'); + } +} diff --git a/src/modules/App/Livewire/Cache/CacheStats.php b/src/modules/App/Livewire/Cache/CacheStats.php new file mode 100644 index 0000000..77f32f6 --- /dev/null +++ b/src/modules/App/Livewire/Cache/CacheStats.php @@ -0,0 +1,65 @@ + 'reloadCacheStats']; + + public function mount(CacheConfigService $cacheConfigService) + { + $this->cacheConfig = $cacheConfigService->getConfig(); + + $this->reloadCacheStats(false); + } + + public function reloadCacheStats($notify = true) + { + $cacheManagerService = new CacheManagerService(); + + $this->cacheStats = $cacheManagerService->getCacheStats(); + + if ($notify) { + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $this->cacheStats['status'], + message: $this->cacheStats['message'] + ); + } + } + + public function clearCache() + { + $cacheManagerService = new CacheManagerService(); + + $message = $cacheManagerService->clearCache(); + + $this->reloadCacheStats(false); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $message['status'], + message: $message['message'], + ); + + $this->dispatch('reloadRedisStatsEvent', notify: false); + $this->dispatch('reloadMemcachedStatsEvent', notify: false); + $this->dispatch('reloadCacheFunctionsStatsEvent', notify: false); + } + + public function render() + { + return view('admin::livewire.cache.cache-stats'); + } +} diff --git a/src/modules/App/Livewire/Cache/MemcachedStats.php b/src/modules/App/Livewire/Cache/MemcachedStats.php new file mode 100644 index 0000000..9c18a5c --- /dev/null +++ b/src/modules/App/Livewire/Cache/MemcachedStats.php @@ -0,0 +1,64 @@ + 'reloadCacheStats']; + + public function mount() + { + $this->reloadCacheStats(false); + } + + public function reloadCacheStats($notify = true) + { + $cacheManagerService = new CacheManagerService($this->driver); + + $memcachedStats = $cacheManagerService->getMemcachedStats(); + + $this->memcachedStats = $memcachedStats['info']; + + if ($notify) { + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $memcachedStats['status'], + message: $memcachedStats['message'] + ); + } + } + + public function clearCache() + { + $cacheManagerService = new CacheManagerService($this->driver); + + $message = $cacheManagerService->clearCache(); + + $this->reloadCacheStats(false); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $message['status'], + message: $message['message'], + ); + + $this->dispatch('reloadCacheStatsEvent', notify: false); + $this->dispatch('reloadSessionStatsEvent', notify: false); + $this->dispatch('reloadCacheFunctionsStatsEvent', notify: false); + } + + public function render() + { + return view('admin::livewire.cache.memcached-stats'); + } +} diff --git a/src/modules/App/Livewire/Cache/RedisStats.php b/src/modules/App/Livewire/Cache/RedisStats.php new file mode 100644 index 0000000..0295a01 --- /dev/null +++ b/src/modules/App/Livewire/Cache/RedisStats.php @@ -0,0 +1,64 @@ + 'reloadCacheStats']; + + public function mount() + { + $this->reloadCacheStats(false); + } + + public function reloadCacheStats($notify = true) + { + $cacheManagerService = new CacheManagerService($this->driver); + + $redisStats = $cacheManagerService->getRedisStats(); + + $this->redisStats = $redisStats['info']; + + if ($notify) { + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $redisStats['status'], + message: $redisStats['message'] + ); + } + } + + public function clearCache() + { + $cacheManagerService = new CacheManagerService($this->driver); + + $message = $cacheManagerService->clearCache(); + + $this->reloadCacheStats(false); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $message['status'], + message: $message['message'], + ); + + $this->dispatch('reloadCacheStatsEvent', notify: false); + $this->dispatch('reloadSessionStatsEvent', notify: false); + $this->dispatch('reloadCacheFunctionsStatsEvent', notify: false); + } + + public function render() + { + return view('admin::livewire.cache.redis-stats'); + } +} diff --git a/src/modules/App/Livewire/Cache/SessionStats.php b/src/modules/App/Livewire/Cache/SessionStats.php new file mode 100644 index 0000000..45c4515 --- /dev/null +++ b/src/modules/App/Livewire/Cache/SessionStats.php @@ -0,0 +1,63 @@ + 'reloadSessionStats']; + + public function mount(CacheConfigService $cacheConfigService) + { + $this->cacheConfig = $cacheConfigService->getConfig(); + $this->reloadSessionStats(false); + } + + public function reloadSessionStats($notify = true) + { + $sessionManagerService = new SessionManagerService(); + + $this->sessionStats = $sessionManagerService->getSessionStats(); + + if ($notify) { + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $this->sessionStats['status'], + message: $this->sessionStats['message'] + ); + } + } + + public function clearSessions() + { + $sessionManagerService = new SessionManagerService(); + + $message = $sessionManagerService->clearSessions(); + + $this->reloadSessionStats(false); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: $message['status'], + message: $message['message'], + ); + + $this->dispatch('reloadRedisStatsEvent', notify: false); + $this->dispatch('reloadMemcachedStatsEvent', notify: false); + } + + public function render() + { + return view('admin::livewire.cache.session-stats'); + } +} diff --git a/src/modules/App/Livewire/Rbac/PermissionsIndex.php b/src/modules/App/Livewire/Rbac/PermissionsIndex.php new file mode 100644 index 0000000..5312adf --- /dev/null +++ b/src/modules/App/Livewire/Rbac/PermissionsIndex.php @@ -0,0 +1,28 @@ +roles_html_select = ""; + + return view('admin::livewire.rbac.permissions-index'); + } +} diff --git a/src/modules/App/Livewire/Rbac/RoleCards.php b/src/modules/App/Livewire/Rbac/RoleCards.php new file mode 100644 index 0000000..60fb779 --- /dev/null +++ b/src/modules/App/Livewire/Rbac/RoleCards.php @@ -0,0 +1,182 @@ +loadRolesAndPermissions(); + $this->dispatch('reloadForm'); + } + + private function loadRolesAndPermissions() + { + $this->roles = Auth::user()->hasRole('SuperAdmin') ? + Role::all() : + Role::where('name', '!=', 'SuperAdmin')->get(); + + // Obtener todos los permisos + $permissions = Permission::all()->map(function ($permission) { + $name = $permission->name; + $action = substr($name, strrpos($name, '.') + 1); + + return [ + 'group_name' => $permission->group_name, + 'sub_group_name' => $permission->sub_group_name, + $action => $name // Agregar la acción directamente al array + ]; + })->groupBy('group_name'); // Agrupar los permisos por grupo + + + // Procesar los permisos agrupados para cargarlos en el componente + $permissionsInputs = []; + + $this->permissions = $permissions->map(function ($groupPermissions) use (&$permissionsInputs) { + $permission = [ + 'group_name' => $groupPermissions[0]['group_name'], // Tomar el grupo del primer permiso del grupo + 'sub_group_name' => $groupPermissions[0]['sub_group_name'], // Tomar la descripción del primer permiso del grupo + ]; + + // Agregar todas las acciones al permissionsInputs y al permission + foreach ($groupPermissions as $permissionData) { + foreach ($permissionData as $key => $value) { + if ($key !== 'sub_group_name' && $key !== 'group_name') { + $permissionsInputs[str_replace('.', '_', $value)] = false; + $permission[$key] = $value; + } + } + } + + return $permission; + }); + + $this->permissionsInputs = $permissionsInputs; + } + + public function loadRoleData($action, $roleId = false) + { + $this->resetForm(); + + $this->title = 'Agregar un nuevo rol'; + $this->btn_submit_text = 'Crear nuevo rol'; + + if ($roleId) { + $role = Role::findOrFail($roleId); + + switch ($action) { + case 'view': + $this->title = $role->name; + $this->name = $role->name; + $this->style = $role->style; + $this->dispatch('deshabilitarFormulario'); + break; + + case 'update': + $this->title = 'Editar rol'; + $this->btn_submit_text = 'Guardar cambios'; + $this->roleId = $roleId; + $this->name = $role->name; + $this->style = $role->style; + $this->dispatch('habilitarFormulario'); + break; + + case 'clone': + $this->style = $role->style; + $this->dispatch('habilitarFormulario'); + break; + + default: + break; + } + + foreach ($role->permissions as $permission) { + $this->permissionsInputs[str_replace('.', '_', $permission->name)] = true; + } + } + + $this->dispatch('reloadForm'); + } + + public function loadDestroyRoleData() {} + + public function saveRole() + { + $permissions = []; + + foreach ($this->permissionsInputs as $permission => $value) { + if ($value === true) + $permissions[] = str_replace('_', '.', $permission); + } + + if ($this->roleId) { + $role = Role::find($this->roleId); + + $role->name = $this->name; + $role->style = $this->style; + + $role->save(); + + $role->syncPermissions($permissions); + } else { + $role = Role::create([ + 'name' => $this->name, + 'style' => $this->style, + ]); + + $role->syncPermissions($permissions); + } + + $this->loadRolesAndPermissions(); + + $this->dispatch('modalHide'); + $this->dispatch('reloadForm'); + } + + public function deleteRole() + { + $role = Role::find($this->destroyRoleId); + + if ($role) + $role->delete(); + + $this->loadRolesAndPermissions(); + + $this->dispatch('modalDeleteHide'); + $this->dispatch('reloadForm'); + } + + private function resetForm() + { + $this->roleId = ''; + $this->name = ''; + $this->style = ''; + + foreach ($this->permissionsInputs as $key => $permission) { + $this->permissionsInputs[$key] = false; + } + } + + public function render() + { + return view('admin::livewire.rbac.role-cards'); + } +} diff --git a/src/modules/App/Livewire/Users/UserCount.php b/src/modules/App/Livewire/Users/UserCount.php new file mode 100644 index 0000000..449589f --- /dev/null +++ b/src/modules/App/Livewire/Users/UserCount.php @@ -0,0 +1,31 @@ + 'updateCounts']; + + public function mount() + { + $this->updateCounts(); + } + + public function updateCounts() + { + $this->total = User::count(); + $this->enabled = User::where('status', User::STATUS_ENABLED)->count(); + $this->disabled = User::where('status', User::STATUS_DISABLED)->count(); + } + + public function render() + { + return view('admin::livewire.users.user-count'); + } +} diff --git a/src/modules/App/Livewire/Users/UserTable.php b/src/modules/App/Livewire/Users/UserTable.php new file mode 100644 index 0000000..410952f --- /dev/null +++ b/src/modules/App/Livewire/Users/UserTable.php @@ -0,0 +1,115 @@ +modalTitle = 'Crear usuario nuevo'; + $this->btnSubmitTxt = 'Crear usuario'; + + $this->statuses = [ + User::STATUS_ENABLED => ['title' => 'Activo', 'class' => 'badge bg-label-' . User::$statusListClass[User::STATUS_ENABLED]], + User::STATUS_DISABLED => ['title' => 'Deshabilitado', 'class' => 'badge bg-label-' . User::$statusListClass[User::STATUS_DISABLED]], + User::STATUS_REMOVED => ['title' => 'Eliminado', 'class' => 'badge bg-label-' . User::$statusListClass[User::STATUS_REMOVED]], + ]; + + $roles = Role::whereNotIn('name', ['Patient', 'Doctor'])->get(); + + $this->roles_html_select = ""; + + $this->status_options = [ + User::STATUS_ENABLED => User::$statusList[User::STATUS_ENABLED], + User::STATUS_DISABLED => User::$statusList[User::STATUS_DISABLED], + ]; + } + + public function countUsers() + { + $this->total = User::count(); + $this->enabled = User::where('status', User::STATUS_ENABLED)->count(); + $this->disabled = User::where('status', User::STATUS_DISABLED)->count(); + } + + + public function edit($id) + { + $user = User::findOrFail($id); + + $this->indexAlert = ''; + $this->modalTitle = 'Editar usuario: ' . $id; + $this->btnSubmitTxt = 'Guardar cambios'; + + $this->userId = $user->id; + $this->name = $user->name; + $this->email = $user->email; + $this->password = ''; + $this->roles = $user->roles->pluck('name')->toArray(); + $this->src_photo = $user->profile_photo_url; + $this->status = $user->status; + + $this->dispatch('openModal'); + } + + public function delete($id) + { + $user = User::find($id); + + if ($user) { + // Eliminar la imagen de perfil si existe + if ($user->profile_photo_path) + Storage::disk('public')->delete($user->profile_photo_path); + + // Eliminar el usuario + $user->delete(); + + $this->indexAlert = ''; + + $this->dispatch('refreshUserCount'); + $this->dispatch('afterDelete'); + } else { + $this->indexAlert = ''; + } + } + + public function render() + { + return view('admin::livewire.users.user-table', [ + 'users' => User::paginate(10), + ]); + } +} \ No newline at end of file diff --git a/src/modules/App/Livewire/WebsiteSettings/AnalyticsSettings.php b/src/modules/App/Livewire/WebsiteSettings/AnalyticsSettings.php new file mode 100644 index 0000000..6a7d193 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/AnalyticsSettings.php @@ -0,0 +1,64 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $WebsiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $WebsiteTemplateService->getWebsiteVars('google'); + + $this->google_analytics_enabled = $settings['analytics']['enabled']; + $this->google_analytics_id = $settings['analytics']['id']; + } + + public function save() + { + if ($this->google_analytics_enabled) { + $this->validate([ + 'google_analytics_id' => 'required|string|min:12|max:30', + ]); + } + + $websiteSettingsService = app(WebsiteSettingsService::class); + + // Guardar título del App en configuraciones + $websiteSettingsService->updateSetting('google_analytics_enabled', $this->google_analytics_enabled); + $websiteSettingsService->updateSetting('google_analytics_id', $this->google_analytics_id); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.analytics-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/ChatSettings.php b/src/modules/App/Livewire/WebsiteSettings/ChatSettings.php new file mode 100644 index 0000000..356a0d6 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/ChatSettings.php @@ -0,0 +1,68 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars('chat'); + + $this->chat_provider = $settings['provider']; + $this->chat_whatsapp_number = $settings['whatsapp_number']; + $this->chat_whatsapp_message = $settings['whatsapp_message']; + } + + public function save() + { + if ($this->chat_provider == 'whatsapp') { + $this->validate([ + 'chat_whatsapp_number' => 'required|string|max:20', + 'chat_whatsapp_message' => 'required|string|max:255', + ]); + } + + $websiteSettingsService = app(WebsiteSettingsService::class); + + // Guardar título del App en configuraciones + $websiteSettingsService->updateSetting('chat_provider', $this->chat_provider); + $websiteSettingsService->updateSetting('chat_whatsapp_number', preg_replace('/\D/', '', $this->chat_whatsapp_number)); + $websiteSettingsService->updateSetting('chat_whatsapp_message', $this->chat_whatsapp_message); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.chat-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/ContactFormSettings.php b/src/modules/App/Livewire/WebsiteSettings/ContactFormSettings.php new file mode 100644 index 0000000..3980fa6 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/ContactFormSettings.php @@ -0,0 +1,67 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->contact_form_email = $settings['contact']['form']['email']; + $this->contact_form_email_cc = $settings['contact']['form']['email_cc']; + $this->contact_form_subject = $settings['contact']['form']['subject']; + } + + public function save() + { + $this->validate([ + 'contact_form_email' => 'required|email', + 'contact_form_email_cc' => 'nullable|email', + 'contact_form_subject' => 'required|string' + ]); + + $websiteSettingsService = app(WebsiteSettingsService::class); + + // Guardar título del App en configuraciones + $websiteSettingsService->updateSetting('contact_form_email', $this->contact_form_email); + $websiteSettingsService->updateSetting('contact_form_email_cc', $this->contact_form_email_cc); + $websiteSettingsService->updateSetting('contact_form_subject', $this->contact_form_subject); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.contact-form-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/ContactInfoSettings.php b/src/modules/App/Livewire/WebsiteSettings/ContactInfoSettings.php new file mode 100644 index 0000000..e0972ca --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/ContactInfoSettings.php @@ -0,0 +1,67 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->contact_phone_number = $settings['contact']['phone_number']; + $this->contact_phone_number_ext = $settings['contact']['phone_number_ext']; + $this->contact_email = $settings['contact']['email']; + } + + public function save() + { + $this->validate([ + 'contact_phone_number' => ['nullable', 'string', 'max:20'], + 'contact_phone_number_ext' => ['nullable', 'string', 'max:10'], + 'contact_email' => ['nullable', 'email'] + ]); + + $websiteSettingsService = app(WebsiteSettingsService::class); + + // Guardar título del App en configuraciones + $websiteSettingsService->updateSetting('contact_phone_number', $this->contact_phone_number); + $websiteSettingsService->updateSetting('contact_phone_number_ext', $this->contact_phone_number_ext); + $websiteSettingsService->updateSetting('contact_email', $this->contact_email); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.contact-info-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/FaviconSettings.php b/src/modules/App/Livewire/WebsiteSettings/FaviconSettings.php new file mode 100644 index 0000000..5747cb2 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/FaviconSettings.php @@ -0,0 +1,72 @@ +loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + $this->upload_image_favicon = null; + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->website_favicon_16x16 = $settings['favicon']['16x16']; + $this->website_favicon_76x76 = $settings['favicon']['76x76']; + $this->website_favicon_120x120 = $settings['favicon']['120x120']; + $this->website_favicon_152x152 = $settings['favicon']['152x152']; + $this->website_favicon_180x180 = $settings['favicon']['180x180']; + $this->website_favicon_192x192 = $settings['favicon']['192x192']; + } + + public function save() + { + $this->validate([ + 'upload_image_favicon' => 'required|image|mimes:jpeg,png,jpg,svg,webp|max:20480', + ]); + + // Procesar favicon si se ha cargado una imagen + $websiteSettingsService = app(WebsiteSettingsService::class); + $websiteSettingsService->processAndSaveFavicon($this->upload_image_favicon); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.favicon-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/ImageLogoSettings.php b/src/modules/App/Livewire/WebsiteSettings/ImageLogoSettings.php new file mode 100644 index 0000000..489a791 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/ImageLogoSettings.php @@ -0,0 +1,75 @@ +loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + $this->upload_image_logo = null; + $this->upload_image_logo_dark = null; + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->website_image_logo = $settings['image_logo']['large']; + $this->website_image_logo_dark = $settings['image_logo']['large_dark']; + } + + public function save() + { + $this->validate([ + 'upload_image_logo' => 'nullable|image|mimes:jpeg,png,jpg,svg,webp|max:20480', + 'upload_image_logo_dark' => 'nullable|image|mimes:jpeg,png,jpg,svg,webp|max:20480', + ]); + + $websiteSettingsService = app(WebsiteSettingsService::class); + + // Procesar favicon si se ha cargado una imagen + if ($this->upload_image_logo) { + $websiteSettingsService->processAndSaveImageLogo($this->upload_image_logo); + } + + if ($this->upload_image_logo_dark) { + $websiteSettingsService->processAndSaveImageLogo($this->upload_image_logo_dark, 'dark'); + } + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.image-logo-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/LegalSettings.php b/src/modules/App/Livewire/WebsiteSettings/LegalSettings.php new file mode 100644 index 0000000..0f82f39 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/LegalSettings.php @@ -0,0 +1,108 @@ + 'save', + ]; + + public function mount() + { + $this->loadSettings(); + + // Seleccionar la primera sección por defecto + $this->currentSection = array_key_first($this->legalVars); + } + + function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + switch ($this->currentSection) { + case 'legal_terminos_y_condiciones': + $this->legalVars['legal_terminos_y_condiciones'] = $websiteTemplateService->getLegalVars('legal_terminos_y_condiciones'); + break; + + case 'legal_aviso_de_privacidad': + $this->legalVars['legal_aviso_de_privacidad'] = $websiteTemplateService->getLegalVars('legal_aviso_de_privacidad'); + break; + + case 'legal_politica_de_devoluciones': + $this->legalVars['legal_politica_de_devoluciones'] = $websiteTemplateService->getLegalVars('legal_politica_de_devoluciones'); + break; + + case 'legal_politica_de_envios': + $this->legalVars['legal_politica_de_envios'] = $websiteTemplateService->getLegalVars('legal_politica_de_envios'); + break; + + case 'legal_politica_de_cookies': + $this->legalVars['legal_politica_de_cookies'] = $websiteTemplateService->getLegalVars('legal_politica_de_cookies'); + break; + + case 'legal_autorizaciones_y_licencias': + $this->legalVars['legal_autorizaciones_y_licencias'] = $websiteTemplateService->getLegalVars('legal_autorizaciones_y_licencias'); + break; + + case 'legal_informacion_comercial': + $this->legalVars['legal_informacion_comercial'] = $websiteTemplateService->getLegalVars('legal_informacion_comercial'); + break; + + case 'legal_consentimiento_para_el_login_de_terceros': + $this->legalVars['legal_consentimiento_para_el_login_de_terceros'] = $websiteTemplateService->getLegalVars('legal_consentimiento_para_el_login_de_terceros'); + break; + + case 'legal_leyendas_de_responsabilidad': + $this->legalVars['legal_leyendas_de_responsabilidad'] = $websiteTemplateService->getLegalVars('legal_leyendas_de_responsabilidad'); + break; + + default: + $this->legalVars = $websiteTemplateService->getLegalVars(); + } + } + + public function rules() + { + $rules = []; + + if ($this->legalVars[$this->currentSection]['enabled']) { + $rules["legalVars.{$this->currentSection}.content"] = ['required', 'string', new NotEmptyHtml]; + } + + $rules["legalVars.{$this->currentSection}.enabled"] = 'boolean'; + + return $rules; + } + + public function save() + { + $this->validate($this->rules()); + + $websiteSettingsService = app(WebsiteSettingsService::class); + $websiteSettingsService->updateSetting($this->currentSection . '_enabled', $this->legalVars[$this->currentSection]['enabled']); + $websiteSettingsService->updateSetting($this->currentSection . '_content', $this->legalVars[$this->currentSection]['content']); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.legal-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/LocationSettings.php b/src/modules/App/Livewire/WebsiteSettings/LocationSettings.php new file mode 100644 index 0000000..04f7d38 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/LocationSettings.php @@ -0,0 +1,71 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->contact_direccion = $settings['contact']['direccion']; + $this->contact_horario = $settings['contact']['horario']; + $this->contact_location_lat = $settings['contact']['location']['lat']; + $this->contact_location_lng = $settings['contact']['location']['lng']; + } + + public function save() + { + $this->validate([ + 'contact_direccion' => ['nullable', 'string', 'max:255'], + 'contact_horario' => ['nullable', 'string', 'max:255'], + 'contact_location_lat' => ['nullable', 'numeric'], + 'contact_location_lng' => ['nullable', 'numeric'], + ]); + + $websiteSettingsService = app(WebsiteSettingsService::class); + + // Guardar título del App en configuraciones + $websiteSettingsService->updateSetting('contact_direccion', $this->contact_direccion); + $websiteSettingsService->updateSetting('contact_horario', $this->contact_horario); + $websiteSettingsService->updateSetting('contact_location_lat', $this->contact_location_lat); + $websiteSettingsService->updateSetting('contact_location_lng', $this->contact_location_lng); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.location-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/SocialSettings.php b/src/modules/App/Livewire/WebsiteSettings/SocialSettings.php new file mode 100644 index 0000000..1a56b2b --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/SocialSettings.php @@ -0,0 +1,100 @@ + 'save']; + + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getSocialVars(); + + $this->social_whatsapp = $settings['whatsapp']; + $this->social_whatsapp_message = $settings['whatsapp_message']; + $this->social_facebook = $settings['facebook']; + $this->social_instagram = $settings['instagram']; + $this->social_linkedin = $settings['linkedin']; + $this->social_tiktok = $settings['tiktok']; + $this->social_x_twitter = $settings['x_twitter']; + $this->social_google = $settings['google']; + $this->social_pinterest = $settings['pinterest']; + $this->social_youtube = $settings['youtube']; + $this->social_vimeo = $settings['vimeo']; + } + + public function save() + { + $this->validate([ + 'social_whatsapp' => 'string|max:20', + 'social_whatsapp_message' => 'string|max:255', + 'social_facebook' => 'url', + 'social_instagram' => 'url', + 'social_linkedin' => 'url', + 'social_tiktok' => 'url', + 'social_x_twitter' => 'url', + 'social_google' => 'url', + 'social_pinterest' => 'url', + 'social_youtube' => 'url', + 'social_vimeo' => 'url', + ]); + + $websiteSettingsService = app(websiteSettingsService::class); + + // Guardar título del App en configuraciones + $websiteSettingsService->updateSetting('social_whatsapp', preg_replace('/\D/', '', $this->social_whatsapp)); + $websiteSettingsService->updateSetting('social_whatsapp_message', $this->social_whatsapp_message); + $websiteSettingsService->updateSetting('social_facebook', $this->social_facebook); + $websiteSettingsService->updateSetting('social_instagram', $this->social_instagram); + $websiteSettingsService->updateSetting('social_linkedin', $this->social_linkedin); + $websiteSettingsService->updateSetting('social_tiktok', $this->social_tiktok); + $websiteSettingsService->updateSetting('social_x_twitter', $this->social_x_twitter); + $websiteSettingsService->updateSetting('social_google', $this->social_google); + $websiteSettingsService->updateSetting('social_pinterest', $this->social_pinterest); + $websiteSettingsService->updateSetting('social_youtube', $this->social_youtube); + $websiteSettingsService->updateSetting('social_vimeo', $this->social_vimeo); + + app(WebsiteTemplateService::class)->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.social-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/TemplateSettings.php b/src/modules/App/Livewire/WebsiteSettings/TemplateSettings.php new file mode 100644 index 0000000..80c0230 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/TemplateSettings.php @@ -0,0 +1,61 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->website_tpl_style_switcher = $settings['template']['style_switcher']; + $this->website_tpl_footer_text = $settings['template']['footer_text']; + } + + public function save() + { + $this->validate([ + 'website_tpl_footer_text' => 'nullable|string|max:50', + ]); + + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Guardar título del App en configuraciones + $websiteTemplateService->updateSetting('website_tpl_style_switcher', $this->website_tpl_style_switcher); + $websiteTemplateService->updateSetting('website_tpl_footer_text', $this->website_tpl_footer_text); + + $websiteTemplateService->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.template-settings'); + } +} diff --git a/src/modules/App/Livewire/WebsiteSettings/WebsiteSettings.php b/src/modules/App/Livewire/WebsiteSettings/WebsiteSettings.php new file mode 100644 index 0000000..4921953 --- /dev/null +++ b/src/modules/App/Livewire/WebsiteSettings/WebsiteSettings.php @@ -0,0 +1,62 @@ + 'save']; + + public function mount() + { + $this->loadSettings(); + } + + public function loadSettings() + { + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Obtener los valores de las configuraciones de la base de datos + $settings = $websiteTemplateService->getWebsiteVars(); + + $this->website_title = $settings['title']; + $this->website_description = $settings['description']; + } + + public function save() + { + $this->validate([ + 'website_title' => 'string|required|max:50', + 'website_description' => 'string|max:160', + ]); + + $websiteTemplateService = app(WebsiteTemplateService::class); + + // Guardar título del App en configuraciones + $websiteTemplateService->updateSetting('website_title', $this->website_title); + $websiteTemplateService->updateSetting('website_description', $this->website_description); + + $websiteTemplateService->clearWebsiteVarsCache(); + + $this->loadSettings(); + + $this->dispatch( + 'notification', + target: $this->targetNotify, + type: 'success', + message: 'Se han guardado los cambios en las configuraciones.' + ); + } + + public function render() + { + return view('admin::livewire.website-settings.website-settings'); + } +} diff --git a/src/modules/App/Models/ContactableAddress.php b/src/modules/App/Models/ContactableAddress.php new file mode 100644 index 0000000..18926f0 --- /dev/null +++ b/src/modules/App/Models/ContactableAddress.php @@ -0,0 +1,71 @@ + 'float', + 'lng' => 'float', + 'preference_level' => 'integer', + ]; + + /** + * Polymorphic relationship to the parent model. + */ + public function contactable() + { + return $this->morphTo(); + } + + /** + * Relationships to SAT tables. + */ + public function estado() + { + return $this->belongsTo(Estado::class, 'c_estado', 'c_estado'); + } + + public function municipio() + { + return $this->belongsTo(Municipio::class, 'c_municipio', 'c_municipio'); + } + + public function codigoPostal() + { + return $this->belongsTo(CodigoPostal::class, 'c_codigo_postal', 'c_codigo_postal'); + } + + public function colonia() + { + return $this->belongsTo(Colonia::class, 'c_colonia', 'c_colonia'); + } +} diff --git a/src/modules/App/Models/ContactableItem.php b/src/modules/App/Models/ContactableItem.php new file mode 100644 index 0000000..3a18311 --- /dev/null +++ b/src/modules/App/Models/ContactableItem.php @@ -0,0 +1,35 @@ + 'boolean', + 'preference_level' => 'integer', + ]; + + /** + * Polymorphic relationship to the parent model. + */ + public function contactable() + { + return $this->morphTo(); + } +} diff --git a/src/modules/App/Models/MediaItem.php b/src/modules/App/Models/MediaItem.php new file mode 100644 index 0000000..8780b27 --- /dev/null +++ b/src/modules/App/Models/MediaItem.php @@ -0,0 +1,62 @@ + 'Card', + self::TYPE_BANNER => 'Banner', + self::TYPE_COVER => 'Cover', + self::TYPE_GALLERY => 'Gallery', + self::TYPE_BANNER_HOME => 'Banner Home', + self::TYPE_CARD2 => 'Card 2', + self::TYPE_BANNER2 => 'Banner 2', + self::TYPE_COVER2 => 'Cover 2', + ]; + + /** + * Get the parent imageable model (user or post). + */ + public function imageable() + { + return $this->morphTo(); + } +} diff --git a/src/modules/App/Models/Sat/Banco.php b/src/modules/App/Models/Sat/Banco.php new file mode 100644 index 0000000..1244508 --- /dev/null +++ b/src/modules/App/Models/Sat/Banco.php @@ -0,0 +1,50 @@ + 'Habilitado', + self::STATUS_DISABLED => 'Deshabilitado', + ]; + + /** + * List of names for each status. + * @var array + */ + public static $statusListClass = [ + self::STATUS_ENABLED => 'success', + self::STATUS_DISABLED => 'warning', + ]; + + /** + * The table associated with the model. + * + * @var string + */ + protected $table = 'sat_banco'; + + /** + * The attributes that are mass assignable. + * + * @var string[] + */ + protected $fillable = [ + 'c_banco', + 'descripcion', + 'razon_social', + 'rfc', + 'status', + ]; +} diff --git a/src/modules/App/Models/Sat/ClaveProdServ.php b/src/modules/App/Models/Sat/ClaveProdServ.php new file mode 100644 index 0000000..707a339 --- /dev/null +++ b/src/modules/App/Models/Sat/ClaveProdServ.php @@ -0,0 +1,33 @@ + 'datetime', + 'fecha_de_fin_de_vigencia' => 'datetime', + ]; +} diff --git a/src/modules/App/Models/Sat/CodigoPostal.php b/src/modules/App/Models/Sat/CodigoPostal.php new file mode 100644 index 0000000..94970bc --- /dev/null +++ b/src/modules/App/Models/Sat/CodigoPostal.php @@ -0,0 +1,77 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; + + /** + * Get the estado associated with the CodigoPostal. + */ + public function estado(): HasOne + { + return $this->hasOne(Estado::class, 'c_estado', 'c_estado'); + } + + /** + * Get the municipio associated with the CodigoPostal. + */ + public function municipio(): HasOne + { + return $this->hasOne(Municipio::class, 'c_municipio', 'c_municipio') + ->where('c_estado', $this->c_estado); + } + + /** + * Get the localidad associated with the CodigoPostal. + */ + public function localidad(): HasOne + { + return $this->hasOne(Localidad::class, 'c_estado', 'c_estado') + ->where('c_localidad', $this->c_localidad); + } + + /** + * Get the localidad associated with the CodigoPostal. + */ + public function colonias(): HasMany + { + return $this->hasMany(Colonia::class, 'c_codigo_postal', 'c_codigo_postal'); + } +} diff --git a/src/modules/App/Models/Sat/Colonia.php b/src/modules/App/Models/Sat/Colonia.php new file mode 100644 index 0000000..516a636 --- /dev/null +++ b/src/modules/App/Models/Sat/Colonia.php @@ -0,0 +1,39 @@ +where('c_codigo_postal', $c_codigo_postal) + ->when($c_colonia, function ($query) use ($c_colonia) { + $query->where('c_colonia', $c_colonia); + }) + ->orderBy('nombre_del_asentamiento') + ->pluck('nombre_del_asentamiento', 'c_colonia'); + } +} diff --git a/src/modules/App/Models/Sat/Deduccion.php b/src/modules/App/Models/Sat/Deduccion.php new file mode 100644 index 0000000..40b9671 --- /dev/null +++ b/src/modules/App/Models/Sat/Deduccion.php @@ -0,0 +1,37 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; +} diff --git a/src/modules/App/Models/Sat/Estado.php b/src/modules/App/Models/Sat/Estado.php new file mode 100644 index 0000000..831620f --- /dev/null +++ b/src/modules/App/Models/Sat/Estado.php @@ -0,0 +1,47 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; + + public static function selectList($pais = 'MEX') + { + return self::select('c_estado', 'nombre_del_estado') + ->where('c_pais', $pais) + ->orderBy('nombre_del_estado') + ->pluck('nombre_del_estado', 'c_estado'); + } +} diff --git a/src/modules/App/Models/Sat/FormaPago.php b/src/modules/App/Models/Sat/FormaPago.php new file mode 100644 index 0000000..dd86803 --- /dev/null +++ b/src/modules/App/Models/Sat/FormaPago.php @@ -0,0 +1,53 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; + + public static function selectList() + { + return self::selectRaw('c_forma_pago, CONCAT(c_forma_pago, " - ", descripcion) as value') + ->pluck('value', 'c_forma_pago'); + } +} diff --git a/src/modules/App/Models/Sat/Impuestos.php b/src/modules/App/Models/Sat/Impuestos.php new file mode 100644 index 0000000..21cc104 --- /dev/null +++ b/src/modules/App/Models/Sat/Impuestos.php @@ -0,0 +1,17 @@ + 'ISR', + self::IMPUESTOS_IVA => 'IVA', + self::IMPUESTOS_IEPS => 'IEPS', + ]; +} diff --git a/src/modules/App/Models/Sat/Localidad.php b/src/modules/App/Models/Sat/Localidad.php new file mode 100644 index 0000000..62d162b --- /dev/null +++ b/src/modules/App/Models/Sat/Localidad.php @@ -0,0 +1,39 @@ + 'datetime', + 'fecha_de_fin_de_vigencia' => 'datetime', + ]; +} diff --git a/src/modules/App/Models/Sat/MetodoPago.php b/src/modules/App/Models/Sat/MetodoPago.php new file mode 100644 index 0000000..9c412db --- /dev/null +++ b/src/modules/App/Models/Sat/MetodoPago.php @@ -0,0 +1,14 @@ + 'Pago en una sola exhibición', + self::METODO_PAGO_PPD => 'Pago en parcialidades o diferido', + ]; +} diff --git a/src/modules/App/Models/Sat/Moneda.php b/src/modules/App/Models/Sat/Moneda.php new file mode 100644 index 0000000..90ca936 --- /dev/null +++ b/src/modules/App/Models/Sat/Moneda.php @@ -0,0 +1,46 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; + + + public static function selectList() + { + return self::selectRaw('c_moneda, CONCAT_WS(" ", c_moneda, "-", descripcion) as text') + ->pluck('text', 'c_moneda'); + } +} diff --git a/src/modules/App/Models/Sat/Municipio.php b/src/modules/App/Models/Sat/Municipio.php new file mode 100644 index 0000000..f1261bb --- /dev/null +++ b/src/modules/App/Models/Sat/Municipio.php @@ -0,0 +1,51 @@ + 'datetime', + 'fecha_de_fin_de_vigencia' => 'datetime', + ]; + + + public static function selectList($c_estado, $c_municipio = false) + { + return self::select('c_municipio', 'descripcion') + ->where('c_estado', $c_estado) + ->when($c_municipio, function ($query) use ($c_municipio) { + $query->where('c_municipio', $c_municipio); + }) + ->orderBy('descripcion') + ->pluck('descripcion', 'c_municipio'); + } +} diff --git a/src/modules/App/Models/Sat/ObjetoImp.php b/src/modules/App/Models/Sat/ObjetoImp.php new file mode 100644 index 0000000..a69f105 --- /dev/null +++ b/src/modules/App/Models/Sat/ObjetoImp.php @@ -0,0 +1,21 @@ + 'No objeto de impuesto.', + self::OBJETO_IMP_SI_OBJETO => 'Sí objeto de impuesto.', + self::OBJETO_IMP_SI_OBJETO_NO_DESGLOSE => 'Sí objeto del impuesto y no obligado al desglose.', + self::OBJETO_IMP_SI_OBJETO_NO_CAUSA => 'Sí objeto del impuesto y no causa impuesto.', + self::OBJETO_IMP_SI_OBJETO_IVA_CREDITO => 'Sí objeto del impuesto, IVA crédito PODEBI.', + ]; +} diff --git a/src/modules/App/Models/Sat/Pais.php b/src/modules/App/Models/Sat/Pais.php new file mode 100644 index 0000000..9869654 --- /dev/null +++ b/src/modules/App/Models/Sat/Pais.php @@ -0,0 +1,39 @@ +get() + ->mapWithKeys(function ($item) { + return [$item->c_pais => $item->c_pais . ' - ' . $item->descripcion]; + }); + } +} diff --git a/src/modules/App/Models/Sat/Percepcion.php b/src/modules/App/Models/Sat/Percepcion.php new file mode 100644 index 0000000..cc2ccfa --- /dev/null +++ b/src/modules/App/Models/Sat/Percepcion.php @@ -0,0 +1,37 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; +} diff --git a/src/modules/App/Models/Sat/Periodicidad.php b/src/modules/App/Models/Sat/Periodicidad.php new file mode 100644 index 0000000..ef7b948 --- /dev/null +++ b/src/modules/App/Models/Sat/Periodicidad.php @@ -0,0 +1,21 @@ + 'Diario', + self::PERIODICIDAD_SEMANAL => 'Semanal', + self::PERIODICIDAD_QUINCENAL => 'Quincenal', + self::PERIODICIDAD_MENSUAL => 'Mensual', + self::PERIODICIDAD_BIMESTRAL => 'Bimestral', + ]; +} diff --git a/src/modules/App/Models/Sat/PeriodicidadPago.php b/src/modules/App/Models/Sat/PeriodicidadPago.php new file mode 100644 index 0000000..945391a --- /dev/null +++ b/src/modules/App/Models/Sat/PeriodicidadPago.php @@ -0,0 +1,33 @@ + 'Diario', + self::PERIODICIDAD_SEMANAL => 'Semanal', + self::PERIODICIDAD_CATORCENAL => 'Catorcenal', + self::PERIODICIDAD_QUINCENAL => 'Quincenal', + self::PERIODICIDAD_MENSUAL => 'Mensual', + self::PERIODICIDAD_BIMESTRAL => 'Bimestral', + self::PERIODICIDAD_UNIDAD_OBRA => 'Unidad obra', + self::PERIODICIDAD_COMISION => 'Comisión', + self::PERIODICIDAD_PRECIO_ALZADO => 'Precio alzado', + self::PERIODICIDAD_DECENAL => 'Decenal', + self::PERIODICIDAD_OTRA => 'Otra Periodicidad' + ]; +} diff --git a/src/modules/App/Models/Sat/RegimenFiscal.php b/src/modules/App/Models/Sat/RegimenFiscal.php new file mode 100644 index 0000000..2f9077f --- /dev/null +++ b/src/modules/App/Models/Sat/RegimenFiscal.php @@ -0,0 +1,46 @@ + 'datetime', + 'fecha_de_fin_de_vigencia' => 'datetime', + ]; + + public static function selectList() + { + return self::selectRaw('c_regimen_fiscal, CONCAT(c_regimen_fiscal, " - ", descripcion) as value') + ->pluck('value', 'c_regimen_fiscal'); + } +} diff --git a/src/modules/App/Models/Sat/TipoComprobante.php b/src/modules/App/Models/Sat/TipoComprobante.php new file mode 100644 index 0000000..1e103b0 --- /dev/null +++ b/src/modules/App/Models/Sat/TipoComprobante.php @@ -0,0 +1,21 @@ + 'Ingreso', + self::TIPO_COMPROBANTE_EGRESO => 'Egreso', + self::TIPO_COMPROBANTE_TRASLADO => 'Traslado', + self::TIPO_COMPROBANTE_NOMINA => 'Nómina', + self::TIPO_COMPROBANTE_PAGO => 'Pago', + ]; +} diff --git a/src/modules/App/Models/Sat/TipoFactor.php b/src/modules/App/Models/Sat/TipoFactor.php new file mode 100644 index 0000000..0a2898a --- /dev/null +++ b/src/modules/App/Models/Sat/TipoFactor.php @@ -0,0 +1,17 @@ + 'Tasa', + self::TIPO_FACTOR_CUOTA => 'Cuota', + self::TIPO_FACTOR_EXENTO => 'Exento', + ]; +} diff --git a/src/modules/App/Models/Sat/TipoRelacion.php b/src/modules/App/Models/Sat/TipoRelacion.php new file mode 100644 index 0000000..19b09da --- /dev/null +++ b/src/modules/App/Models/Sat/TipoRelacion.php @@ -0,0 +1,25 @@ + 'Nota de crédito de los documentos relacionados', + self::TIPO_RELACION_NOTA_DEBITO => 'Nota de débito de los documentos relacionados', + self::TIPO_RELACION_DEVOLUCION_MERCANCIA => 'Devolución de mercancía sobre facturas o traslados previos', + self::TIPO_RELACION_SUSTITUCION_CFDI => 'Sustitución de los CFDI previos', + self::TIPO_RELACION_TRASLADOS_FACTURADOS => 'Traslados de mercancías facturados previamente', + self::TIPO_RELACION_FACTURA_TRASLADOS => 'Factura generada por los traslados previos', + self::TIPO_RELACION_CFDI_ANTICIPO => 'CFDI por aplicación de anticipo', + ]; +} diff --git a/src/modules/App/Models/Sat/UsoCfdi.php b/src/modules/App/Models/Sat/UsoCfdi.php new file mode 100644 index 0000000..39c4bb6 --- /dev/null +++ b/src/modules/App/Models/Sat/UsoCfdi.php @@ -0,0 +1,47 @@ + 'datetime', + 'fecha_fin_de_vigencia' => 'datetime', + ]; + + public static function selectList() + { + return self::selectRaw('c_uso_cfdi, CONCAT(c_uso_cfdi, " - ", descripcion) as value') + ->pluck('value', 'c_uso_cfdi'); + } +} diff --git a/src/modules/App/Models/Setting.php b/src/modules/App/Models/Setting.php new file mode 100644 index 0000000..1a83012 --- /dev/null +++ b/src/modules/App/Models/Setting.php @@ -0,0 +1,39 @@ + + */ + protected $fillable = [ + 'key', + 'value', + 'user_id', + ]; + + public $timestamps = false; + + // Relación con el usuario + public function user() + { + return $this->belongsTo(User::class); + } + + // Scope para obtener configuraciones de un usuario específico + public function scopeForUser($query, $userId) + { + return $query->where('user_id', $userId); + } + + // Configuraciones globales (sin usuario) + public function scopeGlobal($query) + { + return $query->whereNull('user_id'); + } +} diff --git a/src/modules/App/Models/User.php b/src/modules/App/Models/User.php new file mode 100644 index 0000000..9ed59c1 --- /dev/null +++ b/src/modules/App/Models/User.php @@ -0,0 +1,392 @@ + 'Habilitado', + self::STATUS_DISABLED => 'Deshabilitado', + self::STATUS_REMOVED => 'Eliminado', + ]; + + /** + * List of names for each status. + * @var array + */ + public static $statusListClass = [ + self::STATUS_ENABLED => 'success', + self::STATUS_DISABLED => 'warning', + self::STATUS_REMOVED => 'danger', + ]; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'contact_code', + 'name', + 'last_name', + 'email', + 'password', + 'profile_photo_path', + 'company', + 'birth_date', + 'hire_date', + 'curp', + 'nss', + 'job_title', + 'face_vector', + 'rfc', + 'nombre_fiscal', + 'tipo_persona', + 'c_regimen_fiscal', + 'domicilio_fiscal', + 'c_uso_cfdi', + 'is_partner', + 'is_employee', + 'is_prospect', + 'is_customer', + 'is_provider', + 'is_user', + 'status', + 'created_by', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + 'two_factor_recovery_codes', + 'two_factor_secret', + ]; + + /** + * The accessors to append to the model's array form. + * + * @var array + */ + protected $appends = [ + 'profile_photo_url', + ]; + + /** + * Get the attributes that should be cast. + * + * @return array + */ + protected function casts(): array + { + return [ + 'email_verified_at' => 'datetime', + 'password' => 'hashed', + 'face_vector' => 'array', + 'birth_date' => 'date', + 'hire_date' => 'date', + ]; + } + + /** + * Attributes to include in the Audit. + * + * @var array + */ + protected $auditInclude = [ + 'name', + 'email', + ]; + + + public function updateProfilePhoto(UploadedFile $image_avatar) + { + try { + // Verificar si el archivo existe + if (!file_exists($image_avatar->getRealPath())) + throw new \Exception('El archivo no existe en la ruta especificada.'); + + if (!in_array($image_avatar->getClientOriginalExtension(), ['jpg', 'jpeg', 'png'])) + throw new \Exception('El formato del archivo debe ser JPG o PNG.'); + + // Directorio donde se guardarán los avatares + $avatarDisk = self::AVATAR_DISK; + $avatarPath = self::PROFILE_PHOTO_DIR; + $avatarName = uniqid('avatar_') . '.png'; // Nombre único para el avatar + + // Crear la instancia de ImageManager + $driver = config('image.driver', 'gd'); + $manager = new ImageManager($driver); + + // Crear el directorio si no existe + if (!Storage::disk($avatarDisk)->exists($avatarPath)) + Storage::disk($avatarDisk)->makeDirectory($avatarPath); + + // Leer la imagen + $image = $manager->read($image_avatar->getRealPath()); + + // crop the best fitting 5:3 (600x360) ratio and resize to 600x360 pixel + $image->cover(self::AVATAR_WIDTH, self::AVATAR_HEIGHT); + + // Guardar la imagen en el disco de almacenamiento gestionado por Laravel + Storage::disk($avatarDisk)->put($avatarPath . $avatarName, $image->toPng(indexed: true)); + + // Elimina el avatar existente si hay uno + $this->deleteProfilePhoto(); + + // Update the user's profile photo path + $this->forceFill([ + 'profile_photo_path' => $avatarName, + ])->save(); + } catch (\Exception $e) { + throw new \Exception('Ocurrió un error al actualizar el avatar. ' . $e->getMessage()); + } + } + + public function deleteProfilePhoto() + { + if (!empty($this->profile_photo_path)) { + $avatarDisk = self::AVATAR_DISK; + + Storage::disk($avatarDisk)->delete($this->profile_photo_path); + + $this->forceFill([ + 'profile_photo_path' => null, + ])->save(); + } + } + + public function getAvatarColor() + { + // Selecciona un color basado en el id del usuario + return self::AVATAR_COLORS[$this->id % count(self::AVATAR_COLORS)]; + } + + + public static function getAvatarImage($name, $color, $background, $size) + { + $avatarDisk = self::AVATAR_DISK; + $directory = self::INITIAL_AVATAR_DIR; + $initials = self::getInitials($name); + + $cacheKey = "avatar-{$initials}-{$color}-{$background}-{$size}"; + $path = "{$directory}/{$cacheKey}.png"; + $storagePath = storage_path("app/public/{$path}"); + + // Verificar si el avatar ya está en caché + if (Storage::disk($avatarDisk)->exists($path)) + return response()->file($storagePath); + + // Crear el avatar + $image = self::createAvatarImage($name, $color, $background, $size); + + // Guardar en el directorio de iniciales + Storage::disk($avatarDisk)->put($path, $image->toPng(indexed: true)); + + // Retornar la imagen directamente + return response()->file($storagePath); + } + + private static function createAvatarImage($name, $color, $background, $size) + { + // Usar la configuración del driver de imagen + $driver = config('image.driver', 'gd'); + $manager = new ImageManager($driver); + + $initials = self::getInitials($name); + + // Crear la imagen con fondo + $image = $manager->create($size, $size) + ->fill($background); + + // Escribir texto en la imagen + $image->text( + $initials, + $size / 2, // Centrar horizontalmente + $size / 2, // Centrar verticalmente + function (FontFactory $font) use ($color, $size) { + $font->file(base_path('/modules/Admin/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Bold.ttf')); + $font->size($size * 0.4); + $font->color($color); + $font->align('center'); + $font->valign('middle'); + } + ); + + return $image; + } + + public static function getInitials($name) + { + // Manejar casos de nombres vacíos o nulos + if (empty($name)) + return 'NA'; + + // Usar array_map para mayor eficiencia + $initials = implode('', array_map(function ($word) { + return mb_substr($word, 0, 1); + }, explode(' ', $name))); + + $initials = substr($initials, 0, self::INITIAL_MAX_LENGTH); + + return strtoupper($initials); + } + + + + public function getProfilePhotoUrlAttribute() + { + if ($this->profile_photo_path) + return Storage::url(self::PROFILE_PHOTO_DIR . '/' . $this->profile_photo_path); + + // Generar URL del avatar por iniciales + $name = urlencode($this->fullname); + $color = ltrim($this->getAvatarColor(), '#'); + $background = ltrim(self::AVATAR_BACKGROUND, '#'); + $size = (self::AVATAR_WIDTH + self::AVATAR_HEIGHT) / 2; + + return url("/admin/usuario/avatar?name={$name}&color={$color}&background={$background}&size={$size}"); + } + + public function getFullnameAttribute() + { + return trim($this->name . ' ' . $this->last_name); + } + + public function getInitialsAttribute() + { + return self::getInitials($this->fullname); + } + + + + /** + * Envía la notificación de restablecimiento de contraseña. + * + * @param string $token + */ + public function sendPasswordResetNotification($token) + { + // Usar la notificación personalizada + $this->notify(new CustomResetPasswordNotification($token)); + } + + + + + + + + /** + * Relations + */ + + // User who created this user + public function creator() + { + return $this->belongsTo(self::class, 'created_by'); + } + + // Regimen fiscal + public function regimenFiscal() + { + return $this->belongsTo(RegimenFiscal::class, 'c_regimen_fiscal', 'c_regimen_fiscal'); + } + + // Domicilio fiscal + public function domicilioFiscal() + { + return $this->belongsTo(CodigoPostal::class, 'domicilio_fiscal', 'c_codigo_postal'); + } + + // Uso de CFDI + public function usoCfdi() + { + return $this->belongsTo(UsoCfdi::class, 'c_uso_cfdi', 'c_uso_cfdi'); + } + + /** + * Helper methods + */ + + public function isActive() + { + return $this->status === 1; + } + + public function isPartner() + { + return $this->is_partner === 1; + } + + public function isEmployee() + { + return $this->is_employee === 1; + } + + public function isCustomer() + { + return $this->is_customer === 1; + } + + public function isProvider() + { + return $this->is_provider === 1; + } +} diff --git a/src/modules/App/Models/UserLogin.php b/src/modules/App/Models/UserLogin.php new file mode 100644 index 0000000..3546acf --- /dev/null +++ b/src/modules/App/Models/UserLogin.php @@ -0,0 +1,14 @@ +token = $token; + } + + /** + * Configura el canal de la notificación. + */ + public function via($notifiable) + { + return ['mail']; + } + + /** + * Configura el mensaje de correo. + */ + public function toMail($notifiable) + { + try { + // Cargar configuración SMTP desde la base de datos + $this->loadDynamicMailConfig(); + + $resetUrl = url(route('password.reset', [ + 'token' => $this->token, + 'email' => $notifiable->getEmailForPasswordReset() + ], false)); + + $appTitle = Setting::global()->where('key', 'website_title')->first()->value ?? Config::get('_var.appTitle'); + $imageBase64 = 'data:image/png;base64,' . base64_encode(file_get_contents(public_path('/assets/img/logo/koneko-04.png'))); + $expireMinutes = Config::get('auth.passwords.' . Config::get('auth.defaults.passwords') . '.expire', 60); + + Config::set('app.name', $appTitle); + + return (new MailMessage) + ->subject("Restablece tu contraseña - {$appTitle}") + ->markdown('admin::notifications.email', [ // Usar tu plantilla del módulo + 'greeting' => "Hola {$notifiable->name}", + 'introLines' => [ + 'Estás recibiendo este correo porque solicitaste restablecer tu contraseña.', + ], + 'actionText' => 'Restablecer contraseña', + 'actionUrl' => $resetUrl, + 'outroLines' => [ + "Este enlace expirará en {$expireMinutes} minutos.", + 'Si no solicitaste este cambio, no se requiere realizar ninguna acción.', + ], + 'displayableActionUrl' => $resetUrl, // Para el subcopy + 'image' => $imageBase64, // Imagen del logo + ]); + + /* + */ + } catch (\Exception $e) { + // Registrar el error + Log::error('Error al enviar el correo de restablecimiento: ' . $e->getMessage()); + + // Retornar un mensaje alternativo + return (new MailMessage) + ->subject('Restablece tu contraseña') + ->line('Ocurrió un error al enviar el correo. Por favor, intenta de nuevo más tarde.'); + } + } + + /** + * Cargar configuración SMTP desde la base de datos. + */ + protected function loadDynamicMailConfig() + { + try { + $smtpConfig = Setting::where('key', 'LIKE', 'mail_%') + ->pluck('value', 'key'); + + if ($smtpConfig->isEmpty()) { + throw new Exception('No SMTP configuration found in the database.'); + } + + Config::set('mail.mailers.smtp.host', $smtpConfig['mail_mailers_smtp_host'] ?? null); + Config::set('mail.mailers.smtp.port', $smtpConfig['mail_mailers_smtp_port'] ?? null); + Config::set('mail.mailers.smtp.username', $smtpConfig['mail_mailers_smtp_username'] ?? null); + Config::set( + 'mail.mailers.smtp.password', + isset($smtpConfig['mail_mailers_smtp_password']) + ? Crypt::decryptString($smtpConfig['mail_mailers_smtp_password']) + : null + ); + Config::set('mail.mailers.smtp.encryption', $smtpConfig['mail_mailers_smtp_encryption'] ?? null); + Config::set('mail.from.address', $smtpConfig['mail_from_address'] ?? null); + Config::set('mail.from.name', $smtpConfig['mail_from_name'] ?? null); + } catch (Exception $e) { + Log::error('SMTP Configuration Error: ' . $e->getMessage()); + // Opcional: Puedes lanzar la excepción o manejarla de otra manera. + throw new Exception('Error al cargar la configuración SMTP.'); + } + } +} diff --git a/src/modules/App/Providers/FortifyServiceProvider.php b/src/modules/App/Providers/FortifyServiceProvider.php new file mode 100644 index 0000000..4d0d27d --- /dev/null +++ b/src/modules/App/Providers/FortifyServiceProvider.php @@ -0,0 +1,124 @@ +input(Fortify::username())) . '|' . $request->ip()); + + return Limit::perMinute(5)->by($throttleKey); + }); + + RateLimiter::for('two-factor', function (Request $request) { + return Limit::perMinute(5)->by($request->session()->get('login.id')); + }); + + Fortify::authenticateUsing(function (Request $request) { + $user = User::where('email', $request->email) + ->where('status', User::STATUS_ENABLED) + ->first(); + + if ($user && Hash::check($request->password, $user->password)) { + return $user; + } + }); + + // Simula lo que hace tu middleware y comparte `_admin` + $viewMode = Config::get('custom.custom.authViewMode'); + $adminVars = app(AdminTemplateService::class)->getAdminVars(); + + // Configurar la vista del login + Fortify::loginView(function () use ($viewMode, $adminVars) { + $pageConfigs = ['myLayout' => 'blank']; + + view()->share('_admin', $adminVars); + + return view("admin::auth.login-{$viewMode}", ['pageConfigs' => $pageConfigs]); + }); + + // Configurar la vista del registro (si lo necesitas) + Fortify::registerView(function () use ($viewMode, $adminVars) { + $pageConfigs = ['myLayout' => 'blank']; + + view()->share('_admin', $adminVars); + + return view("admin::auth.register-{$viewMode}", ['pageConfigs' => $pageConfigs]); + }); + + // Configurar la vista de restablecimiento de contraseñas + Fortify::requestPasswordResetLinkView(function () use ($viewMode, $adminVars) { + $pageConfigs = ['myLayout' => 'blank']; + + view()->share('_admin', $adminVars); + + return view("admin::auth.forgot-password-{$viewMode}", ['pageConfigs' => $pageConfigs]); + }); + + Fortify::resetPasswordView(function ($request) use ($viewMode, $adminVars) { + $pageConfigs = ['myLayout' => 'blank']; + + view()->share('_admin', $adminVars); + + return view("admin::auth.reset-password-{$viewMode}", ['pageConfigs' => $pageConfigs, 'request' => $request]); + }); + + // Vista de verificación de correo electrónico + Fortify::verifyEmailView(function () use ($viewMode, $adminVars) { + view()->share('_admin', $adminVars); + + return view("admin::auth.verify-email-{$viewMode}"); + }); + + // Vista de confirmación de contraseña + Fortify::confirmPasswordView(function () use ($viewMode, $adminVars) { + $pageConfigs = ['myLayout' => 'blank']; + + view()->share('_admin', $adminVars); + + return view("admin::auth.confirm-password-{$viewMode}", ['pageConfigs' => $pageConfigs]); + }); + + // Configurar la vista para la verificación de dos factores + Fortify::twoFactorChallengeView(function () use ($viewMode, $adminVars) { + $pageConfigs = ['myLayout' => 'blank']; + + view()->share('_admin', $adminVars); + + return view("admin::auth.two-factor-challenge-{$viewMode}", ['pageConfigs' => $pageConfigs]); + }); + } +} diff --git a/src/modules/App/Providers/GlobalSettingsProvider.php b/src/modules/App/Providers/GlobalSettingsProvider.php new file mode 100644 index 0000000..53b2d29 --- /dev/null +++ b/src/modules/App/Providers/GlobalSettingsProvider.php @@ -0,0 +1,27 @@ +mergeConfigFrom(__DIR__ . '/../../Config/_var.php', '_var'); + $this->mergeConfigFrom(__DIR__ . '/../../Config/custom.php', 'custom'); + } + + /** + * Bootstrap services. + */ + public function boot(GlobalSettingsService $globalSettingsService): void + { + $globalSettingsService->loadSystemConfig(); + } +} diff --git a/src/modules/App/Providers/VuexyAdminProvider.php b/src/modules/App/Providers/VuexyAdminProvider.php new file mode 100644 index 0000000..74fae38 --- /dev/null +++ b/src/modules/App/Providers/VuexyAdminProvider.php @@ -0,0 +1,39 @@ +alias('Helper', \Modules\Admin\App\Helpers\Helpers::class); + } + + /** + * Bootstrap any application services. + */ + public function boot(): void + { + // Register any module-specific event listeners here + if ($this->app->runningInConsole()) { + $this->commands([ + CleanInitialAvatars::class, + ]); + + return; + } + + // Composer para las vistas del módulo Admin + View::composer('admin::layouts.vuexy.*', VuexyTemplateComposer::class); + } +} diff --git a/src/modules/App/Rules/NotEmptyHtml.php b/src/modules/App/Rules/NotEmptyHtml.php new file mode 100644 index 0000000..173fcd3 --- /dev/null +++ b/src/modules/App/Rules/NotEmptyHtml.php @@ -0,0 +1,20 @@ + [180, 180], + '192x192' => [192, 192], + '152x152' => [152, 152], + '120x120' => [120, 120], + '76x76' => [76, 76], + '16x16' => [16, 16], + ]; + + private $imageLogoMaxPixels1 = 22500; // Primera versión (px^2) + private $imageLogoMaxPixels2 = 75625; // Segunda versión (px^2) + private $imageLogoMaxPixels3 = 262144; // Tercera versión (px^2) + private $imageLogoMaxPixels4 = 230400; // Tercera versión (px^2) en Base64 + + protected $cacheTTL = 60 * 24 * 30; // 30 días en minutos + + public function __construct() + { + $this->driver = config('image.driver', 'gd'); + } + + public function updateSetting(string $key, string $value): bool + { + $setting = Setting::updateOrCreate( + ['key' => $key], + ['value' => trim($value)] + ); + + return $setting->save(); + } + + public function processAndSaveFavicon($image): void + { + Storage::makeDirectory($this->imageDisk . '/' . $this->favicon_basePath); + + // Eliminar favicons antiguos + $this->deleteOldFavicons(); + + // Guardar imagen original + $imageManager = new ImageManager($this->driver); + + $imageName = uniqid('admin_favicon_'); + + $image = $imageManager->read($image->getRealPath()); + + foreach ($this->faviconsSizes as $size => [$width, $height]) { + $resizedPath = $this->favicon_basePath . $imageName . "_{$size}.png"; + + $image->cover($width, $height); + + Storage::disk($this->imageDisk)->put($resizedPath, $image->toPng(indexed: true)); + } + + $this->updateSetting('admin_favicon_ns', $this->favicon_basePath . $imageName); + } + + protected function deleteOldFavicons(): void + { + // Obtener el favicon actual desde la base de datos + $currentFavicon = Setting::where('key', 'admin_favicon_ns')->value('value'); + + if ($currentFavicon) { + $filePaths = [ + $this->imageDisk . '/' . $currentFavicon, + $this->imageDisk . '/' . $currentFavicon . '_16x16.png', + $this->imageDisk . '/' . $currentFavicon . '_76x76.png', + $this->imageDisk . '/' . $currentFavicon . '_120x120.png', + $this->imageDisk . '/' . $currentFavicon . '_152x152.png', + $this->imageDisk . '/' . $currentFavicon . '_180x180.png', + $this->imageDisk . '/' . $currentFavicon . '_192x192.png', + ]; + + foreach ($filePaths as $filePath) { + if (Storage::exists($filePath)) { + Storage::delete($filePath); + } + } + } + } + + public function processAndSaveImageLogo($image, string $type = ''): void + { + // Crear directorio si no existe + Storage::makeDirectory($this->imageDisk . '/' . $this->image_logo_basePath); + + // Eliminar imágenes antiguas + $this->deleteOldImageWebapp($type); + + // Leer imagen original + $imageManager = new ImageManager($this->driver); + $image = $imageManager->read($image->getRealPath()); + + // Generar tres versiones con diferentes áreas máximas + $this->generateAndSaveImage($image, $type, $this->imageLogoMaxPixels1, 'small'); // Versión 1 + $this->generateAndSaveImage($image, $type, $this->imageLogoMaxPixels2, 'medium'); // Versión 2 + $this->generateAndSaveImage($image, $type, $this->imageLogoMaxPixels3); // Versión 3 + $this->generateAndSaveImageAsBase64($image, $type, $this->imageLogoMaxPixels4); // Versión 3 + } + + private function generateAndSaveImage($image, string $type, int $maxPixels, string $suffix = ''): void + { + $imageClone = clone $image; + + // Escalar imagen conservando aspecto + $this->resizeImageToMaxPixels($imageClone, $maxPixels); + + $imageName = 'admin_image_logo' . ($suffix ? '_' . $suffix : '') . ($type == 'dark' ? '_dark' : ''); + + // Generar nombre y ruta + $imageNameUid = uniqid($imageName . '_', ".png"); + $resizedPath = $this->image_logo_basePath . $imageNameUid; + + // Guardar imagen en PNG + Storage::disk($this->imageDisk)->put($resizedPath, $imageClone->toPng(indexed: true)); + + // Actualizar configuración + $this->updateSetting($imageName, $resizedPath); + } + + private function resizeImageToMaxPixels($image, int $maxPixels) + { + // Obtener dimensiones originales de la imagen + $originalWidth = $image->width(); // Método para obtener el ancho + $originalHeight = $image->height(); // Método para obtener el alto + + // Calcular el aspecto + $aspectRatio = $originalWidth / $originalHeight; + + // Calcular dimensiones redimensionadas conservando aspecto + if ($aspectRatio > 1) { // Ancho es dominante + $newWidth = sqrt($maxPixels * $aspectRatio); + $newHeight = $newWidth / $aspectRatio; + } else { // Alto es dominante + $newHeight = sqrt($maxPixels / $aspectRatio); + $newWidth = $newHeight * $aspectRatio; + } + + // Redimensionar la imagen + $image->resize( + round($newWidth), // Redondear para evitar problemas con números decimales + round($newHeight), + function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + } + ); + + return $image; + } + + + private function generateAndSaveImageAsBase64($image, string $type, int $maxPixels): void + { + $imageClone = clone $image; + + // Redimensionar imagen conservando el aspecto + $this->resizeImageToMaxPixels($imageClone, $maxPixels); + + // Convertir a Base64 + $base64Image = (string) $imageClone->toJpg(40)->toDataUri(); + + // Guardar como configuración + $this->updateSetting( + "admin_image_logo_base64" . ($type === 'dark' ? '_dark' : ''), + $base64Image // Ya incluye "data:image/png;base64," + ); + } + + protected function deleteOldImageWebapp(string $type = ''): void + { + // Determinar prefijo según el tipo (normal o dark) + $suffix = $type === 'dark' ? '_dark' : ''; + + // Claves relacionadas con las imágenes que queremos limpiar + $imageKeys = [ + "admin_image_logo{$suffix}", + "admin_image_logo_small{$suffix}", + "admin_image_logo_medium{$suffix}", + ]; + + // Recuperar las imágenes actuales en una sola consulta + $settings = Setting::whereIn('key', $imageKeys)->pluck('value', 'key'); + + foreach ($imageKeys as $key) { + // Obtener la imagen correspondiente + $currentImage = $settings[$key] ?? null; + + if ($currentImage) { + // Construir la ruta del archivo y eliminarlo si existe + $filePath = $this->imageDisk . '/' . $currentImage; + if (Storage::exists($filePath)) { + Storage::delete($filePath); + } + + // Eliminar la configuración de la base de datos + Setting::where('key', $key)->delete(); + } + } + } +} diff --git a/src/modules/App/Services/AdminTemplateService.php b/src/modules/App/Services/AdminTemplateService.php new file mode 100644 index 0000000..86831d7 --- /dev/null +++ b/src/modules/App/Services/AdminTemplateService.php @@ -0,0 +1,156 @@ + $key], + ['value' => trim($value)] + ); + + return $setting->save(); + } + + public function getAdminVars($adminSetting = false): array + { + try { + // Verificar si el sistema está inicializado (la tabla `migrations` existe) + if (!Schema::hasTable('migrations')) { + return $this->getDefaultAdminVars($adminSetting); + } + + // Cargar desde el caché o la base de datos si está disponible + return Cache::remember('admin_settings', $this->cacheTTL, function () use ($adminSetting) { + $settings = Setting::global() + ->where('key', 'LIKE', 'admin_%') + ->pluck('value', 'key') + ->toArray(); + + $adminSettings = $this->buildAdminVarsArray($settings); + + return $adminSetting + ? $adminSettings[$adminSetting] + : $adminSettings; + }); + } catch (\Exception $e) { + // En caso de error, devolver valores predeterminados + return $this->getDefaultAdminVars($adminSetting); + } + } + + private function getDefaultAdminVars($adminSetting = false): array + { + $defaultSettings = [ + 'title' => config('_var.appTitle', 'Default Title'), + 'author' => config('_var.author', 'Default Author'), + 'description' => config('_var.description', 'Default Description'), + 'favicon' => $this->getFaviconPaths([]), + 'app_name' => config('_var.appName', 'Default App Name'), + 'image_logo' => $this->getImageLogoPaths([]), + ]; + + return $adminSetting + ? $defaultSettings[$adminSetting] ?? null + : $defaultSettings; + } + + private function buildAdminVarsArray(array $settings): array + { + return [ + 'title' => $settings['admin_title'] ?? config('_var.appTitle'), + 'author' => config('_var.author'), + 'description' => config('_var.description'), + 'favicon' => $this->getFaviconPaths($settings), + 'app_name' => $settings['admin_app_name'] ?? config('_var.appName'), + 'image_logo' => $this->getImageLogoPaths($settings), + ]; + } + + public function getVuexyCustomizerVars() + { + // Obtener valores de la base de datos + $settings = Setting::global() + ->where('key', 'LIKE', 'vuexy_%') + ->pluck('value', 'key') + ->toArray(); + + // Obtener configuraciones predeterminadas + $defaultConfig = Config::get('custom.custom', []); + + // Mezclar las configuraciones predeterminadas con las de la base de datos + return collect($defaultConfig) + ->mapWithKeys(function ($defaultValue, $key) use ($settings) { + $vuexyKey = 'vuexy_' . $key; // Convertir clave al formato de la base de datos + + // Obtener valor desde la base de datos o usar el predeterminado + $value = $settings[$vuexyKey] ?? $defaultValue; + + // Forzar booleanos para claves específicas + if (in_array($key, ['displayCustomizer', 'footerFixed', 'menuFixed', 'menuCollapsed', 'showDropdownOnHover'])) { + $value = filter_var($value, FILTER_VALIDATE_BOOLEAN); + } + + return [$key => $value]; + }) + ->toArray(); + } + + /** + * Obtiene los paths de favicon en distintos tamaños. + */ + private function getFaviconPaths(array $settings): array + { + $defaultFavicon = config('_var.appFavicon'); + $namespace = $settings['admin_favicon_ns'] ?? null; + + return [ + 'namespace' => $namespace, + '16x16' => $namespace ? "{$namespace}_16x16.png" : $defaultFavicon, + '76x76' => $namespace ? "{$namespace}_76x76.png" : $defaultFavicon, + '120x120' => $namespace ? "{$namespace}_120x120.png" : $defaultFavicon, + '152x152' => $namespace ? "{$namespace}_152x152.png" : $defaultFavicon, + '180x180' => $namespace ? "{$namespace}_180x180.png" : $defaultFavicon, + '192x192' => $namespace ? "{$namespace}_192x192.png" : $defaultFavicon, + ]; + } + + /** + * Obtiene los paths de los logos en distintos tamaños. + */ + private function getImageLogoPaths(array $settings): array + { + $defaultLogo = config('_var.appLogo'); + + return [ + 'small' => $this->getImagePath($settings, 'admin_image_logo_small', $defaultLogo), + 'medium' => $this->getImagePath($settings, 'admin_image_logo_medium', $defaultLogo), + 'large' => $this->getImagePath($settings, 'admin_image_logo', $defaultLogo), + 'small_dark' => $this->getImagePath($settings, 'admin_image_logo_small_dark', $defaultLogo), + 'medium_dark' => $this->getImagePath($settings, 'admin_image_logo_medium_dark', $defaultLogo), + 'large_dark' => $this->getImagePath($settings, 'admin_image_logo_dark', $defaultLogo), + ]; + } + + /** + * Obtiene un path de imagen o retorna un valor predeterminado. + */ + private function getImagePath(array $settings, string $key, string $default): string + { + return $settings[$key] ?? $default; + } + + public static function clearAdminVarsCache() + { + Cache::forget("admin_settings"); + } +} diff --git a/src/modules/App/Services/CacheConfigService.php b/src/modules/App/Services/CacheConfigService.php new file mode 100644 index 0000000..ab68aee --- /dev/null +++ b/src/modules/App/Services/CacheConfigService.php @@ -0,0 +1,235 @@ + $this->getCacheConfig(), + 'session' => $this->getSessionConfig(), + 'database' => $this->getDatabaseConfig(), + 'driver' => $this->getDriverVersion(), + 'memcachedInUse' => $this->isDriverInUse('memcached'), + 'redisInUse' => $this->isDriverInUse('redis'), + ]; + } + + + private function getCacheConfig(): array + { + $cacheConfig = Config::get('cache'); + $driver = $cacheConfig['default']; + + switch ($driver) { + case 'redis': + $connection = config('database.redis.cache'); + $cacheConfig['host'] = $connection['host'] ?? 'localhost'; + $cacheConfig['database'] = $connection['database'] ?? 'N/A'; + break; + + case 'database': + $connection = config('database.connections.' . config('cache.stores.database.connection')); + $cacheConfig['host'] = $connection['host'] ?? 'localhost'; + $cacheConfig['database'] = $connection['database'] ?? 'N/A'; + break; + + case 'memcached': + $servers = config('cache.stores.memcached.servers'); + $cacheConfig['host'] = $servers[0]['host'] ?? 'localhost'; + $cacheConfig['database'] = 'N/A'; + break; + + case 'file': + $cacheConfig['host'] = storage_path('framework/cache/data'); + $cacheConfig['database'] = 'N/A'; + break; + + default: + $cacheConfig['host'] = 'N/A'; + $cacheConfig['database'] = 'N/A'; + break; + } + + return $cacheConfig; + } + + private function getSessionConfig(): array + { + $sessionConfig = Config::get('session'); + $driver = $sessionConfig['driver']; + + switch ($driver) { + case 'redis': + $connection = config('database.redis.sessions'); + $sessionConfig['host'] = $connection['host'] ?? 'localhost'; + $sessionConfig['database'] = $connection['database'] ?? 'N/A'; + break; + + case 'database': + $connection = config('database.connections.' . $sessionConfig['connection']); + $sessionConfig['host'] = $connection['host'] ?? 'localhost'; + $sessionConfig['database'] = $connection['database'] ?? 'N/A'; + break; + + case 'memcached': + $servers = config('cache.stores.memcached.servers'); + $sessionConfig['host'] = $servers[0]['host'] ?? 'localhost'; + $sessionConfig['database'] = 'N/A'; + break; + + case 'file': + $sessionConfig['host'] = storage_path('framework/sessions'); + $sessionConfig['database'] = 'N/A'; + break; + + default: + $sessionConfig['host'] = 'N/A'; + $sessionConfig['database'] = 'N/A'; + break; + } + + return $sessionConfig; + } + + private function getDatabaseConfig(): array + { + $databaseConfig = Config::get('database'); + $connection = $databaseConfig['default']; + + $connectionConfig = config('database.connections.' . $connection); + $databaseConfig['host'] = $connectionConfig['host'] ?? 'localhost'; + $databaseConfig['database'] = $connectionConfig['database'] ?? 'N/A'; + + return $databaseConfig; + } + + + private function getDriverVersion(): array + { + $drivers = []; + $defaultDatabaseDriver = config('database.default'); // Obtén el driver predeterminado + + switch ($defaultDatabaseDriver) { + case 'mysql': + case 'mariadb': + $drivers['mysql'] = [ + 'version' => $this->getMySqlVersion(), + 'details' => config("database.connections.$defaultDatabaseDriver"), + ]; + + $drivers['mariadb'] = $drivers['mysql']; + + case 'pgsql': + $drivers['pgsql'] = [ + 'version' => $this->getPgSqlVersion(), + 'details' => config("database.connections.pgsql"), + ]; + break; + + case 'sqlsrv': + $drivers['sqlsrv'] = [ + 'version' => $this->getSqlSrvVersion(), + 'details' => config("database.connections.sqlsrv"), + ]; + break; + + default: + $drivers['unknown'] = [ + 'version' => 'No disponible', + 'details' => 'Driver no identificado', + ]; + break; + } + + // Opcional: Agrega detalles de Redis y Memcached si están en uso + if ($this->isDriverInUse('redis')) { + $drivers['redis'] = [ + 'version' => $this->getRedisVersion(), + ]; + } + + if ($this->isDriverInUse('memcached')) { + $drivers['memcached'] = [ + 'version' => $this->getMemcachedVersion(), + ]; + } + + return $drivers; + } + + private function getMySqlVersion(): string + { + try { + $version = DB::selectOne('SELECT VERSION() as version'); + return $version->version ?? 'No disponible'; + } catch (\Exception $e) { + return 'Error: ' . $e->getMessage(); + } + } + + private function getPgSqlVersion(): string + { + try { + $version = DB::selectOne("SHOW server_version"); + return $version->server_version ?? 'No disponible'; + } catch (\Exception $e) { + return 'Error: ' . $e->getMessage(); + } + } + + private function getSqlSrvVersion(): string + { + try { + $version = DB::selectOne("SELECT @@VERSION as version"); + return $version->version ?? 'No disponible'; + } catch (\Exception $e) { + return 'Error: ' . $e->getMessage(); + } + } + + private function getMemcachedVersion(): string + { + try { + $memcached = new \Memcached(); + $memcached->addServer( + Config::get('cache.stores.memcached.servers.0.host'), + Config::get('cache.stores.memcached.servers.0.port') + ); + + $stats = $memcached->getStats(); + foreach ($stats as $serverStats) { + return $serverStats['version'] ?? 'No disponible'; + } + + return 'No disponible'; + } catch (\Exception $e) { + return 'Error: ' . $e->getMessage(); + } + } + + private function getRedisVersion(): string + { + try { + $info = Redis::info(); + return $info['redis_version'] ?? 'No disponible'; + } catch (\Exception $e) { + return 'Error: ' . $e->getMessage(); + } + } + + + protected function isDriverInUse(string $driver): bool + { + return in_array($driver, [ + Config::get('cache.default'), + Config::get('session.driver'), + Config::get('queue.default'), + ]); + } +} diff --git a/src/modules/App/Services/CacheManagerService.php b/src/modules/App/Services/CacheManagerService.php new file mode 100644 index 0000000..b565497 --- /dev/null +++ b/src/modules/App/Services/CacheManagerService.php @@ -0,0 +1,389 @@ +driver = $driver ?? config('cache.default'); + } + + /** + * Obtiene estadísticas de caché para el driver especificado. + */ + public function getCacheStats(string $driver = null): array + { + $driver = $driver ?? $this->driver; + + if (!$this->isSupportedDriver($driver)) { + return $this->response('warning', 'Driver no soportado o no configurado.'); + } + + try { + return match ($driver) { + 'database' => $this->_getDatabaseStats(), + 'file' => $this->_getFilecacheStats(), + 'redis' => $this->_getRedisStats(), + 'memcached' => $this->_getMemcachedStats(), + default => $this->response('info', 'No hay estadísticas disponibles para este driver.'), + }; + } catch (\Exception $e) { + return $this->response('danger', 'Error al obtener estadísticas: ' . $e->getMessage()); + } + } + + public function clearCache(string $driver = null): array + { + $driver = $driver ?? $this->driver; + + if (!$this->isSupportedDriver($driver)) { + return $this->response('warning', 'Driver no soportado o no configurado.'); + } + + try { + switch ($driver) { + case 'redis': + $keysCleared = $this->clearRedisCache(); + + return $keysCleared + ? $this->response('warning', 'Se ha purgado toda la caché de Redis.') + : $this->response('info', 'No se encontraron claves en Redis para eliminar.'); + + case 'memcached': + $keysCleared = $this->clearMemcachedCache(); + + return $keysCleared + ? $this->response('warning', 'Se ha purgado toda la caché de Memcached.') + : $this->response('info', 'No se encontraron claves en Memcached para eliminar.'); + + case 'database': + $rowsDeleted = $this->clearDatabaseCache(); + + return $rowsDeleted + ? $this->response('warning', 'Se ha purgado toda la caché almacenada en la base de datos.') + : $this->response('info', 'No se encontraron registros en la caché de la base de datos.'); + + case 'file': + $filesDeleted = $this->clearFilecache(); + + return $filesDeleted + ? $this->response('warning', 'Se ha purgado toda la caché de archivos.') + : $this->response('info', 'No se encontraron archivos en la caché para eliminar.'); + + default: + Cache::flush(); + + return $this->response('warning', 'Caché purgada.'); + } + } catch (\Exception $e) { + return $this->response('danger', 'Error al limpiar la caché: ' . $e->getMessage()); + } + } + + public function getRedisStats() + { + try { + if (!Redis::ping()) { + return $this->response('warning', 'No se puede conectar con el servidor Redis.'); + } + + $info = Redis::info(); + + $databases = $this->getRedisDatabases(); + + $redisInfo = [ + 'server' => config('database.redis.default.host'), + 'redis_version' => $info['redis_version'] ?? 'N/A', + 'os' => $info['os'] ?? 'N/A', + 'tcp_port' => $info['tcp_port'] ?? 'N/A', + 'connected_clients' => $info['connected_clients'] ?? 'N/A', + 'blocked_clients' => $info['blocked_clients'] ?? 'N/A', + 'maxmemory' => $info['maxmemory'] ?? 0, + 'used_memory_human' => $info['used_memory_human'] ?? 'N/A', + 'used_memory_peak' => $info['used_memory_peak'] ?? 'N/A', + 'used_memory_peak_human' => $info['used_memory_peak_human'] ?? 'N/A', + 'total_system_memory' => $info['total_system_memory'] ?? 0, + 'total_system_memory_human' => $info['total_system_memory_human'] ?? 'N/A', + 'maxmemory_human' => $info['maxmemory_human'] !== '0B' ? $info['maxmemory_human'] : 'Sin Límite', + 'total_connections_received' => number_format($info['total_connections_received']) ?? 'N/A', + 'total_commands_processed' => number_format($info['total_commands_processed']) ?? 'N/A', + 'maxmemory_policy' => $info['maxmemory_policy'] ?? 'N/A', + 'role' => $info['role'] ?? 'N/A', + 'cache_database' => '', + 'sessions_database' => '', + 'general_database' => ',', + 'keys' => $databases['total_keys'], + 'used_memory' => $info['used_memory'] ?? 0, + 'uptime' => gmdate('H\h i\m s\s', $info['uptime_in_seconds'] ?? 0), + 'databases' => $databases, + ]; + + return $this->response('success', 'Se a recargado las estadísticas de Redis.', ['info' => $redisInfo]); + } catch (\Exception $e) { + return $this->response('danger', 'Error al conectar con el servidor Redis: ' . Redis::getLastError()); + } + } + + public function getMemcachedStats() + { + try { + $memcachedStats = []; + + // Crear instancia del cliente Memcached + $memcached = new \Memcached(); + $memcached->addServer(config('memcached.host'), config('memcached.port')); + + // Obtener estadísticas del servidor + $stats = $memcached->getStats(); + + foreach ($stats as $server => $data) { + $server = explode(':', $server); + + $memcachedStats[] = [ + 'server' => $server[0], + 'tcp_port' => $server[1], + 'uptime' => $data['uptime'] ?? 'N/A', + 'version' => $data['version'] ?? 'N/A', + 'libevent' => $data['libevent'] ?? 'N/A', + 'max_connections' => $data['max_connections'] ?? 0, + 'total_connections' => $data['total_connections'] ?? 0, + 'rejected_connections' => $data['rejected_connections'] ?? 0, + 'curr_items' => $data['curr_items'] ?? 0, // Claves almacenadas + 'bytes' => $data['bytes'] ?? 0, // Memoria usada + 'limit_maxbytes' => $data['limit_maxbytes'] ?? 0, // Memoria máxima + 'cmd_get' => $data['cmd_get'] ?? 0, // Comandos GET ejecutados + 'cmd_set' => $data['cmd_set'] ?? 0, // Comandos SET ejecutados + 'get_hits' => $data['get_hits'] ?? 0, // GET exitosos + 'get_misses' => $data['get_misses'] ?? 0, // GET fallidos + 'evictions' => $data['evictions'] ?? 0, // Claves expulsadas + 'bytes_read' => $data['bytes_read'] ?? 0, // Bytes leídos + 'bytes_written' => $data['bytes_written'] ?? 0, // Bytes escritos + 'total_items' => $data['total_items'] ?? 0, + ]; + } + + return $this->response('success', 'Se a recargado las estadísticas de Memcached.', ['info' => $memcachedStats]); + } catch (\Exception $e) { + return $this->response('danger', 'Error al conectar con el servidor Memcached: ' . $e->getMessage()); + } + } + + + /** + * Obtiene estadísticas para caché en base de datos. + */ + private function _getDatabaseStats(): array + { + try { + $recordCount = DB::table('cache')->count(); + $tableInfo = DB::select("SHOW TABLE STATUS WHERE Name = 'cache'"); + + $memory_usage = isset($tableInfo[0]) ? $this->formatBytes($tableInfo[0]->Data_length + $tableInfo[0]->Index_length) : 'N/A'; + + return $this->response('success', 'Se ha recargado la información de la caché de base de datos.', ['item_count' => $recordCount, 'memory_usage' => $memory_usage]); + } catch (\Exception $e) { + return $this->response('danger', 'Error al obtener estadísticas de la base de datos: ' . $e->getMessage()); + } + } + + /** + * Obtiene estadísticas para caché en archivos. + */ + private function _getFilecacheStats(): array + { + try { + $cachePath = config('cache.stores.file.path'); + $files = glob($cachePath . '/*'); + + $memory_usage = $this->formatBytes(array_sum(array_map('filesize', $files))); + + return $this->response('success', 'Se ha recargado la información de la caché de archivos.', ['item_count' => count($files), 'memory_usage' => $memory_usage]); + } catch (\Exception $e) { + return $this->response('danger', 'Error al obtener estadísticas de archivos: ' . $e->getMessage()); + } + } + + private function _getRedisStats() + { + try { + $prefix = config('cache.prefix'); // Asegúrate de agregar el sufijo correcto si es necesario + + $info = Redis::info(); + $keys = Redis::connection('cache')->keys($prefix . '*'); + + $memory_usage = $this->formatBytes($info['used_memory'] ?? 0); + + return $this->response('success', 'Se ha recargado la información de la caché de Redis.', ['item_count' => count($keys), 'memory_usage' => $memory_usage]); + } catch (\Exception $e) { + return $this->response('danger', 'Error al obtener estadísticas de Redis: ' . $e->getMessage()); + } + } + + public function _getMemcachedStats(): array + { + try { + // Obtener estadísticas generales del servidor + $stats = Cache::getStore()->getMemcached()->getStats(); + + if (empty($stats)) { + return $this->response('error', 'No se pudieron obtener las estadísticas del servidor Memcached.', ['item_count' => 0, 'memory_usage' => 0]); + } + + // Usar el primer servidor configurado (en la mayoría de los casos hay uno) + $serverStats = array_shift($stats); + + return $this->response( + 'success', + 'Estadísticas del servidor Memcached obtenidas correctamente.', + [ + 'item_count' => $serverStats['curr_items'] ?? 0, // Número total de claves + 'memory_usage' => $this->formatBytes($serverStats['bytes'] ?? 0), // Memoria usada + 'max_memory' => $this->formatBytes($serverStats['limit_maxbytes'] ?? 0), // Memoria máxima asignada + ] + ); + } catch (\Exception $e) { + return $this->response('danger', 'Error al obtener estadísticas de Memcached: ' . $e->getMessage()); + } + } + + private function getRedisDatabases(): array + { + // Verificar si Redis está en uso + $isRedisUsed = collect([ + config('cache.default'), + config('session.driver'), + config('queue.default'), + ])->contains('redis'); + + if (!$isRedisUsed) { + return []; // Si Redis no está en uso, devolver un arreglo vacío + } + + // Configuraciones de bases de datos de Redis según su uso + $databases = [ + 'default' => config('database.redis.default.database', 0), // REDIS_DB + 'cache' => config('database.redis.cache.database', 0), // REDIS_CACHE_DB + 'sessions' => config('database.redis.sessions.database', 0), // REDIS_SESSION_DB + ]; + + $result = []; + $totalKeys = 0; + + // Recorrer solo las bases configuradas y activas + foreach ($databases as $type => $db) { + Redis::select($db); // Seleccionar la base de datos + + $keys = Redis::dbsize(); // Contar las claves en la base + + if ($keys > 0) { + $result[$type] = [ + 'database' => $db, + 'keys' => $keys, + ]; + + $totalKeys += $keys; + } + } + + if (!empty($result)) { + $result['total_keys'] = $totalKeys; + } + + return $result; + } + + + private function clearDatabaseCache(): bool + { + $count = DB::table(config('cache.stores.database.table'))->count(); + + if ($count > 0) { + DB::table(config('cache.stores.database.table'))->truncate(); + return true; + } + + return false; + } + + private function clearFilecache(): bool + { + $cachePath = config('cache.stores.file.path'); + $files = glob($cachePath . '/*'); + + if (!empty($files)) { + File::deleteDirectory($cachePath); + return true; + } + + return false; + } + + private function clearRedisCache(): bool + { + $prefix = config('cache.prefix', ''); + $keys = Redis::connection('cache')->keys($prefix . '*'); + + if (!empty($keys)) { + Redis::connection('cache')->flushdb(); + + // Simulate cache clearing delay + sleep(1); + + return true; + } + + return false; + } + + private function clearMemcachedCache(): bool + { + // Obtener el cliente Memcached directamente + $memcached = Cache::store('memcached')->getStore()->getMemcached(); + + // Ejecutar flush para eliminar todo + if ($memcached->flush()) { + // Simulate cache clearing delay + sleep(1); + + return true; + } + + return false; + } + + + /** + * Verifica si un driver es soportado. + */ + private function isSupportedDriver(string $driver): bool + { + return in_array($driver, ['redis', 'memcached', 'database', 'file']); + } + + /** + * Convierte bytes en un formato legible. + */ + private function formatBytes($bytes) + { + $sizes = ['B', 'KB', 'MB', 'GB', 'TB']; + $factor = floor((strlen($bytes) - 1) / 3); + + return sprintf('%.2f', $bytes / pow(1024, $factor)) . ' ' . $sizes[$factor]; + } + + /** + * Genera una respuesta estandarizada. + */ + private function response(string $status, string $message, array $data = []): array + { + return array_merge(compact('status', 'message'), $data); + } +} diff --git a/src/modules/App/Services/GlobalSettingsService.php b/src/modules/App/Services/GlobalSettingsService.php new file mode 100644 index 0000000..37d4364 --- /dev/null +++ b/src/modules/App/Services/GlobalSettingsService.php @@ -0,0 +1,273 @@ + $key], + ['value' => trim($value)] + ); + + return $setting->save(); + } + + /** + * Carga y sobrescribe las configuraciones del sistema. + */ + public function loadSystemConfig(): void + { + try { + if (!Schema::hasTable('migrations')) { + // Base de datos no inicializada: usar valores predeterminados + $config = $this->getDefaultSystemConfig(); + } else { + // Cargar configuración desde la caché o base de datos + $config = Cache::remember('global_system_config', $this->cacheTTL, function () { + $settings = Setting::global() + ->where('key', 'LIKE', 'config.%') + ->pluck('value', 'key') + ->toArray(); + + return [ + 'servicesFacebook' => $this->buildServiceConfig($settings, 'config.services.facebook.', 'services.facebook'), + 'servicesGoogle' => $this->buildServiceConfig($settings, 'config.services.google.', 'services.google'), + 'custom' => $this->buildVuexyCustomConfig($settings), + ]; + }); + } + + // Aplicar configuración al sistema + Config::set('services.facebook', $config['servicesFacebook']); + Config::set('services.google', $config['servicesGoogle']); + Config::set('custom', $config['custom']); + } catch (\Exception $e) { + // Manejo silencioso de errores para evitar interrupciones + Config::set('services.facebook', config('services.facebook', [])); + Config::set('services.google', config('services.google', [])); + Config::set('custom', config('custom', [])); + } + } + + /** + * Devuelve una configuración predeterminada si la base de datos no está inicializada. + */ + private function getDefaultSystemConfig(): array + { + return [ + 'servicesFacebook' => config('services.facebook', [ + 'client_id' => '', + 'client_secret' => '', + 'redirect' => '', + ]), + 'servicesGoogle' => config('services.google', [ + 'client_id' => '', + 'client_secret' => '', + 'redirect' => '', + ]), + 'custom' => config('custom', []), + ]; + } + + /** + * Verifica si un bloque de configuraciones está presente. + */ + protected function hasBlockConfig(array $settings, string $blockPrefix): bool + { + return array_key_exists($blockPrefix, array_filter($settings, fn($key) => str_starts_with($key, $blockPrefix), ARRAY_FILTER_USE_KEY)); + } + + /** + * Construye la configuración de un servicio (Facebook, Google, etc.). + */ + protected function buildServiceConfig(array $settings, string $blockPrefix, string $defaultConfigKey): array + { + if (!$this->hasBlockConfig($settings, $blockPrefix)) { + return config($defaultConfigKey); + } + + return [ + 'client_id' => $settings["{$blockPrefix}client_id"] ?? '', + 'client_secret' => $settings["{$blockPrefix}client_secret"] ?? '', + 'redirect' => $settings["{$blockPrefix}redirect"] ?? '', + ]; + } + + /** + * Construye la configuración personalizada de Vuexy. + */ + protected function buildVuexyCustomConfig(array $settings): array + { + // Configuración predeterminada del sistema + $defaultCustomConfig = config('custom', []); + + // Convertimos las claves planas a un array multidimensional + $settingsNested = Arr::undot($settings); + + // Navegamos hasta la parte relevante del array desanidado + $customSettings = $settingsNested['config']['custom'] ?? []; + + // Fusionamos la configuración predeterminada con los valores del sistema + $mergedConfig = array_replace_recursive($defaultCustomConfig, $customSettings); + + // Normalizamos los valores booleanos + return $this->normalizeBooleanFields($mergedConfig); + } + + /** + * Normaliza los campos booleanos. + */ + protected function normalizeBooleanFields(array $config): array + { + $booleanFields = [ + 'myRTLSupport', + 'myRTLMode', + 'hasCustomizer', + 'displayCustomizer', + 'footerFixed', + 'menuFixed', + 'menuCollapsed', + 'showDropdownOnHover', + ]; + + foreach ($booleanFields as $field) { + if (isset($config['custom'][$field])) { + $config['custom'][$field] = (bool) $config['custom'][$field]; + } + } + + return $config; + } + + /** + * Limpia el caché de la configuración del sistema. + */ + public static function clearSystemConfigCache(): void + { + Cache::forget('global_system_config'); + } + + /** + * Elimina las claves config.custom.* y limpia global_system_config + */ + public static function clearVuexyCustomConfig(): void + { + Setting::where('key', 'LIKE', 'config.custom.%')->delete(); + Cache::forget('global_system_config'); + } + + /** + * Obtiene y sobrescribe la configuración de correo electrónico. + */ + public function getMailSystemConfig(): array + { + return Cache::remember('mail_system_config', $this->cacheTTL, function () { + $settings = Setting::global() + ->where('key', 'LIKE', 'mail.%') + ->pluck('value', 'key') + ->toArray(); + + $defaultMailersSmtpVars = config('mail.mailers.smtp'); + + return [ + 'mailers' => [ + 'smtp' => array_merge($defaultMailersSmtpVars, [ + 'url' => $settings['mail.mailers.smtp.url'] ?? $defaultMailersSmtpVars['url'], + 'host' => $settings['mail.mailers.smtp.host'] ?? $defaultMailersSmtpVars['host'], + 'port' => $settings['mail.mailers.smtp.port'] ?? $defaultMailersSmtpVars['port'], + 'encryption' => $settings['mail.mailers.smtp.encryption'] ?? $defaultMailersSmtpVars['encryption'], + 'username' => $settings['mail.mailers.smtp.username'] ?? $defaultMailersSmtpVars['username'], + 'password' => isset($settings['mail.mailers.smtp.password']) && !empty($settings['mail.mailers.smtp.password']) + ? Crypt::decryptString($settings['mail.mailers.smtp.password']) + : $defaultMailersSmtpVars['password'], + 'timeout' => $settings['mail.mailers.smtp.timeout'] ?? $defaultMailersSmtpVars['timeout'], + ]), + ], + 'from' => [ + 'address' => $settings['mail.from.address'] ?? config('mail.from.address'), + 'name' => $settings['mail.from.name'] ?? config('mail.from.name'), + ], + 'reply_to' => [ + 'method' => $settings['mail.reply_to.method'] ?? config('mail.reply_to.method'), + 'email' => $settings['mail.reply_to.email'] ?? config('mail.reply_to.email'), + 'name' => $settings['mail.reply_to.name'] ?? config('mail.reply_to.name'), + ], + ]; + }); + } + + /** + * Limpia el caché de la configuración de correo electrónico. + */ + public static function clearMailSystemConfigCache(): void + { + Cache::forget('mail_system_config'); + } + + + /* + protected function buildFortifyFeatures(array $settings): array + { + return array_filter([ + !empty($settings['config.fortify.features.registration']) && $settings['config.fortify.features.registration'] == 1 + ? \Laravel\Fortify\Features::registration() + : null, + + !empty($settings['config.fortify.features.resetPasswords']) && $settings['config.fortify.features.resetPasswords'] == 1 + ? \Laravel\Fortify\Features::resetPasswords() + : null, + + !empty($settings['config.fortify.features.emailVerification']) && $settings['config.fortify.features.emailVerification'] == 1 + ? \Laravel\Fortify\Features::emailVerification() + : null, + + !empty($settings['config.fortify.features.updateProfileInformation']) && $settings['config.fortify.features.updateProfileInformation'] == 1 + ? \Laravel\Fortify\Features::updateProfileInformation() + : null, + + !empty($settings['config.fortify.features.updatePasswords']) && $settings['config.fortify.features.updatePasswords'] == 1 + ? \Laravel\Fortify\Features::updatePasswords() + : null, + + !empty($settings['config.fortify.features.twoFactorAuthentication.confirm']) && $settings['config.fortify.features.twoFactorAuthentication.confirm'] == 1 + ? \Laravel\Fortify\Features::twoFactorAuthentication([ + 'confirm' => true, + 'confirmPassword' => !empty($settings['config.fortify.features.twoFactorAuthentication.confirmPassword']) + && $settings['config.fortify.features.twoFactorAuthentication.confirmPassword'] == 1, + 'window' => $settings['config.fortify.features.twoFactorAuthentication.window'] ?? 1, + ]) + : null, + ]); + } + + protected function loadUserSettings() + { + if (Auth::check()) { + $userId = Auth::id(); + // Cargar configuraciones del usuario desde la caché + return Cache::remember("user_settings_{$userId}", $this->cacheTTL, function () use ($userId) { + return \App\Models\Setting::forUser($userId)->pluck('value', 'key')->toArray(); + }); + } + + return []; + } + */ +} diff --git a/src/modules/App/Services/SessionManagerService.php b/src/modules/App/Services/SessionManagerService.php new file mode 100644 index 0000000..a8d87c9 --- /dev/null +++ b/src/modules/App/Services/SessionManagerService.php @@ -0,0 +1,153 @@ +driver = $driver ?? config('session.driver'); + } + + public function getSessionStats(string $driver = null): array + { + $driver = $driver ?? $this->driver; + + if (!$this->isSupportedDriver($driver)) + return $this->response('warning', 'Driver no soportado o no configurado.', ['session_count' => 0]); + + try { + switch ($driver) { + case 'redis': + return $this->getRedisStats(); + + case 'database': + return $this->getDatabaseStats(); + + case 'file': + return $this->getFileStats(); + + default: + return $this->response('warning', 'Driver no reconocido.', ['session_count' => 0]); + } + } catch (\Exception $e) { + return $this->response('danger', 'Error al obtener estadísticas: ' . $e->getMessage(), ['session_count' => 0]); + } + } + + public function clearSessions(string $driver = null): array + { + $driver = $driver ?? $this->driver; + + if (!$this->isSupportedDriver($driver)) { + return $this->response('warning', 'Driver no soportado o no configurado.'); + } + + try { + switch ($driver) { + case 'redis': + return $this->clearRedisSessions(); + + case 'memcached': + Cache::getStore()->flush(); + return $this->response('success', 'Se eliminó la memoria caché de sesiones en Memcached.'); + + case 'database': + DB::table('sessions')->truncate(); + return $this->response('success', 'Se eliminó la memoria caché de sesiones en la base de datos.'); + + case 'file': + return $this->clearFileSessions(); + + default: + return $this->response('warning', 'Driver no reconocido.'); + } + } catch (\Exception $e) { + return $this->response('danger', 'Error al limpiar las sesiones: ' . $e->getMessage()); + } + } + + + private function getRedisStats() + { + $prefix = config('cache.prefix'); // Asegúrate de agregar el sufijo correcto si es necesario + $keys = Redis::connection('sessions')->keys($prefix . '*'); + + return $this->response('success', 'Se ha recargado la información de la caché de Redis.', ['session_count' => count($keys)]); + } + + private function getDatabaseStats(): array + { + $sessionCount = DB::table('sessions')->count(); + + return $this->response('success', 'Se ha recargado la información de la base de datos.', ['session_count' => $sessionCount]); + } + + private function getFileStats(): array + { + $cachePath = config('session.files'); + $files = glob($cachePath . '/*'); + + return $this->response('success', 'Se ha recargado la información de sesiones de archivos.', ['session_count' => count($files)]); + } + + + /** + * Limpia sesiones en Redis. + */ + private function clearRedisSessions(): array + { + $prefix = config('cache.prefix', ''); + $keys = Redis::connection('sessions')->keys($prefix . '*'); + + if (!empty($keys)) { + Redis::connection('sessions')->flushdb(); + + // Simulate cache clearing delay + sleep(1); + + return $this->response('success', 'Se eliminó la memoria caché de sesiones en Redis.'); + } + + return $this->response('info', 'No se encontraron claves para eliminar en Redis.'); + } + + /** + * Limpia sesiones en archivos. + */ + private function clearFileSessions(): array + { + $cachePath = config('session.files'); + $files = glob($cachePath . '/*'); + + if (!empty($files)) { + foreach ($files as $file) { + unlink($file); + } + + return $this->response('success', 'Se eliminó la memoria caché de sesiones en archivos.'); + } + + return $this->response('info', 'No se encontraron sesiones en archivos para eliminar.'); + } + + + private function isSupportedDriver(string $driver): bool + { + return in_array($driver, ['redis', 'memcached', 'database', 'file']); + } + + /** + * Genera una respuesta estandarizada. + */ + private function response(string $status, string $message, array $data = []): array + { + return array_merge(compact('status', 'message'), $data); + } +} diff --git a/src/modules/App/Services/VuexyAdminService.php b/src/modules/App/Services/VuexyAdminService.php new file mode 100644 index 0000000..fc99eff --- /dev/null +++ b/src/modules/App/Services/VuexyAdminService.php @@ -0,0 +1,1198 @@ + 'Inicio', + 'route' => 'admin.home.index', + ]; + + private $user; + + private $orientation; + + public function __construct() + { + $this->user = Auth::user(); + $this->vuexySearch = Auth::user() !== null; + $this->orientation = config('custom.custom.myLayout'); + } + + /** + * Obtiene el menú según el estado del usuario (autenticado o no). + */ + public function getMenu() + { + // Obtener el menú desde la caché + $menu = $this->user === null + ? $this->getGuestMenu() + : $this->getUserMenu(); + + // Marcar la ruta actual como activa + $currentRoute = Route::currentRouteName(); + + return $this->markActive($menu, $currentRoute); + } + + /** + * Menú para usuarios no autenticados. + */ + private function getGuestMenu() + { + return Cache::remember('vuexy_menu_guest', now()->addDays(7), function () { + return $this->getMenuArray(); + }); + } + + /** + * Menú para usuarios autenticados. + */ + private function getUserMenu() + { + //Cache::forget("vuexy_menu_user_{$this->user->id}"); // Borrar la caché anterior para actualizarla + + return Cache::remember("vuexy_menu_user_{$this->user->id}", now()->addHours(24), function () { + return $this->getMenuArray(); + }); + } + + private function processMenu($menu) + { + foreach ($menu as &$item) { + // Determinar visibilidad actual (si no está definida, es true por defecto) + $item['visible'] = $item['visible'] ?? true; + + // Procesar submenús de manera recursiva + if (isset($item['submenu']) && is_array($item['submenu'])) { + $item['submenu'] = $this->processMenu($item['submenu']); + + // Un submenú es visible si al menos uno de sus hijos es visible + $item['visible'] = collect($item['submenu'])->contains('visible', true); + } + + // Generar URL para los elementos del menú que tengan una ruta definida + if (isset($item['route'])) + $item['url'] = Route::has($item['route']) ? route($item['route']) : '#'; + } + + // Filtrar los elementos del menú que no sean visibles + return array_filter($menu, fn($item) => $item['visible']); + } + + private function markActive($menu, $currentRoute) + { + foreach ($menu as &$item) { + $item['active'] = false; + + // Check if the route matches + if (isset($item['route']) && $item['route'] === $currentRoute) + $item['active'] = true; + + // Process submenus recursively + if (isset($item['submenu']) && !empty($item['submenu'])) { + $item['submenu'] = $this->markActive($item['submenu'], $currentRoute); + + // If any submenu is active, mark the parent as active + if (collect($item['submenu'])->contains('active', true)) + $item['active'] = true; + } + } + + return $menu; + } + + /** + * Invalida el cache del menú de un usuario. + */ + public static function clearUserMenuCache() + { + $user = Auth::user(); + + if ($user !== null) + Cache::forget("vuexy_menu_user_{$user->id}"); + } + + /** + * Invalida el cache del menú de invitados. + */ + public static function clearGuestMenuCache() + { + Cache::forget('vuexy_menu_guest'); + } + + + + public function getSearch() + { + return $this->vuexySearch; + } + + public function getVuexySearchData() + { + if ($this->user === null) + return null; + + $pages = Cache::remember("vuexy_search_user_{$this->user->id}", now()->addDays(7), function () { + return $this->cacheVuexySearchData(); + }); + + // Formatear como JSON esperado + return [ + 'pages' => $pages, + ]; + } + + private function cacheVuexySearchData() + { + $originalMenu = $this->getUserMenu(); + + return $this->getPagesSearchMenu($originalMenu); + } + + private function getPagesSearchMenu(array $menu, string $parentPath = '') + { + $formattedMenu = []; + + foreach ($menu as $name => $item) { + // Verificar si el elemento es visible + if (isset($item['visible']) && !$item['visible']) { + continue; + } + + // Construir la ruta jerárquica (menu / submenu / submenu) + $currentPath = $parentPath ? $parentPath . ' / ' . $name : $name; + + // Verificar si el elemento tiene una URL o una ruta + $url = $item['url'] ?? (isset($item['route']) ? route($item['route']) : null); + + // Agregar el elemento al menú formateado + if ($url) { + $formattedMenu[] = [ + 'name' => $currentPath, // Usar la ruta completa + 'icon' => $item['icon'] ?? 'ti ti-point', + 'url' => $url, + ]; + } + + // Si hay un submenú, procesarlo recursivamente + if (isset($item['submenu']) && is_array($item['submenu'])) { + $formattedMenu = array_merge( + $formattedMenu, + $this->getPagesSearchMenu($item['submenu'], $currentPath) // Pasar el path acumulado + ); + } + } + + return $formattedMenu; + } + + public static function clearSearchMenuCache() + { + $user = Auth::user(); + + if ($user !== null) + Cache::forget("vuexy_search_user_{$user->id}"); + } + + + + public function getQuickLinks() + { + if ($this->user === null) + return null; + + // Recuperar enlaces desde la caché + $quickLinks = Cache::remember("vuexy_quick_links_user_{$this->user->id}", now()->addDays(7), function () { + return $this->cacheQuickLinks(); + }); + + // Verificar si la ruta actual está en la lista + $currentRoute = Route::currentRouteName(); + $currentPageInList = $this->isCurrentPageInList($quickLinks, $currentRoute); + + // Agregar la verificación al resultado + $quickLinks['current_page_in_list'] = $currentPageInList; + + return $quickLinks; + } + + private function cacheQuickLinks() + { + $originalMenu = $this->getUserMenu(); + + $quickLinks = []; + + $quicklinks = Setting::where('user_id', Auth::user()->id) + ->where('key', 'quicklinks') + ->first(); + + $this->quicklinksRouteNames = $quicklinks ? json_decode($quicklinks->value, true) : []; + + // Ordenar y generar los quickLinks según el orden del menú + $this->collectQuickLinksFromMenu($originalMenu, $quickLinks); + + $quickLinksData = [ + 'totalLinks' => count($quickLinks), + 'rows' => array_chunk($quickLinks, 2), // Agrupar los atajos en filas de dos + ]; + + return $quickLinksData; + } + + private function collectQuickLinksFromMenu(array $menu, array &$quickLinks, string $parentTitle = null) + { + foreach ($menu as $title => $item) { + // Verificar si el elemento está en la lista de quicklinksRouteNames + if (isset($item['route']) && in_array($item['route'], $this->quicklinksRouteNames)) { + $quickLinks[] = [ + 'title' => $title, + 'subtitle' => $parentTitle ?? env('APP_NAME'), + 'icon' => $item['icon'] ?? 'ti ti-point', + 'url' => isset($item['route']) ? route($item['route']) : ($item['url'] ?? '#'), + 'route' => $item['route'], + ]; + } + + // Si tiene submenú, procesarlo recursivamente + if (isset($item['submenu']) && is_array($item['submenu'])) { + $this->collectQuickLinksFromMenu( + $item['submenu'], + $quickLinks, + $title // Pasar el título actual como subtítulo + ); + } + } + } + + /** + * Verifica si la ruta actual existe en la lista de enlaces. + */ + private function isCurrentPageInList(array $quickLinks, string $currentRoute): bool + { + foreach ($quickLinks['rows'] as $row) { + foreach ($row as $link) { + if (isset($link['route']) && $link['route'] === $currentRoute) { + return true; + } + } + } + return false; + } + + public static function clearQuickLinksCache() + { + $user = Auth::user(); + + if ($user !== null) + Cache::forget("vuexy_quick_links_user_{$user->id}"); + } + + + + public function getNotifications() + { + if ($this->user === null) + return null; + + return Cache::remember("vuexy_notifications_user_{$this->user->id}", now()->addHours(4), function () { + return $this->cacheNotifications(); + }); + } + + private function cacheNotifications() + { + return ""; + } + + public static function clearNotificationsCache() + { + $user = Auth::user(); + + if ($user !== null) + Cache::forget("vuexy_notifications_user_{$user->id}"); + } + + + + public function getBreadcrumbs() + { + $originalMenu = $this->user === null + ? $this->getGuestMenu() + : $this->getUserMenu(); + + $routeName = Route::currentRouteName() ? Route::currentRouteName() : ''; + + // Lógica para construir los breadcrumbs + $breadcrumbs = $this->findBreadcrumbTrail($originalMenu, $routeName); + + // Asegurar que el primer elemento siempre sea "Inicio" + array_unshift($breadcrumbs, $this->homeRoute); + + return $breadcrumbs; + } + + private function findBreadcrumbTrail(array $menu, string $routeName, array $breadcrumbs = []): array + { + foreach ($menu as $title => $item) { + $skipBreadcrumb = isset($item['breadcrumbs']) && $item['breadcrumbs'] === false; + + if (isset($item['route']) && $item['route'] === $routeName) { + if (!$skipBreadcrumb) { + $breadcrumbs[] = [ + 'name' => $title, + 'active' => true, + ]; + } + + return $breadcrumbs; + } + + if (isset($item['submenu']) && is_array($item['submenu'])) { + $newBreadcrumbs = $breadcrumbs; + + if (!$skipBreadcrumb) + $newBreadcrumbs[] = [ + 'name' => $title, + 'route' => $item['route'] ?? null, + ]; + + $found = $this->findBreadcrumbTrail($item['submenu'], $routeName, $newBreadcrumbs); + + if ($found) + return $found; + } + } + + return []; + } + + + + private function getMenuArray() + { + if ($this->orientation === 'horizontal') { + return $this->processMenu($this->getHorizontalMenu()); + } else { + return $this->processMenu($this->getVerticalMenu()); + } + } + + private function getVerticalMenu() + { + return $this->getHorizontalMenu(); + } + + private function getHorizontalMenu() + { + return [ + 'Inicio' => [ + 'breadcrumbs' => false, + 'icon' => 'menu-icon tf-icons ti ti-home', + 'submenu' => [ + 'Inicio' => [ + 'route' => 'admin.home.index', + 'icon' => 'menu-icon tf-icons ti ti-home', + ], + 'Ajustes' => [ + 'icon' => 'menu-icon tf-icons ti ti-settings-cog', + 'submenu' => [ + 'Aplicación' => [ + 'submenu' => [ + 'Ajustes generales' => [ + 'route' => 'admin.webapp.general-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-adjustments-alt', + 'visible' => $this->canUserAccess('webapp.general-settings.allow'), + ], + 'Ajustes de caché' => [ + 'route' => 'admin.webapp.cache-manager.index', + 'icon' => 'menu-icon tf-icons ti ti-cpu', + 'visible' => $this->canUserAccess('webapp.cache-manager.view'), + ], + 'API BANXICO' => [ + 'route' => 'admin.webapp.api-banxico.index', + 'icon' => 'menu-icon tf-icons ti ti-building-bank', + 'visible' => $this->canUserAccess('webapp.api-banxico.allow'), + ], + 'Servidor de correo SMTP' => [ + 'route' => 'admin.webapp.smtp-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-mail-cog', + 'visible' => $this->canUserAccess('webapp.smtp-settings.allow'), + ], + 'Catálogos' => [ + 'route' => 'admin.webapp.catalogs.index', + 'icon' => 'menu-icon tf-icons ti ti-library', + 'visible' => $this->canUserAccess('webapp.catalogs.view'), + ], + ], + ], + 'Sitio Web' => [ + 'submenu' => [ + 'Ajustes generales' => [ + 'route' => 'admin.website.general-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-tools', + 'visible' => $this->canUserAccess('website.general-settings.allow'), + ], + 'Avisos legales' => [ + 'route' => 'admin.website.legal.index', + 'icon' => 'menu-icon tf-icons ti ti-writing-sign', + 'visible' => $this->canUserAccess('website.legal.view'), + ], + ], + ], + 'Empresa' => [ + 'submenu' => [ + 'Información general' => [ + 'route' => 'admin.company.general-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-adjustments-alt', + 'visible' => $this->canUserAccess('company.general-settings.allow'), + ], + 'Sucursales' => [ + 'route' => 'admin.company.stores.index', + 'icon' => 'menu-icon tf-icons ti ti-building', + 'visible' => $this->canUserAccess('company.stores.view'), + ], + 'Centros de trabajo' => [ + 'route' => 'admin.company.workcenters.index', + 'icon' => 'menu-icon tf-icons ti ti-map-pin-cog', + 'visible' => $this->canUserAccess('company.stores.view'), + ], + 'Catálogos' => [ + 'route' => 'admin.company.catalogs.index', + 'icon' => 'menu-icon tf-icons ti ti-library', + 'visible' => $this->canUserAccess('company.catalogs.view'), + ], + ] + ], + 'Punto de venta' => [ + 'submenu' => [ + 'Listas de precios' => [ + 'route' => 'admin.pos.pricelists-config.index', + 'icon' => 'menu-icon tf-icons ti ti-list-search', + 'visible' => $this->canUserAccess('pos.pricelists-config.allow'), + ], + 'Ticket' => [ + 'route' => 'admin.pos.ticket-config.index', + 'icon' => 'menu-icon tf-icons ti ti-receipt', + 'visible' => $this->canUserAccess('pos.ticket-config.allow'), + ], + 'Catálogos' => [ + 'route' => 'admin.pos.catalogs.index', + 'icon' => 'menu-icon tf-icons ti ti-library', + 'visible' => $this->canUserAccess('pos.catalogs.view'), + ], + ] + ], + 'Facturación' => [ + 'submenu' => [ + 'Configuraciones' => [ + 'route' => 'admin.billing.general-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-tool', + 'visible' => $this->canUserAccess('billing.general-settings.allow'), + ], + 'Certificados de Sello Digital' => [ + 'route' => 'admin.billing.csds-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-certificate-2', + 'visible' => $this->canUserAccess('billing.csds-settings.allow'), + ], + 'Paquete de timbrado' => [ + 'route' => 'admin.billing.stamping-package.index', + 'icon' => 'menu-icon tf-icons ti ti-bell-cog', + 'visible' => $this->canUserAccess('billing.stamping-package.allow'), + ], + 'Servidor de correo SMTP' => [ + 'route' => 'admin.billing.smtp-settings.index', + 'icon' => 'menu-icon tf-icons ti ti-mail-cog', + 'visible' => $this->canUserAccess('billing.smtp-settings.allow'), + ], + ] + ], + ] + ], + 'Sistema' => [ + 'icon' => 'menu-icon tf-icons ti ti-user-cog', + 'submenu' => [ + 'Usuarios' => [ + 'route' => 'admin.system.users.index', + 'icon' => 'menu-icon tf-icons ti ti-users', + 'visible' => $this->canUserAccess('system.users.view'), + ], + 'Roles y permisos' => [ + 'submenu' => [ + 'Roles' => [ + 'route' => 'admin.system.roles.index', + 'icon' => 'menu-icon tf-icons ti ti-user-shield', + 'visible' => $this->canUserAccess('system.roles.view'), + ], + 'Permisos' => [ + 'route' => 'admin.system.permissions.index', + 'icon' => 'menu-icon tf-icons ti ti-user-star', + 'visible' => $this->canUserAccess('system.permissions.view'), + ] + ] + ], + 'Importar' => [ + 'submenu' => [ + 'Catálogos SAT' => [ + 'route' => 'admin.import.catalogs-sat.index', + 'icon' => 'menu-icon tf-icons ti ti-library', + 'visible' => $this->canUserAccess('import.catalogs-sat.allow'), + ], + ] + ], + ] + ], + env('APP_URL') => [ + 'url' => env('APP_URL'), + 'icon' => 'menu-icon tf-icons ti ti-world-www', + ], + /* + 'Exportar' => [ + 'icon' => 'menu-icon tf-icons ti ti-database-export', + 'submenu' => [ + 'Catálogos SAT' => [ + 'route' => 'admin.export.customers.index', + 'visible' => $this->canUserAccess('export.customers.allow'), + ], + ] + ], + */ + 'Acerca de' => [ + 'route' => 'admin.about.index', + 'icon' => 'menu-icon tf-icons ti ti-cat', + ], + ], + ], + + 'Recursos humanos' => [ + 'icon' => 'menu-icon tf-icons ti ti-users-group', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.human-resources.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('human-resources.dashboard.allow'), + ], + 'Empleados' => [ + 'route' => 'admin.human-resources.employees.index', + 'icon' => 'menu-icon tf-icons ti ti-id-badge-2', + 'visible' => $this->canUserAccess('human-resources.employees.view'), + ], + 'Puestos de trabajo' => [ + 'route' => 'admin.human-resources.jobs.index', + 'icon' => 'menu-icon tf-icons ti ti-tie', + 'visible' => $this->canUserAccess('human-resources.jobs.view'), + ], + ] + ], + + 'Nómina' => [ + 'icon' => 'menu-icon tf-icons ti ti-user-dollar', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.payrolls.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('payrolls.dashboard.allow'), + ], + 'Contratos' => [ + 'route' => 'admin.payrolls.contracts.index', + 'icon' => 'menu-icon tf-icons ti ti-writing-sign', + 'visible' => $this->canUserAccess('payrolls.contracts.view'), + ], + 'Asistencias' => [ + 'route' => 'admin.payrolls.assistance.index', + 'icon' => 'menu-icon tf-icons ti ti-calendar-exclamation', + 'visible' => $this->canUserAccess('payrolls.assistance.view'), + ], + 'CFDI Nómina' => [ + 'route' => 'admin.payrolls.billing.index', + 'icon' => 'menu-icon tf-icons ti ti-file-certificate', + 'visible' => $this->canUserAccess('billing.nomina.view'), + ], + ] + ], + + 'Activos fijos' => [ + 'icon' => 'menu-icon tf-icons ti ti-building', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.assets.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('assets.dashboard.allow'), + ], + 'Activos fijos' => [ + 'route' => 'admin.assets.assets.index', + 'icon' => 'menu-icon tf-icons ti ti-building', + 'visible' => $this->canUserAccess('assets.assets.view'), + ], + 'Eventos relacionados' => [ + 'route' => 'admin.assets.events.index', + 'icon' => 'menu-icon tf-icons ti ti-list-check', + 'visible' => $this->canUserAccess('assets.events.view'), + ], + ] + ], + + 'CRM' => [ + 'icon' => 'menu-icon tf-icons ti ti-users', + 'submenu' => [ + 'Contactos' => [ + 'route' => 'admin.crm.contacts.index', + 'icon' => 'menu-icon tf-icons ti ti-users', + 'visible' => $this->canUserAccess('crm.contacts.view'), + ], + 'Campañas de marketing' => [ + 'route' => 'admin.crm.marketing-campaigns.index', + 'icon' => 'menu-icon tf-icons ti ti-ad-2', + 'visible' => $this->canUserAccess('crm.marketing-campaigns.view'), + ], + 'Oportunidades ' => [ + 'route' => 'admin.crm.leads.index', + 'icon' => 'menu-icon tf-icons ti ti-target-arrow', + 'visible' => $this->canUserAccess('crm.leads.view'), + ], + 'Newsletter' => [ + 'route' => 'admin.crm.newsletter.index', + 'icon' => 'menu-icon tf-icons ti ti-notebook', + 'visible' => $this->canUserAccess('crm.newsletter.view'), + ], + ] + ], + + 'Productos y servicios' => [ + 'icon' => 'menu-icon tf-icons ti ti-package', + 'submenu' => [ + 'Categorias' => [ + 'route' => 'admin.products.categories.index', + 'icon' => 'menu-icon tf-icons ti ti-category', + 'visible' => $this->canUserAccess('products.categories.view'), + ], + 'Catálogos' => [ + 'route' => 'admin.products.catalogs.index', + 'icon' => 'menu-icon tf-icons ti ti-library', + 'visible' => $this->canUserAccess('products.catalogs.view'), + ], + 'Productos y servicios' => [ + 'route' => 'admin.products.products.index', + 'icon' => 'menu-icon tf-icons ti ti-packages', + 'visible' => $this->canUserAccess('products.products.view'), + ], + 'Agregar producto o servicio' => [ + 'route' => 'admin.products.products.create', + 'icon' => 'menu-icon tf-icons ti ti-package', + 'visible' => $this->canUserAccess('products.products.create'), + ], + ] + ], + + 'Compras y Gastos' => [ + 'icon' => 'menu-icon tf-icons ti ti-receipt-2', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.purchases.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('purchases.dashboard.allow'), + ], + 'Proveedores' => [ + 'route' => 'admin.purchases.supplier.index', + 'icon' => 'menu-icon tf-icons ti ti-truck', + 'visible' => $this->canUserAccess('purchases.supplier.view'), + ], + 'Ordenes de compra' => [ + 'icon' => 'menu-icon tf-icons ti ti-list-details', + 'submenu' => [ + 'Nueva ordenes de compra' => [ + 'route' => 'admin.purchases.orders.create', + 'icon' => 'menu-icon tf-icons ti ti-basket-check', + 'visible' => $this->canUserAccess('purchases.orders.create'), + ], + 'Ordenes de compra' => [ + 'route' => 'admin.purchases.orders.index', + 'icon' => 'menu-icon tf-icons ti ti-basket-check', + 'visible' => $this->canUserAccess('purchases.orders.view'), + ], + 'Ordenes de compra por producto o servicio' => [ + 'route' => 'admin.purchases.orders-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-basket-check', + 'visible' => $this->canUserAccess('purchases.orders.view'), + ], + ] + ], + 'Compras y gastos' => [ + 'icon' => 'menu-icon tf-icons ti ti-receipt-2', + 'submenu' => [ + 'Nueva compras o gastos' => [ + 'route' => 'admin.purchases.purchases.create', + 'icon' => 'menu-icon tf-icons ti ti-basket-dollar', + 'visible' => $this->canUserAccess('purchases.purchases.create'), + ], + 'Compras y gastos' => [ + 'route' => 'admin.purchases.purchases.index', + 'icon' => 'menu-icon tf-icons ti ti-basket-dollar', + 'visible' => $this->canUserAccess('purchases.purchases.view'), + ], + 'Compras y gastos por producto o servicio' => [ + 'route' => 'admin.purchases.purchases-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-basket-dollar', + 'visible' => $this->canUserAccess('purchases.purchases.view'), + ], + ] + ], + ] + ], + + 'Ventas' => [ + 'icon' => 'menu-icon tf-icons ti ti-cash-register', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.pos.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('pos.dashboard.allow'), + ], + 'Clientes' => [ + 'route' => 'admin.pos.customers.index', + 'icon' => 'menu-icon tf-icons ti ti-users-group', + 'visible' => $this->canUserAccess('pos.customers.view'), + ], + 'Lista de precios' => [ + 'route' => 'admin.pos.pricelist.index', + 'icon' => 'menu-icon tf-icons ti ti-report-search', + 'visible' => $this->canUserAccess('pos.sales.view'), + ], + 'Cotizaciones' => [ + 'route' => 'admin.pos.quotes.index', + 'icon' => 'menu-icon tf-icons ti ti-file-dollar', + 'visible' => $this->canUserAccess('pos.quotes.view'), + ], + 'Ventas' => [ + 'icon' => 'menu-icon tf-icons ti ti-cash-register', + 'submenu' => [ + 'Crear venta' => [ + 'route' => 'admin.pos.sales.create', + 'icon' => 'menu-icon tf-icons ti ti-cash-register', + 'visible' => $this->canUserAccess('pos.sales.create'), + ], + 'Ventas' => [ + 'route' => 'admin.pos.sales.index', + 'icon' => 'menu-icon tf-icons ti ti-cash-register', + 'visible' => $this->canUserAccess('pos.sales.view'), + ], + 'Ventas por producto o servicio' => [ + 'route' => 'admin.pos.sales-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-cash-register', + 'visible' => $this->canUserAccess('pos.sales.view'), + ], + ] + ], + 'Remisiones' => [ + 'icon' => 'menu-icon tf-icons ti ti-receipt', + 'submenu' => [ + 'Crear remisión' => [ + 'route' => 'admin.pos.remissions.create', + 'icon' => 'menu-icon tf-icons ti ti-receipt', + 'visible' => $this->canUserAccess('pos.remissions.create'), + ], + 'Remisiones' => [ + 'route' => 'admin.pos.remissions.index', + 'icon' => 'menu-icon tf-icons ti ti-receipt', + 'visible' => $this->canUserAccess('pos.remissions.view'), + ], + 'Remisiones por producto o servicio' => [ + 'route' => 'admin.pos.remissions-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-receipt', + 'visible' => $this->canUserAccess('pos.remissions.view'), + ], + ] + ], + 'Notas de crédito' => [ + 'icon' => 'menu-icon tf-icons ti ti-receipt-refund', + 'submenu' => [ + 'Crear nota de crédito' => [ + 'route' => 'admin.pos.credit-notes.create', + 'icon' => 'menu-icon tf-icons ti ti-receipt-refund', + 'visible' => $this->canUserAccess('pos.credit-notes.create'), + ], + 'Notas de créditos' => [ + 'route' => 'admin.pos.credit-notes.index', + 'icon' => 'menu-icon tf-icons ti ti-receipt-refund', + 'visible' => $this->canUserAccess('pos.credit-notes.view'), + ], + 'Notas de crédito por producto o servicio' => [ + 'route' => 'admin.pos.credit-notes-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-receipt-refund', + 'visible' => $this->canUserAccess('pos.credit-notes.view'), + ], + ] + ], + ] + ], + + 'Facturación' => [ + 'icon' => 'menu-icon tf-icons ti ti-rubber-stamp', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.billing.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('billing.dashboard.allow'), + ], + 'Ingresos' => [ + 'icon' => 'menu-icon tf-icons ti ti-file-certificate', + 'submenu' => [ + 'Facturar ventas' => [ + 'route' => 'admin.billing.ingresos-stamp.index', + 'icon' => 'menu-icon tf-icons ti ti-rubber-stamp', + 'visible' => $this->canUserAccess('billing.ingresos.create'), + ], + 'CFDI Ingresos' => [ + 'route' => 'admin.billing.ingresos.index', + 'icon' => 'menu-icon tf-icons ti ti-file-invoice', + 'visible' => $this->canUserAccess('billing.ingresos.view'), + ], + 'CFDI Ingresos por producto o servicio' => [ + 'route' => 'admin.billing.ingresos-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-file-invoice', + 'visible' => $this->canUserAccess('billing.ingresos.view'), + ], + ] + ], + 'Egresos' => [ + 'icon' => 'menu-icon tf-icons ti ti-file-certificate', + 'submenu' => [ + 'Facturar notas de crédito' => [ + 'route' => 'admin.billing.egresos-stamp.index', + 'icon' => 'menu-icon tf-icons ti ti-rubber-stamp', + 'visible' => $this->canUserAccess('billing.egresos.create'), + ], + 'CFDI Engresos' => [ + 'route' => 'admin.billing.egresos.index', + 'icon' => 'menu-icon tf-icons ti ti-file-invoice', + 'visible' => $this->canUserAccess('billing.egresos.view'), + ], + 'CFDI Engresos por producto o servicio' => [ + 'route' => 'admin.billing.egresos-by-product.index', + 'icon' => 'menu-icon tf-icons ti ti-lisfile-invoicet', + 'visible' => $this->canUserAccess('billing.egresos.view'), + ], + ] + ], + 'Pagos' => [ + 'icon' => 'menu-icon tf-icons ti ti-file-certificate', + 'submenu' => [ + 'Facturar pagos' => [ + 'route' => 'admin.billing.pagos-stamp.index', + 'icon' => 'menu-icon tf-icons ti ti-rubber-stamp', + 'visible' => $this->canUserAccess('billing.pagos.created'), + ], + 'CFDI Pagos' => [ + 'route' => 'admin.billing.pagos.index', + 'icon' => 'menu-icon tf-icons ti ti-file-invoice', + 'visible' => $this->canUserAccess('billing.pagos.view'), + ], + ] + ], + 'CFDI Nómina' => [ + 'route' => 'admin.billing.nomina.index', + 'icon' => 'menu-icon tf-icons ti ti-file-certificate', + 'visible' => $this->canUserAccess('billing.nomina.view'), + ], + 'Verificador de CFDI 4.0' => [ + 'route' => 'admin.billing.verify-cfdi.index', + 'icon' => 'menu-icon tf-icons ti ti-rosette-discount-check', + 'visible' => $this->canUserAccess('billing.verify-cfdi.allow'), + ], + ] + ], + + 'Finanzas' => [ + 'icon' => 'menu-icon tf-icons ti ti-coins', + 'submenu' => [ + 'Tablero' => [ + 'route' => 'admin.finance.dashboard.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-infographic', + 'visible' => $this->canUserAccess('finance.dashboard.allow'), + ], + 'Catálogos de cuentas contables' => [ + 'route' => 'admin.finance.accounting-charts.index', + 'icon' => 'menu-icon tf-icons ti ti-chart-histogram', + 'visible' => $this->canUserAccess('finance.accounting-charts.view'), + ], + 'Cuentas por pagar' => [ + 'route' => 'admin.finance.accounts-payable.index', + 'icon' => 'menu-icon tf-icons ti ti-businessplan', + 'visible' => $this->canUserAccess('finance.accounts-payable.view'), + ], + 'Cuentas por cobrar' => [ + 'route' => 'admin.finance.accounts-receivable.index', + 'icon' => 'menu-icon tf-icons ti ti-cash-register', + 'visible' => $this->canUserAccess('finance.accounts-receivable.view'), + ], + ] + ], + + 'Sitio Web' => [ + 'icon' => 'menu-icon tf-icons ti ti-wand', + 'submenu' => [ + 'Slider' => [ + 'route' => 'admin.website.slider.index', + 'icon' => 'menu-icon tf-icons ti ti-table-row', + 'visible' => $this->canUserAccess('website.slider.view'), + ], + 'Concierge Magazine' => [ + 'route' => 'admin.website.cmagazine.index', + 'icon' => 'menu-icon tf-icons ti ti-book', + 'visible' => $this->canUserAccess('website.cmagazine.view'), + ], + 'Preguntas frecuentes' => [ + 'route' => 'admin.website.faq.index', + 'icon' => 'menu-icon tf-icons ti ti-bubble-text', + 'visible' => $this->canUserAccess('website.faq.view'), + ], + ] + ], + + 'Blog' => [ + 'icon' => 'menu-icon tf-icons ti ti-news', + 'submenu' => [ + 'Categorias' => [ + 'route' => 'admin.blog.categories.index', + 'icon' => 'menu-icon tf-icons ti ti-category', + 'visible' => $this->canUserAccess('blog.categories.view'), + ], + 'Etiquetas' => [ + 'route' => 'admin.blog.tags.index', + 'icon' => 'menu-icon tf-icons ti ti-tags', + 'visible' => $this->canUserAccess('blog.tags.view'), + ], + 'Articulos' => [ + 'route' => 'admin.blog.articles.index', + 'icon' => 'menu-icon tf-icons ti ti-news', + 'visible' => $this->canUserAccess('blog.articles.view'), + ], + 'Comentarios' => [ + 'route' => 'admin.blog.comments.index', + 'icon' => 'menu-icon tf-icons ti ti-message', + 'visible' => $this->canUserAccess('blog.comments.view'), + ], + ] + ], + + 'Iniciar sesión' => [ + 'route' => 'login', + 'icon' => 'menu-icon tf-icons ti ti-login', + 'visible' => $this->user === null, + ], + + 'Recuperar contraseña' => [ + 'route' => 'password.request', + 'icon' => 'menu-icon tf-icons ti ti-key', + 'visible' => !$this->user === null, + ], + ]; + } + + private function canUserAccess($permission) + { + return $this->user && $this->user->can($permission); + } +} diff --git a/src/modules/App/Services/WebsiteSettingsService.php b/src/modules/App/Services/WebsiteSettingsService.php new file mode 100644 index 0000000..db4cfc8 --- /dev/null +++ b/src/modules/App/Services/WebsiteSettingsService.php @@ -0,0 +1,211 @@ + [180, 180], + '192x192' => [192, 192], + '152x152' => [152, 152], + '120x120' => [120, 120], + '76x76' => [76, 76], + '16x16' => [16, 16], + ]; + + private $imageLogoMaxPixels1 = 22500; // Primera versión (px^2) + private $imageLogoMaxPixels2 = 75625; // Segunda versión (px^2) en Base64 + private $imageLogoMaxPixels3 = 230400; // Tercera versión (px^2) + + public function __construct() + { + $this->driver = config('image.driver', 'gd'); + } + + public function updateSetting(string $key, string $value): bool + { + $setting = Setting::updateOrCreate( + ['key' => $key], + ['value' => trim($value)] + ); + + return $setting->save(); + } + + public function processAndSaveFavicon($image): void + { + Storage::makeDirectory($this->imageDisk . '/' . $this->favicon_basePath); + + // Eliminar favicons antiguos + $this->deleteOldFavicons(); + + // Guardar imagen original + $imageManager = new ImageManager($this->driver); + + $imageName = uniqid('website_favicon_'); + + $image = $imageManager->read($image->getRealPath()); + + foreach ($this->faviconsSizes as $size => [$width, $height]) { + $resizedPath = $this->favicon_basePath . $imageName . "_{$size}.png"; + + $image->cover($width, $height); + + Storage::disk($this->imageDisk)->put($resizedPath, $image->toPng(indexed: true)); + } + + $this->updateSetting('website_favicon_ns', $this->favicon_basePath . $imageName); + } + + protected function deleteOldFavicons(): void + { + // Obtener el favicon actual desde la base de datos + $currentFavicon = Setting::where('key', 'website_favicon')->value('value'); + + if ($currentFavicon) { + $filePaths = [ + $this->imageDisk . '/' . $currentFavicon, + $this->imageDisk . '/' . $currentFavicon . '_16x16.png', + $this->imageDisk . '/' . $currentFavicon . '_192x192.png', + $this->imageDisk . '/' . $currentFavicon . '_76x76.png', + $this->imageDisk . '/' . $currentFavicon . '_120x120.png', + $this->imageDisk . '/' . $currentFavicon . '_152x152.png', + $this->imageDisk . '/' . $currentFavicon . '_180x180.png', + ]; + + foreach ($filePaths as $filePath) { + if (Storage::exists($filePath)) { + Storage::delete($filePath); + } + } + } + } + + public function processAndSaveImageLogo($image, string $type = ''): void + { + // Crear directorio si no existe + Storage::makeDirectory($this->imageDisk . '/' . $this->image_logo_basePath); + + // Eliminar imágenes antiguas + $this->deleteOldImageWebapp($type); + + // Leer imagen original + $imageManager = new ImageManager($this->driver); + $image = $imageManager->read($image->getRealPath()); + + // Generar tres versiones con diferentes áreas máximas + $this->generateAndSaveImage($image, $type, $this->imageLogoMaxPixels1, 'small'); // Versión 1 + $this->generateAndSaveImage($image, $type, $this->imageLogoMaxPixels2, 'medium'); // Versión 2 + $this->generateAndSaveImage($image, $type, $this->imageLogoMaxPixels3); // Versión 3 + $this->generateAndSaveImageAsBase64($image, $type, $this->imageLogoMaxPixels3); // Versión 3 + } + + private function generateAndSaveImage($image, string $type, int $maxPixels, string $suffix = ''): void + { + $imageClone = clone $image; + + // Escalar imagen conservando aspecto + $this->resizeImageToMaxPixels($imageClone, $maxPixels); + + $imageName = 'website_image_logo' . ($suffix ? '_' . $suffix : '') . ($type == 'dark' ? '_dark' : ''); + + // Generar nombre y ruta + $imageNameUid = uniqid($imageName . '_', ".png"); + $resizedPath = $this->image_logo_basePath . $imageNameUid; + + // Guardar imagen en PNG + Storage::disk($this->imageDisk)->put($resizedPath, $imageClone->toPng(indexed: true)); + + // Actualizar configuración + $this->updateSetting($imageName, $resizedPath); + } + + private function resizeImageToMaxPixels($image, int $maxPixels) + { + // Obtener dimensiones originales de la imagen + $originalWidth = $image->width(); // Método para obtener el ancho + $originalHeight = $image->height(); // Método para obtener el alto + + // Calcular el aspecto + $aspectRatio = $originalWidth / $originalHeight; + + // Calcular dimensiones redimensionadas conservando aspecto + if ($aspectRatio > 1) { // Ancho es dominante + $newWidth = sqrt($maxPixels * $aspectRatio); + $newHeight = $newWidth / $aspectRatio; + } else { // Alto es dominante + $newHeight = sqrt($maxPixels / $aspectRatio); + $newWidth = $newHeight * $aspectRatio; + } + + // Redimensionar la imagen + $image->resize( + round($newWidth), // Redondear para evitar problemas con números decimales + round($newHeight), + function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + } + ); + + return $image; + } + + + private function generateAndSaveImageAsBase64($image, string $type, int $maxPixels): void + { + $imageClone = clone $image; + + // Redimensionar imagen conservando el aspecto + $this->resizeImageToMaxPixels($imageClone, $maxPixels); + + // Convertir a Base64 + $base64Image = (string) $imageClone->toJpg(40)->toDataUri(); + + // Guardar como configuración + $this->updateSetting( + "website_image_logo_base64" . ($type === 'dark' ? '_dark' : ''), + $base64Image // Ya incluye "data:image/png;base64," + ); + } + + + protected function deleteOldImageWebapp(string $type = ''): void + { + // Determinar prefijo según el tipo (normal o dark) + $suffix = $type === 'dark' ? '_dark' : ''; + + // Claves relacionadas con las imágenes que queremos limpiar + $imageKeys = [ + "website_image_logo{$suffix}", + "website_image_logo_small{$suffix}", + "website_image_logo_medium{$suffix}", + "website_image_logo_base64{$suffix}", + ]; + + foreach ($imageKeys as $key) { + // Obtener la ruta de la imagen actual desde la base de datos + $currentImage = Setting::where('key', $key)->value('value'); + + // Si es una imagen en disco, eliminarla + if ($currentImage && !str_starts_with($currentImage, 'data:image')) { + $filePath = $this->imageDisk . '/' . $currentImage; + if (Storage::exists($filePath)) { + Storage::delete($filePath); + } + } + + // Opcional: Eliminar la configuración de la base de datos + Setting::where('key', $key)->delete(); + } + } +} diff --git a/src/modules/BaseServiceProvider.php b/src/modules/BaseServiceProvider.php new file mode 100644 index 0000000..a6c9c4c --- /dev/null +++ b/src/modules/BaseServiceProvider.php @@ -0,0 +1,112 @@ +app->register(FortifyServiceProvider::class); + $this->app->register(PermissionServiceProvider::class); + $this->app->register(GlobalSettingsProvider::class); + $this->app->register(VuexyAdminProvider::class); + } + + + public function boot() + { + // Registrar alias del middleware + $this->app['router']->aliasMiddleware('admin.settings', AdminTemplateMiddleware::class); + + // Register the module's routes + Route::middleware(['web'])->group(__DIR__ . '/routes.php'); + + // Register the module's views and resources + $this->loadViewsFrom(__DIR__ . '/Resources/views', 'admin'); + + // Register the migrations + $this->loadMigrationsFrom(__DIR__ . '/Database/migrations'); + + // Registrar manualmente listeners + Event::listen(Login::class, HandleUserLogin::class); + Event::listen(Logout::class, ClearUserCache::class); + + // Register the module's Livewire components + Livewire::component('user-count', UserCount::class); + Livewire::component('user-table', UserTable::class); + Livewire::component('role-card', RoleCards::class); + Livewire::component('permissions-index', PermissionsIndex::class); + + Livewire::component('general-settings', GeneralSettings::class); + Livewire::component('application-settings', ApplicationSettings::class); + Livewire::component('interface-settings', InterfaceSettings::class); + + Livewire::component('cache-stats', CacheStats::class); + Livewire::component('session-stats', SessionStats::class); + Livewire::component('redis-stats', RedisStats::class); + Livewire::component('memcached-stats', MemcachedStats::class); + Livewire::component('cache-functions', CacheFunctions::class); + + Livewire::component('mail-smtp-settings', MailSmtpSettings::class); + Livewire::component('mail-sender-response-settings', MailSenderResponseSettings::class); + + Livewire::component('website-settings', WebsiteSettings::class); + Livewire::component('website-favicon-settings', FaviconSettings::class); + Livewire::component('website-image-logo-settings', ImageLogoSettings::class); + Livewire::component('website-social-settings', SocialSettings::class); + Livewire::component('website-contact-form-settings', ContactFormSettings::class); + Livewire::component('website-contact-info-settings', ContactInfoSettings::class); + Livewire::component('website-location-settings', LocationSettings::class); + Livewire::component('website-chat-settings', ChatSettings::class); + Livewire::component('website-analytics-settings', AnalyticsSettings::class); + Livewire::component('website-template-settings', TemplateSettings::class); + Livewire::component('website-legal-settings', LegalSettings::class); + + // Enable auditing + User::observe(AuditableObserver::class); + } +} diff --git a/src/modules/Config/_var.php b/src/modules/Config/_var.php new file mode 100644 index 0000000..52e7b24 --- /dev/null +++ b/src/modules/Config/_var.php @@ -0,0 +1,14 @@ + "koneko.mx", + "appTitle" => "Koneko Soluciones Tecnológicas", + "appDescription" => "Koneko Soluciones Tecnológicas", + "appLogo" => "../assets/img/logo/koneko-04.png", + "appFavicon" => "../assets/img/logo/koneko-04.png", + "author" => "arturo@koneko.mx", + "creatorName" => "Koneko Soluciones Tecnológicas", + "creatorUrl" => "https://koneko.mx", + "licenseUrl" => "https://koneko.mx/koneko-admin/licencia", + "supportUrl" => "https://koneko.mx/soporte", +]; diff --git a/src/modules/Config/custom.php b/src/modules/Config/custom.php new file mode 100644 index 0000000..ab4980f --- /dev/null +++ b/src/modules/Config/custom.php @@ -0,0 +1,36 @@ + [ + 'myLayout' => 'horizontal', // Options[String]: vertical(default), horizontal + 'myTheme' => 'theme-semi-dark', // Options[String]: theme-default(default), theme-bordered, theme-semi-dark + 'myStyle' => 'light', // Options[String]: light(default), dark & system mode + 'myRTLSupport' => false, // options[Boolean]: true(default), false // To provide RTLSupport or not + 'myRTLMode' => false, // options[Boolean]: false(default), true // To set layout to RTL layout (myRTLSupport must be true for rtl mode) + 'hasCustomizer' => true, // options[Boolean]: true(default), false // Display customizer or not THIS WILL REMOVE INCLUDED JS FILE. SO LOCAL STORAGE WON'T WORK + 'displayCustomizer' => true, // options[Boolean]: true(default), false // Display customizer UI or not, THIS WON'T REMOVE INCLUDED JS FILE. SO LOCAL STORAGE WILL WORK + 'contentLayout' => 'compact', // options[String]: 'compact', 'wide' (compact=container-xxl, wide=container-fluid) + 'navbarType' => 'static', // options[String]: 'sticky', 'static', 'hidden' (Only for vertical Layout) + 'footerFixed' => false, // options[Boolean]: false(default), true // Footer Fixed + 'menuFixed' => false, // options[Boolean]: true(default), false // Layout(menu) Fixed (Only for vertical Layout) + 'menuCollapsed' => true, // options[Boolean]: false(default), true // Show menu collapsed, (Only for vertical Layout) + 'headerType' => 'static', // options[String]: 'static', 'fixed' (for horizontal layout only) + 'showDropdownOnHover' => false, // true, false (for horizontal layout only) + 'authViewMode' => 'cover', // Options[String]: cover(default), basic + 'maxQuickLinks' => 8, // options[Integer]: 6(default), 8, 10 + 'customizerControls' => [ + //'rtl', + 'style', + 'headerType', + 'contentLayout', + 'layoutCollapsed', + 'layoutNavbarOptions', + 'themes', + ], // To show/hide customizer options + ], +]; \ No newline at end of file diff --git a/src/modules/Database/data/catCFDI_V_4_20241121.xls b/src/modules/Database/data/catCFDI_V_4_20241121.xls new file mode 100644 index 0000000..fca7517 Binary files /dev/null and b/src/modules/Database/data/catCFDI_V_4_20241121.xls differ diff --git a/src/modules/Database/data/catalog-sat_bancos.json b/src/modules/Database/data/catalog-sat_bancos.json new file mode 100644 index 0000000..dd4fea8 --- /dev/null +++ b/src/modules/Database/data/catalog-sat_bancos.json @@ -0,0 +1,467 @@ +[ + { + "c_banco": "002", + "descripcion": "BANAMEX", + "razon_social": "Banco Nacional de México, S.A., Institución de Banca Múltiple, Grupo Financiero Banamex" + }, + { + "c_banco": "006", + "descripcion": "BANCOMEXT", + "razon_social": "Banco Nacional de Comercio Exterior, Sociedad Nacional de Crédito, Institución de Banca de Desarrollo" + }, + { + "c_banco": "009", + "descripcion": "BANOBRAS", + "razon_social": "Banco Nacional de Obras y Servicios Públicos, Sociedad Nacional de Crédito, Institución de Banca de Desarrollo" + }, + { + "c_banco": "012", + "descripcion": "BBVA BANCOMER", + "razon_social": "BBVA Bancomer, S.A., Institución de Banca Múltiple, Grupo Financiero BBVA Bancomer" + }, + { + "c_banco": "014", + "descripcion": "SANTANDER", + "razon_social": "Banco Santander (México), S.A., Institución de Banca Múltiple, Grupo Financiero Santander" + }, + { + "c_banco": "019", + "descripcion": "BANJERCITO", + "razon_social": "Banco Nacional del Ejército, Fuerza Aérea y Armada, Sociedad Nacional de Crédito, Institución de Banca de Desarrollo" + }, + { + "c_banco": "021", + "descripcion": "HSBC", + "razon_social": "HSBC México, S.A., institución De Banca Múltiple, Grupo Financiero HSBC" + }, + { + "c_banco": "030", + "descripcion": "BAJIO", + "razon_social": "Banco del Bajío, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "032", + "descripcion": "IXE", + "razon_social": "IXE Banco, S.A., Institución de Banca Múltiple, IXE Grupo Financiero" + }, + { + "c_banco": "036", + "descripcion": "INBURSA", + "razon_social": "Banco Inbursa, S.A., Institución de Banca Múltiple, Grupo Financiero Inbursa" + }, + { + "c_banco": "037", + "descripcion": "INTERACCIONES", + "razon_social": "Banco Interacciones, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "042", + "descripcion": "MIFEL", + "razon_social": "Banca Mifel, S.A., Institución de Banca Múltiple, Grupo Financiero Mifel" + }, + { + "c_banco": "044", + "descripcion": "SCOTIABANK", + "razon_social": "Scotiabank Inverlat, S.A." + }, + { + "c_banco": "058", + "descripcion": "BANREGIO", + "razon_social": "Banco Regional de Monterrey, S.A., Institución de Banca Múltiple, Banregio Grupo Financiero" + }, + { + "c_banco": "059", + "descripcion": "INVEX", + "razon_social": "Banco Invex, S.A., Institución de Banca Múltiple, Invex Grupo Financiero" + }, + { + "c_banco": "060", + "descripcion": "BANSI", + "razon_social": "Bansi, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "062", + "descripcion": "AFIRME", + "razon_social": "Banca Afirme, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "072", + "descripcion": "BANORTE", + "razon_social": "Banco Mercantil del Norte, S.A., Institución de Banca Múltiple, Grupo Financiero Banorte" + }, + { + "c_banco": "102", + "descripcion": "THE ROYAL BANK", + "razon_social": "The Royal Bank of Scotland México, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "103", + "descripcion": "AMERICAN EXPRESS", + "razon_social": "American Express Bank (México), S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "106", + "descripcion": "BAMSA", + "razon_social": "Bank of America México, S.A., Institución de Banca Múltiple, Grupo Financiero Bank of America" + }, + { + "c_banco": "108", + "descripcion": "TOKYO", + "razon_social": "Bank of Tokyo-Mitsubishi UFJ (México), S.A." + }, + { + "c_banco": "110", + "descripcion": "JP MORGAN", + "razon_social": "Banco J.P. Morgan, S.A., Institución de Banca Múltiple, J.P. Morgan Grupo Financiero" + }, + { + "c_banco": "112", + "descripcion": "BMONEX", + "razon_social": "Banco Monex, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "113", + "descripcion": "VE POR MAS", + "razon_social": "Banco Ve Por Mas, S.A. Institución de Banca Múltiple" + }, + { + "c_banco": "116", + "descripcion": "ING", + "razon_social": "ING Bank (México), S.A., Institución de Banca Múltiple, ING Grupo Financiero" + }, + { + "c_banco": "124", + "descripcion": "DEUTSCHE", + "razon_social": "Deutsche Bank México, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "126", + "descripcion": "CREDIT SUISSE", + "razon_social": "Banco Credit Suisse (México), S.A. Institución de Banca Múltiple, Grupo Financiero Credit Suisse (México)" + }, + { + "c_banco": "127", + "descripcion": "AZTECA", + "razon_social": "Banco Azteca, S.A. Institución de Banca Múltiple." + }, + { + "c_banco": "128", + "descripcion": "AUTOFIN", + "razon_social": "Banco Autofin México, S.A. Institución de Banca Múltiple" + }, + { + "c_banco": "129", + "descripcion": "BARCLAYS", + "razon_social": "Barclays Bank México, S.A., Institución de Banca Múltiple, Grupo Financiero Barclays México" + }, + { + "c_banco": "130", + "descripcion": "COMPARTAMOS", + "razon_social": "Banco Compartamos, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "131", + "descripcion": "BANCO FAMSA", + "razon_social": "Banco Ahorro Famsa, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "132", + "descripcion": "BMULTIVA", + "razon_social": "Banco Multiva, S.A., Institución de Banca Múltiple, Multivalores Grupo Financiero" + }, + { + "c_banco": "133", + "descripcion": "ACTINVER", + "razon_social": "Banco Actinver, S.A. Institución de Banca Múltiple, Grupo Financiero Actinver" + }, + { + "c_banco": "134", + "descripcion": "WAL-MART", + "razon_social": "Banco Wal-Mart de México Adelante, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "135", + "descripcion": "NAFIN", + "razon_social": "Nacional Financiera, Sociedad Nacional de Crédito, Institución de Banca de Desarrollo" + }, + { + "c_banco": "136", + "descripcion": "INTERBANCO", + "razon_social": "Inter Banco, S.A. Institución de Banca Múltiple" + }, + { + "c_banco": "137", + "descripcion": "BANCOPPEL", + "razon_social": "BanCoppel, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "138", + "descripcion": "ABC CAPITAL", + "razon_social": "ABC Capital, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "139", + "descripcion": "UBS BANK", + "razon_social": "UBS Bank México, S.A., Institución de Banca Múltiple, UBS Grupo Financiero" + }, + { + "c_banco": "140", + "descripcion": "CONSUBANCO", + "razon_social": "Consubanco, S.A. Institución de Banca Múltiple" + }, + { + "c_banco": "141", + "descripcion": "VOLKSWAGEN", + "razon_social": "Volkswagen Bank, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "143", + "descripcion": "CIBANCO", + "razon_social": "CIBanco, S.A." + }, + { + "c_banco": "145", + "descripcion": "BBASE", + "razon_social": "Banco Base, S.A., Institución de Banca Múltiple" + }, + { + "c_banco": "166", + "descripcion": "BANSEFI", + "razon_social": "Banco del Ahorro Nacional y Servicios Financieros, Sociedad Nacional de Crédito, Institución de Banca de Desarrollo" + }, + { + "c_banco": "168", + "descripcion": "HIPOTECARIA FEDERAL", + "razon_social": "Sociedad Hipotecaria Federal, Sociedad Nacional de Crédito, Institución de Banca de Desarrollo" + }, + { + "c_banco": "600", + "descripcion": "MONEXCB", + "razon_social": "Monex Casa de Bolsa, S.A. de C.V. Monex Grupo Financiero" + }, + { + "c_banco": "601", + "descripcion": "GBM", + "razon_social": "GBM Grupo Bursátil Mexicano, S.A. de C.V. Casa de Bolsa" + }, + { + "c_banco": "602", + "descripcion": "MASARI", + "razon_social": "Masari Casa de Bolsa, S.A." + }, + { + "c_banco": "605", + "descripcion": "VALUE", + "razon_social": "Value, S.A. de C.V. Casa de Bolsa" + }, + { + "c_banco": "606", + "descripcion": "ESTRUCTURADORES", + "razon_social": "Estructuradores del Mercado de Valores Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "607", + "descripcion": "TIBER", + "razon_social": "Casa de Cambio Tiber, S.A. de C.V." + }, + { + "c_banco": "608", + "descripcion": "VECTOR", + "razon_social": "Vector Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "610", + "descripcion": "B&B", + "razon_social": "B y B, Casa de Cambio, S.A. de C.V." + }, + { + "c_banco": "614", + "descripcion": "ACCIVAL", + "razon_social": "Acciones y Valores Banamex, S.A. de C.V., Casa de Bolsa" + }, + { + "c_banco": "615", + "descripcion": "MERRILL LYNCH", + "razon_social": "Merrill Lynch México, S.A. de C.V. Casa de Bolsa" + }, + { + "c_banco": "616", + "descripcion": "FINAMEX", + "razon_social": "Casa de Bolsa Finamex, S.A. de C.V." + }, + { + "c_banco": "617", + "descripcion": "VALMEX", + "razon_social": "Valores Mexicanos Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "618", + "descripcion": "UNICA", + "razon_social": "Unica Casa de Cambio, S.A. de C.V." + }, + { + "c_banco": "619", + "descripcion": "MAPFRE", + "razon_social": "MAPFRE Tepeyac, S.A." + }, + { + "c_banco": "620", + "descripcion": "PROFUTURO", + "razon_social": "Profuturo G.N.P., S.A. de C.V., Afore" + }, + { + "c_banco": "621", + "descripcion": "CB ACTINVER", + "razon_social": "Actinver Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "622", + "descripcion": "OACTIN", + "razon_social": "OPERADORA ACTINVER, S.A. DE C.V." + }, + { + "c_banco": "623", + "descripcion": "SKANDIA", + "razon_social": "Skandia Vida, S.A. de C.V." + }, + { + "c_banco": "626", + "descripcion": "CBDEUTSCHE", + "razon_social": "Deutsche Securities, S.A. de C.V. CASA DE BOLSA" + }, + { + "c_banco": "627", + "descripcion": "ZURICH", + "razon_social": "Zurich Compañía de Seguros, S.A." + }, + { + "c_banco": "628", + "descripcion": "ZURICHVI", + "razon_social": "Zurich Vida, Compañía de Seguros, S.A." + }, + { + "c_banco": "629", + "descripcion": "SU CASITA", + "razon_social": "Hipotecaria Su Casita, S.A. de C.V. SOFOM ENR" + }, + { + "c_banco": "630", + "descripcion": "CB INTERCAM", + "razon_social": "Intercam Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "631", + "descripcion": "CI BOLSA", + "razon_social": "CI Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "632", + "descripcion": "BULLTICK CB", + "razon_social": "Bulltick Casa de Bolsa, S.A., de C.V." + }, + { + "c_banco": "633", + "descripcion": "STERLING", + "razon_social": "Sterling Casa de Cambio, S.A. de C.V." + }, + { + "c_banco": "634", + "descripcion": "FINCOMUN", + "razon_social": "Fincomún, Servicios Financieros Comunitarios, S.A. de C.V." + }, + { + "c_banco": "636", + "descripcion": "HDI SEGUROS", + "razon_social": "HDI Seguros, S.A. de C.V." + }, + { + "c_banco": "637", + "descripcion": "ORDER", + "razon_social": "Order Express Casa de Cambio, S.A. de C.V" + }, + { + "c_banco": "638", + "descripcion": "AKALA", + "razon_social": "Akala, S.A. de C.V., Sociedad Financiera Popular" + }, + { + "c_banco": "640", + "descripcion": "CB JPMORGAN", + "razon_social": "J.P. Morgan Casa de Bolsa, S.A. de C.V. J.P. Morgan Grupo Financiero" + }, + { + "c_banco": "642", + "descripcion": "REFORMA", + "razon_social": "Operadora de Recursos Reforma, S.A. de C.V., S.F.P." + }, + { + "c_banco": "646", + "descripcion": "STP", + "razon_social": "Sistema de Transferencias y Pagos STP, S.A. de C.V.SOFOM ENR" + }, + { + "c_banco": "647", + "descripcion": "TELECOMM", + "razon_social": "Telecomunicaciones de México" + }, + { + "c_banco": "648", + "descripcion": "EVERCORE", + "razon_social": "Evercore Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "649", + "descripcion": "SKANDIA", + "razon_social": "Skandia Operadora de Fondos, S.A. de C.V." + }, + { + "c_banco": "651", + "descripcion": "SEGMTY", + "razon_social": "Seguros Monterrey New York Life, S.A de C.V" + }, + { + "c_banco": "652", + "descripcion": "ASEA", + "razon_social": "Solución Asea, S.A. de C.V., Sociedad Financiera Popular" + }, + { + "c_banco": "653", + "descripcion": "KUSPIT", + "razon_social": "Kuspit Casa de Bolsa, S.A. de C.V." + }, + { + "c_banco": "655", + "descripcion": "SOFIEXPRESS", + "razon_social": "J.P. SOFIEXPRESS, S.A. de C.V., S.F.P." + }, + { + "c_banco": "656", + "descripcion": "UNAGRA", + "razon_social": "UNAGRA, S.A. de C.V., S.F.P." + }, + { + "c_banco": "659", + "descripcion": "OPCIONES EMPRESARIALES DEL NOROESTE", + "razon_social": "OPCIONES EMPRESARIALES DEL NORESTE, S.A. DE C.V., S.F.P." + }, + { + "c_banco": "901", + "descripcion": "CLS", + "razon_social": "Cls Bank International" + }, + { + "c_banco": "902", + "descripcion": "INDEVAL", + "razon_social": "SD. Indeval, S.A. de C.V." + }, + { + "c_banco": "670", + "descripcion": "LIBERTAD", + "razon_social": "Libertad Servicios Financieros, S.A. De C.V." + }, + { + "c_banco": "999", + "descripcion": "N/A", + "razon_social": null + } +] diff --git a/src/modules/Database/data/users.csv b/src/modules/Database/data/users.csv new file mode 100644 index 0000000..8042ee6 --- /dev/null +++ b/src/modules/Database/data/users.csv @@ -0,0 +1,14 @@ +name,email,role +Administrador Web,webadmin@concierge.test,Administrador Web +Productos y servicios,productos@concierge.test,Productos y servicios +Recursos humanos,rrhh@concierge.test,Recursos humanos +Nómina,nomina@concierge.test,Nómina +Activos fijos,activos@concierge.test,Activos fijos +Compras y gastos,compras@concierge.test,Compras y gastos +CRM,crm@concierge.test,CRM +Vendedor,vendedor@concierge.test,Vendedor +Gerente,gerente@concierge.test,Gerente +Facturación,facturacion@concierge.test,Facturación +Facturación avanzado,facturacion_avanzado@concierge.test,Facturación avanzado +Finanzas,finanzas@concierge.test,Finanzas +Auditor,auditor@concierge.test,Auditor diff --git a/src/modules/Database/factories/UserFactory.php b/src/modules/Database/factories/UserFactory.php new file mode 100644 index 0000000..d24c05c --- /dev/null +++ b/src/modules/Database/factories/UserFactory.php @@ -0,0 +1,49 @@ + + */ +class UserFactory extends Factory +{ + /** + * The current password being used by the factory. + */ + protected static ?string $password; + + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + return [ + 'name' => fake()->name(), + 'email' => fake()->unique()->safeEmail(), + 'email_verified_at' => now(), + 'password' => static::$password ??= Hash::make('password'), + 'two_factor_secret' => null, + 'two_factor_recovery_codes' => null, + 'remember_token' => Str::random(10), + 'profile_photo_path' => null, + 'status' => fake()->randomElement([User::STATUS_ENABLED, User::STATUS_DISABLED]) + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn(array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/src/modules/Database/migrations/0001_01_01_000000_create_users_table.php b/src/modules/Database/migrations/0001_01_01_000000_create_users_table.php new file mode 100644 index 0000000..8fcad6e --- /dev/null +++ b/src/modules/Database/migrations/0001_01_01_000000_create_users_table.php @@ -0,0 +1,96 @@ +mediumIncrements('id'); + + $table->string('contact_code', 50)->unique()->nullable()->comment('Código único del contacto'); + + $table->string('name', 100)->comment('Nombre')->index(); + $table->string('last_name', 100)->comment('Apellidos')->nullable()->index(); + + $table->string('email')->unique()->index(); + $table->timestamp('email_verified_at')->nullable(); + $table->string('password')->nullable(); + $table->rememberToken(); + $table->string('profile_photo_path', 2048)->nullable(); + + $table->string('company', 100)->nullable()->comment('Nombre de la empresa')->index(); + + $table->date('birth_date')->nullable()->comment('Fecha de nacimiento'); + $table->date('hire_date')->nullable()->comment('Fecha de contratación'); + + $table->string('curp', 50)->nullable()->comment('Clave Única de Registro de Población (CURP)')->index(); + $table->string('nss', 11)->nullable()->comment('Número de seguridad social')->index(); + + $table->string('job_title', 100)->nullable()->comment('Cargo del contacto en la empresa'); + + $table->json('face_vector')->nullable()->comment('Vector de características faciales'); + + $table->string('rfc', 13)->unique()->nullable()->index(); + $table->string('nombre_fiscal')->nullable()->index(); + + $table->unsignedTinyInteger('tipo_persona')->nullable()->index(); + + $table->unsignedSmallInteger('c_regimen_fiscal')->nullable()->index(); // sat_regimen_fiscal.c_regimen_fiscal + + $table->unsignedMediumInteger('domicilio_fiscal')->nullable()->index(); // sat_codigo_postal.c_codigo_postal + + $table->char('c_uso_cfdi', 4)->charset('ascii')->collation('ascii_general_ci')->nullable()->index(); // sat_uso_cfdi.c_uso_cfdi + + $table->unsignedTinyInteger('is_partner')->nullable()->index(); + $table->unsignedTinyInteger('is_employee')->nullable()->index(); + $table->unsignedTinyInteger('is_prospect')->nullable()->index(); + $table->unsignedTinyInteger('is_customer')->nullable()->index(); + $table->unsignedTinyInteger('is_provider')->nullable()->index(); + $table->unsignedTinyInteger('is_user')->nullable()->index(); + + $table->unsignedTinyInteger('status')->nullable()->index(); + + // Auditoría + $table->dateTime('last_login_at')->nullable(); + $table->ipAddress('last_login_ip')->nullable(); + + $table->unsignedMediumInteger('created_by')->nullable()->index(); // users.id + $table->timestamps(); + + // Relaciones + $table->foreign('created_by')->references('id')->on('users')->onUpdate('restrict')->onDelete('restrict'); + }); + + Schema::create('password_reset_tokens', function (Blueprint $table) { + $table->string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + + Schema::create('sessions', function (Blueprint $table) { + $table->string('id')->primary(); + $table->foreignId('user_id')->nullable()->index(); + $table->string('ip_address', 45)->nullable(); + $table->text('user_agent')->nullable(); + $table->longText('payload'); + $table->integer('last_activity')->index(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('users'); + Schema::dropIfExists('password_reset_tokens'); + Schema::dropIfExists('sessions'); + } +}; diff --git a/src/modules/Database/migrations/0001_01_01_000001_create_cache_table.php b/src/modules/Database/migrations/0001_01_01_000001_create_cache_table.php new file mode 100644 index 0000000..b9c106b --- /dev/null +++ b/src/modules/Database/migrations/0001_01_01_000001_create_cache_table.php @@ -0,0 +1,35 @@ +string('key')->primary(); + $table->mediumText('value'); + $table->integer('expiration'); + }); + + Schema::create('cache_locks', function (Blueprint $table) { + $table->string('key')->primary(); + $table->string('owner'); + $table->integer('expiration'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('cache'); + Schema::dropIfExists('cache_locks'); + } +}; diff --git a/src/modules/Database/migrations/0001_01_01_000002_create_jobs_table.php b/src/modules/Database/migrations/0001_01_01_000002_create_jobs_table.php new file mode 100644 index 0000000..425e705 --- /dev/null +++ b/src/modules/Database/migrations/0001_01_01_000002_create_jobs_table.php @@ -0,0 +1,57 @@ +id(); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + + Schema::create('job_batches', function (Blueprint $table) { + $table->string('id')->primary(); + $table->string('name'); + $table->integer('total_jobs'); + $table->integer('pending_jobs'); + $table->integer('failed_jobs'); + $table->longText('failed_job_ids'); + $table->mediumText('options')->nullable(); + $table->integer('cancelled_at')->nullable(); + $table->integer('created_at'); + $table->integer('finished_at')->nullable(); + }); + + Schema::create('failed_jobs', function (Blueprint $table) { + $table->id(); + $table->string('uuid')->unique(); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + Schema::dropIfExists('job_batches'); + Schema::dropIfExists('failed_jobs'); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_040004_create_user_logins_table.php b/src/modules/Database/migrations/2024_12_14_040004_create_user_logins_table.php new file mode 100644 index 0000000..f1b064b --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_040004_create_user_logins_table.php @@ -0,0 +1,35 @@ +integerIncrements('id'); + + $table->unsignedMediumInteger('user_id')->nullable()->index(); + $table->ipAddress('ip_address')->nullable(); + $table->string('user_agent')->nullable(); + + $table->timestamps(); + + // Relaciones + $table->foreign('user_id')->references('id')->on('users'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('user_logins'); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_073441_create_personal_access_tokens_table.php b/src/modules/Database/migrations/2024_12_14_073441_create_personal_access_tokens_table.php new file mode 100644 index 0000000..e828ad8 --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_073441_create_personal_access_tokens_table.php @@ -0,0 +1,33 @@ +id(); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamp('expires_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('personal_access_tokens'); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_074756_create_permission_tables.php b/src/modules/Database/migrations/2024_12_14_074756_create_permission_tables.php new file mode 100644 index 0000000..347947f --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_074756_create_permission_tables.php @@ -0,0 +1,153 @@ +engine('InnoDB'); + $table->bigIncrements('id'); // permission id + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('group_name')->nullable()->index(); + $table->string('sub_group_name')->nullable()->index(); + $table->string('action')->nullable()->index(); + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + + $table->unique(['name', 'guard_name']); + $table->unique(['group_name', 'sub_group_name', 'action', 'guard_name']); + }); + + Schema::create($tableNames['roles'], function (Blueprint $table) use ($teams, $columnNames) { + //$table->engine('InnoDB'); + $table->bigIncrements('id'); // role id + if ($teams || config('permission.testing')) { // permission.testing is a fix for sqlite testing + $table->unsignedBigInteger($columnNames['team_foreign_key'])->nullable(); + $table->index($columnNames['team_foreign_key'], 'roles_team_foreign_key_index'); + } + $table->string('name'); // For MyISAM use string('name', 225); // (or 166 for InnoDB with Redundant/Compact row format) + $table->string('style')->nullable(); + $table->string('guard_name'); // For MyISAM use string('guard_name', 25); + $table->timestamps(); + if ($teams || config('permission.testing')) { + $table->unique([$columnNames['team_foreign_key'], 'name', 'guard_name']); + } else { + $table->unique(['name', 'guard_name']); + } + }); + + Schema::create($tableNames['model_has_permissions'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotPermission, $teams) { + $table->unsignedBigInteger($pivotPermission); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_permissions_model_id_model_type_index'); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_permissions_team_foreign_key_index'); + + $table->primary( + [$columnNames['team_foreign_key'], $pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary' + ); + } else { + $table->primary( + [$pivotPermission, $columnNames['model_morph_key'], 'model_type'], + 'model_has_permissions_permission_model_type_primary' + ); + } + }); + + Schema::create($tableNames['model_has_roles'], function (Blueprint $table) use ($tableNames, $columnNames, $pivotRole, $teams) { + $table->unsignedBigInteger($pivotRole); + + $table->string('model_type'); + $table->unsignedBigInteger($columnNames['model_morph_key']); + $table->index([$columnNames['model_morph_key'], 'model_type'], 'model_has_roles_model_id_model_type_index'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + if ($teams) { + $table->unsignedBigInteger($columnNames['team_foreign_key']); + $table->index($columnNames['team_foreign_key'], 'model_has_roles_team_foreign_key_index'); + + $table->primary( + [$columnNames['team_foreign_key'], $pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary' + ); + } else { + $table->primary( + [$pivotRole, $columnNames['model_morph_key'], 'model_type'], + 'model_has_roles_role_model_type_primary' + ); + } + }); + + Schema::create($tableNames['role_has_permissions'], function (Blueprint $table) use ($tableNames, $pivotRole, $pivotPermission) { + $table->unsignedBigInteger($pivotPermission); + $table->unsignedBigInteger($pivotRole); + + $table->foreign($pivotPermission) + ->references('id') // permission id + ->on($tableNames['permissions']) + ->onDelete('cascade'); + + $table->foreign($pivotRole) + ->references('id') // role id + ->on($tableNames['roles']) + ->onDelete('cascade'); + + $table->primary([$pivotPermission, $pivotRole], 'role_has_permissions_permission_id_role_id_primary'); + }); + + app('cache') + ->store(config('permission.cache.store') != 'default' ? config('permission.cache.store') : null) + ->forget(config('permission.cache.key')); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + $tableNames = config('permission.table_names'); + + if (empty($tableNames)) { + throw new \Exception('Error: config/permission.php not found and defaults could not be merged. Please publish the package configuration before proceeding, or drop the tables manually.'); + } + + Schema::drop($tableNames['role_has_permissions']); + Schema::drop($tableNames['model_has_roles']); + Schema::drop($tableNames['model_has_permissions']); + Schema::drop($tableNames['roles']); + Schema::drop($tableNames['permissions']); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_081739_add_two_factor_columns_to_users_table.php b/src/modules/Database/migrations/2024_12_14_081739_add_two_factor_columns_to_users_table.php new file mode 100644 index 0000000..b490e24 --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_081739_add_two_factor_columns_to_users_table.php @@ -0,0 +1,46 @@ +text('two_factor_secret') + ->after('password') + ->nullable(); + + $table->text('two_factor_recovery_codes') + ->after('two_factor_secret') + ->nullable(); + + if (Fortify::confirmsTwoFactorAuthentication()) { + $table->timestamp('two_factor_confirmed_at') + ->after('two_factor_recovery_codes') + ->nullable(); + } + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn(array_merge([ + 'two_factor_secret', + 'two_factor_recovery_codes', + ], Fortify::confirmsTwoFactorAuthentication() ? [ + 'two_factor_confirmed_at', + ] : [])); + }); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_102026_create_audits_table.php b/src/modules/Database/migrations/2024_12_14_102026_create_audits_table.php new file mode 100644 index 0000000..709069d --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_102026_create_audits_table.php @@ -0,0 +1,52 @@ +create($table, function (Blueprint $table) { + + $morphPrefix = config('audit.user.morph_prefix', 'user'); + + $table->bigIncrements('id'); + $table->string($morphPrefix . '_type')->nullable(); + $table->unsignedBigInteger($morphPrefix . '_id')->nullable(); + $table->string('event'); + $table->morphs('auditable'); + $table->text('old_values')->nullable(); + $table->text('new_values')->nullable(); + $table->text('url')->nullable(); + $table->ipAddress('ip_address')->nullable(); + $table->string('user_agent', 1023)->nullable(); + $table->string('tags')->nullable(); + $table->timestamps(); + + $table->index([$morphPrefix . '_id', $morphPrefix . '_type']); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + $connection = config('audit.drivers.database.connection', config('database.default')); + $table = config('audit.drivers.database.table', 'audits'); + + Schema::connection($connection)->drop($table); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_104331_create_cfdi_sat_catalog_tables.php b/src/modules/Database/migrations/2024_12_14_104331_create_cfdi_sat_catalog_tables.php new file mode 100644 index 0000000..82cdf38 --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_104331_create_cfdi_sat_catalog_tables.php @@ -0,0 +1,305 @@ +smallIncrements('id'); + + $table->unsignedSmallInteger('c_banco')->index(); + $table->string('descripcion'); + $table->string('razon_social')->nullable(); + $table->string('rfc', 13)->nullable(); + + $table->unsignedTinyInteger('status'); + + $table->timestamps(); + }); + + Schema::create('sat_clave_prod_serv', function (Blueprint $table) { + $table->mediumIncrements('id'); + + $table->unsignedInteger('c_clave_prod_serv'); + $table->string('descripcion')->nullable()->fulltext(); + $table->string('incluir_iva_trasladado')->nullable(); + $table->string('incluir_ieps_trasladado')->nullable(); + $table->string('complemento_que_debe_incluir')->nullable(); + $table->date('fecha_inicio_vigencia')->nullable(); + $table->date('fecha_fin_vigencia')->nullable(); + $table->unsignedTinyInteger('estimulo_franja_fronteriza')->nullable(); + $table->string('palabras_similares', 1024)->nullable(); + + $table->timestamps(); + + // Indices + $table->unique('c_clave_prod_serv'); + }); + + Schema::create('sat_clave_unidad', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->string('c_clave_unidad', 3)->unique(); + $table->string('nombre')->fulltext(); + $table->string('descripcion', 1024)->nullable(); + $table->string('categoria', 1024)->nullable(); + $table->string('nota', 1024)->nullable(); + $table->date('fecha_de_inicio_de_vigencia')->nullable(); + $table->date('fecha_de_fin_de_vigencia')->nullable(); + $table->string('simbolo')->nullable(); + $table->boolean('is_base')->nullable(); + + $table->timestamps(); + }); + + Schema::create('sat_forma_pago', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->unsignedTinyInteger('c_forma_pago'); + $table->string('descripcion'); + $table->string('bancarizado')->nullable(); + $table->string('numero_de_operacion')->nullable(); + $table->string('rfc_del_emisor_de_la_cuenta_ordenante')->nullable(); + $table->string('cuenta_ordenante')->nullable(); + $table->string('patron_para_cuenta_ordenante')->nullable(); + $table->string('rfc_del_emisor_cuenta_de_beneficiario')->nullable(); + $table->string('cuenta_de_benenficiario')->nullable(); + $table->string('patron_para_cuenta_beneficiaria')->nullable(); + $table->string('tipo_cadena_pago')->nullable(); + $table->string('banco_emisor_de_la_cuenta_ordenante')->nullable(); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->unique('c_forma_pago'); + }); + + Schema::create('sat_moneda', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->char('c_moneda', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->string('descripcion'); + $table->string('decimales')->nullable(); + $table->string('porcentaje_variacion')->nullable(); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->unique('c_moneda'); + }); + + Schema::create('sat_codigo_postal', function (Blueprint $table) { + $table->mediumIncrements('id'); + + $table->unsignedMediumInteger('c_codigo_postal'); + $table->string('c_estado', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->unsignedSmallInteger('c_municipio')->nullable(); + $table->unsignedTinyInteger('c_localidad')->nullable(); + $table->string('estimulo_franja_fronteriza')->nullable(); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->index('c_codigo_postal'); + $table->index('c_estado'); + $table->index('c_municipio'); + $table->index('c_localidad'); + + $table->unique('c_codigo_postal'); + }); + + Schema::create('sat_regimen_fiscal', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->unsignedSmallInteger('c_regimen_fiscal'); + $table->string('descripcion'); + $table->char('fisica', 2)->nullable(); + $table->char('moral', 2)->nullable(); + $table->date('fecha_de_inicio_de_vigencia')->nullable(); + $table->date('fecha_de_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->unique('c_regimen_fiscal'); + }); + + Schema::create('sat_pais', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->char('c_pais', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->string('descripcion'); + $table->string('formato_de_codigo_postal')->nullable(); + $table->string('formato_de_registro_de_identidad_tributaria')->nullable(); + $table->string('validacion_del_registro_de_identidad_tributaria')->nullable(); + $table->string('agrupaciones')->nullable(); + + $table->timestamps(); + + // Indices + $table->unique('c_pais'); + }); + + Schema::create('sat_uso_cfdi', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->char('c_uso_cfdi', 4)->charset('ascii')->collation('ascii_general_ci'); + $table->string('descripcion'); + $table->char('aplica_para_tipo_persona_fisica', 2)->nullable(); + $table->char('aplica_para_tipo_persona_moral', 2)->nullable(); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + $table->string('regimen_fiscal_receptor')->nullable(); + + $table->timestamps(); + + // Indices + $table->unique('c_uso_cfdi'); + }); + + Schema::create('sat_colonia', function (Blueprint $table) { + $table->mediumIncrements('id'); + + $table->unsignedMediumInteger('c_colonia'); + $table->unsignedMediumInteger('c_codigo_postal'); + $table->string('nombre_del_asentamiento')->nullable(); + + $table->timestamps(); + + // Indices + $table->index('c_colonia'); + $table->index('c_codigo_postal'); + + $table->unique(['c_colonia', 'c_codigo_postal']); + }); + + Schema::create('sat_estado', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->string('c_estado', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->char('c_pais', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->string('nombre_del_estado'); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->index('c_estado'); + $table->index('c_pais'); + + $table->unique(['c_estado', 'c_pais']); + }); + + Schema::create('sat_localidad', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->unsignedTinyInteger('c_localidad'); + $table->string('c_estado', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->string('descripcion'); + $table->date('fecha_de_inicio_de_vigencia')->nullable(); + $table->date('fecha_de_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->index('c_localidad'); + $table->index('c_estado'); + + $table->unique(['c_localidad', 'c_estado']); + }); + + Schema::create('sat_municipio', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->unsignedSmallInteger('c_municipio'); + $table->string('c_estado', 3)->charset('ascii')->collation('ascii_general_ci'); + $table->string('descripcion'); + $table->date('fecha_de_inicio_de_vigencia')->nullable(); + $table->date('fecha_de_fin_de_vigencia')->nullable(); + + $table->timestamps(); + + // Indices + $table->index('c_municipio'); + $table->index('c_estado'); + + $table->unique(['c_municipio', 'c_estado']); + }); + + Schema::create('sat_deduccion', function (Blueprint $table) { + $table->tinyIncrements('id'); + + $table->unsignedTinyInteger('c_deduccion')->index(); + $table->string('descripcion'); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + + $table->timestamps(); + }); + + Schema::create('sat_percepcion', function (Blueprint $table) { + $table->smallIncrements('id'); + + $table->unsignedTinyInteger('c_percepcion')->index(); + $table->string('descripcion'); + $table->date('fecha_inicio_de_vigencia')->nullable(); + $table->date('fecha_fin_de_vigencia')->nullable(); + + $table->timestamps(); + }); + + + Schema::table('users', function (Blueprint $table) { + // Indices + $table->foreign('c_regimen_fiscal') + ->references('c_regimen_fiscal') + ->on('sat_regimen_fiscal') + ->onUpdate('restrict') + ->onDelete('restrict'); + + $table->foreign('domicilio_fiscal') + ->references('c_codigo_postal') + ->on('sat_codigo_postal') + ->onUpdate('restrict') + ->onDelete('restrict'); + + $table->foreign('c_uso_cfdi') + ->references('c_uso_cfdi') + ->on('sat_uso_cfdi') + ->onUpdate('restrict') + ->onDelete('restrict'); + }); + + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('sat_forma_pago'); + Schema::dropIfExists('sat_moneda'); + Schema::dropIfExists('sat_codigo_postal'); + Schema::dropIfExists('sat_regimen_fiscal'); + Schema::dropIfExists('sat_pais'); + Schema::dropIfExists('sat_uso_cfdi'); + Schema::dropIfExists('sat_colonia'); + Schema::dropIfExists('sat_estado'); + Schema::dropIfExists('sat_localidad'); + Schema::dropIfExists('sat_municipio'); + } +}; diff --git a/src/modules/Database/migrations/2024_12_14_108234_create_settings_table.php b/src/modules/Database/migrations/2024_12_14_108234_create_settings_table.php new file mode 100644 index 0000000..db08618 --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_108234_create_settings_table.php @@ -0,0 +1,37 @@ +mediumIncrements('id'); + + $table->string('key')->index(); + $table->text('value'); + $table->unsignedMediumInteger('user_id')->nullable()->index(); + + // Unique constraints + $table->unique(['user_id', 'key']); + + // Relaciones + $table->foreign('user_id')->references('id')->on('users'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('settings'); + } + +}; diff --git a/src/modules/Database/migrations/2024_12_14_113409_create_media_items_table.php b/src/modules/Database/migrations/2024_12_14_113409_create_media_items_table.php new file mode 100644 index 0000000..aa1a5cb --- /dev/null +++ b/src/modules/Database/migrations/2024_12_14_113409_create_media_items_table.php @@ -0,0 +1,48 @@ +mediumIncrements('id'); + + // Relación polimórfica + $table->unsignedMediumInteger('mediaable_id'); + $table->string('mediaable_type'); + + $table->unsignedTinyInteger('type')->index(); // Tipo de medio: 'image', 'video', 'file', 'youtube' + $table->unsignedTinyInteger('sub_type')->index(); // Subtipo de medio: 'thumbnail', 'main', 'additional' + + $table->string('url', 255)->nullable(); // URL del medio + $table->string('path')->nullable(); // Ruta del archivo si está almacenado localmente + + $table->string('title')->nullable()->index(); // Título del medio + $table->mediumText('description')->nullable(); // Descripción del medio + $table->unsignedTinyInteger('order')->nullable(); // Orden de presentación + + // Authoría + $table->timestamps(); + + // Índices + $table->index(['mediaable_type', 'mediaable_id']); + $table->index(['mediaable_type', 'mediaable_id', 'type']); + }); + + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('images'); + } +}; diff --git a/src/modules/Database/seeders/AdminDatabaseSeeder.php b/src/modules/Database/seeders/AdminDatabaseSeeder.php new file mode 100644 index 0000000..f5ccd45 --- /dev/null +++ b/src/modules/Database/seeders/AdminDatabaseSeeder.php @@ -0,0 +1,16 @@ +call(RoleSeeder::class); + $this->call(UserSeeder::class); + $this->call(SettingSeeder::class); + $this->call(SATCatalogsSeeder::class); + } +} diff --git a/src/modules/Database/seeders/RoleSeeder.php b/src/modules/Database/seeders/RoleSeeder.php new file mode 100644 index 0000000..efbdfda --- /dev/null +++ b/src/modules/Database/seeders/RoleSeeder.php @@ -0,0 +1,1272 @@ + 'SuperAdmin', + 'style' => 'dark' + ], + [ + 'name' => 'Admin', + 'style' => 'primary' + ], + [ + 'name' => 'Administrador Web', + 'style' => 'primary' + ], + [ + 'name' => 'Editor', + 'style' => 'primary' + ], + [ + 'name' => 'Productos y servicios', + 'style' => 'info' + ], + [ + 'name' => 'Recursos humanos', + 'style' => 'success' + ], + [ + 'name' => 'Nómina', + 'style' => 'success' + ], + [ + 'name' => 'Activos fijos', + 'style' => 'secondary' + ], + [ + 'name' => 'Compras y gastos', + 'style' => 'info' + ], + [ + 'name' => 'CRM', + 'style' => 'warning' + ], + [ + 'name' => 'Vendedor', + 'style' => 'info' + ], + [ + 'name' => 'Gerente', + 'style' => 'danger' + ], + [ + 'name' => 'Facturación', + 'style' => 'info' + ], + [ + 'name' => 'Facturación avanzado', + 'style' => 'danger' + ], + [ + 'name' => 'Finanzas', + 'style' => 'info' + ], + [ + 'name' => 'Auditor', + 'style' => 'dark' + ], + ]; + + private $permissions = [ + // Aplicación + 'webapp' => [ + 'name' => 'Aplicación', + 'sub_groups' => [ + 'general-settings' => [ + 'name' => 'Ajustes generales', + 'actions' => [ + 'allow' => [], + ] + ], + 'cache-manager' => [ + 'name' => 'Ajuests de caché', + 'actions' => [ + 'view' => [], + 'edit' => [], + ] + ], + 'session-settings' => [ + 'name' => 'Ajustes de sesión', + 'actions' => [ + 'view' => [], + 'edit' => [], + ] + ], + 'catalogs' => [ + 'name' => 'Catálogos', + 'actions' => [ + 'view' => [ + 'Gerente', + ], + 'create' => [ + 'Gerente', + ], + 'edit' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'api-banxico' => [ + 'name' => 'API BANXICO (Tipos de cambio)', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'smtp-settings' => [ + 'name' => 'Servidor de correo SMTP', + 'actions' => [ + 'allow' => [], + ] + ], + ] + ], + + // Sitio Web + 'website' => [ + 'name' => 'Sitio Web', + 'sub_groups' => [ + 'general-settings' => [ + 'name' => 'Ajustes generales', + 'actions' => [ + 'allow' => [ + 'Administrador Web', + ], + ] + ], + 'slider' => [ + 'name' => 'Slider', + 'actions' => [ + 'view' => [ + 'Administrador Web', + ], + 'create' => [ + 'Administrador Web', + ], + 'edit' => [ + 'Administrador Web', + ], + 'delete' => [ + 'Administrador Web', + ] + ] + ], + 'cmagazine' => [ + 'name' => 'Concierge Magazine', + 'actions' => [ + 'view' => [ + 'Administrador Web', + ], + 'create' => [ + 'Administrador Web', + ], + 'edit' => [ + 'Administrador Web', + ], + 'delete' => [ + 'Administrador Web', + ] + ] + ], + 'faq' => [ + 'name' => 'Preguntas frecuentes', + 'actions' => [ + 'view' => [ + 'Administrador Web', + ], + 'create' => [ + 'Administrador Web', + ], + 'edit' => [ + 'Administrador Web', + ], + 'delete' => [ + 'Administrador Web', + ] + ] + ], + 'legal' => [ + 'name' => 'Avisos legales', + 'actions' => [ + 'view' => [ + 'Administrador Web', + ], + 'edit' => [ + 'Administrador Web', + ], + ] + ], + ] + ], + + // Empresa + 'company' => [ + 'name' => 'Empresa', + 'sub_groups' => [ + 'general-settings' => [ + 'name' => 'Ajustes generales', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'stores' => [ + 'name' => 'Sucursales', + 'actions' => [ + 'view' => [], + 'create' => [], + 'edit' => [], + 'delete' => [], + ] + ], + 'catalogs' => [ + 'name' => 'Catálogos', + 'actions' => [ + 'view' => [ + 'Gerente', + ], + 'create' => [ + 'Gerente', + ], + 'edit' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ] + ], + + // Recursos humanos + 'human-resources' => [ + 'name' => 'Recursos Humanos', + 'sub_groups' => [ + 'dashboard' => [ + 'name' => 'Tablero', + 'actions' => [ + 'allow' => [ + 'Recursos humanos', + 'Gerente', + ] + ] + ], + 'employees' => [ + 'name' => 'Empleados', + 'actions' => [ + 'view' => [ + 'Recursos humanos', + 'Gerente', + ], + 'create' => [ + 'Recursos humanos', + 'Gerente', + ], + 'edit' => [ + 'Recursos humanos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'jobs' => [ + 'name' => 'Puestos de trabajo', + 'actions' => [ + 'view' => [ + 'Recursos humanos', + 'Gerente', + ], + 'create' => [ + 'Recursos humanos', + 'Gerente', + ], + 'edit' => [ + 'Recursos humanos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ] + ], + + // Nómina + 'payrolls' => [ + 'name' => 'Nómina', + 'sub_groups' => [ + 'dashboard' => [ + 'name' => 'Tablero', + 'actions' => [ + 'allow' => [ + 'Nómina', + 'Gerente', + ] + ] + ], + 'contracts' => [ + 'name' => 'Contratos', + 'actions' => [ + 'view' => [ + 'Nómina', + 'Gerente', + ], + 'create' => [ + 'Nómina', + 'Gerente', + ], + 'edit' => [ + 'Nómina', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'assistance' => [ + 'name' => 'Asistencias', + 'actions' => [ + 'view' => [ + 'Nómina', + 'Gerente', + ], + 'create' => [ + 'Nómina', + 'Gerente', + ], + 'edit' => [ + 'Nómina', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ] + ], + + // Activos fijos + 'assets' => [ + 'name' => 'Activos fijos', + 'sub_groups' => [ + 'assets' => [ + 'name' => 'Catálogo de activos', + 'actions' => [ + 'view' => [ + 'Activos fijos', + 'Gerente', + ], + 'create' => [ + 'Activos fijos', + 'Gerente', + ], + 'edit' => [ + 'Activos fijos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'events' => [ + 'name' => 'Eventos relacionados', + 'actions' => [ + 'view' => [ + 'Activos fijos', + 'Gerente', + ], + 'create' => [ + 'Activos fijos', + 'Gerente', + ], + 'edit' => [ + 'Activos fijos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ] + ], + + // Gestión de Relación con los Clientes + 'crm' => [ + 'name' => 'Gestión de Relación con los Clientes', + 'sub_groups' => [ + 'contacts' => [ + 'name' => 'Contactos', + 'actions' => [ + 'view' => [ + 'CRM', + 'Gerente', + ], + 'create' => [ + 'CRM', + 'Gerente', + ], + 'edit' => [ + 'CRM', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ] + ] + ], + 'marketing-campaigns' => [ + 'name' => 'Campañas de marketing', + 'actions' => [ + 'view' => [ + 'CRM', + 'Gerente', + ], + 'create' => [ + 'CRM', + 'Gerente', + ], + 'edit' => [ + 'CRM', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ] + ] + ], + 'leads' => [ + 'name' => 'Oportunidades', + 'actions' => [ + 'view' => [ + 'CRM', + 'Gerente', + ], + 'create' => [ + 'CRM', + 'Gerente', + ], + 'edit' => [ + 'CRM', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ] + ] + ], + 'newsletter' => [ + 'name' => 'Newsletter', + 'actions' => [ + 'view' => [ + 'Administrador Web', + 'CRM', + 'Gerente', + ], + 'edit' => [ + 'Administrador Web', + 'CRM', + 'Gerente', + ], + 'delete' => [] + ] + ], + ] + ], + + // Gastos y compras + 'purchases' => [ + 'name' => 'Gastos y compras', + 'sub_groups' => [ + 'dashboard' => [ + 'name' => 'Tablero', + 'actions' => [ + 'allow' => [ + 'Compras y gastos', + 'Gerente', + ] + ] + ], + 'supplier' => [ + 'name' => 'Proveedores', + 'actions' => [ + 'view' => [ + 'Compras y gastos', + 'Gerente', + 'Finanzas', + ], + 'create' => [ + 'Compras y gastos', + 'Gerente', + ], + 'edit' => [ + 'Compras y gastos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ] + ] + ], + 'orders' => [ + 'name' => 'Órdenes de compras', + 'actions' => [ + 'view' => [ + 'Compras y gastos', + 'Gerente', + ], + 'create' => [ + 'Compras y gastos', + 'Gerente', + ], + 'edit' => [ + 'Compras y gastos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ] + ] + ], + 'purchases' => [ + 'name' => 'Compras y gastos', + 'actions' => [ + 'view' => [ + 'Compras y gastos', + 'Gerente', + 'Finanzas', + ], + 'create' => [ + 'Compras y gastos', + 'Gerente', + ], + 'edit' => [ + 'Compras y gastos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ] + ] + ], + ] + ], + + // Productos y servicios + 'products' => [ + 'name' => 'Productos y servicios', + 'sub_groups' => [ + 'categories' => [ + 'name' => 'Categorías de productos', + 'actions' => [ + 'view' => [ + 'Productos y servicios', + 'Activos fijos', + 'Compras y gastos', + 'Vendedor', + 'Gerente', + 'Facturación', + 'Facturación avanzado', + ], + 'create' => [ + 'Productos y servicios', + 'Activos fijos', + 'Compras y gastos', + 'Gerente', + ], + 'edit' => [ + 'Productos y servicios', + 'Activos fijos', + 'Compras y gastos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'catalogs' => [ + 'name' => 'Catalogos de productos', + 'actions' => [ + 'view' => [ + 'Productos y servicios', + 'Gerente', + ], + 'create' => [ + 'Productos y servicios', + 'Gerente', + ], + 'edit' => [ + 'Productos y servicios', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'products' => [ + 'name' => 'Productos', + 'actions' => [ + 'view' => [ + 'Productos y servicios', + 'Activos fijos', + 'Compras y gastos', + 'Vendedor', + 'Gerente', + 'Facturación', + 'Facturación avanzado', + ], + 'create' => [ + 'Productos y servicios', + 'Activos fijos', + 'Compras y gastos', + 'Gerente', + ], + 'edit' => [ + 'Productos y servicios', + 'Activos fijos', + 'Compras y gastos', + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ], + ], + + // Punto de venta + 'pos' => [ + 'name' => 'Punto de venta', + 'sub_groups' => [ + 'dashboard' => [ + 'name' => 'Tablero', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'pricelists-config' => [ + 'name' => 'listas de precios', + 'actions' => [ + 'view' => [ + 'Productos y servicios', + 'Compras y gastos', + 'Vendedor', + 'Gerente', + ], + 'create' => [ + 'Gerente', + ], + 'edit' => [ + 'Gerente', + ], + 'delete' => [], + ] + ], + 'ticket-config' => [ + 'name' => 'Ticket de punto de venta', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'catalogs' => [ + 'name' => 'Catalogos de punto de venta', + 'actions' => [ + 'view' => [ + 'Productos y servicios', + 'Gerente', + ], + 'create' => [ + 'Productos y servicios', + 'Gerente', + ], + 'edit' => [ + 'Productos y servicios', + 'Gerente', + ], + 'delete' => [], + ] + ], + 'customers' => [ + 'name' => 'Clientes', + 'actions' => [ + 'view' => [ + 'Vendedor', + 'Gerente', + 'Facturación', + 'Facturación avanzado', + 'Finanzas', + ], + 'create' => [ + 'Vendedor', + 'Gerente', + ], + 'edit' => [ + 'Vendedor', + 'Gerente', + 'Facturación', + 'Facturación avanzado', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'quotes' => [ + 'name' => 'Cotizaciones', + 'actions' => [ + 'view' => [ + 'Vendedor', + 'Gerente', + ], + 'create' => [ + 'Vendedor', + 'Gerente', + ], + 'edit' => [ + 'Vendedor', + 'Gerente', + ], + 'delete' => [ + 'Vendedor', + 'Gerente', + ], + ] + ], + 'sales' => [ + 'name' => 'Ventas', + 'actions' => [ + 'view' => [ + 'Vendedor', + 'Gerente', + 'Facturación', + 'Facturación avanzado', + 'Finanzas', + ], + 'create' => [ + 'Vendedor', + 'Gerente', + ], + 'edit' => [ + 'Vendedor', + 'Gerente', + ], + 'cancel' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'modify-sale-price' => [ + 'name' => 'Modificar precio de venta', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'apply-discounts' => [ + 'name' => 'Aplicar descuentos', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'allow-negative-iventory' => [ + 'name' => 'Permitir venta con inventario negativo', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'remissions' => [ + 'name' => 'Remisiones', + 'actions' => [ + 'view' => [ + 'Vendedor', + 'Gerente', + 'Finanzas', + ], + 'create' => [ + 'Vendedor', + 'Gerente', + ], + 'edit' => [ + 'Vendedor', + 'Gerente', + ], + 'cancel' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'credit-notes' => [ + 'name' => 'Notas de crédito', + 'actions' => [ + 'view' => [ + 'Vendedor', + 'Gerente', + 'Finanzas', + ], + 'create' => [ + 'Vendedor', + 'Gerente', + ], + 'edit' => [ + 'Vendedor', + 'Gerente', + ], + 'cancel' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ] + ], + + // Facturación + 'billing' => [ + 'name' => 'Facturación', + 'sub_groups' => [ + 'dashboard' => [ + 'name' => 'Tablero', + 'actions' => [ + 'allow' => [ + 'Facturación avanzado', + 'Gerente', + ] + ] + ], + 'general-settings' => [ + 'name' => 'Configuraciones de facturación', + 'actions' => [ + 'allow' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'csds-settings' => [ + 'name' => 'Certificados de Sello Digital', + 'actions' => [ + 'allow' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'smtp-settings' => [ + 'name' => 'Correo SMTP de facturación', + 'actions' => [ + 'allow' => [ + 'Gerente', + ], + ] + ], + 'stamping-package' => [ + 'name' => 'Paquete de timbrado', + 'actions' => [ + 'allow' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'ingresos' => [ + 'name' => 'Facturación CFDI Ingresos', + 'actions' => [ + 'view' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'create' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'cancel' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'egresos' => [ + 'name' => 'Facturación CFDI Egresos', + 'actions' => [ + 'view' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'create' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'cancel' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'pagos' => [ + 'name' => 'Facturación CFDI Pagos', + 'actions' => [ + 'view' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'create' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'cancel' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'nomina' => [ + 'name' => 'Facturación CFDI Nómina', + 'actions' => [ + 'view' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'create' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ], + 'cancel' => [ + 'Facturación avanzado', + 'Gerente', + ], + ] + ], + 'verify-cfdi' => [ + 'name' => 'Verificador de CFDI 4.0', + 'actions' => [ + 'allow' => [ + 'Facturación', + 'Facturación avanzado', + 'Gerente', + ] + ] + ], + ], + ], + + // Finanzas + 'finance' => [ + 'name' => 'Finanzas', + 'sub_groups' => [ + 'dashboard' => [ + 'name' => 'Tablero', + 'actions' => [ + 'allow' => [ + 'Finanzas', + 'Gerente', + ] + ] + ], + 'accounting-charts' => [ + 'name' => 'Catálogos de cuentas contables', + 'actions' => [ + 'view' => [ + 'Finanzas', + 'Gerente', + ], + 'create' => [ + 'Finanzas', + 'Gerente', + ], + 'edit' => [ + 'Finanzas', + 'Gerente', + ], + 'cancel' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'accounts-payable' => [ + 'name' => 'Cuentas por pagar', + 'actions' => [ + 'view' => [ + 'Finanzas', + 'Gerente', + ], + 'create' => [ + 'Finanzas', + 'Gerente', + ], + 'edit' => [ + 'Finanzas', + 'Gerente', + ], + 'cancel' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + 'accounts-receivable' => [ + 'name' => 'Cuentas por cobrar', + 'actions' => [ + 'view' => [ + 'Finanzas', + 'Gerente', + ], + 'create' => [ + 'Finanzas', + 'Gerente', + ], + 'edit' => [ + 'Finanzas', + 'Gerente', + ], + 'cancel' => [ + 'Gerente', + ], + 'delete' => [ + 'Gerente', + ], + ] + ], + ] + ], + + // Blog + 'blog' => [ + 'name' => 'Blog', + 'sub_groups' => [ + 'categories' => [ + 'name' => 'Categorias', + 'actions' => [ + 'view' => [ + 'Editor', + ], + 'create' => [ + 'Editor', + ], + 'edit' => [ + 'Editor', + ], + 'delete' => [ + 'Editor', + ], + ] + ], + 'tags' => [ + 'name' => 'Etiquetas', + 'actions' => [ + 'view' => [ + 'Editor', + ], + 'create' => [ + 'Editor', + ], + 'edit' => [ + 'Editor', + ], + 'delete' => [ + 'Editor', + ], + ] + ], + 'articles' => [ + 'name' => 'Articulos', + 'actions' => [ + 'view' => [ + 'Editor', + ], + 'create' => [ + 'Editor', + ], + 'edit' => [ + 'Editor', + ], + 'delete' => [ + 'Editor', + ], + ] + ], + 'comments' => [ + 'name' => 'Comentarios', + 'actions' => [ + 'view' => [ + 'Editor', + ], + 'create' => [ + 'Editor', + ], + 'edit' => [ + 'Editor', + ], + 'delete' => [ + 'Editor', + ], + ] + ], + ] + ], + + // Sistema + 'system' => [ + 'name' => 'Sistema', + 'sub_groups' => [ + 'users' => [ + 'name' => 'Usuarios de sistema', + 'actions' => [ + 'view' => [ + 'Gerente', + ], + 'create' => [], + 'edit' => [], + 'delete' => [] + ] + ], + 'roles' => [ + 'name' => 'Roles de usuario', + 'actions' => [ + 'view' => [ + 'Gerente', + ], + 'create' => [], + 'edit' => [], + 'delete' => [] + ] + ], + 'permissions' => [ + 'name' => 'Permisos de usuarios', + 'actions' => [ + 'view' => [] + ] + ] + ] + ], + + // Importación + 'import' => [ + 'name' => 'Importar', + 'sub_groups' => [ + 'catalogs-sat' => [ + 'name' => 'Importar Catálogos CFDI 4.0', + 'actions' => [ + 'allow' => [] + ] + ] + ] + ], + + // Exportación + 'export' => [ + 'name' => 'Exportar', + 'sub_groups' => [ + 'customers' => [ + 'name' => 'Exportar clientes', + 'actions' => [ + 'allow' => [ + 'Gerente', + ] + ] + ] + ] + ], + + ]; + + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + foreach ($this->roles as $role) { + Role::create($role); + } + + $group_blockId = 0; + + foreach ($this->permissions as $group_idx => $group) { + $sub_group_blockId = 0; + + foreach ($group['sub_groups'] as $sub_group_idx => $sub_group) { + $action_id = 0; + + foreach ($sub_group['actions'] as $action => $roleNames) { + $roles_default = ['SuperAdmin']; + + // Default Admin role + if ("{$group_idx}.{$sub_group_idx}" != 'system.permissions') + $roles_default[] = 'Admin'; + + // Default Auditor role + if ($sub_group_idx == 'dashboard' || $action == 'view') + $roles_default[] = 'Auditor'; + + Permission::create([ + 'id' => ($group_blockId * 1000) + ($sub_group_blockId * 10) + $action_id++, + 'name' => "{$group_idx}.{$sub_group_idx}.{$action}", + 'group_name' => $group['name'], + 'sub_group_name' => $sub_group['name'], + 'action' => $action, + ])->syncRoles(array_merge($roles_default, $roleNames)); + } + + $sub_group_blockId++; + } + + $group_blockId++; + } + + app()->make(\Spatie\Permission\PermissionRegistrar::class)->forgetCachedPermissions(); + } +} diff --git a/src/modules/Database/seeders/SATCatalogsSeeder.php b/src/modules/Database/seeders/SATCatalogsSeeder.php new file mode 100644 index 0000000..68ed0dd --- /dev/null +++ b/src/modules/Database/seeders/SATCatalogsSeeder.php @@ -0,0 +1,83 @@ +console = $console; + } + + /** + * Run the database seeds. + * + * @return void + */ + public function run() + { + $this->importCatCFDIV4(base_path("modules/Admin/Database/data/catCFDI_V_4_20241121.xls")); + $this->importCatBancos(base_path('modules/Admin/Database/data/catalog-sat_bancos.json')); + } + + private function importCatCFDIV4($file_path) + { + $import = new SatCatalogsImport($this->console); + + $sheets = [ + 'c_FormaPago', + 'c_Moneda', + 'c_CodigoPostal_Parte_1', + 'c_CodigoPostal_Parte_2', + 'c_RegimenFiscal', + 'c_Pais', + 'c_UsoCFDI', + 'C_Colonia_1', + 'C_Colonia_2', + 'C_Colonia_3', + 'c_Estado', + 'C_Localidad', + 'C_Municipio', + ]; + + $this->command->getOutput()->progressStart(count($sheets)); + + foreach ($sheets as $sheet) { + $import = new SatCatalogsImport(); + $import->onlySheets($sheet); + + Excel::import($import, $file_path); + + $this->command->getOutput()->progressAdvance(); + } + + $this->command->getOutput()->progressFinish(); + } + + private function importCatBancos($file_path) + { + $json = File::get($file_path); + + // Convierte el contenido JSON a un array asociativo + $bancos = json_decode($json, true); + + // Inserta cada banco en la base de datos + foreach ($bancos as $banco) { + Banco::create([ + 'c_banco' => $banco['c_banco'], + 'descripcion' => $banco['descripcion'], + 'razon_social' => $banco['razon_social'], + 'rfc' => null, + 'status' => Banco::STATUS_ENABLED, + ]); + } + } +} diff --git a/src/modules/Database/seeders/SettingSeeder.php b/src/modules/Database/seeders/SettingSeeder.php new file mode 100644 index 0000000..4ec2a15 --- /dev/null +++ b/src/modules/Database/seeders/SettingSeeder.php @@ -0,0 +1,108 @@ + 'Quimiplastic S.A de C.V.', + 'app_faviconIcon' => '../assets/img/logo/koneko-02.png', + 'app_name' => 'Quimiplastic', + 'app_imageLogo' => '../assets/img/logo/koneko-02.png', + + 'app_myLayout' => 'vertical', + 'app_myTheme' => 'theme-default', + 'app_myStyle' => 'light', + 'app_navbarType' => 'sticky', + 'app_menuFixed' => true, + 'app_menuCollapsed' => false, + 'app_headerType' => 'static', + 'app_showDropdownOnHover' => false, + 'app_authViewMode' => 'cover', + 'app_maxQuickLinks' => 5, + + + + 'smtp.host' => 'webmail.koneko.mx', + 'smtp.port' => 465, + 'smtp.encryption' => 'tls', + 'smtp.username' => 'no-responder@koneko.mx', + 'smtp.password' => null, + 'smtp.from_email' => 'no-responder@koneko.mx', + 'smtp.from_name' => 'Koneko Soluciones en Tecnología', + 'smtp.reply_to_method' => 'smtp', + 'smtp.reply_to_email' => null, + 'smtp.reply_to_name' => null, + + + + 'website.title', + 'website.favicon', + 'website.description', + 'website.image_logo', + 'website.image_logoDark', + + 'admin.title', + 'admin.favicon', + 'admin.description', + 'admin.image_logo', + 'admin.image_logoDark', + + + 'favicon.icon' => null, + + 'contact.phone_number' => '(222) 462 0903', + 'contact.phone_number_ext' => 'Ext. 5', + 'contact.email' => 'virtualcompras@live.com.mx', + 'contact.form.email' => 'contacto@conciergetravellife.com', + 'contact.form.email_cc' => 'arturo@koneko.mx', + 'contact.form.subject' => 'Has recibido un mensaje del formulario de covirsast.com', + 'contact.direccion' => '51 PTE 505 loc. 14, Puebla, Pue.', + 'contact.horario' => '9am - 7 pm', + 'contact.location.lat' => '19.024439', + 'contact.location.lng' => '-98.215777', + + 'social.whatsapp' => '', + 'social.whatsapp.message' => '👋 Hola! Estoy buscando más información sobre Covirsa Soluciones en Tecnología. ¿Podrías proporcionarme los detalles que necesito? ¡Te lo agradecería mucho! 💻✨', + + 'social.facebook' => 'https://www.facebook.com/covirsast/?locale=es_LA', + 'social.Whatsapp' => '2228 200 201', + 'social.Whatsapp.message' => '¡Hola! 🌟 Estoy interesado en obtener más información acerca de Concierge Travel. ¿Podrías ayudarme con los detalles? ¡Gracias de antemano! ✈️🏝', + 'social.Facebook' => 'test', + 'social.Instagram' => 'test', + 'social.Linkedin' => 'test', + 'social.Tiktok' => 'test', + 'social.X_twitter' => 'test', + 'social.Google' => 'test', + 'social.Pinterest' => 'test', + 'social.Youtube' => 'test', + 'social.Vimeo' => 'test', + + + 'chat.provider' => '', + 'chat.whatsapp.number' => '', + 'chat.whatsapp.message' => '👋 Hola! Estoy buscando más información sobre Covirsa Soluciones en Tecnología. ¿Podrías proporcionarme los detalles que necesito? ¡Te lo agradecería mucho! 💻✨', + + 'webTpl.container' => 'custom-container', +*/]; + + foreach ($settings_array as $key => $value) { + Setting::create([ + 'key' => $key, + 'value' => $value, + ]); + }; + } +} diff --git a/src/modules/Database/seeders/UserSeeder.php b/src/modules/Database/seeders/UserSeeder.php new file mode 100644 index 0000000..5c4e936 --- /dev/null +++ b/src/modules/Database/seeders/UserSeeder.php @@ -0,0 +1,77 @@ +exists($directory)) + Storage::disk($disk)->deleteDirectory($directory); + + // Arturo Corro + $user = User::create([ + 'name' => 'Koneko Admin', + 'email' => 'arturo@koneko.mx', + 'email_verified_at' => now(), + 'password' => bcrypt('KO:qu1m1*'), + 'status' => User::STATUS_ENABLED, + ])->assignRole('SuperAdmin'); + + $user->updateProfilePhoto(new UploadedFile( + 'public/assets/img/logo/koneko-02.png', + 'koneko-02.png' + )); + + + // Webmaster admin + $user = User::create([ + 'name' => 'Quimiplastic Admin', + 'email' => 'admin@operadoraconcierge.com', + 'email_verified_at' => now(), + 'password' => bcrypt('KO:qu1m1'), + 'status' => User::STATUS_ENABLED, + ])->assignRole('Admin'); + + $user->updateProfilePhoto(new UploadedFile( + 'public/assets/img/logo/koneko-03.png', + 'koneko-03.png' + )); + + // Usuarios CSV + $csvFile = fopen(base_path("modules/Admin/Database/data/users.csv"), "r"); + + $firstline = true; + + while (($data = fgetcsv($csvFile, 2000, ",")) !== FALSE) { + if (!$firstline) { + User::create([ + 'name' => $data['0'], + 'email' => $data['1'], + 'email_verified_at' => now(), + 'password' => bcrypt('KO:qu1m1'), + 'status' => User::STATUS_ENABLED, + ])->assignRole($data['2']); + } + + $firstline = false; + } + + fclose($csvFile); + } +} diff --git a/src/modules/Resources/assets/css/demo.css b/src/modules/Resources/assets/css/demo.css new file mode 100644 index 0000000..ec996c1 --- /dev/null +++ b/src/modules/Resources/assets/css/demo.css @@ -0,0 +1,129 @@ +/* +* demo.css +* File include item demo only specific css only +******************************************************************************/ + +.light-style .menu .app-brand.demo { + height: 64px; +} + +.dark-style .menu .app-brand.demo { + height: 64px; +} + +.app-brand-logo.demo { + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + display: -ms-flexbox; + display: flex; + width: 34px; + height: 24px; +} + +.app-brand-logo.demo svg { + width: 35px; + height: 24px; +} + +.app-brand-text.demo { + font-size: 1.375rem; +} + +/* ! For .layout-navbar-fixed added fix padding top tpo .layout-page */ +.layout-navbar-fixed .layout-wrapper:not(.layout-without-menu) .layout-page { + padding-top: 64px !important; +} +.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal):not(.layout-without-menu) .layout-page { + padding-top: 72px !important; +} +/* Navbar page z-index issue solution */ +.content-wrapper .navbar { + z-index: auto; +} + +/* +* Content +******************************************************************************/ + +.demo-blocks > * { + display: block !important; +} + +.demo-inline-spacing > * { + margin: 1rem 0.375rem 0 0 !important; +} + +/* ? .demo-vertical-spacing class is used to have vertical margins between elements. To remove margin-top from the first-child, use .demo-only-element class with .demo-vertical-spacing class. For example, we have used this class in forms-input-groups.html file. */ +.demo-vertical-spacing > * { + margin-top: 1rem !important; + margin-bottom: 0 !important; +} +.demo-vertical-spacing.demo-only-element > :first-child { + margin-top: 0 !important; +} + +.demo-vertical-spacing-lg > * { + margin-top: 1.875rem !important; + margin-bottom: 0 !important; +} +.demo-vertical-spacing-lg.demo-only-element > :first-child { + margin-top: 0 !important; +} + +.demo-vertical-spacing-xl > * { + margin-top: 5rem !important; + margin-bottom: 0 !important; +} +.demo-vertical-spacing-xl.demo-only-element > :first-child { + margin-top: 0 !important; +} + +.rtl-only { + display: none !important; + text-align: left !important; + direction: ltr !important; +} + +[dir='rtl'] .rtl-only { + display: block !important; +} + +/* Dropdown buttons going out of small screens */ +@media (max-width: 576px) { + #dropdown-variation-demo .btn-group .text-truncate { + width: 254px; + position: relative; + } + #dropdown-variation-demo .btn-group .text-truncate::after { + position: absolute; + top: 45%; + right: 0.65rem; + } +} + +/* +* Layout demo +******************************************************************************/ + +.layout-demo-wrapper { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + margin-top: 1rem; +} +.layout-demo-placeholder img { + width: 900px; +} +.layout-demo-info { + text-align: center; + margin-top: 1rem; +} diff --git a/src/modules/Resources/assets/js/config.js b/src/modules/Resources/assets/js/config.js new file mode 100644 index 0000000..cdc42a0 --- /dev/null +++ b/src/modules/Resources/assets/js/config.js @@ -0,0 +1,53 @@ +/** + * Config + * ------------------------------------------------------------------------------------- + * ! IMPORTANT: Make sure you clear the browser local storage In order to see the config changes in the template. + * ! To clear local storage: (https://www.leadshook.com/help/how-to-clear-local-storage-in-google-chrome-browser/). + */ + +'use strict'; + +// JS global variables +window.config = { + colors: { + primary: '#7367f0', + secondary: '#808390', + success: '#28c76f', + info: '#00bad1', + warning: '#ff9f43', + danger: '#FF4C51', + dark: '#4b4b4b', + black: '#000', + white: '#fff', + cardColor: '#fff', + bodyBg: '#f8f7fa', + bodyColor: '#6d6b77', + headingColor: '#444050', + textMuted: '#acaab1', + borderColor: '#e6e6e8' + }, + colors_label: { + primary: '#7367f029', + secondary: '#a8aaae29', + success: '#28c76f29', + info: '#00cfe829', + warning: '#ff9f4329', + danger: '#ea545529', + dark: '#4b4b4b29' + }, + colors_dark: { + cardColor: '#2f3349', + bodyBg: '#25293c', + bodyColor: '#b2b1cb', + headingColor: '#cfcce4', + textMuted: '#8285a0', + borderColor: '#565b79' + }, + enableMenuLocalStorage: true // Enable menu state with local storage support +}; + +window.assetsPath = document.documentElement.getAttribute('data-assets-path'); +window.baseUrl = document.documentElement.getAttribute('data-base-url') + '/'; +window.quicklinksUpdateUrl = document.documentElement.getAttribute('data-quicklinks-update-url'); +window.templateName = document.documentElement.getAttribute('data-template'); +window.rtlSupport = true; // set true for rtl support (rtl + ltr), false for ltr only. diff --git a/src/modules/Resources/assets/js/main.js b/src/modules/Resources/assets/js/main.js new file mode 100644 index 0000000..9482e69 --- /dev/null +++ b/src/modules/Resources/assets/js/main.js @@ -0,0 +1,375 @@ +import './quicklinks-navbar.js'; +import './search-navbar.js'; + +('use strict'); + +window.isRtl = window.Helpers.isRtl(); +window.isDarkStyle = window.Helpers.isDarkStyle(); + +let menu, + animate, + isHorizontalLayout = false; + +if (document.getElementById('layout-menu')) { + isHorizontalLayout = document.getElementById('layout-menu').classList.contains('menu-horizontal'); +} + +(function () { + setTimeout(function () { + window.Helpers.initCustomOptionCheck(); + }, 1000); + + if (typeof Waves !== 'undefined') { + Waves.init(); + Waves.attach( + ".btn[class*='btn-']:not(.position-relative):not([class*='btn-outline-']):not([class*='btn-label-'])", + ['waves-light'] + ); + Waves.attach("[class*='btn-outline-']:not(.position-relative)"); + Waves.attach("[class*='btn-label-']:not(.position-relative)"); + Waves.attach('.pagination .page-item .page-link'); + Waves.attach('.dropdown-menu .dropdown-item'); + Waves.attach('.light-style .list-group .list-group-item-action'); + Waves.attach('.dark-style .list-group .list-group-item-action', ['waves-light']); + Waves.attach('.nav-tabs:not(.nav-tabs-widget) .nav-item .nav-link'); + Waves.attach('.nav-pills .nav-item .nav-link', ['waves-light']); + } + + // Initialize menu + //----------------- + + let layoutMenuEl = document.querySelectorAll('#layout-menu'); + layoutMenuEl.forEach(function (element) { + menu = new Menu(element, { + orientation: isHorizontalLayout ? 'horizontal' : 'vertical', + closeChildren: isHorizontalLayout ? true : false, + // ? This option only works with Horizontal menu + showDropdownOnHover: localStorage.getItem('templateCustomizer-' + templateName + '--ShowDropdownOnHover') // If value(showDropdownOnHover) is set in local storage + ? localStorage.getItem('templateCustomizer-' + templateName + '--ShowDropdownOnHover') === 'true' // Use the local storage value + : window.templateCustomizer !== undefined // If value is set in config.js + ? window.templateCustomizer.settings.defaultShowDropdownOnHover // Use the config.js value + : true // Use this if you are not using the config.js and want to set value directly from here + }); + // Change parameter to true if you want scroll animation + window.Helpers.scrollToActive((animate = false)); + window.Helpers.mainMenu = menu; + }); + + // Initialize menu togglers and bind click on each + let menuToggler = document.querySelectorAll('.layout-menu-toggle'); + menuToggler.forEach(item => { + item.addEventListener('click', event => { + event.preventDefault(); + window.Helpers.toggleCollapsed(); + // Enable menu state with local storage support if enableMenuLocalStorage = true from config.js + if (config.enableMenuLocalStorage && !window.Helpers.isSmallScreen()) { + try { + localStorage.setItem( + 'templateCustomizer-' + templateName + '--LayoutCollapsed', + String(window.Helpers.isCollapsed()) + ); + // Update customizer checkbox state on click of menu toggler + let layoutCollapsedCustomizerOptions = document.querySelector( + '.template-customizer-layouts-options' + ); + if (layoutCollapsedCustomizerOptions) { + let layoutCollapsedVal = window.Helpers.isCollapsed() ? 'collapsed' : 'expanded'; + layoutCollapsedCustomizerOptions.querySelector(`input[value="${layoutCollapsedVal}"]`).click(); + } + } catch (e) {} + } + }); + }); + + // Menu swipe gesture + + // Detect swipe gesture on the target element and call swipe In + window.Helpers.swipeIn('.drag-target', function (e) { + window.Helpers.setCollapsed(false); + }); + + // Detect swipe gesture on the target element and call swipe Out + window.Helpers.swipeOut('#layout-menu', function (e) { + if (window.Helpers.isSmallScreen()) window.Helpers.setCollapsed(true); + }); + + // Display in main menu when menu scrolls + let menuInnerContainer = document.getElementsByClassName('menu-inner'), + menuInnerShadow = document.getElementsByClassName('menu-inner-shadow')[0]; + if (menuInnerContainer.length > 0 && menuInnerShadow) { + menuInnerContainer[0].addEventListener('ps-scroll-y', function () { + if (this.querySelector('.ps__thumb-y').offsetTop) { + menuInnerShadow.style.display = 'block'; + } else { + menuInnerShadow.style.display = 'none'; + } + }); + } + + // Update light/dark image based on current style + function switchImage(style) { + if (style === 'system') { + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + style = 'dark'; + } else { + style = 'light'; + } + } + const switchImagesList = [].slice.call(document.querySelectorAll('[data-app-' + style + '-img]')); + switchImagesList.map(function (imageEl) { + const setImage = imageEl.getAttribute('data-app-' + style + '-img'); + imageEl.src = assetsPath + 'admin/img/' + setImage; // Using window.assetsPath to get the exact relative path + }); + } + + //Style Switcher (Light/Dark/System Mode) + let styleSwitcher = document.querySelector('.dropdown-style-switcher'); + + // Active class on style switcher dropdown items + const activeStyle = document.documentElement.getAttribute('data-style'); + + // Get style from local storage or use 'system' as default + let storedStyle = + localStorage.getItem('templateCustomizer-' + templateName + '--Style') || //if no template style then use Customizer style + (window.templateCustomizer?.settings?.defaultStyle ?? 'light'); //!if there is no Customizer then use default style as light + + // Set style on click of style switcher item if template customizer is enabled + if (window.templateCustomizer && styleSwitcher) { + let styleSwitcherItems = [].slice.call(styleSwitcher.children[1].querySelectorAll('.dropdown-item')); + styleSwitcherItems.forEach(function (item) { + item.classList.remove('active'); + item.addEventListener('click', function () { + let currentStyle = this.getAttribute('data-theme'); + if (currentStyle === 'light') { + window.templateCustomizer.setStyle('light'); + } else if (currentStyle === 'dark') { + window.templateCustomizer.setStyle('dark'); + } else { + window.templateCustomizer.setStyle('system'); + } + }); + + if (item.getAttribute('data-theme') === activeStyle) { + // Add 'active' class to the item if it matches the activeStyle + item.classList.add('active'); + } + }); + + // Update style switcher icon based on the stored style + + const styleSwitcherIcon = styleSwitcher.querySelector('i'); + + if (storedStyle === 'light') { + styleSwitcherIcon.classList.add('ti-sun'); + new bootstrap.Tooltip(styleSwitcherIcon, { + title: 'Light Mode', + fallbackPlacements: ['bottom'] + }); + } else if (storedStyle === 'dark') { + styleSwitcherIcon.classList.add('ti-moon-stars'); + new bootstrap.Tooltip(styleSwitcherIcon, { + title: 'Dark Mode', + fallbackPlacements: ['bottom'] + }); + } else { + styleSwitcherIcon.classList.add('ti-device-desktop-analytics'); + new bootstrap.Tooltip(styleSwitcherIcon, { + title: 'System Mode', + fallbackPlacements: ['bottom'] + }); + } + } + + // Run switchImage function based on the stored style + switchImage(storedStyle); + + let languageDropdown = document.getElementsByClassName('dropdown-language'); + + if (languageDropdown.length) { + let dropdownItems = languageDropdown[0].querySelectorAll('.dropdown-item'); + const dropdownActiveItem = languageDropdown[0].querySelector('.dropdown-item.active'); + + directionChange(dropdownActiveItem.dataset.textDirection); + + for (let i = 0; i < dropdownItems.length; i++) { + dropdownItems[i].addEventListener('click', function () { + let textDirection = this.getAttribute('data-text-direction'); + window.templateCustomizer.setLang(this.getAttribute('data-language')); + directionChange(textDirection); + }); + } + function directionChange(textDirection) { + if (textDirection === 'rtl') { + if (localStorage.getItem('templateCustomizer-' + templateName + '--Rtl') !== 'true') + window.templateCustomizer ? window.templateCustomizer.setRtl(true) : ''; + } else { + if (localStorage.getItem('templateCustomizer-' + templateName + '--Rtl') === 'true') + window.templateCustomizer ? window.templateCustomizer.setRtl(false) : ''; + } + } + } + + // add on click javascript for template customizer reset button id template-customizer-reset-btn + + setTimeout(function () { + let templateCustomizerResetBtn = document.querySelector('.template-customizer-reset-btn'); + if (templateCustomizerResetBtn) { + templateCustomizerResetBtn.onclick = function () { + window.location.href = baseUrl + 'lang/en'; + }; + } + }, 1500); + + // Notification + // ------------ + const notificationMarkAsReadAll = document.querySelector('.dropdown-notifications-all'); + const notificationMarkAsReadList = document.querySelectorAll('.dropdown-notifications-read'); + + // Notification: Mark as all as read + if (notificationMarkAsReadAll) { + notificationMarkAsReadAll.addEventListener('click', event => { + notificationMarkAsReadList.forEach(item => { + item.closest('.dropdown-notifications-item').classList.add('marked-as-read'); + }); + }); + } + // Notification: Mark as read/unread onclick of dot + if (notificationMarkAsReadList) { + notificationMarkAsReadList.forEach(item => { + item.addEventListener('click', event => { + item.closest('.dropdown-notifications-item').classList.toggle('marked-as-read'); + }); + }); + } + + // Notification: Mark as read/unread onclick of dot + const notificationArchiveMessageList = document.querySelectorAll('.dropdown-notifications-archive'); + notificationArchiveMessageList.forEach(item => { + item.addEventListener('click', event => { + item.closest('.dropdown-notifications-item').remove(); + }); + }); + + // Init helpers & misc + // -------------------- + + // Init BS Tooltip + const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); + tooltipTriggerList.map(function (tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl); + }); + + // Accordion active class + const accordionActiveFunction = function (e) { + if (e.type == 'show.bs.collapse' || e.type == 'show.bs.collapse') { + e.target.closest('.accordion-item').classList.add('active'); + } else { + e.target.closest('.accordion-item').classList.remove('active'); + } + }; + + const accordionTriggerList = [].slice.call(document.querySelectorAll('.accordion')); + const accordionList = accordionTriggerList.map(function (accordionTriggerEl) { + accordionTriggerEl.addEventListener('show.bs.collapse', accordionActiveFunction); + accordionTriggerEl.addEventListener('hide.bs.collapse', accordionActiveFunction); + }); + + // If layout is RTL add .dropdown-menu-end class to .dropdown-menu + // if (isRtl) { + // Helpers._addClass('dropdown-menu-end', document.querySelectorAll('#layout-navbar .dropdown-menu')); + // } + + // Auto update layout based on screen size + window.Helpers.setAutoUpdate(true); + + // Toggle Password Visibility + window.Helpers.initPasswordToggle(); + + // Speech To Text + window.Helpers.initSpeechToText(); + + // Init PerfectScrollbar in Navbar Dropdown (i.e notification) + window.Helpers.initNavbarDropdownScrollbar(); + + let horizontalMenuTemplate = document.querySelector("[data-template^='horizontal-menu']"); + if (horizontalMenuTemplate) { + // if screen size is small then set navbar fixed + if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + window.Helpers.setNavbarFixed('fixed'); + } else { + window.Helpers.setNavbarFixed(''); + } + } + + // On window resize listener + // ------------------------- + window.addEventListener( + 'resize', + function (event) { + // Hide open search input and set value blank + if (window.innerWidth >= window.Helpers.LAYOUT_BREAKPOINT) { + if (document.querySelector('.search-input-wrapper')) { + document.querySelector('.search-input-wrapper').classList.add('d-none'); + document.querySelector('.search-input').value = ''; + } + } + // Horizontal Layout : Update menu based on window size + if (horizontalMenuTemplate) { + // if screen size is small then set navbar fixed + if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + window.Helpers.setNavbarFixed('fixed'); + } else { + window.Helpers.setNavbarFixed(''); + } + setTimeout(function () { + if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + if (document.getElementById('layout-menu')) { + if (document.getElementById('layout-menu').classList.contains('menu-horizontal')) { + menu.switchMenu('vertical'); + } + } + } else { + if (document.getElementById('layout-menu')) { + if (document.getElementById('layout-menu').classList.contains('menu-vertical')) { + menu.switchMenu('horizontal'); + } + } + } + }, 100); + } + }, + true + ); + + // Manage menu expanded/collapsed with templateCustomizer & local storage + //------------------------------------------------------------------ + + // If current layout is horizontal OR current window screen is small (overlay menu) than return from here + if (isHorizontalLayout || window.Helpers.isSmallScreen()) { + return; + } + + // If current layout is vertical and current window screen is > small + + // Auto update menu collapsed/expanded based on the themeConfig + if (typeof TemplateCustomizer !== 'undefined') { + if (window.templateCustomizer.settings.defaultMenuCollapsed) { + window.Helpers.setCollapsed(true, false); + } else { + window.Helpers.setCollapsed(false, false); + } + } + + // Manage menu expanded/collapsed state with local storage support If enableMenuLocalStorage = true in config.js + if (typeof config !== 'undefined') { + if (config.enableMenuLocalStorage) { + try { + if (localStorage.getItem('templateCustomizer-' + templateName + '--LayoutCollapsed') !== null) + window.Helpers.setCollapsed( + localStorage.getItem('templateCustomizer-' + templateName + '--LayoutCollapsed') === 'true', + false + ); + } catch (e) {} + } + } +})(); diff --git a/src/modules/Resources/assets/js/quicklinks-navbar.js b/src/modules/Resources/assets/js/quicklinks-navbar.js new file mode 100644 index 0000000..1fd95cb --- /dev/null +++ b/src/modules/Resources/assets/js/quicklinks-navbar.js @@ -0,0 +1,56 @@ +/** + * Quicklinks Navbar + */ + +'use strict'; + +$(function () { + // Navbar Quicklinks with autosuggest (typeahead) + const $dropdownShortcuts = $('.dropdown-shortcuts'), + $dropdownShortcutsAdd = $('.dropdown-shortcuts-add'), + $dropdownShortcutsRemove = $('.dropdown-shortcuts-remove'); + + const route = document.documentElement.getAttribute('data-route'); + + if ($dropdownShortcuts.length) { + $dropdownShortcutsAdd.on('click', function () { + $.ajax({ + url: quicklinksUpdateUrl, + method: 'POST', + data: { + action: 'update', + route: route + }, + headers: { + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + }, + success: function (response) { + location.reload(); + }, + error: function (xhr) { + console.error(xhr.responseJSON.message); + } + }); + }); + + $dropdownShortcutsRemove.on('click', function () { + $.ajax({ + url: quicklinksUpdateUrl, + method: 'POST', + data: { + action: 'remove', + route: route + }, + headers: { + 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') + }, + success: function (response) { + location.reload(); + }, + error: function (xhr) { + console.error(xhr.responseJSON.message); + } + }); + }); + } +}); diff --git a/src/modules/Resources/assets/js/search-navbar.js b/src/modules/Resources/assets/js/search-navbar.js new file mode 100644 index 0000000..7eb2085 --- /dev/null +++ b/src/modules/Resources/assets/js/search-navbar.js @@ -0,0 +1,201 @@ +/** + * Search Navbar + */ + +'use strict'; + +$(function () { + window.Helpers.initSidebarToggle(); + // Toggle Universal Sidebar + + // Navbar Search with autosuggest (typeahead) + var searchToggler = $('.search-toggler'), + searchInputWrapper = $('.search-input-wrapper'), + searchInput = $('.search-input'), + contentBackdrop = $('.content-backdrop'); + + // Open search input on click of search icon + if (searchToggler.length) { + searchToggler.on('click', function () { + if (searchInputWrapper.length) { + searchInputWrapper.toggleClass('d-none'); + searchInput.trigger('focus'); + } + }); + + document.addEventListener('keydown', function (event) { + const ctrlKey = event.ctrlKey; + const slashKey = event.key === '/'; // Usa 'key' para obtener la tecla como texto + + if (ctrlKey && slashKey) { + const searchInputWrapper = document.querySelector('.search-input-wrapper'); + const searchInput = document.querySelector('.search-input'); + + if (searchInputWrapper) { + searchInputWrapper.classList.toggle('d-none'); // Alterna la visibilidad + if (searchInput) { + searchInput.focus(); // Coloca el foco en el input + } + } + } + }); + + // Note: Following code is required to update container class of typeahead dropdown width on focus of search input. setTimeout is required to allow time to initiate Typeahead UI. + setTimeout(function () { + var twitterTypeahead = $('.twitter-typeahead'); + + searchInput.on('focus', function () { + if (searchInputWrapper.hasClass('container-xxl')) { + searchInputWrapper.find(twitterTypeahead).addClass('container-xxl'); + twitterTypeahead.removeClass('container-fluid'); + } else if (searchInputWrapper.hasClass('container-fluid')) { + searchInputWrapper.find(twitterTypeahead).addClass('container-fluid'); + twitterTypeahead.removeClass('container-xxl'); + } + }); + }, 10); + } + + if (searchInput.length) { + // Función para normalizar cadenas (eliminar acentos) + function normalizeString(str) { + return str + .normalize('NFD') + .replace(/[\u0300-\u036f]/g, '') + .toLowerCase(); + } + + // Filter config con soporte para ignorar acentos + var filterConfig = function (data) { + return function findMatches(q, cb) { + let matches = []; + + // Normalizar la consulta + const normalizedQuery = normalizeString(q); + + data.filter(function (i) { + const normalizedName = normalizeString(i.name); + + if (normalizedName.startsWith(normalizedQuery)) { + matches.push(i); + } else if ( + !normalizedName.startsWith(normalizedQuery) && + normalizedName.includes(normalizedQuery) + ) { + matches.push(i); + + // Ordenar por coincidencia secundaria + matches.sort(function (a, b) { + return b.name < a.name ? 1 : -1; + }); + } + }); + + cb(matches); + }; + }; + + // Search JSON + var searchJson = 'search-navbar'; // For vertical layout + + if ($('#layout-menu').hasClass('menu-horizontal')) { + var searchJson = 'search-navbar'; // For vertical layout + } + + // Search API AJAX call + var searchData = $.ajax({ + url: assetsPath + '../../admin/' + searchJson, //? Use your own search api instead + dataType: 'json', + async: false + }).responseJSON; + + // Init typeahead on searchInput + searchInput.each(function () { + var $this = $(this); + + searchInput + .typeahead( + { + hint: false, + classNames: { + menu: 'tt-menu navbar-search-suggestion', + cursor: 'active', + suggestion: 'suggestion d-flex justify-content-between px-4 py-2 w-100' + } + }, + // Páginas + { + name: 'pages', + display: 'name', + limit: 8, + source: filterConfig(searchData.pages), + templates: { + header: '
Páginas
', + suggestion: function ({ url, icon, name }) { + return ( + '' + + '
' + + '' + + '' + + name + + '' + + '
' + + '
' + ); + }, + notFound: + '
' + + '
Páginas
' + + '

No se encontro resultados

' + + '
' + } + } + ) + //On typeahead result render. + .on('typeahead:render', function () { + // Show content backdrop, + contentBackdrop.addClass('show').removeClass('fade'); + }) + // On typeahead select + .on('typeahead:select', function (ev, suggestion) { + // Open selected page + if (suggestion.url !== 'javascript:;') window.location = suggestion.url; + }) + // On typeahead close + .on('typeahead:close', function () { + // Clear search + searchInput.val(''); + $this.typeahead('val', ''); + + // Hide search input wrapper + searchInputWrapper.addClass('d-none'); + + // Fade content backdrop + contentBackdrop.addClass('fade').removeClass('show'); + }); + + // On searchInput keyup, Fade content backdrop if search input is blank + searchInput.on('keyup', function () { + if (searchInput.val() == '') contentBackdrop.addClass('fade').removeClass('show'); + }); + }); + + // Init PerfectScrollbar in search result + var psSearch; + + $('.navbar-search-suggestion').each(function () { + psSearch = new PerfectScrollbar($(this)[0], { + wheelPropagation: false, + suppressScrollX: true + }); + }); + + searchInput.on('keyup', function () { + psSearch.update(); + }); + } +}); diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/OFL.txt b/src/modules/Resources/assets/vendor/fonts/OpenSans/OFL.txt new file mode 100644 index 0000000..4fc6170 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/OpenSans/OFL.txt @@ -0,0 +1,93 @@ +Copyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/OpenSans-Italic-VariableFont_wdth,wght.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/OpenSans-Italic-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000..8312b2c Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/OpenSans-Italic-VariableFont_wdth,wght.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/OpenSans-VariableFont_wdth,wght.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/OpenSans-VariableFont_wdth,wght.ttf new file mode 100644 index 0000000..ac587b4 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/OpenSans-VariableFont_wdth,wght.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/README.txt b/src/modules/Resources/assets/vendor/fonts/OpenSans/README.txt new file mode 100644 index 0000000..2548322 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/OpenSans/README.txt @@ -0,0 +1,100 @@ +Open Sans Variable Font +======================= + +This download contains Open Sans as both variable fonts and static fonts. + +Open Sans is a variable font with these axes: + wdth + wght + +This means all the styles are contained in these files: + OpenSans-VariableFont_wdth,wght.ttf + OpenSans-Italic-VariableFont_wdth,wght.ttf + +If your app fully supports variable fonts, you can now pick intermediate styles +that aren’t available as static fonts. Not all apps support variable fonts, and +in those cases you can use the static font files for Open Sans: + static/OpenSans_Condensed-Light.ttf + static/OpenSans_Condensed-Regular.ttf + static/OpenSans_Condensed-Medium.ttf + static/OpenSans_Condensed-SemiBold.ttf + static/OpenSans_Condensed-Bold.ttf + static/OpenSans_Condensed-ExtraBold.ttf + static/OpenSans_SemiCondensed-Light.ttf + static/OpenSans_SemiCondensed-Regular.ttf + static/OpenSans_SemiCondensed-Medium.ttf + static/OpenSans_SemiCondensed-SemiBold.ttf + static/OpenSans_SemiCondensed-Bold.ttf + static/OpenSans_SemiCondensed-ExtraBold.ttf + static/OpenSans-Light.ttf + static/OpenSans-Regular.ttf + static/OpenSans-Medium.ttf + static/OpenSans-SemiBold.ttf + static/OpenSans-Bold.ttf + static/OpenSans-ExtraBold.ttf + static/OpenSans_Condensed-LightItalic.ttf + static/OpenSans_Condensed-Italic.ttf + static/OpenSans_Condensed-MediumItalic.ttf + static/OpenSans_Condensed-SemiBoldItalic.ttf + static/OpenSans_Condensed-BoldItalic.ttf + static/OpenSans_Condensed-ExtraBoldItalic.ttf + static/OpenSans_SemiCondensed-LightItalic.ttf + static/OpenSans_SemiCondensed-Italic.ttf + static/OpenSans_SemiCondensed-MediumItalic.ttf + static/OpenSans_SemiCondensed-SemiBoldItalic.ttf + static/OpenSans_SemiCondensed-BoldItalic.ttf + static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf + static/OpenSans-LightItalic.ttf + static/OpenSans-Italic.ttf + static/OpenSans-MediumItalic.ttf + static/OpenSans-SemiBoldItalic.ttf + static/OpenSans-BoldItalic.ttf + static/OpenSans-ExtraBoldItalic.ttf + +Get started +----------- + +1. Install the font files you want to use + +2. Use your app's font picker to view the font family and all the +available styles + +Learn more about variable fonts +------------------------------- + + https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts + https://variablefonts.typenetwork.com + https://medium.com/variable-fonts + +In desktop apps + + https://theblog.adobe.com/can-variable-fonts-illustrator-cc + https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts + +Online + + https://developers.google.com/fonts/docs/getting_started + https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide + https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts + +Installing fonts + + MacOS: https://support.apple.com/en-us/HT201749 + Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux + Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows + +Android Apps + + https://developers.google.com/fonts/docs/android + https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts + +License +------- +Please read the full license text (OFL.txt) to understand the permissions, +restrictions and requirements for usage, redistribution, and modification. + +You can use them in your products & projects – print or digital, +commercial or otherwise. + +This isn't legal advice, please consider consulting a lawyer and see the full +license for all details. diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Bold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Bold.ttf new file mode 100644 index 0000000..98c74e0 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Bold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-BoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000..8558928 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-BoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-ExtraBold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-ExtraBold.ttf new file mode 100644 index 0000000..4eb3393 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-ExtraBold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-ExtraBoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..75789b4 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-ExtraBoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Italic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Italic.ttf new file mode 100644 index 0000000..29ff693 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Italic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Light.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Light.ttf new file mode 100644 index 0000000..ea175cc Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Light.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-LightItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-LightItalic.ttf new file mode 100644 index 0000000..edbfe0b Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-LightItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Medium.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Medium.ttf new file mode 100644 index 0000000..ae71693 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Medium.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-MediumItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-MediumItalic.ttf new file mode 100644 index 0000000..6d1e09b Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-MediumItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Regular.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Regular.ttf new file mode 100644 index 0000000..67803bb Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-Regular.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-SemiBold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-SemiBold.ttf new file mode 100644 index 0000000..e5ab464 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-SemiBold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-SemiBoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-SemiBoldItalic.ttf new file mode 100644 index 0000000..cd23e15 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans-SemiBoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Bold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Bold.ttf new file mode 100644 index 0000000..525397d Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Bold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-BoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-BoldItalic.ttf new file mode 100644 index 0000000..d6c9bc0 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-BoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-ExtraBold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-ExtraBold.ttf new file mode 100644 index 0000000..3e600b9 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-ExtraBold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-ExtraBoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-ExtraBoldItalic.ttf new file mode 100644 index 0000000..0393650 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-ExtraBoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Italic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Italic.ttf new file mode 100644 index 0000000..fdf0a52 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Italic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Light.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Light.ttf new file mode 100644 index 0000000..459be7b Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Light.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-LightItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-LightItalic.ttf new file mode 100644 index 0000000..5f05d08 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-LightItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Medium.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Medium.ttf new file mode 100644 index 0000000..802200d Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Medium.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-MediumItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-MediumItalic.ttf new file mode 100644 index 0000000..b43786b Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-MediumItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Regular.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Regular.ttf new file mode 100644 index 0000000..a2a83ac Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-Regular.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-SemiBold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-SemiBold.ttf new file mode 100644 index 0000000..75bcd43 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-SemiBold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-SemiBoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-SemiBoldItalic.ttf new file mode 100644 index 0000000..9fcaa52 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_Condensed-SemiBoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Bold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Bold.ttf new file mode 100644 index 0000000..dc927fc Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Bold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-BoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-BoldItalic.ttf new file mode 100644 index 0000000..7601048 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-BoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-ExtraBold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-ExtraBold.ttf new file mode 100644 index 0000000..d6864b1 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-ExtraBold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf new file mode 100644 index 0000000..ec7ade5 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-ExtraBoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Italic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Italic.ttf new file mode 100644 index 0000000..7fc00c8 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Italic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Light.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Light.ttf new file mode 100644 index 0000000..5936496 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Light.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-LightItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-LightItalic.ttf new file mode 100644 index 0000000..7ced21a Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-LightItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Medium.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Medium.ttf new file mode 100644 index 0000000..25b1aad Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Medium.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-MediumItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-MediumItalic.ttf new file mode 100644 index 0000000..fd87f78 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-MediumItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Regular.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Regular.ttf new file mode 100644 index 0000000..5b09b35 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-Regular.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-SemiBold.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-SemiBold.ttf new file mode 100644 index 0000000..fff3a37 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-SemiBold.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf new file mode 100644 index 0000000..3874205 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/OpenSans/static/OpenSans_SemiCondensed-SemiBoldItalic.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/flag-icons.scss b/src/modules/Resources/assets/vendor/fonts/flag-icons.scss new file mode 100644 index 0000000..800264c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flag-icons.scss @@ -0,0 +1,7 @@ +$flag-icons-path: '../fonts/flags'; + +@import 'flag-icons/sass/flag-icons'; + +.fi { + vertical-align: middle; +} diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ad.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ad.svg new file mode 100644 index 0000000..4bd91b7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ad.svg @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ae.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ae.svg new file mode 100644 index 0000000..b59e113 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/af.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/af.svg new file mode 100644 index 0000000..0b7939c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ag.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ag.svg new file mode 100644 index 0000000..9b951b6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ai.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ai.svg new file mode 100644 index 0000000..eeaebcf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ai.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/al.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/al.svg new file mode 100644 index 0000000..15ee8bb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/am.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/am.svg new file mode 100644 index 0000000..a188adf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ao.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ao.svg new file mode 100644 index 0000000..46d6600 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/aq.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/aq.svg new file mode 100644 index 0000000..a4d9a20 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ar.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ar.svg new file mode 100644 index 0000000..984d6ea --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ar.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/arab.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/arab.svg new file mode 100644 index 0000000..841f11a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/arab.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/as.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/as.svg new file mode 100644 index 0000000..b0789e9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/as.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/at.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/at.svg new file mode 100644 index 0000000..758ced6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/at.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/au.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/au.svg new file mode 100644 index 0000000..38bb245 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/au.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/aw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/aw.svg new file mode 100644 index 0000000..1f03d61 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ax.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ax.svg new file mode 100644 index 0000000..481d2a3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/az.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/az.svg new file mode 100644 index 0000000..d692e22 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ba.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ba.svg new file mode 100644 index 0000000..456ca12 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bb.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bb.svg new file mode 100644 index 0000000..5af2bd0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bd.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bd.svg new file mode 100644 index 0000000..86fcfba --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/be.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/be.svg new file mode 100644 index 0000000..31d6210 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bf.svg new file mode 100644 index 0000000..a5078df --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bg.svg new file mode 100644 index 0000000..78412c5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bg.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bh.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bh.svg new file mode 100644 index 0000000..2d131aa --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bi.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bi.svg new file mode 100644 index 0000000..36a0d3a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bj.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bj.svg new file mode 100644 index 0000000..bb27414 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bl.svg new file mode 100644 index 0000000..65550d9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bm.svg new file mode 100644 index 0000000..b4df192 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bm.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bn.svg new file mode 100644 index 0000000..b536651 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bo.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bo.svg new file mode 100644 index 0000000..b69b230 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bo.svg @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bq.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bq.svg new file mode 100644 index 0000000..4b9168e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/br.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/br.svg new file mode 100644 index 0000000..be62f6f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bs.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bs.svg new file mode 100644 index 0000000..0faa4bb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bt.svg new file mode 100644 index 0000000..81f6788 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bv.svg new file mode 100644 index 0000000..dcc6ad1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bw.svg new file mode 100644 index 0000000..328e13c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/by.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/by.svg new file mode 100644 index 0000000..ab7984d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/by.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/bz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bz.svg new file mode 100644 index 0000000..e99106a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ca.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ca.svg new file mode 100644 index 0000000..84cde34 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cc.svg new file mode 100644 index 0000000..f6c1755 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cd.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cd.svg new file mode 100644 index 0000000..ea17728 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cd.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cefta.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cefta.svg new file mode 100644 index 0000000..ff1a19b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cefta.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cf.svg new file mode 100644 index 0000000..b0625db --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cg.svg new file mode 100644 index 0000000..f786884 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ch.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ch.svg new file mode 100644 index 0000000..52578bf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ci.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ci.svg new file mode 100644 index 0000000..2abf641 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ck.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ck.svg new file mode 100644 index 0000000..43a1057 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cl.svg new file mode 100644 index 0000000..5fb6096 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cm.svg new file mode 100644 index 0000000..ed4952b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cn.svg new file mode 100644 index 0000000..e152f01 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/co.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/co.svg new file mode 100644 index 0000000..5804bfe --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cp.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cp.svg new file mode 100644 index 0000000..ea3bfdc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cr.svg new file mode 100644 index 0000000..4e7889e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cu.svg new file mode 100644 index 0000000..a284902 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cv.svg new file mode 100644 index 0000000..1170cd7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cw.svg new file mode 100644 index 0000000..57062ab --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cx.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cx.svg new file mode 100644 index 0000000..f14536f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cy.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cy.svg new file mode 100644 index 0000000..39a87c8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/cz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cz.svg new file mode 100644 index 0000000..dcd0a6b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/de.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/de.svg new file mode 100644 index 0000000..05a0a69 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/dg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dg.svg new file mode 100644 index 0000000..0b8baf1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dg.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/dj.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dj.svg new file mode 100644 index 0000000..f5534d2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/dk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dk.svg new file mode 100644 index 0000000..5aaaa19 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/dm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dm.svg new file mode 100644 index 0000000..6f8f366 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/do.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/do.svg new file mode 100644 index 0000000..867e12d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/do.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/dz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dz.svg new file mode 100644 index 0000000..8abcd25 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/eac.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eac.svg new file mode 100644 index 0000000..385fe9d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eac.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ec.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ec.svg new file mode 100644 index 0000000..9545c5d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ee.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ee.svg new file mode 100644 index 0000000..5a6a7e3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ee.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/eg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eg.svg new file mode 100644 index 0000000..3ef7711 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/eh.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eh.svg new file mode 100644 index 0000000..ae509fa --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eh.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/er.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/er.svg new file mode 100644 index 0000000..0f140e0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/er.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-ct.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-ct.svg new file mode 100644 index 0000000..a06a2e3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-ga.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-ga.svg new file mode 100644 index 0000000..2fecfa0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-ga.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-pv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-pv.svg new file mode 100644 index 0000000..7d383ed --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es-pv.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/es.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es.svg new file mode 100644 index 0000000..0e6338f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/es.svg @@ -0,0 +1,547 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/et.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/et.svg new file mode 100644 index 0000000..eb7f3c4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/eu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eu.svg new file mode 100644 index 0000000..4a07fbe --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/fi.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fi.svg new file mode 100644 index 0000000..aba2ef3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/fj.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fj.svg new file mode 100644 index 0000000..7a1cade --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fj.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/fk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fk.svg new file mode 100644 index 0000000..21e654f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fk.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/fm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fm.svg new file mode 100644 index 0000000..4f7d313 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/fo.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fo.svg new file mode 100644 index 0000000..eec9945 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/fr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fr.svg new file mode 100644 index 0000000..0f60170 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/fr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ga.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ga.svg new file mode 100644 index 0000000..113a5b5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-eng.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-eng.svg new file mode 100644 index 0000000..ee48fed --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-nir.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-nir.svg new file mode 100644 index 0000000..77a91f0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-nir.svg @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-sct.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-sct.svg new file mode 100644 index 0000000..44d38cc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-wls.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-wls.svg new file mode 100644 index 0000000..3126882 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb.svg new file mode 100644 index 0000000..ce4d1e0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gd.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gd.svg new file mode 100644 index 0000000..c3b2cef --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ge.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ge.svg new file mode 100644 index 0000000..53b709f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gf.svg new file mode 100644 index 0000000..9cf5aa2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gg.svg new file mode 100644 index 0000000..480f550 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gh.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gh.svg new file mode 100644 index 0000000..a64271b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gi.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gi.svg new file mode 100644 index 0000000..7b26bb2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gl.svg new file mode 100644 index 0000000..eaa817b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gm.svg new file mode 100644 index 0000000..2a8f724 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gm.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gn.svg new file mode 100644 index 0000000..ae81f9d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gp.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gp.svg new file mode 100644 index 0000000..9dd8e3b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gp.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gq.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gq.svg new file mode 100644 index 0000000..5fd7b6a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gr.svg new file mode 100644 index 0000000..a268830 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gs.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gs.svg new file mode 100644 index 0000000..1db72cf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gs.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gt.svg new file mode 100644 index 0000000..97ea6aa --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gu.svg new file mode 100644 index 0000000..5702487 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gu.svg @@ -0,0 +1,23 @@ + + + + + + + + + + G + U + A + M + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gw.svg new file mode 100644 index 0000000..61a0548 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/gy.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gy.svg new file mode 100644 index 0000000..35e2f08 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/hk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hk.svg new file mode 100644 index 0000000..eef02a1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hk.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/hm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hm.svg new file mode 100644 index 0000000..1f4d007 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/hn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hn.svg new file mode 100644 index 0000000..847df20 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/hr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hr.svg new file mode 100644 index 0000000..91009eb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hr.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ht.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ht.svg new file mode 100644 index 0000000..a61736c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/hu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hu.svg new file mode 100644 index 0000000..088242d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ic.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ic.svg new file mode 100644 index 0000000..096603d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/id.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/id.svg new file mode 100644 index 0000000..df08018 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/id.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ie.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ie.svg new file mode 100644 index 0000000..e13de22 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/il.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/il.svg new file mode 100644 index 0000000..0a2a6d9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/im.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/im.svg new file mode 100644 index 0000000..cff1c4b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/in.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/in.svg new file mode 100644 index 0000000..26a02cf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/io.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/io.svg new file mode 100644 index 0000000..6f1a8ca --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/io.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/iq.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/iq.svg new file mode 100644 index 0000000..a64456d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ir.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ir.svg new file mode 100644 index 0000000..095d971 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/is.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/is.svg new file mode 100644 index 0000000..26510b9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/it.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/it.svg new file mode 100644 index 0000000..b9596d0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/je.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/je.svg new file mode 100644 index 0000000..8a9fdd5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/je.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/jm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/jm.svg new file mode 100644 index 0000000..07f023c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/jo.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/jo.svg new file mode 100644 index 0000000..fbbd681 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/jp.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/jp.svg new file mode 100644 index 0000000..118686a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ke.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ke.svg new file mode 100644 index 0000000..110600e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kg.svg new file mode 100644 index 0000000..2ab176a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kh.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kh.svg new file mode 100644 index 0000000..4b63b32 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ki.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ki.svg new file mode 100644 index 0000000..14dab15 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/km.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/km.svg new file mode 100644 index 0000000..d9b7751 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kn.svg new file mode 100644 index 0000000..42d5adf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kp.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kp.svg new file mode 100644 index 0000000..2539304 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kr.svg new file mode 100644 index 0000000..af3d35e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kr.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kw.svg new file mode 100644 index 0000000..b2fe54f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ky.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ky.svg new file mode 100644 index 0000000..e55d520 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ky.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/kz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kz.svg new file mode 100644 index 0000000..f9f9b98 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/kz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/la.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/la.svg new file mode 100644 index 0000000..af70d0d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lb.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lb.svg new file mode 100644 index 0000000..6520109 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lc.svg new file mode 100644 index 0000000..aa18fac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/li.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/li.svg new file mode 100644 index 0000000..bf81810 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lk.svg new file mode 100644 index 0000000..08212a5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lr.svg new file mode 100644 index 0000000..74382ab --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ls.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ls.svg new file mode 100644 index 0000000..605c087 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lt.svg new file mode 100644 index 0000000..52ada94 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lu.svg new file mode 100644 index 0000000..037c315 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/lv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lv.svg new file mode 100644 index 0000000..5af883c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ly.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ly.svg new file mode 100644 index 0000000..4375a9e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ma.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ma.svg new file mode 100644 index 0000000..8041667 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mc.svg new file mode 100644 index 0000000..04173a4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/md.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/md.svg new file mode 100644 index 0000000..18a77ea --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/md.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/me.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/me.svg new file mode 100644 index 0000000..37e96b0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/me.svg @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mf.svg new file mode 100644 index 0000000..8d3285b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mg.svg new file mode 100644 index 0000000..4f901ca --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mh.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mh.svg new file mode 100644 index 0000000..1db268d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mh.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mk.svg new file mode 100644 index 0000000..0ee923a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ml.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ml.svg new file mode 100644 index 0000000..665d6b2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mm.svg new file mode 100644 index 0000000..391f0c7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mm.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mn.svg new file mode 100644 index 0000000..998fe5c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mo.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mo.svg new file mode 100644 index 0000000..bd5cbcd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mp.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mp.svg new file mode 100644 index 0000000..6179fb7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mq.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mq.svg new file mode 100644 index 0000000..dcf0054 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mr.svg new file mode 100644 index 0000000..ffe8c11 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ms.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ms.svg new file mode 100644 index 0000000..c06dfcc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ms.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mt.svg new file mode 100644 index 0000000..f534315 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mt.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mu.svg new file mode 100644 index 0000000..2afe1d3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mv.svg new file mode 100644 index 0000000..c9a6c5b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mw.svg new file mode 100644 index 0000000..25bbf2e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mw.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mx.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mx.svg new file mode 100644 index 0000000..bb991c1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mx.svg @@ -0,0 +1,377 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/my.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/my.svg new file mode 100644 index 0000000..b10f76e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/my.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/mz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mz.svg new file mode 100644 index 0000000..bb75148 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/na.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/na.svg new file mode 100644 index 0000000..36ac8d7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/nc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nc.svg new file mode 100644 index 0000000..1cc81eb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nc.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ne.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ne.svg new file mode 100644 index 0000000..a96b027 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/nf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nf.svg new file mode 100644 index 0000000..d9be156 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nf.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ng.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ng.svg new file mode 100644 index 0000000..62813e8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ni.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ni.svg new file mode 100644 index 0000000..847f331 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/nl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nl.svg new file mode 100644 index 0000000..49ca5bc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/no.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/no.svg new file mode 100644 index 0000000..939920d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/np.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/np.svg new file mode 100644 index 0000000..498a100 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/np.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/nr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nr.svg new file mode 100644 index 0000000..c8c827e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/nu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nu.svg new file mode 100644 index 0000000..ce31672 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/nz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nz.svg new file mode 100644 index 0000000..ee617d6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/nz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/om.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/om.svg new file mode 100644 index 0000000..2021f93 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pa.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pa.svg new file mode 100644 index 0000000..108c40b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pa.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pc.svg new file mode 100644 index 0000000..a38dd21 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pc.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pe.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pe.svg new file mode 100644 index 0000000..9ba4c61 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pe.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pf.svg new file mode 100644 index 0000000..92b2803 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pf.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pg.svg new file mode 100644 index 0000000..8c8a2b8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pg.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ph.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ph.svg new file mode 100644 index 0000000..7ae39fe --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pk.svg new file mode 100644 index 0000000..e71cd92 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pl.svg new file mode 100644 index 0000000..8c43577 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pm.svg new file mode 100644 index 0000000..950c6e8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pm.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pn.svg new file mode 100644 index 0000000..0bae95e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pn.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pr.svg new file mode 100644 index 0000000..eb302ad --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ps.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ps.svg new file mode 100644 index 0000000..2c10079 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pt.svg new file mode 100644 index 0000000..95ad6d7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/pw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pw.svg new file mode 100644 index 0000000..ef6be79 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/py.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/py.svg new file mode 100644 index 0000000..e7e1bce --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/py.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/qa.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/qa.svg new file mode 100644 index 0000000..897a21b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/re.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/re.svg new file mode 100644 index 0000000..41d87d9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/re.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ro.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ro.svg new file mode 100644 index 0000000..e6cf0f6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/rs.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/rs.svg new file mode 100644 index 0000000..d10ebb3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/rs.svg @@ -0,0 +1,296 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ru.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ru.svg new file mode 100644 index 0000000..f428b0c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ru.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/rw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/rw.svg new file mode 100644 index 0000000..3d484fd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sa.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sa.svg new file mode 100644 index 0000000..fd6418e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sa.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sb.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sb.svg new file mode 100644 index 0000000..398c708 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sc.svg new file mode 100644 index 0000000..2996bac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sd.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sd.svg new file mode 100644 index 0000000..0b9abdc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/se.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/se.svg new file mode 100644 index 0000000..8f3f134 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sg.svg new file mode 100644 index 0000000..60625e9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-ac.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-ac.svg new file mode 100644 index 0000000..85cd9d1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-ac.svg @@ -0,0 +1,690 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-hl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-hl.svg new file mode 100644 index 0000000..4cb1990 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-hl.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-ta.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-ta.svg new file mode 100644 index 0000000..7933fc2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh-ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh.svg new file mode 100644 index 0000000..2fd3727 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/si.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/si.svg new file mode 100644 index 0000000..33a03c6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sj.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sj.svg new file mode 100644 index 0000000..ecb9c79 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sk.svg new file mode 100644 index 0000000..d186822 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sl.svg new file mode 100644 index 0000000..b649f1b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sl.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sm.svg new file mode 100644 index 0000000..30c2490 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sm.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sn.svg new file mode 100644 index 0000000..ff9cf2e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/so.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/so.svg new file mode 100644 index 0000000..4848dbe --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sr.svg new file mode 100644 index 0000000..0ca3596 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ss.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ss.svg new file mode 100644 index 0000000..bb50fac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/st.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/st.svg new file mode 100644 index 0000000..c5e7c5c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sv.svg new file mode 100644 index 0000000..14e98b0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sv.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sx.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sx.svg new file mode 100644 index 0000000..758f483 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sy.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sy.svg new file mode 100644 index 0000000..39e63f7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/sz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sz.svg new file mode 100644 index 0000000..12ae0cd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/sz.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tc.svg new file mode 100644 index 0000000..0b5af98 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tc.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/td.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/td.svg new file mode 100644 index 0000000..8201312 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tf.svg new file mode 100644 index 0000000..1ab7f6a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tg.svg new file mode 100644 index 0000000..32c28af --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/th.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/th.svg new file mode 100644 index 0000000..35141d3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tj.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tj.svg new file mode 100644 index 0000000..9232ec1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tj.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tk.svg new file mode 100644 index 0000000..9ff92e5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tl.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tl.svg new file mode 100644 index 0000000..4fbb245 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tm.svg new file mode 100644 index 0000000..ac39386 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tm.svg @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tn.svg new file mode 100644 index 0000000..ab3e36e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/to.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/to.svg new file mode 100644 index 0000000..3f1b600 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tr.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tr.svg new file mode 100644 index 0000000..0fe9017 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tt.svg new file mode 100644 index 0000000..0f7f26e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tv.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tv.svg new file mode 100644 index 0000000..098b916 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tv.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tw.svg new file mode 100644 index 0000000..83f4e44 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tw.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/tz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tz.svg new file mode 100644 index 0000000..846cbb5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/tz.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ua.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ua.svg new file mode 100644 index 0000000..7ceb894 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ug.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ug.svg new file mode 100644 index 0000000..a82a8fc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/um.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/um.svg new file mode 100644 index 0000000..b8d4502 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/um.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/un.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/un.svg new file mode 100644 index 0000000..322569d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/us.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/us.svg new file mode 100644 index 0000000..a722047 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/us.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/uy.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/uy.svg new file mode 100644 index 0000000..f6b08b2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/uz.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/uz.svg new file mode 100644 index 0000000..3385bc5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/va.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/va.svg new file mode 100644 index 0000000..9348ad2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/va.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/vc.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vc.svg new file mode 100644 index 0000000..21d41a8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ve.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ve.svg new file mode 100644 index 0000000..665135b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/vg.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vg.svg new file mode 100644 index 0000000..cfcbbba --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vg.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/vi.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vi.svg new file mode 100644 index 0000000..081f8c6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/vn.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vn.svg new file mode 100644 index 0000000..49a68f0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/vu.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vu.svg new file mode 100644 index 0000000..0e695b9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/vu.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/wf.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/wf.svg new file mode 100644 index 0000000..5ba64e4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/wf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ws.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ws.svg new file mode 100644 index 0000000..ab08fdb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/xk.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/xk.svg new file mode 100644 index 0000000..28bdead --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/xk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/xx.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/xx.svg new file mode 100644 index 0000000..5a44cb7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/xx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/ye.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ye.svg new file mode 100644 index 0000000..2ccb23b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/yt.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/yt.svg new file mode 100644 index 0000000..41a4408 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/yt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/za.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/za.svg new file mode 100644 index 0000000..397696e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/zm.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/zm.svg new file mode 100644 index 0000000..a2084fb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/1x1/zw.svg b/src/modules/Resources/assets/vendor/fonts/flags/1x1/zw.svg new file mode 100644 index 0000000..98e1a42 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/1x1/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ad.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ad.svg new file mode 100644 index 0000000..067ab77 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ad.svg @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ae.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ae.svg new file mode 100644 index 0000000..651ac85 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ae.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/af.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/af.svg new file mode 100644 index 0000000..521ac4c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/af.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ag.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ag.svg new file mode 100644 index 0000000..243c3d8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ag.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ai.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ai.svg new file mode 100644 index 0000000..628ad9b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ai.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/al.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/al.svg new file mode 100644 index 0000000..1135b4b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/al.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/am.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/am.svg new file mode 100644 index 0000000..99fa4dc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/am.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ao.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ao.svg new file mode 100644 index 0000000..b1863bd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ao.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/aq.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/aq.svg new file mode 100644 index 0000000..53840cc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/aq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ar.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ar.svg new file mode 100644 index 0000000..d20cbbd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ar.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/arab.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/arab.svg new file mode 100644 index 0000000..96d2715 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/arab.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/as.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/as.svg new file mode 100644 index 0000000..3543556 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/as.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/at.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/at.svg new file mode 100644 index 0000000..9d2775c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/at.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/au.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/au.svg new file mode 100644 index 0000000..96e8076 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/au.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/aw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/aw.svg new file mode 100644 index 0000000..413b7c4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/aw.svg @@ -0,0 +1,186 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ax.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ax.svg new file mode 100644 index 0000000..0584d71 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ax.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/az.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/az.svg new file mode 100644 index 0000000..3557522 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/az.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ba.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ba.svg new file mode 100644 index 0000000..93bd9cf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ba.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bb.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bb.svg new file mode 100644 index 0000000..cecd5cc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bb.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bd.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bd.svg new file mode 100644 index 0000000..16b794d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bd.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/be.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/be.svg new file mode 100644 index 0000000..ac706a0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/be.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bf.svg new file mode 100644 index 0000000..4713822 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bf.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bg.svg new file mode 100644 index 0000000..af2d0d0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bg.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bh.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bh.svg new file mode 100644 index 0000000..7a2ea54 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bh.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bi.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bi.svg new file mode 100644 index 0000000..a4434a9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bi.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bj.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bj.svg new file mode 100644 index 0000000..0846724 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bj.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bl.svg new file mode 100644 index 0000000..f84cbba --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bm.svg new file mode 100644 index 0000000..bab3e0a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bm.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bn.svg new file mode 100644 index 0000000..4b416eb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bn.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bo.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bo.svg new file mode 100644 index 0000000..46dc767 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bo.svg @@ -0,0 +1,674 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bq.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bq.svg new file mode 100644 index 0000000..0e6bc76 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/br.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/br.svg new file mode 100644 index 0000000..22c908e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/br.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bs.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bs.svg new file mode 100644 index 0000000..5cc918e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bs.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bt.svg new file mode 100644 index 0000000..798c79b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bt.svg @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bv.svg new file mode 100644 index 0000000..40e16d9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bw.svg new file mode 100644 index 0000000..3435608 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bw.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/by.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/by.svg new file mode 100644 index 0000000..7e90ff2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/by.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/bz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bz.svg new file mode 100644 index 0000000..25386a5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/bz.svg @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ca.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ca.svg new file mode 100644 index 0000000..89da5b7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ca.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cc.svg new file mode 100644 index 0000000..ddfd180 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cc.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cd.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cd.svg new file mode 100644 index 0000000..b9cf528 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cd.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cefta.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cefta.svg new file mode 100644 index 0000000..f748d08 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cefta.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cf.svg new file mode 100644 index 0000000..a6cd367 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cg.svg new file mode 100644 index 0000000..f5a0e42 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cg.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ch.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ch.svg new file mode 100644 index 0000000..b42d670 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ch.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ci.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ci.svg new file mode 100644 index 0000000..e400f0c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ci.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ck.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ck.svg new file mode 100644 index 0000000..18e547b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ck.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cl.svg new file mode 100644 index 0000000..5b3c72f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cm.svg new file mode 100644 index 0000000..70adc8b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cm.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cn.svg new file mode 100644 index 0000000..10d3489 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/co.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/co.svg new file mode 100644 index 0000000..ebd0a0f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/co.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cp.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cp.svg new file mode 100644 index 0000000..b8aa9cf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cp.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cr.svg new file mode 100644 index 0000000..5a409ee --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cr.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cu.svg new file mode 100644 index 0000000..053c9ee --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cu.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cv.svg new file mode 100644 index 0000000..aec8994 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cv.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cw.svg new file mode 100644 index 0000000..bb0ece2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cw.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cx.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cx.svg new file mode 100644 index 0000000..374ff2d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cx.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cy.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cy.svg new file mode 100644 index 0000000..7e3d883 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/cz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cz.svg new file mode 100644 index 0000000..7913de3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/cz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/de.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/de.svg new file mode 100644 index 0000000..71aa2d2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/de.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/dg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dg.svg new file mode 100644 index 0000000..f163caf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dg.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/dj.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dj.svg new file mode 100644 index 0000000..9b00a82 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dj.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/dk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dk.svg new file mode 100644 index 0000000..563277f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/dm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dm.svg new file mode 100644 index 0000000..f692094 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dm.svg @@ -0,0 +1,152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/do.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/do.svg new file mode 100644 index 0000000..b1be393 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/do.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/dz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dz.svg new file mode 100644 index 0000000..5ff29a7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/dz.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/eac.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eac.svg new file mode 100644 index 0000000..aaf8133 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eac.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ec.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ec.svg new file mode 100644 index 0000000..397bfd9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ec.svg @@ -0,0 +1,138 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ee.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ee.svg new file mode 100644 index 0000000..8b98c2c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ee.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/eg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eg.svg new file mode 100644 index 0000000..00d1fa5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eg.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/eh.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eh.svg new file mode 100644 index 0000000..6aec728 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eh.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/er.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/er.svg new file mode 100644 index 0000000..3f4f3f2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/er.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-ct.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-ct.svg new file mode 100644 index 0000000..4d85911 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-ct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-ga.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-ga.svg new file mode 100644 index 0000000..3165781 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-ga.svg @@ -0,0 +1,187 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-pv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-pv.svg new file mode 100644 index 0000000..21c8759 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es-pv.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/es.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es.svg new file mode 100644 index 0000000..acdf927 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/es.svg @@ -0,0 +1,544 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/et.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/et.svg new file mode 100644 index 0000000..3f99be4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/et.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/eu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eu.svg new file mode 100644 index 0000000..b0874c1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/eu.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/fi.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fi.svg new file mode 100644 index 0000000..470be2d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/fj.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fj.svg new file mode 100644 index 0000000..23fbe57 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fj.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/fk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fk.svg new file mode 100644 index 0000000..c65bf96 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fk.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/fm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fm.svg new file mode 100644 index 0000000..c1b7c97 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fm.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/fo.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fo.svg new file mode 100644 index 0000000..f802d28 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fo.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/fr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fr.svg new file mode 100644 index 0000000..4110e59 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/fr.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ga.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ga.svg new file mode 100644 index 0000000..76edab4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ga.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-eng.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-eng.svg new file mode 100644 index 0000000..12e3b67 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-eng.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-nir.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-nir.svg new file mode 100644 index 0000000..e6be8db --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-nir.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-sct.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-sct.svg new file mode 100644 index 0000000..f50cd32 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-sct.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-wls.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-wls.svg new file mode 100644 index 0000000..6e15fd0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb-wls.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb.svg new file mode 100644 index 0000000..7991383 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gb.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gd.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gd.svg new file mode 100644 index 0000000..cb51e96 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gd.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ge.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ge.svg new file mode 100644 index 0000000..d8126ec --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ge.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gf.svg new file mode 100644 index 0000000..f8fe94c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gg.svg new file mode 100644 index 0000000..f8216c8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gh.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gh.svg new file mode 100644 index 0000000..5c3e3e6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gh.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gi.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gi.svg new file mode 100644 index 0000000..e2b590a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gi.svg @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gl.svg new file mode 100644 index 0000000..eb5a52e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gl.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gm.svg new file mode 100644 index 0000000..8fe9d66 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gm.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gn.svg new file mode 100644 index 0000000..40d6ad4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gn.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gp.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gp.svg new file mode 100644 index 0000000..ee55c4b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gp.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gq.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gq.svg new file mode 100644 index 0000000..134e442 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gq.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gr.svg new file mode 100644 index 0000000..599741e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gr.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gs.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gs.svg new file mode 100644 index 0000000..1536e07 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gs.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gt.svg new file mode 100644 index 0000000..f7cffbd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gt.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gu.svg new file mode 100644 index 0000000..0d66e1b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gu.svg @@ -0,0 +1,23 @@ + + + + + + + + + + G + U + A + M + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gw.svg new file mode 100644 index 0000000..d470bac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/gy.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gy.svg new file mode 100644 index 0000000..569fb56 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/gy.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/hk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hk.svg new file mode 100644 index 0000000..4fd55bc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hk.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/hm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hm.svg new file mode 100644 index 0000000..815c482 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/hn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hn.svg new file mode 100644 index 0000000..11fde67 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/hr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hr.svg new file mode 100644 index 0000000..44fed27 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hr.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ht.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ht.svg new file mode 100644 index 0000000..5d48eb9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ht.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/hu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hu.svg new file mode 100644 index 0000000..baddf7f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/hu.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ic.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ic.svg new file mode 100644 index 0000000..81e6ee2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ic.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/id.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/id.svg new file mode 100644 index 0000000..3b7c8fc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/id.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ie.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ie.svg new file mode 100644 index 0000000..049be14 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ie.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/il.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/il.svg new file mode 100644 index 0000000..f43be7e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/il.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/im.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/im.svg new file mode 100644 index 0000000..f06f3d6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/im.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/in.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/in.svg new file mode 100644 index 0000000..bc47d74 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/in.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/io.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/io.svg new file mode 100644 index 0000000..7701667 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/io.svg @@ -0,0 +1,130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/iq.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/iq.svg new file mode 100644 index 0000000..259da9a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/iq.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ir.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ir.svg new file mode 100644 index 0000000..8c6d516 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ir.svg @@ -0,0 +1,219 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/is.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/is.svg new file mode 100644 index 0000000..a6588af --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/is.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/it.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/it.svg new file mode 100644 index 0000000..20a8bfd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/it.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/je.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/je.svg new file mode 100644 index 0000000..611180d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/je.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/jm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/jm.svg new file mode 100644 index 0000000..269df03 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/jm.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/jo.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/jo.svg new file mode 100644 index 0000000..d6f927d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/jo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/jp.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/jp.svg new file mode 100644 index 0000000..cc1c181 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/jp.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ke.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ke.svg new file mode 100644 index 0000000..3a67ca3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ke.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kg.svg new file mode 100644 index 0000000..68c210b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kg.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kh.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kh.svg new file mode 100644 index 0000000..c658838 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kh.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ki.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ki.svg new file mode 100644 index 0000000..0c80328 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ki.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/km.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/km.svg new file mode 100644 index 0000000..414d65e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/km.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kn.svg new file mode 100644 index 0000000..47fe64d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kp.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kp.svg new file mode 100644 index 0000000..4d1dbab --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kp.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kr.svg new file mode 100644 index 0000000..6947eab --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kr.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kw.svg new file mode 100644 index 0000000..3dd89e9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ky.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ky.svg new file mode 100644 index 0000000..74a2fea --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ky.svg @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/kz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kz.svg new file mode 100644 index 0000000..04a47f5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/kz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/la.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/la.svg new file mode 100644 index 0000000..6aea6b7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/la.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lb.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lb.svg new file mode 100644 index 0000000..8619f24 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lb.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lc.svg new file mode 100644 index 0000000..bb25654 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/li.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/li.svg new file mode 100644 index 0000000..68ea26f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/li.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lk.svg new file mode 100644 index 0000000..2c5cdbe --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lk.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lr.svg new file mode 100644 index 0000000..e482ab9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lr.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ls.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ls.svg new file mode 100644 index 0000000..a7c01a9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ls.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lt.svg new file mode 100644 index 0000000..90ec5d2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lt.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lu.svg new file mode 100644 index 0000000..cc12206 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lu.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/lv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lv.svg new file mode 100644 index 0000000..6a9e75e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/lv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ly.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ly.svg new file mode 100644 index 0000000..1eaa51e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ly.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ma.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ma.svg new file mode 100644 index 0000000..7ce56ef --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ma.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mc.svg new file mode 100644 index 0000000..9cb6c9e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mc.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/md.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/md.svg new file mode 100644 index 0000000..6dc441e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/md.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/me.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/me.svg new file mode 100644 index 0000000..d891890 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/me.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mf.svg new file mode 100644 index 0000000..6305edc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mg.svg new file mode 100644 index 0000000..5fa2d24 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mg.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mh.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mh.svg new file mode 100644 index 0000000..7b9f490 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mk.svg new file mode 100644 index 0000000..4f5cae7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ml.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ml.svg new file mode 100644 index 0000000..6f6b716 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ml.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mm.svg new file mode 100644 index 0000000..42b4dee --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mm.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mn.svg new file mode 100644 index 0000000..152c2fc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mo.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mo.svg new file mode 100644 index 0000000..d39985d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mp.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mp.svg new file mode 100644 index 0000000..ff59ebf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mp.svg @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mq.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mq.svg new file mode 100644 index 0000000..b221951 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mq.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mr.svg new file mode 100644 index 0000000..7558234 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ms.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ms.svg new file mode 100644 index 0000000..faf07b0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ms.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mt.svg new file mode 100644 index 0000000..c597266 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mt.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mu.svg new file mode 100644 index 0000000..82d7a3b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mu.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mv.svg new file mode 100644 index 0000000..10450f9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mv.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mw.svg new file mode 100644 index 0000000..d83ddb2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mx.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mx.svg new file mode 100644 index 0000000..f98a89e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mx.svg @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/my.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/my.svg new file mode 100644 index 0000000..89576f6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/my.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/mz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mz.svg new file mode 100644 index 0000000..2ee6ec1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/mz.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/na.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/na.svg new file mode 100644 index 0000000..35b9f78 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/na.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/nc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nc.svg new file mode 100644 index 0000000..068f0c6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nc.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ne.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ne.svg new file mode 100644 index 0000000..39a82b8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ne.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/nf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nf.svg new file mode 100644 index 0000000..c8b3093 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nf.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ng.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ng.svg new file mode 100644 index 0000000..81eb35f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ng.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ni.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ni.svg new file mode 100644 index 0000000..6dcdc9a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ni.svg @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/nl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nl.svg new file mode 100644 index 0000000..e90f5b0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nl.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/no.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/no.svg new file mode 100644 index 0000000..a5f2a15 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/no.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/np.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/np.svg new file mode 100644 index 0000000..8d71d10 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/np.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/nr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nr.svg new file mode 100644 index 0000000..ff394c4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nr.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/nu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nu.svg new file mode 100644 index 0000000..4067baf --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nu.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/nz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nz.svg new file mode 100644 index 0000000..935d8a7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/nz.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/om.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/om.svg new file mode 100644 index 0000000..c003f86 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/om.svg @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pa.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pa.svg new file mode 100644 index 0000000..8dc03bc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pa.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pc.svg new file mode 100644 index 0000000..882197d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pc.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pe.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pe.svg new file mode 100644 index 0000000..33e6cfd --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pe.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pf.svg new file mode 100644 index 0000000..e06b236 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pf.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pg.svg new file mode 100644 index 0000000..237cb6e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pg.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ph.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ph.svg new file mode 100644 index 0000000..65489e1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ph.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pk.svg new file mode 100644 index 0000000..491e58a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pk.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pl.svg new file mode 100644 index 0000000..0fa5145 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pl.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pm.svg new file mode 100644 index 0000000..19a9330 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pm.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pn.svg new file mode 100644 index 0000000..07958ac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pn.svg @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pr.svg new file mode 100644 index 0000000..ec51831 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pr.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ps.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ps.svg new file mode 100644 index 0000000..b33824a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ps.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pt.svg new file mode 100644 index 0000000..445cf7f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pt.svg @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/pw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pw.svg new file mode 100644 index 0000000..9f89c5f --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/pw.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/py.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/py.svg new file mode 100644 index 0000000..38e2051 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/py.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/qa.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/qa.svg new file mode 100644 index 0000000..901f3fa --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/qa.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/re.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/re.svg new file mode 100644 index 0000000..64e788e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/re.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ro.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ro.svg new file mode 100644 index 0000000..fda0f7b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ro.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/rs.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/rs.svg new file mode 100644 index 0000000..2f97102 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/rs.svg @@ -0,0 +1,292 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ru.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ru.svg new file mode 100644 index 0000000..cf24301 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ru.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/rw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/rw.svg new file mode 100644 index 0000000..06e26ae --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/rw.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sa.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sa.svg new file mode 100644 index 0000000..c0a1486 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sa.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sb.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sb.svg new file mode 100644 index 0000000..6066f94 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sb.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sc.svg new file mode 100644 index 0000000..9a46b36 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sc.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sd.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sd.svg new file mode 100644 index 0000000..12818b4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sd.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/se.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/se.svg new file mode 100644 index 0000000..8ba745a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/se.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sg.svg new file mode 100644 index 0000000..c4dd4ac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sg.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-ac.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-ac.svg new file mode 100644 index 0000000..22b3658 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-ac.svg @@ -0,0 +1,689 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-hl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-hl.svg new file mode 100644 index 0000000..b92e703 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-hl.svg @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-ta.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-ta.svg new file mode 100644 index 0000000..a103aac --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh-ta.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh.svg new file mode 100644 index 0000000..7aba0ae --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sh.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/si.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/si.svg new file mode 100644 index 0000000..66a390d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/si.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sj.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sj.svg new file mode 100644 index 0000000..bb2799c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sj.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sk.svg new file mode 100644 index 0000000..8147694 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sk.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sl.svg new file mode 100644 index 0000000..a07baf7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sl.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sm.svg new file mode 100644 index 0000000..00e9286 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sm.svg @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sn.svg new file mode 100644 index 0000000..7c0673d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sn.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/so.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/so.svg new file mode 100644 index 0000000..a581ac6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/so.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sr.svg new file mode 100644 index 0000000..5e71c40 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sr.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ss.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ss.svg new file mode 100644 index 0000000..b257aa0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ss.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/st.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/st.svg new file mode 100644 index 0000000..1294bcb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/st.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sv.svg new file mode 100644 index 0000000..c811e91 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sv.svg @@ -0,0 +1,594 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sx.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sx.svg new file mode 100644 index 0000000..18f7a13 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sx.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sy.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sy.svg new file mode 100644 index 0000000..5225550 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sy.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/sz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sz.svg new file mode 100644 index 0000000..294a2cc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/sz.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tc.svg new file mode 100644 index 0000000..63f13c3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tc.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/td.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/td.svg new file mode 100644 index 0000000..fa3bd92 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/td.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tf.svg new file mode 100644 index 0000000..fba2335 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tf.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tg.svg new file mode 100644 index 0000000..c63a6d1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tg.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/th.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/th.svg new file mode 100644 index 0000000..1e93a61 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/th.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tj.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tj.svg new file mode 100644 index 0000000..9fba246 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tj.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tk.svg new file mode 100644 index 0000000..05d3e86 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tl.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tl.svg new file mode 100644 index 0000000..3d0701a --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tl.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tm.svg new file mode 100644 index 0000000..8b656cc --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tm.svg @@ -0,0 +1,204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tn.svg new file mode 100644 index 0000000..5735c19 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tn.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/to.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/to.svg new file mode 100644 index 0000000..d072337 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/to.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tr.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tr.svg new file mode 100644 index 0000000..b96da21 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tr.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tt.svg new file mode 100644 index 0000000..bc24938 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tv.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tv.svg new file mode 100644 index 0000000..675210e --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tv.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tw.svg new file mode 100644 index 0000000..57fd98b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tw.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/tz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tz.svg new file mode 100644 index 0000000..a2cfbca --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/tz.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ua.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ua.svg new file mode 100644 index 0000000..a339eb1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ua.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ug.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ug.svg new file mode 100644 index 0000000..737eb2c --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ug.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/um.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/um.svg new file mode 100644 index 0000000..9e9edda --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/um.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/un.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/un.svg new file mode 100644 index 0000000..e57793b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/un.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/us.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/us.svg new file mode 100644 index 0000000..9cfd0c9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/us.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/uy.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/uy.svg new file mode 100644 index 0000000..62c36f8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/uy.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/uz.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/uz.svg new file mode 100644 index 0000000..0ccca1b --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/uz.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/va.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/va.svg new file mode 100644 index 0000000..87e0fbb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/va.svg @@ -0,0 +1,190 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/vc.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vc.svg new file mode 100644 index 0000000..f26c2d8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vc.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ve.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ve.svg new file mode 100644 index 0000000..314e7f5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ve.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/vg.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vg.svg new file mode 100644 index 0000000..0ee90fb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vg.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/vi.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vi.svg new file mode 100644 index 0000000..4270257 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vi.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/vn.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vn.svg new file mode 100644 index 0000000..7e4bac8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vn.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/vu.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vu.svg new file mode 100644 index 0000000..91e1236 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/vu.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/wf.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/wf.svg new file mode 100644 index 0000000..054c57d --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/wf.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ws.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ws.svg new file mode 100644 index 0000000..0e758a7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ws.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/xk.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/xk.svg new file mode 100644 index 0000000..551e7a4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/xk.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/xx.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/xx.svg new file mode 100644 index 0000000..9333be3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/xx.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/ye.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ye.svg new file mode 100644 index 0000000..1c9e6d6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/ye.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/yt.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/yt.svg new file mode 100644 index 0000000..e7776b3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/yt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/za.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/za.svg new file mode 100644 index 0000000..d563adb --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/za.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/zm.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/zm.svg new file mode 100644 index 0000000..13239f5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/zm.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/flags/4x3/zw.svg b/src/modules/Resources/assets/vendor/fonts/flags/4x3/zw.svg new file mode 100644 index 0000000..6399ab4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/flags/4x3/zw.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome.scss b/src/modules/Resources/assets/vendor/fonts/fontawesome.scss new file mode 100644 index 0000000..323e2e2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/fontawesome.scss @@ -0,0 +1,7 @@ +$fa-font-path: 'fontawesome'; +$fa-font-size-base: 16px; + +@import '@fortawesome/fontawesome-free/scss/fontawesome'; +@import '@fortawesome/fontawesome-free/scss/regular'; +@import '@fortawesome/fontawesome-free/scss/solid'; +@import '@fortawesome/fontawesome-free/scss/brands'; diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-brands-400.ttf b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-brands-400.ttf new file mode 100644 index 0000000..5efb1d4 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-brands-400.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-brands-400.woff2 b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-brands-400.woff2 new file mode 100644 index 0000000..36fbda7 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-brands-400.woff2 differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-regular-400.ttf b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-regular-400.ttf new file mode 100644 index 0000000..838b4e2 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-regular-400.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-regular-400.woff2 b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-regular-400.woff2 new file mode 100644 index 0000000..b6cabba Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-regular-400.woff2 differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-solid-900.ttf b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-solid-900.ttf new file mode 100644 index 0000000..ec24749 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-solid-900.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-solid-900.woff2 b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-solid-900.woff2 new file mode 100644 index 0000000..824d518 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-solid-900.woff2 differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-v4compatibility.ttf b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-v4compatibility.ttf new file mode 100644 index 0000000..b175aa8 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-v4compatibility.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-v4compatibility.woff2 b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-v4compatibility.woff2 new file mode 100644 index 0000000..e09b5a5 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/fontawesome/fa-v4compatibility.woff2 differ diff --git a/src/modules/Resources/assets/vendor/fonts/tabler-icons.scss b/src/modules/Resources/assets/vendor/fonts/tabler-icons.scss new file mode 100644 index 0000000..3c1f105 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/tabler-icons.scss @@ -0,0 +1,21294 @@ +@charset "UTF-8"; +/*! + * Tabler Icons 3.4.0 by tabler - https://tabler.io + * License - https://github.com/tabler/tabler-icons/blob/master/LICENSE + */ +$ti-font-family: 'tabler-icons' !default; +$ti-font-path: 'tabler' !default; +$ti-font-display: null !default; +$ti-prefix: 'ti' !default; + +@font-face { + font-family: $ti-font-family; + font-style: normal; + font-weight: 400; + font-display: $ti-font-display; + src: + url('#{$ti-font-path}/tabler-icons.woff2?v3.4.0') format('woff2'), + url('#{$ti-font-path}/tabler-icons.woff?') format('woff'), + url('#{$ti-font-path}/tabler-icons.ttf?v3.4.0') format('truetype'); +} + +// @media screen and (-webkit-min-device-pixel-ratio: 0) { +// @font-face { +// font-family: $ti-font-family; +// src: url('#{$ti-font-path}/tabler-icons.svg\##{$ti-font-family}') format('svg'); +// } +// } +.ti { + vertical-align: middle; + font-size: 1.25rem; + line-height: 1; + display: inline-block; +} + +.#{$ti-prefix} { + font-family: $ti-font-family !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + + /* Better Font Rendering */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +@import '../libs/_tabler/_tabler.scss'; + +@function unicode($str) { + @return unquote('"') + unquote(str-insert($str, '\\', 1)) + unquote('"'); +} + +$ti-icon-a-b: unicode('ec36'); +$ti-icon-a-b-2: unicode('f25f'); +$ti-icon-a-b-off: unicode('f0a6'); +$ti-icon-abacus: unicode('f05c'); +$ti-icon-abacus-off: unicode('f3b6'); +$ti-icon-abc: unicode('f567'); +$ti-icon-access-point: unicode('ed1b'); +$ti-icon-access-point-off: unicode('ed1a'); +$ti-icon-accessible: unicode('eba9'); +$ti-icon-accessible-filled: unicode('f6ea'); +$ti-icon-accessible-off: unicode('f0a7'); +$ti-icon-activity: unicode('ed23'); +$ti-icon-activity-heartbeat: unicode('f0db'); +$ti-icon-ad: unicode('ea02'); +$ti-icon-ad-2: unicode('ef1f'); +$ti-icon-ad-circle: unicode('f79e'); +$ti-icon-ad-circle-filled: unicode('f7d3'); +$ti-icon-ad-circle-off: unicode('f79d'); +$ti-icon-ad-filled: unicode('f6eb'); +$ti-icon-ad-off: unicode('f3b7'); +$ti-icon-address-book: unicode('f021'); +$ti-icon-address-book-off: unicode('f3b8'); +$ti-icon-adjustments: unicode('ea03'); +$ti-icon-adjustments-alt: unicode('ec37'); +$ti-icon-adjustments-bolt: unicode('f7fb'); +$ti-icon-adjustments-cancel: unicode('f7fc'); +$ti-icon-adjustments-check: unicode('f7fd'); +$ti-icon-adjustments-code: unicode('f7fe'); +$ti-icon-adjustments-cog: unicode('f7ff'); +$ti-icon-adjustments-dollar: unicode('f800'); +$ti-icon-adjustments-down: unicode('f801'); +$ti-icon-adjustments-exclamation: unicode('f802'); +$ti-icon-adjustments-filled: unicode('f6ec'); +$ti-icon-adjustments-heart: unicode('f803'); +$ti-icon-adjustments-horizontal: unicode('ec38'); +$ti-icon-adjustments-minus: unicode('f804'); +$ti-icon-adjustments-off: unicode('f0a8'); +$ti-icon-adjustments-pause: unicode('f805'); +$ti-icon-adjustments-pin: unicode('f806'); +$ti-icon-adjustments-plus: unicode('f807'); +$ti-icon-adjustments-question: unicode('f808'); +$ti-icon-adjustments-search: unicode('f809'); +$ti-icon-adjustments-share: unicode('f80a'); +$ti-icon-adjustments-star: unicode('f80b'); +$ti-icon-adjustments-up: unicode('f80c'); +$ti-icon-adjustments-x: unicode('f80d'); +$ti-icon-aerial-lift: unicode('edfe'); +$ti-icon-affiliate: unicode('edff'); +$ti-icon-affiliate-filled: unicode('f6ed'); +$ti-icon-ai: unicode('fee7'); +$ti-icon-air-balloon: unicode('f4a6'); +$ti-icon-air-conditioning: unicode('f3a2'); +$ti-icon-air-conditioning-disabled: unicode('f542'); +$ti-icon-air-traffic-control: unicode('fb01'); +$ti-icon-alarm: unicode('ea04'); +$ti-icon-alarm-average: unicode('fc9e'); +$ti-icon-alarm-filled: unicode('f709'); +$ti-icon-alarm-minus: unicode('f630'); +$ti-icon-alarm-minus-filled: unicode('f70a'); +$ti-icon-alarm-off: unicode('f0a9'); +$ti-icon-alarm-plus: unicode('f631'); +$ti-icon-alarm-plus-filled: unicode('f70b'); +$ti-icon-alarm-snooze: unicode('f632'); +$ti-icon-alarm-snooze-filled: unicode('f70c'); +$ti-icon-album: unicode('f022'); +$ti-icon-album-off: unicode('f3b9'); +$ti-icon-alert-circle: unicode('ea05'); +$ti-icon-alert-circle-filled: unicode('f6ee'); +$ti-icon-alert-circle-off: unicode('fc65'); +$ti-icon-alert-hexagon: unicode('f80e'); +$ti-icon-alert-hexagon-filled: unicode('fa34'); +$ti-icon-alert-hexagon-off: unicode('fc66'); +$ti-icon-alert-octagon: unicode('ecc6'); +$ti-icon-alert-octagon-filled: unicode('f6ef'); +$ti-icon-alert-small: unicode('f80f'); +$ti-icon-alert-small-off: unicode('fc67'); +$ti-icon-alert-square: unicode('f811'); +$ti-icon-alert-square-filled: unicode('fa35'); +$ti-icon-alert-square-rounded: unicode('f810'); +$ti-icon-alert-square-rounded-filled: unicode('fa36'); +$ti-icon-alert-square-rounded-off: unicode('fc68'); +$ti-icon-alert-triangle: unicode('ea06'); +$ti-icon-alert-triangle-filled: unicode('f6f0'); +$ti-icon-alert-triangle-off: unicode('fc69'); +$ti-icon-alien: unicode('ebde'); +$ti-icon-alien-filled: unicode('f70d'); +$ti-icon-align-box-bottom-center: unicode('f530'); +$ti-icon-align-box-bottom-center-filled: unicode('f70e'); +$ti-icon-align-box-bottom-left: unicode('f531'); +$ti-icon-align-box-bottom-left-filled: unicode('f70f'); +$ti-icon-align-box-bottom-right: unicode('f532'); +$ti-icon-align-box-bottom-right-filled: unicode('f710'); +$ti-icon-align-box-center-bottom: unicode('facb'); +$ti-icon-align-box-center-middle: unicode('f79f'); +$ti-icon-align-box-center-middle-filled: unicode('f7d4'); +$ti-icon-align-box-center-stretch: unicode('facc'); +$ti-icon-align-box-center-top: unicode('facd'); +$ti-icon-align-box-left-bottom: unicode('f533'); +$ti-icon-align-box-left-bottom-filled: unicode('f711'); +$ti-icon-align-box-left-middle: unicode('f534'); +$ti-icon-align-box-left-middle-filled: unicode('f712'); +$ti-icon-align-box-left-stretch: unicode('face'); +$ti-icon-align-box-left-top: unicode('f535'); +$ti-icon-align-box-left-top-filled: unicode('f713'); +$ti-icon-align-box-right-bottom: unicode('f536'); +$ti-icon-align-box-right-bottom-filled: unicode('f714'); +$ti-icon-align-box-right-middle: unicode('f537'); +$ti-icon-align-box-right-middle-filled: unicode('f7d5'); +$ti-icon-align-box-right-stretch: unicode('facf'); +$ti-icon-align-box-right-top: unicode('f538'); +$ti-icon-align-box-right-top-filled: unicode('f715'); +$ti-icon-align-box-top-center: unicode('f539'); +$ti-icon-align-box-top-center-filled: unicode('f716'); +$ti-icon-align-box-top-left: unicode('f53a'); +$ti-icon-align-box-top-left-filled: unicode('f717'); +$ti-icon-align-box-top-right: unicode('f53b'); +$ti-icon-align-box-top-right-filled: unicode('f718'); +$ti-icon-align-center: unicode('ea07'); +$ti-icon-align-justified: unicode('ea08'); +$ti-icon-align-left: unicode('ea09'); +$ti-icon-align-right: unicode('ea0a'); +$ti-icon-alpha: unicode('f543'); +$ti-icon-alphabet-cyrillic: unicode('f1df'); +$ti-icon-alphabet-greek: unicode('f1e0'); +$ti-icon-alphabet-latin: unicode('f1e1'); +$ti-icon-alt: unicode('fc54'); +$ti-icon-ambulance: unicode('ebf5'); +$ti-icon-ampersand: unicode('f229'); +$ti-icon-analyze: unicode('f3a3'); +$ti-icon-analyze-filled: unicode('f719'); +$ti-icon-analyze-off: unicode('f3ba'); +$ti-icon-anchor: unicode('eb76'); +$ti-icon-anchor-off: unicode('f0f7'); +$ti-icon-angle: unicode('ef20'); +$ti-icon-ankh: unicode('f1cd'); +$ti-icon-antenna: unicode('f094'); +$ti-icon-antenna-bars-1: unicode('ecc7'); +$ti-icon-antenna-bars-2: unicode('ecc8'); +$ti-icon-antenna-bars-3: unicode('ecc9'); +$ti-icon-antenna-bars-4: unicode('ecca'); +$ti-icon-antenna-bars-5: unicode('eccb'); +$ti-icon-antenna-bars-off: unicode('f0aa'); +$ti-icon-antenna-off: unicode('f3bb'); +$ti-icon-aperture: unicode('eb58'); +$ti-icon-aperture-off: unicode('f3bc'); +$ti-icon-api: unicode('effd'); +$ti-icon-api-app: unicode('effc'); +$ti-icon-api-app-off: unicode('f0ab'); +$ti-icon-api-off: unicode('f0f8'); +$ti-icon-app-window: unicode('efe6'); +$ti-icon-app-window-filled: unicode('f71a'); +$ti-icon-apple: unicode('ef21'); +$ti-icon-apps: unicode('ebb6'); +$ti-icon-apps-filled: unicode('f6f1'); +$ti-icon-apps-off: unicode('f0ac'); +$ti-icon-archery-arrow: unicode('fc55'); +$ti-icon-archive: unicode('ea0b'); +$ti-icon-archive-filled: unicode('fa82'); +$ti-icon-archive-off: unicode('f0ad'); +$ti-icon-armchair: unicode('ef9e'); +$ti-icon-armchair-2: unicode('efe7'); +$ti-icon-armchair-2-off: unicode('f3bd'); +$ti-icon-armchair-off: unicode('f3be'); +$ti-icon-arrow-autofit-content: unicode('ef31'); +$ti-icon-arrow-autofit-content-filled: unicode('f6f2'); +$ti-icon-arrow-autofit-down: unicode('ef32'); +$ti-icon-arrow-autofit-height: unicode('ef33'); +$ti-icon-arrow-autofit-left: unicode('ef34'); +$ti-icon-arrow-autofit-right: unicode('ef35'); +$ti-icon-arrow-autofit-up: unicode('ef36'); +$ti-icon-arrow-autofit-width: unicode('ef37'); +$ti-icon-arrow-back: unicode('ea0c'); +$ti-icon-arrow-back-up: unicode('eb77'); +$ti-icon-arrow-back-up-double: unicode('f9ec'); +$ti-icon-arrow-badge-down: unicode('f60b'); +$ti-icon-arrow-badge-down-filled: unicode('f7d6'); +$ti-icon-arrow-badge-left: unicode('f60c'); +$ti-icon-arrow-badge-left-filled: unicode('f7d7'); +$ti-icon-arrow-badge-right: unicode('f60d'); +$ti-icon-arrow-badge-right-filled: unicode('f7d8'); +$ti-icon-arrow-badge-up: unicode('f60e'); +$ti-icon-arrow-badge-up-filled: unicode('f7d9'); +$ti-icon-arrow-bar-both: unicode('fadd'); +$ti-icon-arrow-bar-down: unicode('ea0d'); +$ti-icon-arrow-bar-left: unicode('ea0e'); +$ti-icon-arrow-bar-right: unicode('ea0f'); +$ti-icon-arrow-bar-to-down: unicode('ec88'); +$ti-icon-arrow-bar-to-left: unicode('ec89'); +$ti-icon-arrow-bar-to-right: unicode('ec8a'); +$ti-icon-arrow-bar-to-up: unicode('ec8b'); +$ti-icon-arrow-bar-up: unicode('ea10'); +$ti-icon-arrow-bear-left: unicode('f045'); +$ti-icon-arrow-bear-left-2: unicode('f044'); +$ti-icon-arrow-bear-right: unicode('f047'); +$ti-icon-arrow-bear-right-2: unicode('f046'); +$ti-icon-arrow-big-down: unicode('edda'); +$ti-icon-arrow-big-down-filled: unicode('f6c6'); +$ti-icon-arrow-big-down-line: unicode('efe8'); +$ti-icon-arrow-big-down-line-filled: unicode('f6c7'); +$ti-icon-arrow-big-down-lines: unicode('efe9'); +$ti-icon-arrow-big-down-lines-filled: unicode('f6c8'); +$ti-icon-arrow-big-left: unicode('eddb'); +$ti-icon-arrow-big-left-filled: unicode('f6c9'); +$ti-icon-arrow-big-left-line: unicode('efea'); +$ti-icon-arrow-big-left-line-filled: unicode('f6ca'); +$ti-icon-arrow-big-left-lines: unicode('efeb'); +$ti-icon-arrow-big-left-lines-filled: unicode('f6cb'); +$ti-icon-arrow-big-right: unicode('eddc'); +$ti-icon-arrow-big-right-filled: unicode('f6cc'); +$ti-icon-arrow-big-right-line: unicode('efec'); +$ti-icon-arrow-big-right-line-filled: unicode('f6cd'); +$ti-icon-arrow-big-right-lines: unicode('efed'); +$ti-icon-arrow-big-right-lines-filled: unicode('f6ce'); +$ti-icon-arrow-big-up: unicode('eddd'); +$ti-icon-arrow-big-up-filled: unicode('f6cf'); +$ti-icon-arrow-big-up-line: unicode('efee'); +$ti-icon-arrow-big-up-line-filled: unicode('f6d0'); +$ti-icon-arrow-big-up-lines: unicode('efef'); +$ti-icon-arrow-big-up-lines-filled: unicode('f6d1'); +$ti-icon-arrow-bounce: unicode('f3a4'); +$ti-icon-arrow-capsule: unicode('fade'); +$ti-icon-arrow-curve-left: unicode('f048'); +$ti-icon-arrow-curve-right: unicode('f049'); +$ti-icon-arrow-down: unicode('ea16'); +$ti-icon-arrow-down-bar: unicode('ed98'); +$ti-icon-arrow-down-circle: unicode('ea11'); +$ti-icon-arrow-down-from-arc: unicode('fd86'); +$ti-icon-arrow-down-left: unicode('ea13'); +$ti-icon-arrow-down-left-circle: unicode('ea12'); +$ti-icon-arrow-down-rhombus: unicode('f61d'); +$ti-icon-arrow-down-right: unicode('ea15'); +$ti-icon-arrow-down-right-circle: unicode('ea14'); +$ti-icon-arrow-down-square: unicode('ed9a'); +$ti-icon-arrow-down-tail: unicode('ed9b'); +$ti-icon-arrow-down-to-arc: unicode('fd87'); +$ti-icon-arrow-elbow-left: unicode('f9ed'); +$ti-icon-arrow-elbow-right: unicode('f9ee'); +$ti-icon-arrow-fork: unicode('f04a'); +$ti-icon-arrow-forward: unicode('ea17'); +$ti-icon-arrow-forward-up: unicode('eb78'); +$ti-icon-arrow-forward-up-double: unicode('f9ef'); +$ti-icon-arrow-guide: unicode('f22a'); +$ti-icon-arrow-iteration: unicode('f578'); +$ti-icon-arrow-left: unicode('ea19'); +$ti-icon-arrow-left-bar: unicode('ed9c'); +$ti-icon-arrow-left-circle: unicode('ea18'); +$ti-icon-arrow-left-from-arc: unicode('fd88'); +$ti-icon-arrow-left-rhombus: unicode('f61e'); +$ti-icon-arrow-left-right: unicode('f04b'); +$ti-icon-arrow-left-square: unicode('ed9d'); +$ti-icon-arrow-left-tail: unicode('ed9e'); +$ti-icon-arrow-left-to-arc: unicode('fd89'); +$ti-icon-arrow-loop-left: unicode('ed9f'); +$ti-icon-arrow-loop-left-2: unicode('f04c'); +$ti-icon-arrow-loop-right: unicode('eda0'); +$ti-icon-arrow-loop-right-2: unicode('f04d'); +$ti-icon-arrow-merge: unicode('f04e'); +$ti-icon-arrow-merge-alt-left: unicode('fc9f'); +$ti-icon-arrow-merge-alt-right: unicode('fca0'); +$ti-icon-arrow-merge-both: unicode('f23b'); +$ti-icon-arrow-merge-left: unicode('f23c'); +$ti-icon-arrow-merge-right: unicode('f23d'); +$ti-icon-arrow-move-down: unicode('f2ba'); +$ti-icon-arrow-move-left: unicode('f2bb'); +$ti-icon-arrow-move-right: unicode('f2bc'); +$ti-icon-arrow-move-up: unicode('f2bd'); +$ti-icon-arrow-narrow-down: unicode('ea1a'); +$ti-icon-arrow-narrow-left: unicode('ea1b'); +$ti-icon-arrow-narrow-right: unicode('ea1c'); +$ti-icon-arrow-narrow-up: unicode('ea1d'); +$ti-icon-arrow-ramp-left: unicode('ed3c'); +$ti-icon-arrow-ramp-left-2: unicode('f04f'); +$ti-icon-arrow-ramp-left-3: unicode('f050'); +$ti-icon-arrow-ramp-right: unicode('ed3d'); +$ti-icon-arrow-ramp-right-2: unicode('f051'); +$ti-icon-arrow-ramp-right-3: unicode('f052'); +$ti-icon-arrow-right: unicode('ea1f'); +$ti-icon-arrow-right-bar: unicode('eda1'); +$ti-icon-arrow-right-circle: unicode('ea1e'); +$ti-icon-arrow-right-from-arc: unicode('fd8a'); +$ti-icon-arrow-right-rhombus: unicode('f61f'); +$ti-icon-arrow-right-square: unicode('eda2'); +$ti-icon-arrow-right-tail: unicode('eda3'); +$ti-icon-arrow-right-to-arc: unicode('fd8b'); +$ti-icon-arrow-rotary-first-left: unicode('f053'); +$ti-icon-arrow-rotary-first-right: unicode('f054'); +$ti-icon-arrow-rotary-last-left: unicode('f055'); +$ti-icon-arrow-rotary-last-right: unicode('f056'); +$ti-icon-arrow-rotary-left: unicode('f057'); +$ti-icon-arrow-rotary-right: unicode('f058'); +$ti-icon-arrow-rotary-straight: unicode('f059'); +$ti-icon-arrow-roundabout-left: unicode('f22b'); +$ti-icon-arrow-roundabout-right: unicode('f22c'); +$ti-icon-arrow-sharp-turn-left: unicode('f05a'); +$ti-icon-arrow-sharp-turn-right: unicode('f05b'); +$ti-icon-arrow-up: unicode('ea25'); +$ti-icon-arrow-up-bar: unicode('eda4'); +$ti-icon-arrow-up-circle: unicode('ea20'); +$ti-icon-arrow-up-from-arc: unicode('fd8c'); +$ti-icon-arrow-up-left: unicode('ea22'); +$ti-icon-arrow-up-left-circle: unicode('ea21'); +$ti-icon-arrow-up-rhombus: unicode('f620'); +$ti-icon-arrow-up-right: unicode('ea24'); +$ti-icon-arrow-up-right-circle: unicode('ea23'); +$ti-icon-arrow-up-square: unicode('eda6'); +$ti-icon-arrow-up-tail: unicode('eda7'); +$ti-icon-arrow-up-to-arc: unicode('fd8d'); +$ti-icon-arrow-wave-left-down: unicode('eda8'); +$ti-icon-arrow-wave-left-up: unicode('eda9'); +$ti-icon-arrow-wave-right-down: unicode('edaa'); +$ti-icon-arrow-wave-right-up: unicode('edab'); +$ti-icon-arrow-zig-zag: unicode('f4a7'); +$ti-icon-arrows-cross: unicode('effe'); +$ti-icon-arrows-diagonal: unicode('ea27'); +$ti-icon-arrows-diagonal-2: unicode('ea26'); +$ti-icon-arrows-diagonal-minimize: unicode('ef39'); +$ti-icon-arrows-diagonal-minimize-2: unicode('ef38'); +$ti-icon-arrows-diff: unicode('f296'); +$ti-icon-arrows-double-ne-sw: unicode('edde'); +$ti-icon-arrows-double-nw-se: unicode('eddf'); +$ti-icon-arrows-double-se-nw: unicode('ede0'); +$ti-icon-arrows-double-sw-ne: unicode('ede1'); +$ti-icon-arrows-down: unicode('edad'); +$ti-icon-arrows-down-up: unicode('edac'); +$ti-icon-arrows-exchange: unicode('f1f4'); +$ti-icon-arrows-exchange-2: unicode('f1f3'); +$ti-icon-arrows-horizontal: unicode('eb59'); +$ti-icon-arrows-join: unicode('edaf'); +$ti-icon-arrows-join-2: unicode('edae'); +$ti-icon-arrows-left: unicode('edb1'); +$ti-icon-arrows-left-down: unicode('ee00'); +$ti-icon-arrows-left-right: unicode('edb0'); +$ti-icon-arrows-maximize: unicode('ea28'); +$ti-icon-arrows-minimize: unicode('ea29'); +$ti-icon-arrows-move: unicode('f22f'); +$ti-icon-arrows-move-horizontal: unicode('f22d'); +$ti-icon-arrows-move-vertical: unicode('f22e'); +$ti-icon-arrows-random: unicode('f095'); +$ti-icon-arrows-right: unicode('edb3'); +$ti-icon-arrows-right-down: unicode('ee01'); +$ti-icon-arrows-right-left: unicode('edb2'); +$ti-icon-arrows-shuffle: unicode('f000'); +$ti-icon-arrows-shuffle-2: unicode('efff'); +$ti-icon-arrows-sort: unicode('eb5a'); +$ti-icon-arrows-split: unicode('edb5'); +$ti-icon-arrows-split-2: unicode('edb4'); +$ti-icon-arrows-transfer-down: unicode('f2cc'); +$ti-icon-arrows-transfer-up: unicode('f2cd'); +$ti-icon-arrows-up: unicode('edb7'); +$ti-icon-arrows-up-down: unicode('edb6'); +$ti-icon-arrows-up-left: unicode('ee02'); +$ti-icon-arrows-up-right: unicode('ee03'); +$ti-icon-arrows-vertical: unicode('eb5b'); +$ti-icon-artboard: unicode('ea2a'); +$ti-icon-artboard-filled: unicode('fa83'); +$ti-icon-artboard-off: unicode('f0ae'); +$ti-icon-article: unicode('f1e2'); +$ti-icon-article-filled: unicode('f7da'); +$ti-icon-article-off: unicode('f3bf'); +$ti-icon-aspect-ratio: unicode('ed30'); +$ti-icon-aspect-ratio-filled: unicode('f7db'); +$ti-icon-aspect-ratio-off: unicode('f0af'); +$ti-icon-assembly: unicode('f24d'); +$ti-icon-assembly-filled: unicode('fe9e'); +$ti-icon-assembly-off: unicode('f3c0'); +$ti-icon-asset: unicode('f1ce'); +$ti-icon-asset-filled: unicode('fe9d'); +$ti-icon-asterisk: unicode('efd5'); +$ti-icon-asterisk-simple: unicode('efd4'); +$ti-icon-at: unicode('ea2b'); +$ti-icon-at-off: unicode('f0b0'); +$ti-icon-atom: unicode('eb79'); +$ti-icon-atom-2: unicode('ebdf'); +$ti-icon-atom-2-filled: unicode('f71b'); +$ti-icon-atom-off: unicode('f0f9'); +$ti-icon-augmented-reality: unicode('f023'); +$ti-icon-augmented-reality-2: unicode('f37e'); +$ti-icon-augmented-reality-off: unicode('f3c1'); +$ti-icon-auth-2fa: unicode('eca0'); +$ti-icon-automatic-gearbox: unicode('fc89'); +$ti-icon-avocado: unicode('fd8e'); +$ti-icon-award: unicode('ea2c'); +$ti-icon-award-filled: unicode('f71c'); +$ti-icon-award-off: unicode('f0fa'); +$ti-icon-axe: unicode('ef9f'); +$ti-icon-axis-x: unicode('ef45'); +$ti-icon-axis-y: unicode('ef46'); +$ti-icon-baby-bottle: unicode('f5d2'); +$ti-icon-baby-carriage: unicode('f05d'); +$ti-icon-baby-carriage-filled: unicode('fe9c'); +$ti-icon-background: unicode('fd2c'); +$ti-icon-backhoe: unicode('ed86'); +$ti-icon-backpack: unicode('ef47'); +$ti-icon-backpack-off: unicode('f3c2'); +$ti-icon-backslash: unicode('fab9'); +$ti-icon-backspace: unicode('ea2d'); +$ti-icon-backspace-filled: unicode('f7dc'); +$ti-icon-badge: unicode('efc2'); +$ti-icon-badge-3d: unicode('f555'); +$ti-icon-badge-3d-filled: unicode('fe9b'); +$ti-icon-badge-4k: unicode('f556'); +$ti-icon-badge-4k-filled: unicode('fe9a'); +$ti-icon-badge-8k: unicode('f557'); +$ti-icon-badge-8k-filled: unicode('fe99'); +$ti-icon-badge-ad: unicode('f558'); +$ti-icon-badge-ad-filled: unicode('fe98'); +$ti-icon-badge-ad-off: unicode('fd8f'); +$ti-icon-badge-ar: unicode('f559'); +$ti-icon-badge-ar-filled: unicode('fe97'); +$ti-icon-badge-cc: unicode('f55a'); +$ti-icon-badge-cc-filled: unicode('fe96'); +$ti-icon-badge-filled: unicode('f667'); +$ti-icon-badge-hd: unicode('f55b'); +$ti-icon-badge-hd-filled: unicode('fe95'); +$ti-icon-badge-off: unicode('f0fb'); +$ti-icon-badge-sd: unicode('f55c'); +$ti-icon-badge-sd-filled: unicode('fe94'); +$ti-icon-badge-tm: unicode('f55d'); +$ti-icon-badge-tm-filled: unicode('fe93'); +$ti-icon-badge-vo: unicode('f55e'); +$ti-icon-badge-vo-filled: unicode('fe92'); +$ti-icon-badge-vr: unicode('f55f'); +$ti-icon-badge-vr-filled: unicode('fe91'); +$ti-icon-badge-wc: unicode('f560'); +$ti-icon-badge-wc-filled: unicode('fe90'); +$ti-icon-badges: unicode('efc3'); +$ti-icon-badges-filled: unicode('f7dd'); +$ti-icon-badges-off: unicode('f0fc'); +$ti-icon-baguette: unicode('f3a5'); +$ti-icon-ball-american-football: unicode('ee04'); +$ti-icon-ball-american-football-off: unicode('f3c3'); +$ti-icon-ball-baseball: unicode('efa0'); +$ti-icon-ball-basketball: unicode('ec28'); +$ti-icon-ball-bowling: unicode('ec29'); +$ti-icon-ball-football: unicode('ee06'); +$ti-icon-ball-football-off: unicode('ee05'); +$ti-icon-ball-tennis: unicode('ec2a'); +$ti-icon-ball-volleyball: unicode('ec2b'); +$ti-icon-balloon: unicode('ef3a'); +$ti-icon-balloon-filled: unicode('fa84'); +$ti-icon-balloon-off: unicode('f0fd'); +$ti-icon-ballpen: unicode('f06e'); +$ti-icon-ballpen-filled: unicode('fa85'); +$ti-icon-ballpen-off: unicode('f0b1'); +$ti-icon-ban: unicode('ea2e'); +$ti-icon-bandage: unicode('eb7a'); +$ti-icon-bandage-filled: unicode('f7de'); +$ti-icon-bandage-off: unicode('f3c4'); +$ti-icon-barbell: unicode('eff0'); +$ti-icon-barbell-filled: unicode('fe8f'); +$ti-icon-barbell-off: unicode('f0b2'); +$ti-icon-barcode: unicode('ebc6'); +$ti-icon-barcode-off: unicode('f0b3'); +$ti-icon-barrel: unicode('f0b4'); +$ti-icon-barrel-off: unicode('f0fe'); +$ti-icon-barrier-block: unicode('f00e'); +$ti-icon-barrier-block-filled: unicode('fe8e'); +$ti-icon-barrier-block-off: unicode('f0b5'); +$ti-icon-baseline: unicode('f024'); +$ti-icon-baseline-density-large: unicode('f9f0'); +$ti-icon-baseline-density-medium: unicode('f9f1'); +$ti-icon-baseline-density-small: unicode('f9f2'); +$ti-icon-basket: unicode('ebe1'); +$ti-icon-basket-bolt: unicode('fb43'); +$ti-icon-basket-cancel: unicode('fb44'); +$ti-icon-basket-check: unicode('fb45'); +$ti-icon-basket-code: unicode('fb46'); +$ti-icon-basket-cog: unicode('fb47'); +$ti-icon-basket-discount: unicode('fb48'); +$ti-icon-basket-dollar: unicode('fb49'); +$ti-icon-basket-down: unicode('fb4a'); +$ti-icon-basket-exclamation: unicode('fb4b'); +$ti-icon-basket-filled: unicode('f7df'); +$ti-icon-basket-heart: unicode('fb4c'); +$ti-icon-basket-minus: unicode('fb4d'); +$ti-icon-basket-off: unicode('f0b6'); +$ti-icon-basket-pause: unicode('fb4e'); +$ti-icon-basket-pin: unicode('fb4f'); +$ti-icon-basket-plus: unicode('fb50'); +$ti-icon-basket-question: unicode('fb51'); +$ti-icon-basket-search: unicode('fb52'); +$ti-icon-basket-share: unicode('fb53'); +$ti-icon-basket-star: unicode('fb54'); +$ti-icon-basket-up: unicode('fb55'); +$ti-icon-basket-x: unicode('fb56'); +$ti-icon-bat: unicode('f284'); +$ti-icon-bath: unicode('ef48'); +$ti-icon-bath-filled: unicode('f71d'); +$ti-icon-bath-off: unicode('f0ff'); +$ti-icon-battery: unicode('ea34'); +$ti-icon-battery-1: unicode('ea2f'); +$ti-icon-battery-1-filled: unicode('f71e'); +$ti-icon-battery-2: unicode('ea30'); +$ti-icon-battery-2-filled: unicode('f71f'); +$ti-icon-battery-3: unicode('ea31'); +$ti-icon-battery-3-filled: unicode('f720'); +$ti-icon-battery-4: unicode('ea32'); +$ti-icon-battery-4-filled: unicode('f721'); +$ti-icon-battery-automotive: unicode('ee07'); +$ti-icon-battery-charging: unicode('ea33'); +$ti-icon-battery-charging-2: unicode('ef3b'); +$ti-icon-battery-eco: unicode('ef3c'); +$ti-icon-battery-filled: unicode('f668'); +$ti-icon-battery-off: unicode('ed1c'); +$ti-icon-beach: unicode('ef3d'); +$ti-icon-beach-off: unicode('f0b7'); +$ti-icon-bed: unicode('eb5c'); +$ti-icon-bed-filled: unicode('f7e0'); +$ti-icon-bed-flat: unicode('fca1'); +$ti-icon-bed-flat-filled: unicode('fe8d'); +$ti-icon-bed-off: unicode('f100'); +$ti-icon-beer: unicode('efa1'); +$ti-icon-beer-filled: unicode('f7e1'); +$ti-icon-beer-off: unicode('f101'); +$ti-icon-bell: unicode('ea35'); +$ti-icon-bell-bolt: unicode('f812'); +$ti-icon-bell-cancel: unicode('f813'); +$ti-icon-bell-check: unicode('f814'); +$ti-icon-bell-code: unicode('f815'); +$ti-icon-bell-cog: unicode('f816'); +$ti-icon-bell-dollar: unicode('f817'); +$ti-icon-bell-down: unicode('f818'); +$ti-icon-bell-exclamation: unicode('f819'); +$ti-icon-bell-filled: unicode('f669'); +$ti-icon-bell-heart: unicode('f81a'); +$ti-icon-bell-minus: unicode('ede2'); +$ti-icon-bell-minus-filled: unicode('f722'); +$ti-icon-bell-off: unicode('ece9'); +$ti-icon-bell-pause: unicode('f81b'); +$ti-icon-bell-pin: unicode('f81c'); +$ti-icon-bell-plus: unicode('ede3'); +$ti-icon-bell-plus-filled: unicode('f723'); +$ti-icon-bell-question: unicode('f81d'); +$ti-icon-bell-ringing: unicode('ed07'); +$ti-icon-bell-ringing-2: unicode('ede4'); +$ti-icon-bell-ringing-2-filled: unicode('f724'); +$ti-icon-bell-ringing-filled: unicode('f725'); +$ti-icon-bell-school: unicode('f05e'); +$ti-icon-bell-search: unicode('f81e'); +$ti-icon-bell-share: unicode('f81f'); +$ti-icon-bell-star: unicode('f820'); +$ti-icon-bell-up: unicode('f821'); +$ti-icon-bell-x: unicode('ede5'); +$ti-icon-bell-x-filled: unicode('f726'); +$ti-icon-bell-z: unicode('eff1'); +$ti-icon-bell-z-filled: unicode('f727'); +$ti-icon-beta: unicode('f544'); +$ti-icon-bible: unicode('efc4'); +$ti-icon-bike: unicode('ea36'); +$ti-icon-bike-off: unicode('f0b8'); +$ti-icon-binary: unicode('ee08'); +$ti-icon-binary-off: unicode('f3c5'); +$ti-icon-binary-tree: unicode('f5d4'); +$ti-icon-binary-tree-2: unicode('f5d3'); +$ti-icon-biohazard: unicode('ecb8'); +$ti-icon-biohazard-filled: unicode('fe8c'); +$ti-icon-biohazard-off: unicode('f0b9'); +$ti-icon-blade: unicode('f4bd'); +$ti-icon-blade-filled: unicode('f7e2'); +$ti-icon-bleach: unicode('f2f3'); +$ti-icon-bleach-chlorine: unicode('f2f0'); +$ti-icon-bleach-no-chlorine: unicode('f2f1'); +$ti-icon-bleach-off: unicode('f2f2'); +$ti-icon-blend-mode: unicode('feb0'); +$ti-icon-blender: unicode('fca2'); +$ti-icon-blob: unicode('feaf'); +$ti-icon-blob-filled: unicode('feb1'); +$ti-icon-blockquote: unicode('ee09'); +$ti-icon-bluetooth: unicode('ea37'); +$ti-icon-bluetooth-connected: unicode('ecea'); +$ti-icon-bluetooth-off: unicode('eceb'); +$ti-icon-bluetooth-x: unicode('f081'); +$ti-icon-blur: unicode('ef8c'); +$ti-icon-blur-off: unicode('f3c6'); +$ti-icon-bmp: unicode('f3a6'); +$ti-icon-body-scan: unicode('fca3'); +$ti-icon-bold: unicode('eb7b'); +$ti-icon-bold-off: unicode('f0ba'); +$ti-icon-bolt: unicode('ea38'); +$ti-icon-bolt-off: unicode('ecec'); +$ti-icon-bomb: unicode('f59c'); +$ti-icon-bomb-filled: unicode('fa86'); +$ti-icon-bone: unicode('edb8'); +$ti-icon-bone-filled: unicode('fe8b'); +$ti-icon-bone-off: unicode('f0bb'); +$ti-icon-bong: unicode('f3a7'); +$ti-icon-bong-off: unicode('f3c7'); +$ti-icon-book: unicode('ea39'); +$ti-icon-book-2: unicode('efc5'); +$ti-icon-book-download: unicode('f070'); +$ti-icon-book-filled: unicode('fa87'); +$ti-icon-book-off: unicode('f0bc'); +$ti-icon-book-upload: unicode('f071'); +$ti-icon-bookmark: unicode('ea3a'); +$ti-icon-bookmark-ai: unicode('fc8a'); +$ti-icon-bookmark-edit: unicode('fa5e'); +$ti-icon-bookmark-filled: unicode('fa88'); +$ti-icon-bookmark-minus: unicode('fa5f'); +$ti-icon-bookmark-off: unicode('eced'); +$ti-icon-bookmark-plus: unicode('fa60'); +$ti-icon-bookmark-question: unicode('fa61'); +$ti-icon-bookmarks: unicode('ed08'); +$ti-icon-bookmarks-filled: unicode('fb1f'); +$ti-icon-bookmarks-off: unicode('f0bd'); +$ti-icon-books: unicode('eff2'); +$ti-icon-books-off: unicode('f0be'); +$ti-icon-boom: unicode('fdbe'); +$ti-icon-boom-filled: unicode('fe8a'); +$ti-icon-border-all: unicode('ea3b'); +$ti-icon-border-bottom: unicode('ea3c'); +$ti-icon-border-bottom-plus: unicode('fdbd'); +$ti-icon-border-corner-ios: unicode('fd98'); +$ti-icon-border-corner-pill: unicode('fd62'); +$ti-icon-border-corner-rounded: unicode('fd63'); +$ti-icon-border-corner-square: unicode('fd64'); +$ti-icon-border-corners: unicode('f7a0'); +$ti-icon-border-horizontal: unicode('ea3d'); +$ti-icon-border-inner: unicode('ea3e'); +$ti-icon-border-left: unicode('ea3f'); +$ti-icon-border-left-plus: unicode('fdbc'); +$ti-icon-border-none: unicode('ea40'); +$ti-icon-border-outer: unicode('ea41'); +$ti-icon-border-radius: unicode('eb7c'); +$ti-icon-border-right: unicode('ea42'); +$ti-icon-border-right-plus: unicode('fdbb'); +$ti-icon-border-sides: unicode('f7a1'); +$ti-icon-border-style: unicode('ee0a'); +$ti-icon-border-style-2: unicode('ef22'); +$ti-icon-border-top: unicode('ea43'); +$ti-icon-border-top-plus: unicode('fdba'); +$ti-icon-border-vertical: unicode('ea44'); +$ti-icon-bottle: unicode('ef0b'); +$ti-icon-bottle-filled: unicode('fa89'); +$ti-icon-bottle-off: unicode('f3c8'); +$ti-icon-bounce-left: unicode('f59d'); +$ti-icon-bounce-left-filled: unicode('fb20'); +$ti-icon-bounce-right: unicode('f59e'); +$ti-icon-bounce-right-filled: unicode('fb21'); +$ti-icon-bow: unicode('f096'); +$ti-icon-bow-filled: unicode('fe89'); +$ti-icon-bowl: unicode('f4fa'); +$ti-icon-bowl-chopsticks: unicode('fd90'); +$ti-icon-bowl-chopsticks-filled: unicode('fe88'); +$ti-icon-bowl-filled: unicode('fb22'); +$ti-icon-bowl-spoon: unicode('fd91'); +$ti-icon-bowl-spoon-filled: unicode('fe87'); +$ti-icon-box: unicode('ea45'); +$ti-icon-box-align-bottom: unicode('f2a8'); +$ti-icon-box-align-bottom-filled: unicode('fa8a'); +$ti-icon-box-align-bottom-left: unicode('f2ce'); +$ti-icon-box-align-bottom-left-filled: unicode('fa8b'); +$ti-icon-box-align-bottom-right: unicode('f2cf'); +$ti-icon-box-align-bottom-right-filled: unicode('fa8c'); +$ti-icon-box-align-left: unicode('f2a9'); +$ti-icon-box-align-left-filled: unicode('fa8d'); +$ti-icon-box-align-right: unicode('f2aa'); +$ti-icon-box-align-right-filled: unicode('fa8e'); +$ti-icon-box-align-top: unicode('f2ab'); +$ti-icon-box-align-top-filled: unicode('fa8f'); +$ti-icon-box-align-top-left: unicode('f2d0'); +$ti-icon-box-align-top-left-filled: unicode('fa90'); +$ti-icon-box-align-top-right: unicode('f2d1'); +$ti-icon-box-align-top-right-filled: unicode('fa91'); +$ti-icon-box-margin: unicode('ee0b'); +$ti-icon-box-model: unicode('ee0c'); +$ti-icon-box-model-2: unicode('ef23'); +$ti-icon-box-model-2-off: unicode('f3c9'); +$ti-icon-box-model-off: unicode('f3ca'); +$ti-icon-box-multiple: unicode('ee17'); +$ti-icon-box-multiple-0: unicode('ee0d'); +$ti-icon-box-multiple-1: unicode('ee0e'); +$ti-icon-box-multiple-2: unicode('ee0f'); +$ti-icon-box-multiple-3: unicode('ee10'); +$ti-icon-box-multiple-4: unicode('ee11'); +$ti-icon-box-multiple-5: unicode('ee12'); +$ti-icon-box-multiple-6: unicode('ee13'); +$ti-icon-box-multiple-7: unicode('ee14'); +$ti-icon-box-multiple-8: unicode('ee15'); +$ti-icon-box-multiple-9: unicode('ee16'); +$ti-icon-box-off: unicode('f102'); +$ti-icon-box-padding: unicode('ee18'); +$ti-icon-braces: unicode('ebcc'); +$ti-icon-braces-off: unicode('f0bf'); +$ti-icon-brackets: unicode('ebcd'); +$ti-icon-brackets-angle: unicode('fcb2'); +$ti-icon-brackets-angle-off: unicode('fcb1'); +$ti-icon-brackets-contain: unicode('f1e5'); +$ti-icon-brackets-contain-end: unicode('f1e3'); +$ti-icon-brackets-contain-start: unicode('f1e4'); +$ti-icon-brackets-off: unicode('f0c0'); +$ti-icon-braille: unicode('f545'); +$ti-icon-brain: unicode('f59f'); +$ti-icon-brand-4chan: unicode('f494'); +$ti-icon-brand-abstract: unicode('f495'); +$ti-icon-brand-adobe: unicode('f0dc'); +$ti-icon-brand-adonis-js: unicode('f496'); +$ti-icon-brand-airbnb: unicode('ed68'); +$ti-icon-brand-airtable: unicode('ef6a'); +$ti-icon-brand-algolia: unicode('f390'); +$ti-icon-brand-alipay: unicode('f7a2'); +$ti-icon-brand-alpine-js: unicode('f324'); +$ti-icon-brand-amazon: unicode('f230'); +$ti-icon-brand-amd: unicode('f653'); +$ti-icon-brand-amigo: unicode('f5f9'); +$ti-icon-brand-among-us: unicode('f205'); +$ti-icon-brand-android: unicode('ec16'); +$ti-icon-brand-angular: unicode('ef6b'); +$ti-icon-brand-ansible: unicode('fa70'); +$ti-icon-brand-ao3: unicode('f5e8'); +$ti-icon-brand-appgallery: unicode('f231'); +$ti-icon-brand-apple: unicode('ec17'); +$ti-icon-brand-apple-arcade: unicode('ed69'); +$ti-icon-brand-apple-filled: unicode('fd74'); +$ti-icon-brand-apple-podcast: unicode('f1e6'); +$ti-icon-brand-appstore: unicode('ed24'); +$ti-icon-brand-arc: unicode('feae'); +$ti-icon-brand-asana: unicode('edc5'); +$ti-icon-brand-astro: unicode('fdb9'); +$ti-icon-brand-auth0: unicode('fcb3'); +$ti-icon-brand-aws: unicode('fa4c'); +$ti-icon-brand-azure: unicode('fa4d'); +$ti-icon-brand-backbone: unicode('f325'); +$ti-icon-brand-badoo: unicode('f206'); +$ti-icon-brand-baidu: unicode('f5e9'); +$ti-icon-brand-bandcamp: unicode('f207'); +$ti-icon-brand-bandlab: unicode('f5fa'); +$ti-icon-brand-beats: unicode('f208'); +$ti-icon-brand-behance: unicode('ec6e'); +$ti-icon-brand-bilibili: unicode('f6d2'); +$ti-icon-brand-binance: unicode('f5a0'); +$ti-icon-brand-bing: unicode('edc6'); +$ti-icon-brand-bitbucket: unicode('edc7'); +$ti-icon-brand-blackberry: unicode('f568'); +$ti-icon-brand-blender: unicode('f326'); +$ti-icon-brand-blogger: unicode('f35a'); +$ti-icon-brand-bluesky: unicode('fd75'); +$ti-icon-brand-booking: unicode('edc8'); +$ti-icon-brand-bootstrap: unicode('ef3e'); +$ti-icon-brand-bulma: unicode('f327'); +$ti-icon-brand-bumble: unicode('f5fb'); +$ti-icon-brand-bunpo: unicode('f4cf'); +$ti-icon-brand-c-sharp: unicode('f003'); +$ti-icon-brand-cake: unicode('f7a3'); +$ti-icon-brand-cakephp: unicode('f7af'); +$ti-icon-brand-campaignmonitor: unicode('f328'); +$ti-icon-brand-carbon: unicode('f348'); +$ti-icon-brand-cashapp: unicode('f391'); +$ti-icon-brand-chrome: unicode('ec18'); +$ti-icon-brand-cinema-4d: unicode('fa71'); +$ti-icon-brand-citymapper: unicode('f5fc'); +$ti-icon-brand-cloudflare: unicode('fa4e'); +$ti-icon-brand-codecov: unicode('f329'); +$ti-icon-brand-codepen: unicode('ec6f'); +$ti-icon-brand-codesandbox: unicode('ed6a'); +$ti-icon-brand-cohost: unicode('f5d5'); +$ti-icon-brand-coinbase: unicode('f209'); +$ti-icon-brand-comedy-central: unicode('f217'); +$ti-icon-brand-coreos: unicode('f5fd'); +$ti-icon-brand-couchdb: unicode('f60f'); +$ti-icon-brand-couchsurfing: unicode('f392'); +$ti-icon-brand-cpp: unicode('f5fe'); +$ti-icon-brand-craft: unicode('fa72'); +$ti-icon-brand-crunchbase: unicode('f7e3'); +$ti-icon-brand-css3: unicode('ed6b'); +$ti-icon-brand-ctemplar: unicode('f4d0'); +$ti-icon-brand-cucumber: unicode('ef6c'); +$ti-icon-brand-cupra: unicode('f4d1'); +$ti-icon-brand-cypress: unicode('f333'); +$ti-icon-brand-d3: unicode('f24e'); +$ti-icon-brand-databricks: unicode('fc41'); +$ti-icon-brand-days-counter: unicode('f4d2'); +$ti-icon-brand-dcos: unicode('f32a'); +$ti-icon-brand-debian: unicode('ef57'); +$ti-icon-brand-deezer: unicode('f78b'); +$ti-icon-brand-deliveroo: unicode('f4d3'); +$ti-icon-brand-deno: unicode('f24f'); +$ti-icon-brand-denodo: unicode('f610'); +$ti-icon-brand-deviantart: unicode('ecfb'); +$ti-icon-brand-digg: unicode('fa73'); +$ti-icon-brand-dingtalk: unicode('f5ea'); +$ti-icon-brand-discord: unicode('ece3'); +$ti-icon-brand-discord-filled: unicode('f7e4'); +$ti-icon-brand-disney: unicode('f20a'); +$ti-icon-brand-disqus: unicode('edc9'); +$ti-icon-brand-django: unicode('f349'); +$ti-icon-brand-docker: unicode('edca'); +$ti-icon-brand-doctrine: unicode('ef6d'); +$ti-icon-brand-dolby-digital: unicode('f4d4'); +$ti-icon-brand-douban: unicode('f5ff'); +$ti-icon-brand-dribbble: unicode('ec19'); +$ti-icon-brand-dribbble-filled: unicode('f7e5'); +$ti-icon-brand-drops: unicode('f4d5'); +$ti-icon-brand-drupal: unicode('f393'); +$ti-icon-brand-edge: unicode('ecfc'); +$ti-icon-brand-elastic: unicode('f611'); +$ti-icon-brand-electronic-arts: unicode('fa74'); +$ti-icon-brand-ember: unicode('f497'); +$ti-icon-brand-envato: unicode('f394'); +$ti-icon-brand-etsy: unicode('f654'); +$ti-icon-brand-evernote: unicode('f600'); +$ti-icon-brand-facebook: unicode('ec1a'); +$ti-icon-brand-facebook-filled: unicode('f7e6'); +$ti-icon-brand-feedly: unicode('fa75'); +$ti-icon-brand-figma: unicode('ec93'); +$ti-icon-brand-filezilla: unicode('fa76'); +$ti-icon-brand-finder: unicode('f218'); +$ti-icon-brand-firebase: unicode('ef6e'); +$ti-icon-brand-firefox: unicode('ecfd'); +$ti-icon-brand-fiverr: unicode('f7a4'); +$ti-icon-brand-flickr: unicode('ecfe'); +$ti-icon-brand-flightradar24: unicode('f4d6'); +$ti-icon-brand-flipboard: unicode('f20b'); +$ti-icon-brand-flutter: unicode('f395'); +$ti-icon-brand-fortnite: unicode('f260'); +$ti-icon-brand-foursquare: unicode('ecff'); +$ti-icon-brand-framer: unicode('ec1b'); +$ti-icon-brand-framer-motion: unicode('f78c'); +$ti-icon-brand-funimation: unicode('f655'); +$ti-icon-brand-gatsby: unicode('f396'); +$ti-icon-brand-git: unicode('ef6f'); +$ti-icon-brand-github: unicode('ec1c'); +$ti-icon-brand-github-copilot: unicode('f4a8'); +$ti-icon-brand-github-filled: unicode('f7e7'); +$ti-icon-brand-gitlab: unicode('ec1d'); +$ti-icon-brand-gmail: unicode('efa2'); +$ti-icon-brand-golang: unicode('f78d'); +$ti-icon-brand-google: unicode('ec1f'); +$ti-icon-brand-google-analytics: unicode('edcb'); +$ti-icon-brand-google-big-query: unicode('f612'); +$ti-icon-brand-google-drive: unicode('ec1e'); +$ti-icon-brand-google-filled: unicode('fd1a'); +$ti-icon-brand-google-fit: unicode('f297'); +$ti-icon-brand-google-home: unicode('f601'); +$ti-icon-brand-google-maps: unicode('fa4f'); +$ti-icon-brand-google-one: unicode('f232'); +$ti-icon-brand-google-photos: unicode('f20c'); +$ti-icon-brand-google-play: unicode('ed25'); +$ti-icon-brand-google-podcasts: unicode('f656'); +$ti-icon-brand-grammarly: unicode('f32b'); +$ti-icon-brand-graphql: unicode('f32c'); +$ti-icon-brand-gravatar: unicode('edcc'); +$ti-icon-brand-grindr: unicode('f20d'); +$ti-icon-brand-guardian: unicode('f4fb'); +$ti-icon-brand-gumroad: unicode('f5d6'); +$ti-icon-brand-hbo: unicode('f657'); +$ti-icon-brand-headlessui: unicode('f32d'); +$ti-icon-brand-hexo: unicode('fa50'); +$ti-icon-brand-hipchat: unicode('edcd'); +$ti-icon-brand-html5: unicode('ed6c'); +$ti-icon-brand-inertia: unicode('f34a'); +$ti-icon-brand-instagram: unicode('ec20'); +$ti-icon-brand-intercom: unicode('f1cf'); +$ti-icon-brand-itch: unicode('fa22'); +$ti-icon-brand-javascript: unicode('ef0c'); +$ti-icon-brand-juejin: unicode('f7b0'); +$ti-icon-brand-kako-talk: unicode('fd2d'); +$ti-icon-brand-kbin: unicode('fad0'); +$ti-icon-brand-kick: unicode('fa23'); +$ti-icon-brand-kickstarter: unicode('edce'); +$ti-icon-brand-kotlin: unicode('ed6d'); +$ti-icon-brand-laravel: unicode('f34b'); +$ti-icon-brand-lastfm: unicode('f001'); +$ti-icon-brand-leetcode: unicode('fa51'); +$ti-icon-brand-letterboxd: unicode('fa24'); +$ti-icon-brand-line: unicode('f7e8'); +$ti-icon-brand-linkedin: unicode('ec8c'); +$ti-icon-brand-linktree: unicode('f1e7'); +$ti-icon-brand-linqpad: unicode('f562'); +$ti-icon-brand-livewire: unicode('fd76'); +$ti-icon-brand-loom: unicode('ef70'); +$ti-icon-brand-mailgun: unicode('f32e'); +$ti-icon-brand-mantine: unicode('f32f'); +$ti-icon-brand-mastercard: unicode('ef49'); +$ti-icon-brand-mastodon: unicode('f250'); +$ti-icon-brand-matrix: unicode('f5eb'); +$ti-icon-brand-mcdonalds: unicode('f251'); +$ti-icon-brand-medium: unicode('ec70'); +$ti-icon-brand-meetup: unicode('fc6a'); +$ti-icon-brand-mercedes: unicode('f072'); +$ti-icon-brand-messenger: unicode('ec71'); +$ti-icon-brand-meta: unicode('efb0'); +$ti-icon-brand-minecraft: unicode('faef'); +$ti-icon-brand-miniprogram: unicode('f602'); +$ti-icon-brand-mixpanel: unicode('f397'); +$ti-icon-brand-monday: unicode('f219'); +$ti-icon-brand-mongodb: unicode('f613'); +$ti-icon-brand-my-oppo: unicode('f4d7'); +$ti-icon-brand-mysql: unicode('f614'); +$ti-icon-brand-national-geographic: unicode('f603'); +$ti-icon-brand-nem: unicode('f5a1'); +$ti-icon-brand-netbeans: unicode('ef71'); +$ti-icon-brand-netease-music: unicode('f604'); +$ti-icon-brand-netflix: unicode('edcf'); +$ti-icon-brand-nexo: unicode('f5a2'); +$ti-icon-brand-nextcloud: unicode('f4d8'); +$ti-icon-brand-nextjs: unicode('f0dd'); +$ti-icon-brand-nodejs: unicode('fae0'); +$ti-icon-brand-nord-vpn: unicode('f37f'); +$ti-icon-brand-notion: unicode('ef7b'); +$ti-icon-brand-npm: unicode('f569'); +$ti-icon-brand-nuxt: unicode('f0de'); +$ti-icon-brand-nytimes: unicode('ef8d'); +$ti-icon-brand-oauth: unicode('fa52'); +$ti-icon-brand-office: unicode('f398'); +$ti-icon-brand-ok-ru: unicode('f399'); +$ti-icon-brand-onedrive: unicode('f5d7'); +$ti-icon-brand-onlyfans: unicode('f605'); +$ti-icon-brand-open-source: unicode('edd0'); +$ti-icon-brand-openai: unicode('f78e'); +$ti-icon-brand-openvpn: unicode('f39a'); +$ti-icon-brand-opera: unicode('ec21'); +$ti-icon-brand-pagekit: unicode('edd1'); +$ti-icon-brand-parsinta: unicode('fc42'); +$ti-icon-brand-patreon: unicode('edd2'); +$ti-icon-brand-patreon-filled: unicode('fcff'); +$ti-icon-brand-paypal: unicode('ec22'); +$ti-icon-brand-paypal-filled: unicode('f7e9'); +$ti-icon-brand-paypay: unicode('f5ec'); +$ti-icon-brand-peanut: unicode('f39b'); +$ti-icon-brand-pepsi: unicode('f261'); +$ti-icon-brand-php: unicode('ef72'); +$ti-icon-brand-picsart: unicode('f4d9'); +$ti-icon-brand-pinterest: unicode('ec8d'); +$ti-icon-brand-planetscale: unicode('f78f'); +$ti-icon-brand-pnpm: unicode('fd77'); +$ti-icon-brand-pocket: unicode('ed00'); +$ti-icon-brand-polymer: unicode('f498'); +$ti-icon-brand-powershell: unicode('f5ed'); +$ti-icon-brand-printables: unicode('fd1b'); +$ti-icon-brand-prisma: unicode('f499'); +$ti-icon-brand-producthunt: unicode('edd3'); +$ti-icon-brand-pushbullet: unicode('f330'); +$ti-icon-brand-pushover: unicode('f20e'); +$ti-icon-brand-python: unicode('ed01'); +$ti-icon-brand-qq: unicode('f606'); +$ti-icon-brand-radix-ui: unicode('f790'); +$ti-icon-brand-react: unicode('f34c'); +$ti-icon-brand-react-native: unicode('ef73'); +$ti-icon-brand-reason: unicode('f49a'); +$ti-icon-brand-reddit: unicode('ec8e'); +$ti-icon-brand-redhat: unicode('f331'); +$ti-icon-brand-redux: unicode('f3a8'); +$ti-icon-brand-revolut: unicode('f4da'); +$ti-icon-brand-rumble: unicode('fad1'); +$ti-icon-brand-rust: unicode('fa53'); +$ti-icon-brand-safari: unicode('ec23'); +$ti-icon-brand-samsungpass: unicode('f4db'); +$ti-icon-brand-sass: unicode('edd4'); +$ti-icon-brand-sentry: unicode('edd5'); +$ti-icon-brand-sharik: unicode('f4dc'); +$ti-icon-brand-shazam: unicode('edd6'); +$ti-icon-brand-shopee: unicode('f252'); +$ti-icon-brand-sketch: unicode('ec24'); +$ti-icon-brand-skype: unicode('ed02'); +$ti-icon-brand-slack: unicode('ec72'); +$ti-icon-brand-snapchat: unicode('ec25'); +$ti-icon-brand-snapseed: unicode('f253'); +$ti-icon-brand-snowflake: unicode('f615'); +$ti-icon-brand-socket-io: unicode('f49b'); +$ti-icon-brand-solidjs: unicode('f5ee'); +$ti-icon-brand-soundcloud: unicode('ed6e'); +$ti-icon-brand-spacehey: unicode('f4fc'); +$ti-icon-brand-speedtest: unicode('fa77'); +$ti-icon-brand-spotify: unicode('ed03'); +$ti-icon-brand-spotify-filled: unicode('fe86'); +$ti-icon-brand-stackoverflow: unicode('ef58'); +$ti-icon-brand-stackshare: unicode('f607'); +$ti-icon-brand-steam: unicode('ed6f'); +$ti-icon-brand-stocktwits: unicode('fd78'); +$ti-icon-brand-storj: unicode('fa54'); +$ti-icon-brand-storybook: unicode('f332'); +$ti-icon-brand-storytel: unicode('f608'); +$ti-icon-brand-strava: unicode('f254'); +$ti-icon-brand-stripe: unicode('edd7'); +$ti-icon-brand-sublime-text: unicode('ef74'); +$ti-icon-brand-sugarizer: unicode('f7a5'); +$ti-icon-brand-supabase: unicode('f6d3'); +$ti-icon-brand-superhuman: unicode('f50c'); +$ti-icon-brand-supernova: unicode('f49c'); +$ti-icon-brand-surfshark: unicode('f255'); +$ti-icon-brand-svelte: unicode('f0df'); +$ti-icon-brand-swift: unicode('fa55'); +$ti-icon-brand-symfony: unicode('f616'); +$ti-icon-brand-tabler: unicode('ec8f'); +$ti-icon-brand-tailwind: unicode('eca1'); +$ti-icon-brand-taobao: unicode('f5ef'); +$ti-icon-brand-teams: unicode('fadf'); +$ti-icon-brand-ted: unicode('f658'); +$ti-icon-brand-telegram: unicode('ec26'); +$ti-icon-brand-terraform: unicode('fa56'); +$ti-icon-brand-tether: unicode('f5a3'); +$ti-icon-brand-thingiverse: unicode('fd1c'); +$ti-icon-brand-threads: unicode('fb02'); +$ti-icon-brand-threejs: unicode('f5f0'); +$ti-icon-brand-tidal: unicode('ed70'); +$ti-icon-brand-tiktok: unicode('ec73'); +$ti-icon-brand-tiktok-filled: unicode('f7ea'); +$ti-icon-brand-tinder: unicode('ed71'); +$ti-icon-brand-topbuzz: unicode('f50d'); +$ti-icon-brand-torchain: unicode('f5a4'); +$ti-icon-brand-toyota: unicode('f262'); +$ti-icon-brand-trello: unicode('f39d'); +$ti-icon-brand-tripadvisor: unicode('f002'); +$ti-icon-brand-tumblr: unicode('ed04'); +$ti-icon-brand-twilio: unicode('f617'); +$ti-icon-brand-twitch: unicode('ed05'); +$ti-icon-brand-twitter: unicode('ec27'); +$ti-icon-brand-twitter-filled: unicode('f7eb'); +$ti-icon-brand-typescript: unicode('f5f1'); +$ti-icon-brand-uber: unicode('ef75'); +$ti-icon-brand-ubuntu: unicode('ef59'); +$ti-icon-brand-unity: unicode('f49d'); +$ti-icon-brand-unsplash: unicode('edd8'); +$ti-icon-brand-upwork: unicode('f39e'); +$ti-icon-brand-valorant: unicode('f39f'); +$ti-icon-brand-vercel: unicode('ef24'); +$ti-icon-brand-vimeo: unicode('ed06'); +$ti-icon-brand-vinted: unicode('f20f'); +$ti-icon-brand-visa: unicode('f380'); +$ti-icon-brand-visual-studio: unicode('ef76'); +$ti-icon-brand-vite: unicode('f5f2'); +$ti-icon-brand-vivaldi: unicode('f210'); +$ti-icon-brand-vk: unicode('ed72'); +$ti-icon-brand-vlc: unicode('fa78'); +$ti-icon-brand-volkswagen: unicode('f50e'); +$ti-icon-brand-vsco: unicode('f334'); +$ti-icon-brand-vscode: unicode('f3a0'); +$ti-icon-brand-vue: unicode('f0e0'); +$ti-icon-brand-walmart: unicode('f211'); +$ti-icon-brand-waze: unicode('f5d8'); +$ti-icon-brand-webflow: unicode('f2d2'); +$ti-icon-brand-wechat: unicode('f5f3'); +$ti-icon-brand-weibo: unicode('f609'); +$ti-icon-brand-whatsapp: unicode('ec74'); +$ti-icon-brand-wikipedia: unicode('fa79'); +$ti-icon-brand-windows: unicode('ecd8'); +$ti-icon-brand-windy: unicode('f4dd'); +$ti-icon-brand-wish: unicode('f212'); +$ti-icon-brand-wix: unicode('f3a1'); +$ti-icon-brand-wordpress: unicode('f2d3'); +$ti-icon-brand-x: unicode('fc0f'); +$ti-icon-brand-x-filled: unicode('fc21'); +$ti-icon-brand-xamarin: unicode('fa7a'); +$ti-icon-brand-xbox: unicode('f298'); +$ti-icon-brand-xdeep: unicode('fc10'); +$ti-icon-brand-xing: unicode('f21a'); +$ti-icon-brand-yahoo: unicode('ed73'); +$ti-icon-brand-yandex: unicode('fae1'); +$ti-icon-brand-yarn: unicode('fd79'); +$ti-icon-brand-yatse: unicode('f213'); +$ti-icon-brand-ycombinator: unicode('edd9'); +$ti-icon-brand-youtube: unicode('ec90'); +$ti-icon-brand-youtube-filled: unicode('fc22'); +$ti-icon-brand-youtube-kids: unicode('f214'); +$ti-icon-brand-zalando: unicode('f49e'); +$ti-icon-brand-zapier: unicode('f49f'); +$ti-icon-brand-zeit: unicode('f335'); +$ti-icon-brand-zhihu: unicode('f60a'); +$ti-icon-brand-zoom: unicode('f215'); +$ti-icon-brand-zulip: unicode('f4de'); +$ti-icon-brand-zwift: unicode('f216'); +$ti-icon-bread: unicode('efa3'); +$ti-icon-bread-filled: unicode('fe85'); +$ti-icon-bread-off: unicode('f3cb'); +$ti-icon-briefcase: unicode('ea46'); +$ti-icon-briefcase-2: unicode('fb03'); +$ti-icon-briefcase-2-filled: unicode('fe84'); +$ti-icon-briefcase-filled: unicode('fd00'); +$ti-icon-briefcase-off: unicode('f3cc'); +$ti-icon-brightness: unicode('eb7f'); +$ti-icon-brightness-2: unicode('ee19'); +$ti-icon-brightness-auto: unicode('fd99'); +$ti-icon-brightness-auto-filled: unicode('fe83'); +$ti-icon-brightness-down: unicode('eb7d'); +$ti-icon-brightness-down-filled: unicode('fb23'); +$ti-icon-brightness-filled: unicode('fe82'); +$ti-icon-brightness-half: unicode('ee1a'); +$ti-icon-brightness-off: unicode('f3cd'); +$ti-icon-brightness-up: unicode('eb7e'); +$ti-icon-brightness-up-filled: unicode('fb24'); +$ti-icon-broadcast: unicode('f1e9'); +$ti-icon-broadcast-off: unicode('f1e8'); +$ti-icon-browser: unicode('ebb7'); +$ti-icon-browser-check: unicode('efd6'); +$ti-icon-browser-off: unicode('f0c1'); +$ti-icon-browser-plus: unicode('efd7'); +$ti-icon-browser-x: unicode('efd8'); +$ti-icon-brush: unicode('ebb8'); +$ti-icon-brush-off: unicode('f0c2'); +$ti-icon-bubble: unicode('feba'); +$ti-icon-bubble-filled: unicode('fec3'); +$ti-icon-bubble-minus: unicode('febe'); +$ti-icon-bubble-plus: unicode('febd'); +$ti-icon-bubble-text: unicode('febc'); +$ti-icon-bubble-x: unicode('febb'); +$ti-icon-bucket: unicode('ea47'); +$ti-icon-bucket-droplet: unicode('f56a'); +$ti-icon-bucket-off: unicode('f103'); +$ti-icon-bug: unicode('ea48'); +$ti-icon-bug-filled: unicode('fd01'); +$ti-icon-bug-off: unicode('f0c3'); +$ti-icon-building: unicode('ea4f'); +$ti-icon-building-arch: unicode('ea49'); +$ti-icon-building-bank: unicode('ebe2'); +$ti-icon-building-bridge: unicode('ea4b'); +$ti-icon-building-bridge-2: unicode('ea4a'); +$ti-icon-building-broadcast-tower: unicode('f4be'); +$ti-icon-building-broadcast-tower-filled: unicode('fe81'); +$ti-icon-building-carousel: unicode('ed87'); +$ti-icon-building-castle: unicode('ed88'); +$ti-icon-building-church: unicode('ea4c'); +$ti-icon-building-circus: unicode('f4bf'); +$ti-icon-building-community: unicode('ebf6'); +$ti-icon-building-cottage: unicode('ee1b'); +$ti-icon-building-estate: unicode('f5a5'); +$ti-icon-building-factory: unicode('ee1c'); +$ti-icon-building-factory-2: unicode('f082'); +$ti-icon-building-fortress: unicode('ed89'); +$ti-icon-building-hospital: unicode('ea4d'); +$ti-icon-building-lighthouse: unicode('ed8a'); +$ti-icon-building-monument: unicode('ed26'); +$ti-icon-building-mosque: unicode('fa57'); +$ti-icon-building-pavilion: unicode('ebf7'); +$ti-icon-building-skyscraper: unicode('ec39'); +$ti-icon-building-stadium: unicode('f641'); +$ti-icon-building-store: unicode('ea4e'); +$ti-icon-building-tunnel: unicode('f5a6'); +$ti-icon-building-warehouse: unicode('ebe3'); +$ti-icon-building-wind-turbine: unicode('f4c0'); +$ti-icon-bulb: unicode('ea51'); +$ti-icon-bulb-filled: unicode('f66a'); +$ti-icon-bulb-off: unicode('ea50'); +$ti-icon-bulldozer: unicode('ee1d'); +$ti-icon-burger: unicode('fcb4'); +$ti-icon-bus: unicode('ebe4'); +$ti-icon-bus-off: unicode('f3ce'); +$ti-icon-bus-stop: unicode('f2d4'); +$ti-icon-businessplan: unicode('ee1e'); +$ti-icon-butterfly: unicode('efd9'); +$ti-icon-cactus: unicode('f21b'); +$ti-icon-cactus-filled: unicode('fb25'); +$ti-icon-cactus-off: unicode('f3cf'); +$ti-icon-cake: unicode('f00f'); +$ti-icon-cake-off: unicode('f104'); +$ti-icon-calculator: unicode('eb80'); +$ti-icon-calculator-filled: unicode('fb26'); +$ti-icon-calculator-off: unicode('f0c4'); +$ti-icon-calendar: unicode('ea53'); +$ti-icon-calendar-bolt: unicode('f822'); +$ti-icon-calendar-cancel: unicode('f823'); +$ti-icon-calendar-check: unicode('f824'); +$ti-icon-calendar-clock: unicode('fd2e'); +$ti-icon-calendar-code: unicode('f825'); +$ti-icon-calendar-cog: unicode('f826'); +$ti-icon-calendar-dollar: unicode('f827'); +$ti-icon-calendar-dot: unicode('fd3e'); +$ti-icon-calendar-down: unicode('f828'); +$ti-icon-calendar-due: unicode('f621'); +$ti-icon-calendar-event: unicode('ea52'); +$ti-icon-calendar-exclamation: unicode('f829'); +$ti-icon-calendar-filled: unicode('fb27'); +$ti-icon-calendar-heart: unicode('f82a'); +$ti-icon-calendar-minus: unicode('ebb9'); +$ti-icon-calendar-month: unicode('fd2f'); +$ti-icon-calendar-off: unicode('ee1f'); +$ti-icon-calendar-pause: unicode('f82b'); +$ti-icon-calendar-pin: unicode('f82c'); +$ti-icon-calendar-plus: unicode('ebba'); +$ti-icon-calendar-question: unicode('f82d'); +$ti-icon-calendar-repeat: unicode('fad2'); +$ti-icon-calendar-sad: unicode('fd1d'); +$ti-icon-calendar-search: unicode('f82e'); +$ti-icon-calendar-share: unicode('f82f'); +$ti-icon-calendar-smile: unicode('fd1e'); +$ti-icon-calendar-star: unicode('f830'); +$ti-icon-calendar-stats: unicode('ee20'); +$ti-icon-calendar-time: unicode('ee21'); +$ti-icon-calendar-up: unicode('f831'); +$ti-icon-calendar-user: unicode('fd1f'); +$ti-icon-calendar-week: unicode('fd30'); +$ti-icon-calendar-x: unicode('f832'); +$ti-icon-camera: unicode('ea54'); +$ti-icon-camera-bolt: unicode('f833'); +$ti-icon-camera-cancel: unicode('f834'); +$ti-icon-camera-check: unicode('f835'); +$ti-icon-camera-code: unicode('f836'); +$ti-icon-camera-cog: unicode('f837'); +$ti-icon-camera-dollar: unicode('f838'); +$ti-icon-camera-down: unicode('f839'); +$ti-icon-camera-exclamation: unicode('f83a'); +$ti-icon-camera-filled: unicode('fa37'); +$ti-icon-camera-heart: unicode('f83b'); +$ti-icon-camera-minus: unicode('ec3a'); +$ti-icon-camera-off: unicode('ecee'); +$ti-icon-camera-pause: unicode('f83c'); +$ti-icon-camera-pin: unicode('f83d'); +$ti-icon-camera-plus: unicode('ec3b'); +$ti-icon-camera-question: unicode('f83e'); +$ti-icon-camera-rotate: unicode('ee22'); +$ti-icon-camera-search: unicode('f83f'); +$ti-icon-camera-selfie: unicode('ee23'); +$ti-icon-camera-share: unicode('f840'); +$ti-icon-camera-star: unicode('f841'); +$ti-icon-camera-up: unicode('f842'); +$ti-icon-camera-x: unicode('f843'); +$ti-icon-camper: unicode('fa25'); +$ti-icon-campfire: unicode('f5a7'); +$ti-icon-campfire-filled: unicode('fb28'); +$ti-icon-candle: unicode('efc6'); +$ti-icon-candle-filled: unicode('fc23'); +$ti-icon-candy: unicode('ef0d'); +$ti-icon-candy-off: unicode('f0c5'); +$ti-icon-cane: unicode('f50f'); +$ti-icon-cannabis: unicode('f4c1'); +$ti-icon-capsule: unicode('fae3'); +$ti-icon-capsule-filled: unicode('fc24'); +$ti-icon-capsule-horizontal: unicode('fae2'); +$ti-icon-capsule-horizontal-filled: unicode('fc25'); +$ti-icon-capture: unicode('ec3c'); +$ti-icon-capture-filled: unicode('fb29'); +$ti-icon-capture-off: unicode('f0c6'); +$ti-icon-car: unicode('ebbb'); +$ti-icon-car-4wd: unicode('fdb8'); +$ti-icon-car-crane: unicode('ef25'); +$ti-icon-car-crash: unicode('efa4'); +$ti-icon-car-fan: unicode('fdb3'); +$ti-icon-car-fan-1: unicode('fdb7'); +$ti-icon-car-fan-2: unicode('fdb6'); +$ti-icon-car-fan-3: unicode('fdb5'); +$ti-icon-car-fan-auto: unicode('fdb4'); +$ti-icon-car-garage: unicode('fc77'); +$ti-icon-car-off: unicode('f0c7'); +$ti-icon-car-suv: unicode('fc8b'); +$ti-icon-car-turbine: unicode('f4fd'); +$ti-icon-carambola: unicode('feb9'); +$ti-icon-caravan: unicode('ec7c'); +$ti-icon-cardboards: unicode('ed74'); +$ti-icon-cardboards-off: unicode('f0c8'); +$ti-icon-cards: unicode('f510'); +$ti-icon-cards-filled: unicode('fc26'); +$ti-icon-caret-down: unicode('eb5d'); +$ti-icon-caret-down-filled: unicode('fb2a'); +$ti-icon-caret-left: unicode('eb5e'); +$ti-icon-caret-left-filled: unicode('fb2b'); +$ti-icon-caret-left-right: unicode('fc43'); +$ti-icon-caret-left-right-filled: unicode('fd02'); +$ti-icon-caret-right: unicode('eb5f'); +$ti-icon-caret-right-filled: unicode('fb2c'); +$ti-icon-caret-up: unicode('eb60'); +$ti-icon-caret-up-down: unicode('fc44'); +$ti-icon-caret-up-down-filled: unicode('fd03'); +$ti-icon-caret-up-filled: unicode('fb2d'); +$ti-icon-carousel-horizontal: unicode('f659'); +$ti-icon-carousel-horizontal-filled: unicode('fa92'); +$ti-icon-carousel-vertical: unicode('f65a'); +$ti-icon-carousel-vertical-filled: unicode('fa93'); +$ti-icon-carrot: unicode('f21c'); +$ti-icon-carrot-off: unicode('f3d0'); +$ti-icon-cash: unicode('ea55'); +$ti-icon-cash-banknote: unicode('ee25'); +$ti-icon-cash-banknote-filled: unicode('fe80'); +$ti-icon-cash-banknote-off: unicode('ee24'); +$ti-icon-cash-off: unicode('f105'); +$ti-icon-cash-register: unicode('fee6'); +$ti-icon-cast: unicode('ea56'); +$ti-icon-cast-off: unicode('f0c9'); +$ti-icon-cat: unicode('f65b'); +$ti-icon-category: unicode('f1f6'); +$ti-icon-category-2: unicode('f1f5'); +$ti-icon-category-filled: unicode('fb2e'); +$ti-icon-category-minus: unicode('fd20'); +$ti-icon-category-plus: unicode('fd21'); +$ti-icon-ce: unicode('ed75'); +$ti-icon-ce-off: unicode('f0ca'); +$ti-icon-cell: unicode('f05f'); +$ti-icon-cell-signal-1: unicode('f083'); +$ti-icon-cell-signal-2: unicode('f084'); +$ti-icon-cell-signal-3: unicode('f085'); +$ti-icon-cell-signal-4: unicode('f086'); +$ti-icon-cell-signal-5: unicode('f087'); +$ti-icon-cell-signal-off: unicode('f088'); +$ti-icon-certificate: unicode('ed76'); +$ti-icon-certificate-2: unicode('f073'); +$ti-icon-certificate-2-off: unicode('f0cb'); +$ti-icon-certificate-off: unicode('f0cc'); +$ti-icon-chair-director: unicode('f2d5'); +$ti-icon-chalkboard: unicode('f34d'); +$ti-icon-chalkboard-off: unicode('f3d1'); +$ti-icon-charging-pile: unicode('ee26'); +$ti-icon-chart-arcs: unicode('ee28'); +$ti-icon-chart-arcs-3: unicode('ee27'); +$ti-icon-chart-area: unicode('ea58'); +$ti-icon-chart-area-filled: unicode('f66b'); +$ti-icon-chart-area-line: unicode('ea57'); +$ti-icon-chart-area-line-filled: unicode('f66c'); +$ti-icon-chart-arrows: unicode('ee2a'); +$ti-icon-chart-arrows-vertical: unicode('ee29'); +$ti-icon-chart-bar: unicode('ea59'); +$ti-icon-chart-bar-off: unicode('f3d2'); +$ti-icon-chart-bubble: unicode('ec75'); +$ti-icon-chart-bubble-filled: unicode('f66d'); +$ti-icon-chart-candle: unicode('ea5a'); +$ti-icon-chart-candle-filled: unicode('f66e'); +$ti-icon-chart-circles: unicode('ee2b'); +$ti-icon-chart-donut: unicode('ea5b'); +$ti-icon-chart-donut-2: unicode('ee2c'); +$ti-icon-chart-donut-3: unicode('ee2d'); +$ti-icon-chart-donut-4: unicode('ee2e'); +$ti-icon-chart-donut-filled: unicode('f66f'); +$ti-icon-chart-dots: unicode('ee2f'); +$ti-icon-chart-dots-2: unicode('f097'); +$ti-icon-chart-dots-3: unicode('f098'); +$ti-icon-chart-dots-filled: unicode('fd04'); +$ti-icon-chart-grid-dots: unicode('f4c2'); +$ti-icon-chart-grid-dots-filled: unicode('fd05'); +$ti-icon-chart-histogram: unicode('f65c'); +$ti-icon-chart-infographic: unicode('ee30'); +$ti-icon-chart-line: unicode('ea5c'); +$ti-icon-chart-pie: unicode('ea5d'); +$ti-icon-chart-pie-2: unicode('ee31'); +$ti-icon-chart-pie-3: unicode('ee32'); +$ti-icon-chart-pie-4: unicode('ee33'); +$ti-icon-chart-pie-filled: unicode('f670'); +$ti-icon-chart-pie-off: unicode('f3d3'); +$ti-icon-chart-ppf: unicode('f618'); +$ti-icon-chart-radar: unicode('ed77'); +$ti-icon-chart-sankey: unicode('f619'); +$ti-icon-chart-scatter: unicode('fd93'); +$ti-icon-chart-scatter-3d: unicode('fd92'); +$ti-icon-chart-treemap: unicode('f381'); +$ti-icon-check: unicode('ea5e'); +$ti-icon-checkbox: unicode('eba6'); +$ti-icon-checklist: unicode('f074'); +$ti-icon-checks: unicode('ebaa'); +$ti-icon-checkup-list: unicode('ef5a'); +$ti-icon-cheese: unicode('ef26'); +$ti-icon-chef-hat: unicode('f21d'); +$ti-icon-chef-hat-off: unicode('f3d4'); +$ti-icon-cherry: unicode('f511'); +$ti-icon-cherry-filled: unicode('f728'); +$ti-icon-chess: unicode('f382'); +$ti-icon-chess-bishop: unicode('f56b'); +$ti-icon-chess-bishop-filled: unicode('f729'); +$ti-icon-chess-filled: unicode('f72a'); +$ti-icon-chess-king: unicode('f56c'); +$ti-icon-chess-king-filled: unicode('f72b'); +$ti-icon-chess-knight: unicode('f56d'); +$ti-icon-chess-knight-filled: unicode('f72c'); +$ti-icon-chess-queen: unicode('f56e'); +$ti-icon-chess-queen-filled: unicode('f72d'); +$ti-icon-chess-rook: unicode('f56f'); +$ti-icon-chess-rook-filled: unicode('f72e'); +$ti-icon-chevron-compact-down: unicode('faf0'); +$ti-icon-chevron-compact-left: unicode('faf1'); +$ti-icon-chevron-compact-right: unicode('faf2'); +$ti-icon-chevron-compact-up: unicode('faf3'); +$ti-icon-chevron-down: unicode('ea5f'); +$ti-icon-chevron-down-left: unicode('ed09'); +$ti-icon-chevron-down-right: unicode('ed0a'); +$ti-icon-chevron-left: unicode('ea60'); +$ti-icon-chevron-left-pipe: unicode('fae4'); +$ti-icon-chevron-right: unicode('ea61'); +$ti-icon-chevron-right-pipe: unicode('fae5'); +$ti-icon-chevron-up: unicode('ea62'); +$ti-icon-chevron-up-left: unicode('ed0b'); +$ti-icon-chevron-up-right: unicode('ed0c'); +$ti-icon-chevrons-down: unicode('ea63'); +$ti-icon-chevrons-down-left: unicode('ed0d'); +$ti-icon-chevrons-down-right: unicode('ed0e'); +$ti-icon-chevrons-left: unicode('ea64'); +$ti-icon-chevrons-right: unicode('ea65'); +$ti-icon-chevrons-up: unicode('ea66'); +$ti-icon-chevrons-up-left: unicode('ed0f'); +$ti-icon-chevrons-up-right: unicode('ed10'); +$ti-icon-chisel: unicode('f383'); +$ti-icon-christmas-ball: unicode('fd31'); +$ti-icon-christmas-tree: unicode('ed78'); +$ti-icon-christmas-tree-off: unicode('f3d5'); +$ti-icon-circle: unicode('ea6b'); +$ti-icon-circle-arrow-down: unicode('f6f9'); +$ti-icon-circle-arrow-down-filled: unicode('f6f4'); +$ti-icon-circle-arrow-down-left: unicode('f6f6'); +$ti-icon-circle-arrow-down-left-filled: unicode('f6f5'); +$ti-icon-circle-arrow-down-right: unicode('f6f8'); +$ti-icon-circle-arrow-down-right-filled: unicode('f6f7'); +$ti-icon-circle-arrow-left: unicode('f6fb'); +$ti-icon-circle-arrow-left-filled: unicode('f6fa'); +$ti-icon-circle-arrow-right: unicode('f6fd'); +$ti-icon-circle-arrow-right-filled: unicode('f6fc'); +$ti-icon-circle-arrow-up: unicode('f703'); +$ti-icon-circle-arrow-up-filled: unicode('f6fe'); +$ti-icon-circle-arrow-up-left: unicode('f700'); +$ti-icon-circle-arrow-up-left-filled: unicode('f6ff'); +$ti-icon-circle-arrow-up-right: unicode('f702'); +$ti-icon-circle-arrow-up-right-filled: unicode('f701'); +$ti-icon-circle-caret-down: unicode('f4a9'); +$ti-icon-circle-caret-left: unicode('f4aa'); +$ti-icon-circle-caret-right: unicode('f4ab'); +$ti-icon-circle-caret-up: unicode('f4ac'); +$ti-icon-circle-check: unicode('ea67'); +$ti-icon-circle-check-filled: unicode('f704'); +$ti-icon-circle-chevron-down: unicode('f622'); +$ti-icon-circle-chevron-left: unicode('f623'); +$ti-icon-circle-chevron-right: unicode('f624'); +$ti-icon-circle-chevron-up: unicode('f625'); +$ti-icon-circle-chevrons-down: unicode('f642'); +$ti-icon-circle-chevrons-left: unicode('f643'); +$ti-icon-circle-chevrons-right: unicode('f644'); +$ti-icon-circle-chevrons-up: unicode('f645'); +$ti-icon-circle-dashed: unicode('ed27'); +$ti-icon-circle-dashed-check: unicode('feb8'); +$ti-icon-circle-dashed-minus: unicode('feb7'); +$ti-icon-circle-dashed-number-0: unicode('fc6b'); +$ti-icon-circle-dashed-number-1: unicode('fc6c'); +$ti-icon-circle-dashed-number-2: unicode('fc6d'); +$ti-icon-circle-dashed-number-3: unicode('fc6e'); +$ti-icon-circle-dashed-number-4: unicode('fc6f'); +$ti-icon-circle-dashed-number-5: unicode('fc70'); +$ti-icon-circle-dashed-number-6: unicode('fc71'); +$ti-icon-circle-dashed-number-7: unicode('fc72'); +$ti-icon-circle-dashed-number-8: unicode('fc73'); +$ti-icon-circle-dashed-number-9: unicode('fc74'); +$ti-icon-circle-dashed-percentage: unicode('fd7a'); +$ti-icon-circle-dashed-plus: unicode('feb6'); +$ti-icon-circle-dashed-x: unicode('fc75'); +$ti-icon-circle-dot: unicode('efb1'); +$ti-icon-circle-dot-filled: unicode('f705'); +$ti-icon-circle-dotted: unicode('ed28'); +$ti-icon-circle-filled: unicode('f671'); +$ti-icon-circle-half: unicode('ee3f'); +$ti-icon-circle-half-2: unicode('eff3'); +$ti-icon-circle-half-vertical: unicode('ee3e'); +$ti-icon-circle-key: unicode('f633'); +$ti-icon-circle-key-filled: unicode('f706'); +$ti-icon-circle-letter-a: unicode('f441'); +$ti-icon-circle-letter-a-filled: unicode('fe7f'); +$ti-icon-circle-letter-b: unicode('f442'); +$ti-icon-circle-letter-b-filled: unicode('fe7e'); +$ti-icon-circle-letter-c: unicode('f443'); +$ti-icon-circle-letter-c-filled: unicode('fe7d'); +$ti-icon-circle-letter-d: unicode('f444'); +$ti-icon-circle-letter-d-filled: unicode('fe7c'); +$ti-icon-circle-letter-e: unicode('f445'); +$ti-icon-circle-letter-e-filled: unicode('fe7b'); +$ti-icon-circle-letter-f: unicode('f446'); +$ti-icon-circle-letter-f-filled: unicode('fe7a'); +$ti-icon-circle-letter-g: unicode('f447'); +$ti-icon-circle-letter-g-filled: unicode('fe79'); +$ti-icon-circle-letter-h: unicode('f448'); +$ti-icon-circle-letter-h-filled: unicode('fe78'); +$ti-icon-circle-letter-i: unicode('f449'); +$ti-icon-circle-letter-i-filled: unicode('fe77'); +$ti-icon-circle-letter-j: unicode('f44a'); +$ti-icon-circle-letter-j-filled: unicode('fe76'); +$ti-icon-circle-letter-k: unicode('f44b'); +$ti-icon-circle-letter-k-filled: unicode('fe75'); +$ti-icon-circle-letter-l: unicode('f44c'); +$ti-icon-circle-letter-l-filled: unicode('fe74'); +$ti-icon-circle-letter-m: unicode('f44d'); +$ti-icon-circle-letter-m-filled: unicode('fe73'); +$ti-icon-circle-letter-n: unicode('f44e'); +$ti-icon-circle-letter-n-filled: unicode('fe72'); +$ti-icon-circle-letter-o: unicode('f44f'); +$ti-icon-circle-letter-o-filled: unicode('fe71'); +$ti-icon-circle-letter-p: unicode('f450'); +$ti-icon-circle-letter-p-filled: unicode('fe70'); +$ti-icon-circle-letter-q: unicode('f451'); +$ti-icon-circle-letter-q-filled: unicode('fe6f'); +$ti-icon-circle-letter-r: unicode('f452'); +$ti-icon-circle-letter-r-filled: unicode('fe6e'); +$ti-icon-circle-letter-s: unicode('f453'); +$ti-icon-circle-letter-s-filled: unicode('fe6d'); +$ti-icon-circle-letter-t: unicode('f454'); +$ti-icon-circle-letter-t-filled: unicode('fe6c'); +$ti-icon-circle-letter-u: unicode('f455'); +$ti-icon-circle-letter-u-filled: unicode('fe6b'); +$ti-icon-circle-letter-v: unicode('f4ad'); +$ti-icon-circle-letter-v-filled: unicode('fe6a'); +$ti-icon-circle-letter-w: unicode('f456'); +$ti-icon-circle-letter-w-filled: unicode('fe69'); +$ti-icon-circle-letter-x: unicode('f4ae'); +$ti-icon-circle-letter-x-filled: unicode('fe68'); +$ti-icon-circle-letter-y: unicode('f457'); +$ti-icon-circle-letter-y-filled: unicode('fe67'); +$ti-icon-circle-letter-z: unicode('f458'); +$ti-icon-circle-letter-z-filled: unicode('fe66'); +$ti-icon-circle-minus: unicode('ea68'); +$ti-icon-circle-minus-2: unicode('fc8c'); +$ti-icon-circle-number-0: unicode('ee34'); +$ti-icon-circle-number-0-filled: unicode('f72f'); +$ti-icon-circle-number-1: unicode('ee35'); +$ti-icon-circle-number-1-filled: unicode('f730'); +$ti-icon-circle-number-2: unicode('ee36'); +$ti-icon-circle-number-2-filled: unicode('f731'); +$ti-icon-circle-number-3: unicode('ee37'); +$ti-icon-circle-number-3-filled: unicode('f732'); +$ti-icon-circle-number-4: unicode('ee38'); +$ti-icon-circle-number-4-filled: unicode('f733'); +$ti-icon-circle-number-5: unicode('ee39'); +$ti-icon-circle-number-5-filled: unicode('f734'); +$ti-icon-circle-number-6: unicode('ee3a'); +$ti-icon-circle-number-6-filled: unicode('f735'); +$ti-icon-circle-number-7: unicode('ee3b'); +$ti-icon-circle-number-7-filled: unicode('f736'); +$ti-icon-circle-number-8: unicode('ee3c'); +$ti-icon-circle-number-8-filled: unicode('f737'); +$ti-icon-circle-number-9: unicode('ee3d'); +$ti-icon-circle-number-9-filled: unicode('f738'); +$ti-icon-circle-off: unicode('ee40'); +$ti-icon-circle-percentage: unicode('fd7b'); +$ti-icon-circle-percentage-filled: unicode('fed5'); +$ti-icon-circle-plus: unicode('ea69'); +$ti-icon-circle-plus-2: unicode('fc8d'); +$ti-icon-circle-rectangle: unicode('f010'); +$ti-icon-circle-rectangle-off: unicode('f0cd'); +$ti-icon-circle-square: unicode('ece4'); +$ti-icon-circle-triangle: unicode('f011'); +$ti-icon-circle-x: unicode('ea6a'); +$ti-icon-circle-x-filled: unicode('f739'); +$ti-icon-circles: unicode('ece5'); +$ti-icon-circles-filled: unicode('f672'); +$ti-icon-circles-relation: unicode('f4c3'); +$ti-icon-circuit-ammeter: unicode('f271'); +$ti-icon-circuit-battery: unicode('f272'); +$ti-icon-circuit-bulb: unicode('f273'); +$ti-icon-circuit-capacitor: unicode('f275'); +$ti-icon-circuit-capacitor-polarized: unicode('f274'); +$ti-icon-circuit-cell: unicode('f277'); +$ti-icon-circuit-cell-plus: unicode('f276'); +$ti-icon-circuit-changeover: unicode('f278'); +$ti-icon-circuit-diode: unicode('f27a'); +$ti-icon-circuit-diode-zener: unicode('f279'); +$ti-icon-circuit-ground: unicode('f27c'); +$ti-icon-circuit-ground-digital: unicode('f27b'); +$ti-icon-circuit-inductor: unicode('f27d'); +$ti-icon-circuit-motor: unicode('f27e'); +$ti-icon-circuit-pushbutton: unicode('f27f'); +$ti-icon-circuit-resistor: unicode('f280'); +$ti-icon-circuit-switch-closed: unicode('f281'); +$ti-icon-circuit-switch-open: unicode('f282'); +$ti-icon-circuit-voltmeter: unicode('f283'); +$ti-icon-clear-all: unicode('ee41'); +$ti-icon-clear-formatting: unicode('ebe5'); +$ti-icon-click: unicode('ebbc'); +$ti-icon-clipboard: unicode('ea6f'); +$ti-icon-clipboard-check: unicode('ea6c'); +$ti-icon-clipboard-copy: unicode('f299'); +$ti-icon-clipboard-data: unicode('f563'); +$ti-icon-clipboard-heart: unicode('f34e'); +$ti-icon-clipboard-list: unicode('ea6d'); +$ti-icon-clipboard-off: unicode('f0ce'); +$ti-icon-clipboard-plus: unicode('efb2'); +$ti-icon-clipboard-smile: unicode('fd9a'); +$ti-icon-clipboard-text: unicode('f089'); +$ti-icon-clipboard-typography: unicode('f34f'); +$ti-icon-clipboard-x: unicode('ea6e'); +$ti-icon-clock: unicode('ea70'); +$ti-icon-clock-12: unicode('fc56'); +$ti-icon-clock-2: unicode('f099'); +$ti-icon-clock-24: unicode('fc57'); +$ti-icon-clock-bolt: unicode('f844'); +$ti-icon-clock-cancel: unicode('f546'); +$ti-icon-clock-check: unicode('f7c1'); +$ti-icon-clock-code: unicode('f845'); +$ti-icon-clock-cog: unicode('f7c2'); +$ti-icon-clock-dollar: unicode('f846'); +$ti-icon-clock-down: unicode('f7c3'); +$ti-icon-clock-edit: unicode('f547'); +$ti-icon-clock-exclamation: unicode('f847'); +$ti-icon-clock-filled: unicode('f73a'); +$ti-icon-clock-heart: unicode('f7c4'); +$ti-icon-clock-hour-1: unicode('f313'); +$ti-icon-clock-hour-1-filled: unicode('fe65'); +$ti-icon-clock-hour-10: unicode('f314'); +$ti-icon-clock-hour-10-filled: unicode('fe64'); +$ti-icon-clock-hour-11: unicode('f315'); +$ti-icon-clock-hour-11-filled: unicode('fe63'); +$ti-icon-clock-hour-12: unicode('f316'); +$ti-icon-clock-hour-12-filled: unicode('fe62'); +$ti-icon-clock-hour-2: unicode('f317'); +$ti-icon-clock-hour-2-filled: unicode('fe61'); +$ti-icon-clock-hour-3: unicode('f318'); +$ti-icon-clock-hour-3-filled: unicode('fe60'); +$ti-icon-clock-hour-4: unicode('f319'); +$ti-icon-clock-hour-4-filled: unicode('fe5f'); +$ti-icon-clock-hour-5: unicode('f31a'); +$ti-icon-clock-hour-5-filled: unicode('fe5e'); +$ti-icon-clock-hour-6: unicode('f31b'); +$ti-icon-clock-hour-6-filled: unicode('fe5d'); +$ti-icon-clock-hour-7: unicode('f31c'); +$ti-icon-clock-hour-7-filled: unicode('fe5c'); +$ti-icon-clock-hour-8: unicode('f31d'); +$ti-icon-clock-hour-8-filled: unicode('fe5b'); +$ti-icon-clock-hour-9: unicode('f31e'); +$ti-icon-clock-hour-9-filled: unicode('fe5a'); +$ti-icon-clock-minus: unicode('f848'); +$ti-icon-clock-off: unicode('f0cf'); +$ti-icon-clock-pause: unicode('f548'); +$ti-icon-clock-pin: unicode('f849'); +$ti-icon-clock-play: unicode('f549'); +$ti-icon-clock-plus: unicode('f7c5'); +$ti-icon-clock-question: unicode('f7c6'); +$ti-icon-clock-record: unicode('f54a'); +$ti-icon-clock-search: unicode('f7c7'); +$ti-icon-clock-share: unicode('f84a'); +$ti-icon-clock-shield: unicode('f7c8'); +$ti-icon-clock-star: unicode('f7c9'); +$ti-icon-clock-stop: unicode('f54b'); +$ti-icon-clock-up: unicode('f7ca'); +$ti-icon-clock-x: unicode('f7cb'); +$ti-icon-clothes-rack: unicode('f285'); +$ti-icon-clothes-rack-off: unicode('f3d6'); +$ti-icon-cloud: unicode('ea76'); +$ti-icon-cloud-bolt: unicode('f84b'); +$ti-icon-cloud-cancel: unicode('f84c'); +$ti-icon-cloud-check: unicode('f84d'); +$ti-icon-cloud-code: unicode('f84e'); +$ti-icon-cloud-cog: unicode('f84f'); +$ti-icon-cloud-computing: unicode('f1d0'); +$ti-icon-cloud-data-connection: unicode('f1d1'); +$ti-icon-cloud-dollar: unicode('f850'); +$ti-icon-cloud-down: unicode('f851'); +$ti-icon-cloud-download: unicode('ea71'); +$ti-icon-cloud-exclamation: unicode('f852'); +$ti-icon-cloud-filled: unicode('f673'); +$ti-icon-cloud-fog: unicode('ecd9'); +$ti-icon-cloud-heart: unicode('f853'); +$ti-icon-cloud-lock: unicode('efdb'); +$ti-icon-cloud-lock-open: unicode('efda'); +$ti-icon-cloud-minus: unicode('f854'); +$ti-icon-cloud-network: unicode('fc78'); +$ti-icon-cloud-off: unicode('ed3e'); +$ti-icon-cloud-pause: unicode('f855'); +$ti-icon-cloud-pin: unicode('f856'); +$ti-icon-cloud-plus: unicode('f857'); +$ti-icon-cloud-question: unicode('f858'); +$ti-icon-cloud-rain: unicode('ea72'); +$ti-icon-cloud-search: unicode('f859'); +$ti-icon-cloud-share: unicode('f85a'); +$ti-icon-cloud-snow: unicode('ea73'); +$ti-icon-cloud-star: unicode('f85b'); +$ti-icon-cloud-storm: unicode('ea74'); +$ti-icon-cloud-up: unicode('f85c'); +$ti-icon-cloud-upload: unicode('ea75'); +$ti-icon-cloud-x: unicode('f85d'); +$ti-icon-clover: unicode('f1ea'); +$ti-icon-clover-2: unicode('f21e'); +$ti-icon-clubs: unicode('eff4'); +$ti-icon-clubs-filled: unicode('f674'); +$ti-icon-code: unicode('ea77'); +$ti-icon-code-asterisk: unicode('f312'); +$ti-icon-code-circle: unicode('f4ff'); +$ti-icon-code-circle-2: unicode('f4fe'); +$ti-icon-code-circle-2-filled: unicode('fed4'); +$ti-icon-code-circle-filled: unicode('fed3'); +$ti-icon-code-dots: unicode('f61a'); +$ti-icon-code-minus: unicode('ee42'); +$ti-icon-code-off: unicode('f0d0'); +$ti-icon-code-plus: unicode('ee43'); +$ti-icon-coffee: unicode('ef0e'); +$ti-icon-coffee-off: unicode('f106'); +$ti-icon-coffin: unicode('f579'); +$ti-icon-coin: unicode('eb82'); +$ti-icon-coin-bitcoin: unicode('f2be'); +$ti-icon-coin-bitcoin-filled: unicode('fd06'); +$ti-icon-coin-euro: unicode('f2bf'); +$ti-icon-coin-euro-filled: unicode('fd07'); +$ti-icon-coin-filled: unicode('fd08'); +$ti-icon-coin-monero: unicode('f4a0'); +$ti-icon-coin-monero-filled: unicode('fd09'); +$ti-icon-coin-off: unicode('f0d1'); +$ti-icon-coin-pound: unicode('f2c0'); +$ti-icon-coin-pound-filled: unicode('fd0a'); +$ti-icon-coin-rupee: unicode('f2c1'); +$ti-icon-coin-rupee-filled: unicode('fd0b'); +$ti-icon-coin-taka: unicode('fd0d'); +$ti-icon-coin-taka-filled: unicode('fd0c'); +$ti-icon-coin-yen: unicode('f2c2'); +$ti-icon-coin-yen-filled: unicode('fd0e'); +$ti-icon-coin-yuan: unicode('f2c3'); +$ti-icon-coin-yuan-filled: unicode('fd0f'); +$ti-icon-coins: unicode('f65d'); +$ti-icon-color-filter: unicode('f5a8'); +$ti-icon-color-picker: unicode('ebe6'); +$ti-icon-color-picker-off: unicode('f0d2'); +$ti-icon-color-swatch: unicode('eb61'); +$ti-icon-color-swatch-off: unicode('f0d3'); +$ti-icon-column-insert-left: unicode('ee44'); +$ti-icon-column-insert-right: unicode('ee45'); +$ti-icon-column-remove: unicode('faf4'); +$ti-icon-columns: unicode('eb83'); +$ti-icon-columns-1: unicode('f6d4'); +$ti-icon-columns-2: unicode('f6d5'); +$ti-icon-columns-3: unicode('f6d6'); +$ti-icon-columns-off: unicode('f0d4'); +$ti-icon-comet: unicode('ec76'); +$ti-icon-command: unicode('ea78'); +$ti-icon-command-off: unicode('f3d7'); +$ti-icon-compass: unicode('ea79'); +$ti-icon-compass-filled: unicode('fd10'); +$ti-icon-compass-off: unicode('f0d5'); +$ti-icon-components: unicode('efa5'); +$ti-icon-components-off: unicode('f0d6'); +$ti-icon-cone: unicode('efdd'); +$ti-icon-cone-2: unicode('efdc'); +$ti-icon-cone-2-filled: unicode('fe59'); +$ti-icon-cone-filled: unicode('fe58'); +$ti-icon-cone-off: unicode('f3d8'); +$ti-icon-cone-plus: unicode('fa94'); +$ti-icon-confetti: unicode('ee46'); +$ti-icon-confetti-off: unicode('f3d9'); +$ti-icon-confucius: unicode('f58a'); +$ti-icon-container: unicode('ee47'); +$ti-icon-container-off: unicode('f107'); +$ti-icon-contrast: unicode('ec4e'); +$ti-icon-contrast-2: unicode('efc7'); +$ti-icon-contrast-2-filled: unicode('fe57'); +$ti-icon-contrast-2-off: unicode('f3da'); +$ti-icon-contrast-filled: unicode('fe56'); +$ti-icon-contrast-off: unicode('f3db'); +$ti-icon-cooker: unicode('f57a'); +$ti-icon-cookie: unicode('fdb1'); +$ti-icon-cookie-filled: unicode('fe54'); +$ti-icon-cookie-man: unicode('fdb2'); +$ti-icon-cookie-man-filled: unicode('fe55'); +$ti-icon-cookie-off: unicode('f0d7'); +$ti-icon-copy: unicode('ea7a'); +$ti-icon-copy-check: unicode('fdb0'); +$ti-icon-copy-check-filled: unicode('fe53'); +$ti-icon-copy-minus: unicode('fdaf'); +$ti-icon-copy-minus-filled: unicode('fe52'); +$ti-icon-copy-off: unicode('f0d8'); +$ti-icon-copy-plus: unicode('fdae'); +$ti-icon-copy-plus-filled: unicode('fe51'); +$ti-icon-copy-x: unicode('fdad'); +$ti-icon-copy-x-filled: unicode('fe50'); +$ti-icon-copyleft: unicode('ec3d'); +$ti-icon-copyleft-filled: unicode('f73b'); +$ti-icon-copyleft-off: unicode('f0d9'); +$ti-icon-copyright: unicode('ea7b'); +$ti-icon-copyright-filled: unicode('f73c'); +$ti-icon-copyright-off: unicode('f0da'); +$ti-icon-corner-down-left: unicode('ea7c'); +$ti-icon-corner-down-left-double: unicode('ee48'); +$ti-icon-corner-down-right: unicode('ea7d'); +$ti-icon-corner-down-right-double: unicode('ee49'); +$ti-icon-corner-left-down: unicode('ea7e'); +$ti-icon-corner-left-down-double: unicode('ee4a'); +$ti-icon-corner-left-up: unicode('ea7f'); +$ti-icon-corner-left-up-double: unicode('ee4b'); +$ti-icon-corner-right-down: unicode('ea80'); +$ti-icon-corner-right-down-double: unicode('ee4c'); +$ti-icon-corner-right-up: unicode('ea81'); +$ti-icon-corner-right-up-double: unicode('ee4d'); +$ti-icon-corner-up-left: unicode('ea82'); +$ti-icon-corner-up-left-double: unicode('ee4e'); +$ti-icon-corner-up-right: unicode('ea83'); +$ti-icon-corner-up-right-double: unicode('ee4f'); +$ti-icon-cpu: unicode('ef8e'); +$ti-icon-cpu-2: unicode('f075'); +$ti-icon-cpu-off: unicode('f108'); +$ti-icon-crane: unicode('ef27'); +$ti-icon-crane-off: unicode('f109'); +$ti-icon-creative-commons: unicode('efb3'); +$ti-icon-creative-commons-by: unicode('f21f'); +$ti-icon-creative-commons-nc: unicode('f220'); +$ti-icon-creative-commons-nd: unicode('f221'); +$ti-icon-creative-commons-off: unicode('f10a'); +$ti-icon-creative-commons-sa: unicode('f222'); +$ti-icon-creative-commons-zero: unicode('f223'); +$ti-icon-credit-card: unicode('ea84'); +$ti-icon-credit-card-filled: unicode('fd11'); +$ti-icon-credit-card-off: unicode('ed11'); +$ti-icon-credit-card-pay: unicode('fd32'); +$ti-icon-credit-card-refund: unicode('fd33'); +$ti-icon-cricket: unicode('f09a'); +$ti-icon-crop: unicode('ea85'); +$ti-icon-crop-1-1: unicode('fd50'); +$ti-icon-crop-1-1-filled: unicode('fe4f'); +$ti-icon-crop-16-9: unicode('fd51'); +$ti-icon-crop-16-9-filled: unicode('fe4e'); +$ti-icon-crop-3-2: unicode('fd52'); +$ti-icon-crop-3-2-filled: unicode('fe4d'); +$ti-icon-crop-5-4: unicode('fd53'); +$ti-icon-crop-5-4-filled: unicode('fe4c'); +$ti-icon-crop-7-5: unicode('fd54'); +$ti-icon-crop-7-5-filled: unicode('fe4b'); +$ti-icon-crop-landscape: unicode('fd55'); +$ti-icon-crop-landscape-filled: unicode('fe4a'); +$ti-icon-crop-portrait: unicode('fd56'); +$ti-icon-crop-portrait-filled: unicode('fe49'); +$ti-icon-cross: unicode('ef8f'); +$ti-icon-cross-filled: unicode('f675'); +$ti-icon-cross-off: unicode('f10b'); +$ti-icon-crosshair: unicode('ec3e'); +$ti-icon-crown: unicode('ed12'); +$ti-icon-crown-off: unicode('ee50'); +$ti-icon-crutches: unicode('ef5b'); +$ti-icon-crutches-off: unicode('f10c'); +$ti-icon-crystal-ball: unicode('f57b'); +$ti-icon-csv: unicode('f791'); +$ti-icon-cube: unicode('fa97'); +$ti-icon-cube-3d-sphere: unicode('ecd7'); +$ti-icon-cube-3d-sphere-off: unicode('f3b5'); +$ti-icon-cube-off: unicode('fa95'); +$ti-icon-cube-plus: unicode('fa96'); +$ti-icon-cube-send: unicode('f61b'); +$ti-icon-cube-unfolded: unicode('f61c'); +$ti-icon-cup: unicode('ef28'); +$ti-icon-cup-off: unicode('f10d'); +$ti-icon-curling: unicode('efc8'); +$ti-icon-curly-loop: unicode('ecda'); +$ti-icon-currency: unicode('efa6'); +$ti-icon-currency-afghani: unicode('f65e'); +$ti-icon-currency-bahraini: unicode('ee51'); +$ti-icon-currency-baht: unicode('f08a'); +$ti-icon-currency-bitcoin: unicode('ebab'); +$ti-icon-currency-cent: unicode('ee53'); +$ti-icon-currency-dinar: unicode('ee54'); +$ti-icon-currency-dirham: unicode('ee55'); +$ti-icon-currency-dogecoin: unicode('ef4b'); +$ti-icon-currency-dollar: unicode('eb84'); +$ti-icon-currency-dollar-australian: unicode('ee56'); +$ti-icon-currency-dollar-brunei: unicode('f36c'); +$ti-icon-currency-dollar-canadian: unicode('ee57'); +$ti-icon-currency-dollar-guyanese: unicode('f36d'); +$ti-icon-currency-dollar-off: unicode('f3dc'); +$ti-icon-currency-dollar-singapore: unicode('ee58'); +$ti-icon-currency-dollar-zimbabwean: unicode('f36e'); +$ti-icon-currency-dong: unicode('f36f'); +$ti-icon-currency-dram: unicode('f370'); +$ti-icon-currency-ethereum: unicode('ee59'); +$ti-icon-currency-euro: unicode('eb85'); +$ti-icon-currency-euro-off: unicode('f3dd'); +$ti-icon-currency-florin: unicode('faf5'); +$ti-icon-currency-forint: unicode('ee5a'); +$ti-icon-currency-frank: unicode('ee5b'); +$ti-icon-currency-guarani: unicode('f371'); +$ti-icon-currency-hryvnia: unicode('f372'); +$ti-icon-currency-iranian-rial: unicode('fa58'); +$ti-icon-currency-kip: unicode('f373'); +$ti-icon-currency-krone-czech: unicode('ee5c'); +$ti-icon-currency-krone-danish: unicode('ee5d'); +$ti-icon-currency-krone-swedish: unicode('ee5e'); +$ti-icon-currency-lari: unicode('f374'); +$ti-icon-currency-leu: unicode('ee5f'); +$ti-icon-currency-lira: unicode('ee60'); +$ti-icon-currency-litecoin: unicode('ee61'); +$ti-icon-currency-lyd: unicode('f375'); +$ti-icon-currency-manat: unicode('f376'); +$ti-icon-currency-monero: unicode('f377'); +$ti-icon-currency-naira: unicode('ee62'); +$ti-icon-currency-nano: unicode('f7a6'); +$ti-icon-currency-off: unicode('f3de'); +$ti-icon-currency-paanga: unicode('f378'); +$ti-icon-currency-peso: unicode('f65f'); +$ti-icon-currency-pound: unicode('ebac'); +$ti-icon-currency-pound-off: unicode('f3df'); +$ti-icon-currency-quetzal: unicode('f379'); +$ti-icon-currency-real: unicode('ee63'); +$ti-icon-currency-renminbi: unicode('ee64'); +$ti-icon-currency-ripple: unicode('ee65'); +$ti-icon-currency-riyal: unicode('ee66'); +$ti-icon-currency-rubel: unicode('ee67'); +$ti-icon-currency-rufiyaa: unicode('f37a'); +$ti-icon-currency-rupee: unicode('ebad'); +$ti-icon-currency-rupee-nepalese: unicode('f37b'); +$ti-icon-currency-shekel: unicode('ee68'); +$ti-icon-currency-solana: unicode('f4a1'); +$ti-icon-currency-som: unicode('f37c'); +$ti-icon-currency-taka: unicode('ee69'); +$ti-icon-currency-tenge: unicode('f37d'); +$ti-icon-currency-tugrik: unicode('ee6a'); +$ti-icon-currency-won: unicode('ee6b'); +$ti-icon-currency-xrp: unicode('fd34'); +$ti-icon-currency-yen: unicode('ebae'); +$ti-icon-currency-yen-off: unicode('f3e0'); +$ti-icon-currency-yuan: unicode('f29a'); +$ti-icon-currency-zloty: unicode('ee6c'); +$ti-icon-current-location: unicode('ecef'); +$ti-icon-current-location-off: unicode('f10e'); +$ti-icon-cursor-off: unicode('f10f'); +$ti-icon-cursor-text: unicode('ee6d'); +$ti-icon-cut: unicode('ea86'); +$ti-icon-cylinder: unicode('f54c'); +$ti-icon-cylinder-off: unicode('fa98'); +$ti-icon-cylinder-plus: unicode('fa99'); +$ti-icon-dashboard: unicode('ea87'); +$ti-icon-dashboard-off: unicode('f3e1'); +$ti-icon-database: unicode('ea88'); +$ti-icon-database-cog: unicode('fa10'); +$ti-icon-database-dollar: unicode('fa11'); +$ti-icon-database-edit: unicode('fa12'); +$ti-icon-database-exclamation: unicode('fa13'); +$ti-icon-database-export: unicode('ee6e'); +$ti-icon-database-heart: unicode('fa14'); +$ti-icon-database-import: unicode('ee6f'); +$ti-icon-database-leak: unicode('fa15'); +$ti-icon-database-minus: unicode('fa16'); +$ti-icon-database-off: unicode('ee70'); +$ti-icon-database-plus: unicode('fa17'); +$ti-icon-database-search: unicode('fa18'); +$ti-icon-database-share: unicode('fa19'); +$ti-icon-database-smile: unicode('fd9b'); +$ti-icon-database-star: unicode('fa1a'); +$ti-icon-database-x: unicode('fa1b'); +$ti-icon-decimal: unicode('fa26'); +$ti-icon-deer: unicode('f4c5'); +$ti-icon-delta: unicode('f53c'); +$ti-icon-dental: unicode('f025'); +$ti-icon-dental-broken: unicode('f286'); +$ti-icon-dental-off: unicode('f110'); +$ti-icon-deselect: unicode('f9f3'); +$ti-icon-desk: unicode('fd35'); +$ti-icon-details: unicode('ee71'); +$ti-icon-details-off: unicode('f3e2'); +$ti-icon-device-airpods: unicode('f5a9'); +$ti-icon-device-airpods-case: unicode('f646'); +$ti-icon-device-airtag: unicode('fae6'); +$ti-icon-device-analytics: unicode('ee72'); +$ti-icon-device-audio-tape: unicode('ee73'); +$ti-icon-device-camera-phone: unicode('f233'); +$ti-icon-device-cctv: unicode('ee74'); +$ti-icon-device-cctv-off: unicode('f3e3'); +$ti-icon-device-computer-camera: unicode('ee76'); +$ti-icon-device-computer-camera-off: unicode('ee75'); +$ti-icon-device-desktop: unicode('ea89'); +$ti-icon-device-desktop-analytics: unicode('ee77'); +$ti-icon-device-desktop-bolt: unicode('f85e'); +$ti-icon-device-desktop-cancel: unicode('f85f'); +$ti-icon-device-desktop-check: unicode('f860'); +$ti-icon-device-desktop-code: unicode('f861'); +$ti-icon-device-desktop-cog: unicode('f862'); +$ti-icon-device-desktop-dollar: unicode('f863'); +$ti-icon-device-desktop-down: unicode('f864'); +$ti-icon-device-desktop-exclamation: unicode('f865'); +$ti-icon-device-desktop-heart: unicode('f866'); +$ti-icon-device-desktop-minus: unicode('f867'); +$ti-icon-device-desktop-off: unicode('ee78'); +$ti-icon-device-desktop-pause: unicode('f868'); +$ti-icon-device-desktop-pin: unicode('f869'); +$ti-icon-device-desktop-plus: unicode('f86a'); +$ti-icon-device-desktop-question: unicode('f86b'); +$ti-icon-device-desktop-search: unicode('f86c'); +$ti-icon-device-desktop-share: unicode('f86d'); +$ti-icon-device-desktop-star: unicode('f86e'); +$ti-icon-device-desktop-up: unicode('f86f'); +$ti-icon-device-desktop-x: unicode('f870'); +$ti-icon-device-floppy: unicode('eb62'); +$ti-icon-device-gamepad: unicode('eb63'); +$ti-icon-device-gamepad-2: unicode('f1d2'); +$ti-icon-device-gamepad-3: unicode('fc58'); +$ti-icon-device-heart-monitor: unicode('f060'); +$ti-icon-device-heart-monitor-filled: unicode('fa38'); +$ti-icon-device-imac: unicode('f7a7'); +$ti-icon-device-imac-bolt: unicode('f871'); +$ti-icon-device-imac-cancel: unicode('f872'); +$ti-icon-device-imac-check: unicode('f873'); +$ti-icon-device-imac-code: unicode('f874'); +$ti-icon-device-imac-cog: unicode('f875'); +$ti-icon-device-imac-dollar: unicode('f876'); +$ti-icon-device-imac-down: unicode('f877'); +$ti-icon-device-imac-exclamation: unicode('f878'); +$ti-icon-device-imac-heart: unicode('f879'); +$ti-icon-device-imac-minus: unicode('f87a'); +$ti-icon-device-imac-off: unicode('f87b'); +$ti-icon-device-imac-pause: unicode('f87c'); +$ti-icon-device-imac-pin: unicode('f87d'); +$ti-icon-device-imac-plus: unicode('f87e'); +$ti-icon-device-imac-question: unicode('f87f'); +$ti-icon-device-imac-search: unicode('f880'); +$ti-icon-device-imac-share: unicode('f881'); +$ti-icon-device-imac-star: unicode('f882'); +$ti-icon-device-imac-up: unicode('f883'); +$ti-icon-device-imac-x: unicode('f884'); +$ti-icon-device-ipad: unicode('f648'); +$ti-icon-device-ipad-bolt: unicode('f885'); +$ti-icon-device-ipad-cancel: unicode('f886'); +$ti-icon-device-ipad-check: unicode('f887'); +$ti-icon-device-ipad-code: unicode('f888'); +$ti-icon-device-ipad-cog: unicode('f889'); +$ti-icon-device-ipad-dollar: unicode('f88a'); +$ti-icon-device-ipad-down: unicode('f88b'); +$ti-icon-device-ipad-exclamation: unicode('f88c'); +$ti-icon-device-ipad-heart: unicode('f88d'); +$ti-icon-device-ipad-horizontal: unicode('f647'); +$ti-icon-device-ipad-horizontal-bolt: unicode('f88e'); +$ti-icon-device-ipad-horizontal-cancel: unicode('f88f'); +$ti-icon-device-ipad-horizontal-check: unicode('f890'); +$ti-icon-device-ipad-horizontal-code: unicode('f891'); +$ti-icon-device-ipad-horizontal-cog: unicode('f892'); +$ti-icon-device-ipad-horizontal-dollar: unicode('f893'); +$ti-icon-device-ipad-horizontal-down: unicode('f894'); +$ti-icon-device-ipad-horizontal-exclamation: unicode('f895'); +$ti-icon-device-ipad-horizontal-heart: unicode('f896'); +$ti-icon-device-ipad-horizontal-minus: unicode('f897'); +$ti-icon-device-ipad-horizontal-off: unicode('f898'); +$ti-icon-device-ipad-horizontal-pause: unicode('f899'); +$ti-icon-device-ipad-horizontal-pin: unicode('f89a'); +$ti-icon-device-ipad-horizontal-plus: unicode('f89b'); +$ti-icon-device-ipad-horizontal-question: unicode('f89c'); +$ti-icon-device-ipad-horizontal-search: unicode('f89d'); +$ti-icon-device-ipad-horizontal-share: unicode('f89e'); +$ti-icon-device-ipad-horizontal-star: unicode('f89f'); +$ti-icon-device-ipad-horizontal-up: unicode('f8a0'); +$ti-icon-device-ipad-horizontal-x: unicode('f8a1'); +$ti-icon-device-ipad-minus: unicode('f8a2'); +$ti-icon-device-ipad-off: unicode('f8a3'); +$ti-icon-device-ipad-pause: unicode('f8a4'); +$ti-icon-device-ipad-pin: unicode('f8a5'); +$ti-icon-device-ipad-plus: unicode('f8a6'); +$ti-icon-device-ipad-question: unicode('f8a7'); +$ti-icon-device-ipad-search: unicode('f8a8'); +$ti-icon-device-ipad-share: unicode('f8a9'); +$ti-icon-device-ipad-star: unicode('f8aa'); +$ti-icon-device-ipad-up: unicode('f8ab'); +$ti-icon-device-ipad-x: unicode('f8ac'); +$ti-icon-device-landline-phone: unicode('f649'); +$ti-icon-device-laptop: unicode('eb64'); +$ti-icon-device-laptop-off: unicode('f061'); +$ti-icon-device-mobile: unicode('ea8a'); +$ti-icon-device-mobile-bolt: unicode('f8ad'); +$ti-icon-device-mobile-cancel: unicode('f8ae'); +$ti-icon-device-mobile-charging: unicode('f224'); +$ti-icon-device-mobile-check: unicode('f8af'); +$ti-icon-device-mobile-code: unicode('f8b0'); +$ti-icon-device-mobile-cog: unicode('f8b1'); +$ti-icon-device-mobile-dollar: unicode('f8b2'); +$ti-icon-device-mobile-down: unicode('f8b3'); +$ti-icon-device-mobile-exclamation: unicode('f8b4'); +$ti-icon-device-mobile-filled: unicode('fa39'); +$ti-icon-device-mobile-heart: unicode('f8b5'); +$ti-icon-device-mobile-message: unicode('ee79'); +$ti-icon-device-mobile-minus: unicode('f8b6'); +$ti-icon-device-mobile-off: unicode('f062'); +$ti-icon-device-mobile-pause: unicode('f8b7'); +$ti-icon-device-mobile-pin: unicode('f8b8'); +$ti-icon-device-mobile-plus: unicode('f8b9'); +$ti-icon-device-mobile-question: unicode('f8ba'); +$ti-icon-device-mobile-rotated: unicode('ecdb'); +$ti-icon-device-mobile-search: unicode('f8bb'); +$ti-icon-device-mobile-share: unicode('f8bc'); +$ti-icon-device-mobile-star: unicode('f8bd'); +$ti-icon-device-mobile-up: unicode('f8be'); +$ti-icon-device-mobile-vibration: unicode('eb86'); +$ti-icon-device-mobile-x: unicode('f8bf'); +$ti-icon-device-nintendo: unicode('f026'); +$ti-icon-device-nintendo-off: unicode('f111'); +$ti-icon-device-projector: unicode('fc11'); +$ti-icon-device-remote: unicode('f792'); +$ti-icon-device-sd-card: unicode('f384'); +$ti-icon-device-sim: unicode('f4b2'); +$ti-icon-device-sim-1: unicode('f4af'); +$ti-icon-device-sim-2: unicode('f4b0'); +$ti-icon-device-sim-3: unicode('f4b1'); +$ti-icon-device-speaker: unicode('ea8b'); +$ti-icon-device-speaker-off: unicode('f112'); +$ti-icon-device-tablet: unicode('ea8c'); +$ti-icon-device-tablet-bolt: unicode('f8c0'); +$ti-icon-device-tablet-cancel: unicode('f8c1'); +$ti-icon-device-tablet-check: unicode('f8c2'); +$ti-icon-device-tablet-code: unicode('f8c3'); +$ti-icon-device-tablet-cog: unicode('f8c4'); +$ti-icon-device-tablet-dollar: unicode('f8c5'); +$ti-icon-device-tablet-down: unicode('f8c6'); +$ti-icon-device-tablet-exclamation: unicode('f8c7'); +$ti-icon-device-tablet-filled: unicode('fa3a'); +$ti-icon-device-tablet-heart: unicode('f8c8'); +$ti-icon-device-tablet-minus: unicode('f8c9'); +$ti-icon-device-tablet-off: unicode('f063'); +$ti-icon-device-tablet-pause: unicode('f8ca'); +$ti-icon-device-tablet-pin: unicode('f8cb'); +$ti-icon-device-tablet-plus: unicode('f8cc'); +$ti-icon-device-tablet-question: unicode('f8cd'); +$ti-icon-device-tablet-search: unicode('f8ce'); +$ti-icon-device-tablet-share: unicode('f8cf'); +$ti-icon-device-tablet-star: unicode('f8d0'); +$ti-icon-device-tablet-up: unicode('f8d1'); +$ti-icon-device-tablet-x: unicode('f8d2'); +$ti-icon-device-tv: unicode('ea8d'); +$ti-icon-device-tv-off: unicode('f064'); +$ti-icon-device-tv-old: unicode('f1d3'); +$ti-icon-device-usb: unicode('fc59'); +$ti-icon-device-vision-pro: unicode('fae7'); +$ti-icon-device-watch: unicode('ebf9'); +$ti-icon-device-watch-bolt: unicode('f8d3'); +$ti-icon-device-watch-cancel: unicode('f8d4'); +$ti-icon-device-watch-check: unicode('f8d5'); +$ti-icon-device-watch-code: unicode('f8d6'); +$ti-icon-device-watch-cog: unicode('f8d7'); +$ti-icon-device-watch-dollar: unicode('f8d8'); +$ti-icon-device-watch-down: unicode('f8d9'); +$ti-icon-device-watch-exclamation: unicode('f8da'); +$ti-icon-device-watch-heart: unicode('f8db'); +$ti-icon-device-watch-minus: unicode('f8dc'); +$ti-icon-device-watch-off: unicode('f065'); +$ti-icon-device-watch-pause: unicode('f8dd'); +$ti-icon-device-watch-pin: unicode('f8de'); +$ti-icon-device-watch-plus: unicode('f8df'); +$ti-icon-device-watch-question: unicode('f8e0'); +$ti-icon-device-watch-search: unicode('f8e1'); +$ti-icon-device-watch-share: unicode('f8e2'); +$ti-icon-device-watch-star: unicode('f8e3'); +$ti-icon-device-watch-stats: unicode('ef7d'); +$ti-icon-device-watch-stats-2: unicode('ef7c'); +$ti-icon-device-watch-up: unicode('f8e4'); +$ti-icon-device-watch-x: unicode('f8e5'); +$ti-icon-devices: unicode('eb87'); +$ti-icon-devices-2: unicode('ed29'); +$ti-icon-devices-bolt: unicode('f8e6'); +$ti-icon-devices-cancel: unicode('f8e7'); +$ti-icon-devices-check: unicode('f8e8'); +$ti-icon-devices-code: unicode('f8e9'); +$ti-icon-devices-cog: unicode('f8ea'); +$ti-icon-devices-dollar: unicode('f8eb'); +$ti-icon-devices-down: unicode('f8ec'); +$ti-icon-devices-exclamation: unicode('f8ed'); +$ti-icon-devices-heart: unicode('f8ee'); +$ti-icon-devices-minus: unicode('f8ef'); +$ti-icon-devices-off: unicode('f3e4'); +$ti-icon-devices-pause: unicode('f8f0'); +$ti-icon-devices-pc: unicode('ee7a'); +$ti-icon-devices-pc-off: unicode('f113'); +$ti-icon-devices-pin: unicode('f8f1'); +$ti-icon-devices-plus: unicode('f8f2'); +$ti-icon-devices-question: unicode('f8f3'); +$ti-icon-devices-search: unicode('f8f4'); +$ti-icon-devices-share: unicode('f8f5'); +$ti-icon-devices-star: unicode('f8f6'); +$ti-icon-devices-up: unicode('f8f7'); +$ti-icon-devices-x: unicode('f8f8'); +$ti-icon-diabolo: unicode('fa9c'); +$ti-icon-diabolo-off: unicode('fa9a'); +$ti-icon-diabolo-plus: unicode('fa9b'); +$ti-icon-dialpad: unicode('f067'); +$ti-icon-dialpad-filled: unicode('fa3b'); +$ti-icon-dialpad-off: unicode('f114'); +$ti-icon-diamond: unicode('eb65'); +$ti-icon-diamond-filled: unicode('f73d'); +$ti-icon-diamond-off: unicode('f115'); +$ti-icon-diamonds: unicode('eff5'); +$ti-icon-diamonds-filled: unicode('f676'); +$ti-icon-dice: unicode('eb66'); +$ti-icon-dice-1: unicode('f08b'); +$ti-icon-dice-1-filled: unicode('f73e'); +$ti-icon-dice-2: unicode('f08c'); +$ti-icon-dice-2-filled: unicode('f73f'); +$ti-icon-dice-3: unicode('f08d'); +$ti-icon-dice-3-filled: unicode('f740'); +$ti-icon-dice-4: unicode('f08e'); +$ti-icon-dice-4-filled: unicode('f741'); +$ti-icon-dice-5: unicode('f08f'); +$ti-icon-dice-5-filled: unicode('f742'); +$ti-icon-dice-6: unicode('f090'); +$ti-icon-dice-6-filled: unicode('f743'); +$ti-icon-dice-filled: unicode('f744'); +$ti-icon-dimensions: unicode('ee7b'); +$ti-icon-direction: unicode('ebfb'); +$ti-icon-direction-arrows: unicode('fd36'); +$ti-icon-direction-horizontal: unicode('ebfa'); +$ti-icon-direction-sign: unicode('f1f7'); +$ti-icon-direction-sign-filled: unicode('f745'); +$ti-icon-direction-sign-off: unicode('f3e5'); +$ti-icon-directions: unicode('ea8e'); +$ti-icon-directions-off: unicode('f116'); +$ti-icon-disabled: unicode('ea8f'); +$ti-icon-disabled-2: unicode('ebaf'); +$ti-icon-disabled-off: unicode('f117'); +$ti-icon-disc: unicode('ea90'); +$ti-icon-disc-golf: unicode('f385'); +$ti-icon-disc-off: unicode('f118'); +$ti-icon-discount: unicode('ebbd'); +$ti-icon-discount-off: unicode('f3e7'); +$ti-icon-divide: unicode('ed5c'); +$ti-icon-dna: unicode('ee7d'); +$ti-icon-dna-2: unicode('ef5c'); +$ti-icon-dna-2-off: unicode('f119'); +$ti-icon-dna-off: unicode('f11a'); +$ti-icon-dog: unicode('f660'); +$ti-icon-dog-bowl: unicode('ef29'); +$ti-icon-door: unicode('ef4e'); +$ti-icon-door-enter: unicode('ef4c'); +$ti-icon-door-exit: unicode('ef4d'); +$ti-icon-door-off: unicode('f11b'); +$ti-icon-dots: unicode('ea95'); +$ti-icon-dots-circle-horizontal: unicode('ea91'); +$ti-icon-dots-diagonal: unicode('ea93'); +$ti-icon-dots-diagonal-2: unicode('ea92'); +$ti-icon-dots-vertical: unicode('ea94'); +$ti-icon-download: unicode('ea96'); +$ti-icon-download-off: unicode('f11c'); +$ti-icon-drag-drop: unicode('eb89'); +$ti-icon-drag-drop-2: unicode('eb88'); +$ti-icon-drone: unicode('ed79'); +$ti-icon-drone-off: unicode('ee7e'); +$ti-icon-drop-circle: unicode('efde'); +$ti-icon-droplet: unicode('ea97'); +$ti-icon-droplet-bolt: unicode('f8f9'); +$ti-icon-droplet-cancel: unicode('f8fa'); +$ti-icon-droplet-check: unicode('f8fb'); +$ti-icon-droplet-code: unicode('f8fc'); +$ti-icon-droplet-cog: unicode('f8fd'); +$ti-icon-droplet-dollar: unicode('f8fe'); +$ti-icon-droplet-down: unicode('f8ff'); +$ti-icon-droplet-exclamation: unicode('f900'); +$ti-icon-droplet-filled: unicode('ee80'); +$ti-icon-droplet-half: unicode('ee82'); +$ti-icon-droplet-half-2: unicode('ee81'); +$ti-icon-droplet-half-2-filled: unicode('fb6c'); +$ti-icon-droplet-half-filled: unicode('f6c5'); +$ti-icon-droplet-heart: unicode('f901'); +$ti-icon-droplet-minus: unicode('f902'); +$ti-icon-droplet-off: unicode('ee83'); +$ti-icon-droplet-pause: unicode('f903'); +$ti-icon-droplet-pin: unicode('f904'); +$ti-icon-droplet-plus: unicode('f905'); +$ti-icon-droplet-question: unicode('f906'); +$ti-icon-droplet-search: unicode('f907'); +$ti-icon-droplet-share: unicode('f908'); +$ti-icon-droplet-star: unicode('f909'); +$ti-icon-droplet-up: unicode('f90a'); +$ti-icon-droplet-x: unicode('f90b'); +$ti-icon-droplets: unicode('fc12'); +$ti-icon-dual-screen: unicode('fa59'); +$ti-icon-dumpling: unicode('feb5'); +$ti-icon-e-passport: unicode('f4df'); +$ti-icon-ear: unicode('ebce'); +$ti-icon-ear-off: unicode('ee84'); +$ti-icon-ear-scan: unicode('fd57'); +$ti-icon-ease-in: unicode('f573'); +$ti-icon-ease-in-control-point: unicode('f570'); +$ti-icon-ease-in-out: unicode('f572'); +$ti-icon-ease-in-out-control-points: unicode('f571'); +$ti-icon-ease-out: unicode('f575'); +$ti-icon-ease-out-control-point: unicode('f574'); +$ti-icon-edit: unicode('ea98'); +$ti-icon-edit-circle: unicode('ee85'); +$ti-icon-edit-circle-off: unicode('f11d'); +$ti-icon-edit-off: unicode('f11e'); +$ti-icon-egg: unicode('eb8a'); +$ti-icon-egg-cracked: unicode('f2d6'); +$ti-icon-egg-filled: unicode('f678'); +$ti-icon-egg-fried: unicode('f386'); +$ti-icon-egg-off: unicode('f11f'); +$ti-icon-eggs: unicode('f500'); +$ti-icon-elevator: unicode('efdf'); +$ti-icon-elevator-off: unicode('f3e8'); +$ti-icon-emergency-bed: unicode('ef5d'); +$ti-icon-empathize: unicode('f29b'); +$ti-icon-empathize-off: unicode('f3e9'); +$ti-icon-emphasis: unicode('ebcf'); +$ti-icon-engine: unicode('ef7e'); +$ti-icon-engine-off: unicode('f120'); +$ti-icon-equal: unicode('ee87'); +$ti-icon-equal-double: unicode('f4e1'); +$ti-icon-equal-not: unicode('ee86'); +$ti-icon-eraser: unicode('eb8b'); +$ti-icon-eraser-off: unicode('f121'); +$ti-icon-error-404: unicode('f027'); +$ti-icon-error-404-off: unicode('f122'); +$ti-icon-escalator: unicode('fb06'); +$ti-icon-escalator-down: unicode('fb04'); +$ti-icon-escalator-up: unicode('fb05'); +$ti-icon-exchange: unicode('ebe7'); +$ti-icon-exchange-off: unicode('f123'); +$ti-icon-exclamation-circle: unicode('f634'); +$ti-icon-exclamation-mark: unicode('efb4'); +$ti-icon-exclamation-mark-off: unicode('f124'); +$ti-icon-explicit: unicode('f256'); +$ti-icon-explicit-off: unicode('f3ea'); +$ti-icon-exposure: unicode('eb8c'); +$ti-icon-exposure-0: unicode('f29c'); +$ti-icon-exposure-minus-1: unicode('f29d'); +$ti-icon-exposure-minus-2: unicode('f29e'); +$ti-icon-exposure-off: unicode('f3eb'); +$ti-icon-exposure-plus-1: unicode('f29f'); +$ti-icon-exposure-plus-2: unicode('f2a0'); +$ti-icon-external-link: unicode('ea99'); +$ti-icon-external-link-off: unicode('f125'); +$ti-icon-eye: unicode('ea9a'); +$ti-icon-eye-bolt: unicode('fb6d'); +$ti-icon-eye-cancel: unicode('fb6e'); +$ti-icon-eye-check: unicode('ee88'); +$ti-icon-eye-closed: unicode('f7ec'); +$ti-icon-eye-code: unicode('fb6f'); +$ti-icon-eye-cog: unicode('f7ed'); +$ti-icon-eye-discount: unicode('fb70'); +$ti-icon-eye-dollar: unicode('fb71'); +$ti-icon-eye-dotted: unicode('fead'); +$ti-icon-eye-down: unicode('fb72'); +$ti-icon-eye-edit: unicode('f7ee'); +$ti-icon-eye-exclamation: unicode('f7ef'); +$ti-icon-eye-filled: unicode('f679'); +$ti-icon-eye-heart: unicode('f7f0'); +$ti-icon-eye-minus: unicode('fb73'); +$ti-icon-eye-off: unicode('ecf0'); +$ti-icon-eye-pause: unicode('fb74'); +$ti-icon-eye-pin: unicode('fb75'); +$ti-icon-eye-plus: unicode('fb76'); +$ti-icon-eye-question: unicode('fb77'); +$ti-icon-eye-search: unicode('fb78'); +$ti-icon-eye-share: unicode('fb79'); +$ti-icon-eye-star: unicode('fb7a'); +$ti-icon-eye-table: unicode('ef5e'); +$ti-icon-eye-up: unicode('fb7b'); +$ti-icon-eye-x: unicode('f7f1'); +$ti-icon-eyeglass: unicode('ee8a'); +$ti-icon-eyeglass-2: unicode('ee89'); +$ti-icon-eyeglass-off: unicode('f126'); +$ti-icon-face-id: unicode('ea9b'); +$ti-icon-face-id-error: unicode('efa7'); +$ti-icon-face-mask: unicode('efb5'); +$ti-icon-face-mask-off: unicode('f127'); +$ti-icon-fall: unicode('ecb9'); +$ti-icon-favicon: unicode('fd65'); +$ti-icon-feather: unicode('ee8b'); +$ti-icon-feather-off: unicode('f128'); +$ti-icon-fence: unicode('ef2a'); +$ti-icon-fence-off: unicode('f129'); +$ti-icon-fidget-spinner: unicode('f068'); +$ti-icon-file: unicode('eaa4'); +$ti-icon-file-3d: unicode('f032'); +$ti-icon-file-alert: unicode('ede6'); +$ti-icon-file-analytics: unicode('ede7'); +$ti-icon-file-arrow-left: unicode('f033'); +$ti-icon-file-arrow-right: unicode('f034'); +$ti-icon-file-barcode: unicode('f035'); +$ti-icon-file-broken: unicode('f501'); +$ti-icon-file-certificate: unicode('ed4d'); +$ti-icon-file-chart: unicode('f036'); +$ti-icon-file-check: unicode('ea9c'); +$ti-icon-file-code: unicode('ebd0'); +$ti-icon-file-code-2: unicode('ede8'); +$ti-icon-file-cv: unicode('fa5a'); +$ti-icon-file-database: unicode('f037'); +$ti-icon-file-delta: unicode('f53d'); +$ti-icon-file-description: unicode('f028'); +$ti-icon-file-diff: unicode('ecf1'); +$ti-icon-file-digit: unicode('efa8'); +$ti-icon-file-dislike: unicode('ed2a'); +$ti-icon-file-dollar: unicode('efe0'); +$ti-icon-file-dots: unicode('f038'); +$ti-icon-file-download: unicode('ea9d'); +$ti-icon-file-euro: unicode('efe1'); +$ti-icon-file-export: unicode('ede9'); +$ti-icon-file-filled: unicode('f747'); +$ti-icon-file-function: unicode('f53e'); +$ti-icon-file-horizontal: unicode('ebb0'); +$ti-icon-file-import: unicode('edea'); +$ti-icon-file-infinity: unicode('f502'); +$ti-icon-file-info: unicode('edec'); +$ti-icon-file-invoice: unicode('eb67'); +$ti-icon-file-isr: unicode('feac'); +$ti-icon-file-lambda: unicode('f53f'); +$ti-icon-file-like: unicode('ed2b'); +$ti-icon-file-minus: unicode('ea9e'); +$ti-icon-file-music: unicode('ea9f'); +$ti-icon-file-neutral: unicode('fd22'); +$ti-icon-file-off: unicode('ecf2'); +$ti-icon-file-orientation: unicode('f2a1'); +$ti-icon-file-pencil: unicode('f039'); +$ti-icon-file-percent: unicode('f540'); +$ti-icon-file-phone: unicode('ecdc'); +$ti-icon-file-plus: unicode('eaa0'); +$ti-icon-file-power: unicode('f03a'); +$ti-icon-file-report: unicode('eded'); +$ti-icon-file-rss: unicode('f03b'); +$ti-icon-file-sad: unicode('fd23'); +$ti-icon-file-scissors: unicode('f03c'); +$ti-icon-file-search: unicode('ed5d'); +$ti-icon-file-settings: unicode('f029'); +$ti-icon-file-shredder: unicode('eaa1'); +$ti-icon-file-signal: unicode('f03d'); +$ti-icon-file-smile: unicode('fd24'); +$ti-icon-file-spreadsheet: unicode('f03e'); +$ti-icon-file-stack: unicode('f503'); +$ti-icon-file-star: unicode('f03f'); +$ti-icon-file-symlink: unicode('ed53'); +$ti-icon-file-text: unicode('eaa2'); +$ti-icon-file-text-ai: unicode('fa27'); +$ti-icon-file-time: unicode('f040'); +$ti-icon-file-type-bmp: unicode('fb07'); +$ti-icon-file-type-css: unicode('fb08'); +$ti-icon-file-type-csv: unicode('fb09'); +$ti-icon-file-type-doc: unicode('fb0a'); +$ti-icon-file-type-docx: unicode('fb0b'); +$ti-icon-file-type-html: unicode('fb0c'); +$ti-icon-file-type-jpg: unicode('fb0d'); +$ti-icon-file-type-js: unicode('fb0e'); +$ti-icon-file-type-jsx: unicode('fb0f'); +$ti-icon-file-type-pdf: unicode('fb10'); +$ti-icon-file-type-php: unicode('fb11'); +$ti-icon-file-type-png: unicode('fb12'); +$ti-icon-file-type-ppt: unicode('fb13'); +$ti-icon-file-type-rs: unicode('fb14'); +$ti-icon-file-type-sql: unicode('fb15'); +$ti-icon-file-type-svg: unicode('fb16'); +$ti-icon-file-type-ts: unicode('fb17'); +$ti-icon-file-type-tsx: unicode('fb18'); +$ti-icon-file-type-txt: unicode('fb19'); +$ti-icon-file-type-vue: unicode('fb1a'); +$ti-icon-file-type-xls: unicode('fb1b'); +$ti-icon-file-type-xml: unicode('fb1c'); +$ti-icon-file-type-zip: unicode('fb1d'); +$ti-icon-file-typography: unicode('f041'); +$ti-icon-file-unknown: unicode('f042'); +$ti-icon-file-upload: unicode('ec91'); +$ti-icon-file-vector: unicode('f043'); +$ti-icon-file-x: unicode('eaa3'); +$ti-icon-file-x-filled: unicode('f748'); +$ti-icon-file-zip: unicode('ed4e'); +$ti-icon-files: unicode('edef'); +$ti-icon-files-off: unicode('edee'); +$ti-icon-filter: unicode('eaa5'); +$ti-icon-filter-bolt: unicode('fb7c'); +$ti-icon-filter-cancel: unicode('fb7d'); +$ti-icon-filter-check: unicode('fb7e'); +$ti-icon-filter-code: unicode('fb7f'); +$ti-icon-filter-cog: unicode('f9fe'); +$ti-icon-filter-discount: unicode('fb80'); +$ti-icon-filter-dollar: unicode('f9ff'); +$ti-icon-filter-down: unicode('fb81'); +$ti-icon-filter-edit: unicode('fa00'); +$ti-icon-filter-exclamation: unicode('fb82'); +$ti-icon-filter-filled: unicode('fc27'); +$ti-icon-filter-heart: unicode('fb83'); +$ti-icon-filter-minus: unicode('fa01'); +$ti-icon-filter-off: unicode('ed2c'); +$ti-icon-filter-pause: unicode('fb84'); +$ti-icon-filter-pin: unicode('fb85'); +$ti-icon-filter-plus: unicode('fa02'); +$ti-icon-filter-question: unicode('fb86'); +$ti-icon-filter-search: unicode('fb87'); +$ti-icon-filter-share: unicode('fb88'); +$ti-icon-filter-star: unicode('fa03'); +$ti-icon-filter-up: unicode('fb89'); +$ti-icon-filter-x: unicode('fa04'); +$ti-icon-filters: unicode('f793'); +$ti-icon-fingerprint: unicode('ebd1'); +$ti-icon-fingerprint-off: unicode('f12a'); +$ti-icon-fingerprint-scan: unicode('fcb5'); +$ti-icon-fire-extinguisher: unicode('faf6'); +$ti-icon-fire-hydrant: unicode('f3a9'); +$ti-icon-fire-hydrant-off: unicode('f3ec'); +$ti-icon-firetruck: unicode('ebe8'); +$ti-icon-first-aid-kit: unicode('ef5f'); +$ti-icon-first-aid-kit-off: unicode('f3ed'); +$ti-icon-fish: unicode('ef2b'); +$ti-icon-fish-bone: unicode('f287'); +$ti-icon-fish-christianity: unicode('f58b'); +$ti-icon-fish-hook: unicode('f1f9'); +$ti-icon-fish-hook-off: unicode('f3ee'); +$ti-icon-fish-off: unicode('f12b'); +$ti-icon-flag: unicode('eaa6'); +$ti-icon-flag-2: unicode('ee8c'); +$ti-icon-flag-2-filled: unicode('f707'); +$ti-icon-flag-2-off: unicode('f12c'); +$ti-icon-flag-3: unicode('ee8d'); +$ti-icon-flag-3-filled: unicode('f708'); +$ti-icon-flag-bolt: unicode('fb8a'); +$ti-icon-flag-cancel: unicode('fb8b'); +$ti-icon-flag-check: unicode('fb8c'); +$ti-icon-flag-code: unicode('fb8d'); +$ti-icon-flag-cog: unicode('fb8e'); +$ti-icon-flag-discount: unicode('fb8f'); +$ti-icon-flag-dollar: unicode('fb90'); +$ti-icon-flag-down: unicode('fb91'); +$ti-icon-flag-exclamation: unicode('fb92'); +$ti-icon-flag-filled: unicode('f67a'); +$ti-icon-flag-heart: unicode('fb93'); +$ti-icon-flag-minus: unicode('fb94'); +$ti-icon-flag-off: unicode('f12d'); +$ti-icon-flag-pause: unicode('fb95'); +$ti-icon-flag-pin: unicode('fb96'); +$ti-icon-flag-plus: unicode('fb97'); +$ti-icon-flag-question: unicode('fb98'); +$ti-icon-flag-search: unicode('fb99'); +$ti-icon-flag-share: unicode('fb9a'); +$ti-icon-flag-star: unicode('fb9b'); +$ti-icon-flag-up: unicode('fb9c'); +$ti-icon-flag-x: unicode('fb9d'); +$ti-icon-flame: unicode('ec2c'); +$ti-icon-flame-off: unicode('f12e'); +$ti-icon-flare: unicode('ee8e'); +$ti-icon-flask: unicode('ebd2'); +$ti-icon-flask-2: unicode('ef60'); +$ti-icon-flask-2-filled: unicode('fd12'); +$ti-icon-flask-2-off: unicode('f12f'); +$ti-icon-flask-filled: unicode('fd13'); +$ti-icon-flask-off: unicode('f130'); +$ti-icon-flip-flops: unicode('f564'); +$ti-icon-flip-horizontal: unicode('eaa7'); +$ti-icon-flip-vertical: unicode('eaa8'); +$ti-icon-float-center: unicode('ebb1'); +$ti-icon-float-left: unicode('ebb2'); +$ti-icon-float-none: unicode('ed13'); +$ti-icon-float-right: unicode('ebb3'); +$ti-icon-flower: unicode('eff6'); +$ti-icon-flower-off: unicode('f131'); +$ti-icon-focus: unicode('eb8d'); +$ti-icon-focus-2: unicode('ebd3'); +$ti-icon-focus-auto: unicode('fa62'); +$ti-icon-focus-centered: unicode('f02a'); +$ti-icon-fold: unicode('ed56'); +$ti-icon-fold-down: unicode('ed54'); +$ti-icon-fold-up: unicode('ed55'); +$ti-icon-folder: unicode('eaad'); +$ti-icon-folder-bolt: unicode('f90c'); +$ti-icon-folder-cancel: unicode('f90d'); +$ti-icon-folder-check: unicode('f90e'); +$ti-icon-folder-code: unicode('f90f'); +$ti-icon-folder-cog: unicode('f910'); +$ti-icon-folder-dollar: unicode('f911'); +$ti-icon-folder-down: unicode('f912'); +$ti-icon-folder-exclamation: unicode('f913'); +$ti-icon-folder-filled: unicode('f749'); +$ti-icon-folder-heart: unicode('f914'); +$ti-icon-folder-minus: unicode('eaaa'); +$ti-icon-folder-off: unicode('ed14'); +$ti-icon-folder-open: unicode('faf7'); +$ti-icon-folder-pause: unicode('f915'); +$ti-icon-folder-pin: unicode('f916'); +$ti-icon-folder-plus: unicode('eaab'); +$ti-icon-folder-question: unicode('f917'); +$ti-icon-folder-root: unicode('fd43'); +$ti-icon-folder-search: unicode('f918'); +$ti-icon-folder-share: unicode('f919'); +$ti-icon-folder-star: unicode('f91a'); +$ti-icon-folder-symlink: unicode('f91b'); +$ti-icon-folder-up: unicode('f91c'); +$ti-icon-folder-x: unicode('eaac'); +$ti-icon-folders: unicode('eaae'); +$ti-icon-folders-off: unicode('f133'); +$ti-icon-forbid: unicode('ebd5'); +$ti-icon-forbid-2: unicode('ebd4'); +$ti-icon-forbid-2-filled: unicode('fc28'); +$ti-icon-forbid-filled: unicode('fc29'); +$ti-icon-forklift: unicode('ebe9'); +$ti-icon-forms: unicode('ee8f'); +$ti-icon-fountain: unicode('f09b'); +$ti-icon-fountain-filled: unicode('fc2a'); +$ti-icon-fountain-off: unicode('f134'); +$ti-icon-frame: unicode('eaaf'); +$ti-icon-frame-off: unicode('f135'); +$ti-icon-free-rights: unicode('efb6'); +$ti-icon-freeze-column: unicode('fa63'); +$ti-icon-freeze-row: unicode('fa65'); +$ti-icon-freeze-row-column: unicode('fa64'); +$ti-icon-fridge: unicode('f1fa'); +$ti-icon-fridge-off: unicode('f3ef'); +$ti-icon-friends: unicode('eab0'); +$ti-icon-friends-off: unicode('f136'); +$ti-icon-frustum: unicode('fa9f'); +$ti-icon-frustum-off: unicode('fa9d'); +$ti-icon-frustum-plus: unicode('fa9e'); +$ti-icon-function: unicode('f225'); +$ti-icon-function-filled: unicode('fc2b'); +$ti-icon-function-off: unicode('f3f0'); +$ti-icon-galaxy: unicode('fcb6'); +$ti-icon-garden-cart: unicode('f23e'); +$ti-icon-garden-cart-off: unicode('f3f1'); +$ti-icon-gas-station: unicode('ec7d'); +$ti-icon-gas-station-off: unicode('f137'); +$ti-icon-gauge: unicode('eab1'); +$ti-icon-gauge-filled: unicode('fc2c'); +$ti-icon-gauge-off: unicode('f138'); +$ti-icon-gavel: unicode('ef90'); +$ti-icon-gender-agender: unicode('f0e1'); +$ti-icon-gender-androgyne: unicode('f0e2'); +$ti-icon-gender-bigender: unicode('f0e3'); +$ti-icon-gender-demiboy: unicode('f0e4'); +$ti-icon-gender-demigirl: unicode('f0e5'); +$ti-icon-gender-epicene: unicode('f0e6'); +$ti-icon-gender-female: unicode('f0e7'); +$ti-icon-gender-femme: unicode('f0e8'); +$ti-icon-gender-genderfluid: unicode('f0e9'); +$ti-icon-gender-genderless: unicode('f0ea'); +$ti-icon-gender-genderqueer: unicode('f0eb'); +$ti-icon-gender-hermaphrodite: unicode('f0ec'); +$ti-icon-gender-intergender: unicode('f0ed'); +$ti-icon-gender-male: unicode('f0ee'); +$ti-icon-gender-neutrois: unicode('f0ef'); +$ti-icon-gender-third: unicode('f0f0'); +$ti-icon-gender-transgender: unicode('f0f1'); +$ti-icon-gender-trasvesti: unicode('f0f2'); +$ti-icon-geometry: unicode('ee90'); +$ti-icon-ghost: unicode('eb8e'); +$ti-icon-ghost-2: unicode('f57c'); +$ti-icon-ghost-2-filled: unicode('f74a'); +$ti-icon-ghost-3: unicode('fc13'); +$ti-icon-ghost-filled: unicode('f74b'); +$ti-icon-ghost-off: unicode('f3f2'); +$ti-icon-gif: unicode('f257'); +$ti-icon-gift: unicode('eb68'); +$ti-icon-gift-card: unicode('f3aa'); +$ti-icon-gift-card-filled: unicode('fc2d'); +$ti-icon-gift-filled: unicode('fd14'); +$ti-icon-gift-off: unicode('f3f3'); +$ti-icon-git-branch: unicode('eab2'); +$ti-icon-git-branch-deleted: unicode('f57d'); +$ti-icon-git-cherry-pick: unicode('f57e'); +$ti-icon-git-commit: unicode('eab3'); +$ti-icon-git-compare: unicode('eab4'); +$ti-icon-git-fork: unicode('eb8f'); +$ti-icon-git-merge: unicode('eab5'); +$ti-icon-git-pull-request: unicode('eab6'); +$ti-icon-git-pull-request-closed: unicode('ef7f'); +$ti-icon-git-pull-request-draft: unicode('efb7'); +$ti-icon-gizmo: unicode('f02b'); +$ti-icon-glass: unicode('eab8'); +$ti-icon-glass-champagne: unicode('fd9c'); +$ti-icon-glass-cocktail: unicode('fd9d'); +$ti-icon-glass-full: unicode('eab7'); +$ti-icon-glass-full-filled: unicode('fc2e'); +$ti-icon-glass-gin: unicode('fd9e'); +$ti-icon-glass-off: unicode('ee91'); +$ti-icon-globe: unicode('eab9'); +$ti-icon-globe-filled: unicode('fc2f'); +$ti-icon-globe-off: unicode('f139'); +$ti-icon-go-game: unicode('f512'); +$ti-icon-golf: unicode('ed8c'); +$ti-icon-golf-off: unicode('f13a'); +$ti-icon-gps: unicode('ed7a'); +$ti-icon-gps-filled: unicode('fe48'); +$ti-icon-gradienter: unicode('f3ab'); +$ti-icon-grain: unicode('ee92'); +$ti-icon-graph: unicode('f288'); +$ti-icon-graph-filled: unicode('fd15'); +$ti-icon-graph-off: unicode('f3f4'); +$ti-icon-grave: unicode('f580'); +$ti-icon-grave-2: unicode('f57f'); +$ti-icon-grid-3x3: unicode('fca4'); +$ti-icon-grid-4x4: unicode('fca5'); +$ti-icon-grid-dots: unicode('eaba'); +$ti-icon-grid-goldenratio: unicode('fca6'); +$ti-icon-grid-pattern: unicode('efc9'); +$ti-icon-grid-scan: unicode('fca7'); +$ti-icon-grill: unicode('efa9'); +$ti-icon-grill-fork: unicode('f35b'); +$ti-icon-grill-off: unicode('f3f5'); +$ti-icon-grill-spatula: unicode('f35c'); +$ti-icon-grip-horizontal: unicode('ec00'); +$ti-icon-grip-vertical: unicode('ec01'); +$ti-icon-growth: unicode('ee93'); +$ti-icon-guitar-pick: unicode('f4c6'); +$ti-icon-guitar-pick-filled: unicode('f67b'); +$ti-icon-gymnastics: unicode('fd44'); +$ti-icon-h-1: unicode('ec94'); +$ti-icon-h-2: unicode('ec95'); +$ti-icon-h-3: unicode('ec96'); +$ti-icon-h-4: unicode('ec97'); +$ti-icon-h-5: unicode('ec98'); +$ti-icon-h-6: unicode('ec99'); +$ti-icon-hammer: unicode('ef91'); +$ti-icon-hammer-off: unicode('f13c'); +$ti-icon-hand-click: unicode('ef4f'); +$ti-icon-hand-finger: unicode('ee94'); +$ti-icon-hand-finger-off: unicode('f13d'); +$ti-icon-hand-grab: unicode('f091'); +$ti-icon-hand-little-finger: unicode('ee95'); +$ti-icon-hand-love-you: unicode('ee97'); +$ti-icon-hand-middle-finger: unicode('ec2d'); +$ti-icon-hand-move: unicode('ef50'); +$ti-icon-hand-off: unicode('ed15'); +$ti-icon-hand-ring-finger: unicode('ee96'); +$ti-icon-hand-sanitizer: unicode('f5f4'); +$ti-icon-hand-stop: unicode('ec2e'); +$ti-icon-hand-three-fingers: unicode('ee98'); +$ti-icon-hand-two-fingers: unicode('ee99'); +$ti-icon-hanger: unicode('ee9a'); +$ti-icon-hanger-2: unicode('f09c'); +$ti-icon-hanger-off: unicode('f13e'); +$ti-icon-hash: unicode('eabc'); +$ti-icon-haze: unicode('efaa'); +$ti-icon-haze-moon: unicode('faf8'); +$ti-icon-hdr: unicode('fa7b'); +$ti-icon-heading: unicode('ee9b'); +$ti-icon-heading-off: unicode('f13f'); +$ti-icon-headphones: unicode('eabd'); +$ti-icon-headphones-filled: unicode('fa3c'); +$ti-icon-headphones-off: unicode('ed1d'); +$ti-icon-headset: unicode('eb90'); +$ti-icon-headset-off: unicode('f3f6'); +$ti-icon-health-recognition: unicode('f1fb'); +$ti-icon-heart: unicode('eabe'); +$ti-icon-heart-bolt: unicode('fb9e'); +$ti-icon-heart-broken: unicode('ecba'); +$ti-icon-heart-cancel: unicode('fb9f'); +$ti-icon-heart-check: unicode('fba0'); +$ti-icon-heart-code: unicode('fba1'); +$ti-icon-heart-cog: unicode('fba2'); +$ti-icon-heart-discount: unicode('fba3'); +$ti-icon-heart-dollar: unicode('fba4'); +$ti-icon-heart-down: unicode('fba5'); +$ti-icon-heart-exclamation: unicode('fba6'); +$ti-icon-heart-filled: unicode('f67c'); +$ti-icon-heart-handshake: unicode('f0f3'); +$ti-icon-heart-minus: unicode('f140'); +$ti-icon-heart-off: unicode('f141'); +$ti-icon-heart-pause: unicode('fba7'); +$ti-icon-heart-pin: unicode('fba8'); +$ti-icon-heart-plus: unicode('f142'); +$ti-icon-heart-question: unicode('fba9'); +$ti-icon-heart-rate-monitor: unicode('ef61'); +$ti-icon-heart-search: unicode('fbaa'); +$ti-icon-heart-share: unicode('fbab'); +$ti-icon-heart-star: unicode('fbac'); +$ti-icon-heart-up: unicode('fbad'); +$ti-icon-heart-x: unicode('fbae'); +$ti-icon-heartbeat: unicode('ef92'); +$ti-icon-hearts: unicode('f387'); +$ti-icon-hearts-off: unicode('f3f7'); +$ti-icon-helicopter: unicode('ed8e'); +$ti-icon-helicopter-landing: unicode('ed8d'); +$ti-icon-helmet: unicode('efca'); +$ti-icon-helmet-off: unicode('f143'); +$ti-icon-help: unicode('eabf'); +$ti-icon-help-circle: unicode('f91d'); +$ti-icon-help-circle-filled: unicode('fa3d'); +$ti-icon-help-hexagon: unicode('f7a8'); +$ti-icon-help-hexagon-filled: unicode('fa3e'); +$ti-icon-help-octagon: unicode('f7a9'); +$ti-icon-help-octagon-filled: unicode('fa3f'); +$ti-icon-help-off: unicode('f3f8'); +$ti-icon-help-small: unicode('f91e'); +$ti-icon-help-square: unicode('f920'); +$ti-icon-help-square-filled: unicode('fa40'); +$ti-icon-help-square-rounded: unicode('f91f'); +$ti-icon-help-square-rounded-filled: unicode('fa41'); +$ti-icon-help-triangle: unicode('f921'); +$ti-icon-help-triangle-filled: unicode('fa42'); +$ti-icon-hemisphere: unicode('faa2'); +$ti-icon-hemisphere-off: unicode('faa0'); +$ti-icon-hemisphere-plus: unicode('faa1'); +$ti-icon-hexagon: unicode('ec02'); +$ti-icon-hexagon-3d: unicode('f4c7'); +$ti-icon-hexagon-filled: unicode('f67d'); +$ti-icon-hexagon-letter-a: unicode('f463'); +$ti-icon-hexagon-letter-a-filled: unicode('fe47'); +$ti-icon-hexagon-letter-b: unicode('f464'); +$ti-icon-hexagon-letter-b-filled: unicode('fe46'); +$ti-icon-hexagon-letter-c: unicode('f465'); +$ti-icon-hexagon-letter-c-filled: unicode('fe45'); +$ti-icon-hexagon-letter-d: unicode('f466'); +$ti-icon-hexagon-letter-d-filled: unicode('fe44'); +$ti-icon-hexagon-letter-e: unicode('f467'); +$ti-icon-hexagon-letter-e-filled: unicode('fe43'); +$ti-icon-hexagon-letter-f: unicode('f468'); +$ti-icon-hexagon-letter-f-filled: unicode('fe42'); +$ti-icon-hexagon-letter-g: unicode('f469'); +$ti-icon-hexagon-letter-g-filled: unicode('fe41'); +$ti-icon-hexagon-letter-h: unicode('f46a'); +$ti-icon-hexagon-letter-h-filled: unicode('fe40'); +$ti-icon-hexagon-letter-i: unicode('f46b'); +$ti-icon-hexagon-letter-i-filled: unicode('fe3f'); +$ti-icon-hexagon-letter-j: unicode('f46c'); +$ti-icon-hexagon-letter-j-filled: unicode('fe3e'); +$ti-icon-hexagon-letter-k: unicode('f46d'); +$ti-icon-hexagon-letter-k-filled: unicode('fe3d'); +$ti-icon-hexagon-letter-l: unicode('f46e'); +$ti-icon-hexagon-letter-l-filled: unicode('fe3c'); +$ti-icon-hexagon-letter-m: unicode('f46f'); +$ti-icon-hexagon-letter-m-filled: unicode('fe3b'); +$ti-icon-hexagon-letter-n: unicode('f470'); +$ti-icon-hexagon-letter-n-filled: unicode('fe3a'); +$ti-icon-hexagon-letter-o: unicode('f471'); +$ti-icon-hexagon-letter-o-filled: unicode('fe39'); +$ti-icon-hexagon-letter-p: unicode('f472'); +$ti-icon-hexagon-letter-p-filled: unicode('fe38'); +$ti-icon-hexagon-letter-q: unicode('f473'); +$ti-icon-hexagon-letter-q-filled: unicode('fe37'); +$ti-icon-hexagon-letter-r: unicode('f474'); +$ti-icon-hexagon-letter-r-filled: unicode('fe36'); +$ti-icon-hexagon-letter-s: unicode('f475'); +$ti-icon-hexagon-letter-s-filled: unicode('fe35'); +$ti-icon-hexagon-letter-t: unicode('f476'); +$ti-icon-hexagon-letter-t-filled: unicode('fe34'); +$ti-icon-hexagon-letter-u: unicode('f477'); +$ti-icon-hexagon-letter-u-filled: unicode('fe33'); +$ti-icon-hexagon-letter-v: unicode('f4b3'); +$ti-icon-hexagon-letter-v-filled: unicode('fe32'); +$ti-icon-hexagon-letter-w: unicode('f478'); +$ti-icon-hexagon-letter-w-filled: unicode('fe31'); +$ti-icon-hexagon-letter-x: unicode('f479'); +$ti-icon-hexagon-letter-x-filled: unicode('fe30'); +$ti-icon-hexagon-letter-y: unicode('f47a'); +$ti-icon-hexagon-letter-y-filled: unicode('fe2f'); +$ti-icon-hexagon-letter-z: unicode('f47b'); +$ti-icon-hexagon-letter-z-filled: unicode('fe2e'); +$ti-icon-hexagon-minus: unicode('fc8f'); +$ti-icon-hexagon-minus-2: unicode('fc8e'); +$ti-icon-hexagon-minus-filled: unicode('fe2d'); +$ti-icon-hexagon-number-0: unicode('f459'); +$ti-icon-hexagon-number-0-filled: unicode('f74c'); +$ti-icon-hexagon-number-1: unicode('f45a'); +$ti-icon-hexagon-number-1-filled: unicode('f74d'); +$ti-icon-hexagon-number-2: unicode('f45b'); +$ti-icon-hexagon-number-2-filled: unicode('f74e'); +$ti-icon-hexagon-number-3: unicode('f45c'); +$ti-icon-hexagon-number-3-filled: unicode('f74f'); +$ti-icon-hexagon-number-4: unicode('f45d'); +$ti-icon-hexagon-number-4-filled: unicode('f750'); +$ti-icon-hexagon-number-5: unicode('f45e'); +$ti-icon-hexagon-number-5-filled: unicode('f751'); +$ti-icon-hexagon-number-6: unicode('f45f'); +$ti-icon-hexagon-number-6-filled: unicode('f752'); +$ti-icon-hexagon-number-7: unicode('f460'); +$ti-icon-hexagon-number-7-filled: unicode('f753'); +$ti-icon-hexagon-number-8: unicode('f461'); +$ti-icon-hexagon-number-8-filled: unicode('f754'); +$ti-icon-hexagon-number-9: unicode('f462'); +$ti-icon-hexagon-number-9-filled: unicode('f755'); +$ti-icon-hexagon-off: unicode('ee9c'); +$ti-icon-hexagon-plus: unicode('fc45'); +$ti-icon-hexagon-plus-2: unicode('fc90'); +$ti-icon-hexagon-plus-filled: unicode('fe2c'); +$ti-icon-hexagonal-prism: unicode('faa5'); +$ti-icon-hexagonal-prism-off: unicode('faa3'); +$ti-icon-hexagonal-prism-plus: unicode('faa4'); +$ti-icon-hexagonal-pyramid: unicode('faa8'); +$ti-icon-hexagonal-pyramid-off: unicode('faa6'); +$ti-icon-hexagonal-pyramid-plus: unicode('faa7'); +$ti-icon-hexagons: unicode('f09d'); +$ti-icon-hexagons-off: unicode('f3f9'); +$ti-icon-hierarchy: unicode('ee9e'); +$ti-icon-hierarchy-2: unicode('ee9d'); +$ti-icon-hierarchy-3: unicode('f289'); +$ti-icon-hierarchy-off: unicode('f3fa'); +$ti-icon-highlight: unicode('ef3f'); +$ti-icon-highlight-off: unicode('f144'); +$ti-icon-history: unicode('ebea'); +$ti-icon-history-off: unicode('f3fb'); +$ti-icon-history-toggle: unicode('f1fc'); +$ti-icon-home: unicode('eac1'); +$ti-icon-home-2: unicode('eac0'); +$ti-icon-home-bolt: unicode('f336'); +$ti-icon-home-cancel: unicode('f350'); +$ti-icon-home-check: unicode('f337'); +$ti-icon-home-cog: unicode('f338'); +$ti-icon-home-dollar: unicode('f339'); +$ti-icon-home-dot: unicode('f33a'); +$ti-icon-home-down: unicode('f33b'); +$ti-icon-home-eco: unicode('f351'); +$ti-icon-home-edit: unicode('f352'); +$ti-icon-home-exclamation: unicode('f33c'); +$ti-icon-home-filled: unicode('fe2b'); +$ti-icon-home-hand: unicode('f504'); +$ti-icon-home-heart: unicode('f353'); +$ti-icon-home-infinity: unicode('f505'); +$ti-icon-home-link: unicode('f354'); +$ti-icon-home-minus: unicode('f33d'); +$ti-icon-home-move: unicode('f33e'); +$ti-icon-home-off: unicode('f145'); +$ti-icon-home-plus: unicode('f33f'); +$ti-icon-home-question: unicode('f340'); +$ti-icon-home-ribbon: unicode('f355'); +$ti-icon-home-search: unicode('f341'); +$ti-icon-home-share: unicode('f342'); +$ti-icon-home-shield: unicode('f343'); +$ti-icon-home-signal: unicode('f356'); +$ti-icon-home-star: unicode('f344'); +$ti-icon-home-stats: unicode('f345'); +$ti-icon-home-up: unicode('f346'); +$ti-icon-home-x: unicode('f347'); +$ti-icon-horse: unicode('fc46'); +$ti-icon-horse-toy: unicode('f28a'); +$ti-icon-horseshoe: unicode('fcb7'); +$ti-icon-hospital: unicode('fd59'); +$ti-icon-hospital-circle: unicode('fd58'); +$ti-icon-hospital-circle-filled: unicode('fed2'); +$ti-icon-hotel-service: unicode('ef80'); +$ti-icon-hourglass: unicode('ef93'); +$ti-icon-hourglass-empty: unicode('f146'); +$ti-icon-hourglass-filled: unicode('f756'); +$ti-icon-hourglass-high: unicode('f092'); +$ti-icon-hourglass-low: unicode('f093'); +$ti-icon-hourglass-off: unicode('f147'); +$ti-icon-hours-12: unicode('fc53'); +$ti-icon-hours-24: unicode('f5e7'); +$ti-icon-html: unicode('f7b1'); +$ti-icon-http-connect: unicode('fa28'); +$ti-icon-http-delete: unicode('fa29'); +$ti-icon-http-get: unicode('fa2a'); +$ti-icon-http-head: unicode('fa2b'); +$ti-icon-http-options: unicode('fa2c'); +$ti-icon-http-patch: unicode('fa2d'); +$ti-icon-http-post: unicode('fa2e'); +$ti-icon-http-put: unicode('fa2f'); +$ti-icon-http-que: unicode('fa5b'); +$ti-icon-http-trace: unicode('fa30'); +$ti-icon-ice-cream: unicode('eac2'); +$ti-icon-ice-cream-2: unicode('ee9f'); +$ti-icon-ice-cream-off: unicode('f148'); +$ti-icon-ice-skating: unicode('efcb'); +$ti-icon-icons: unicode('f1d4'); +$ti-icon-icons-off: unicode('f3fc'); +$ti-icon-id: unicode('eac3'); +$ti-icon-id-badge: unicode('eff7'); +$ti-icon-id-badge-2: unicode('f076'); +$ti-icon-id-badge-off: unicode('f3fd'); +$ti-icon-id-off: unicode('f149'); +$ti-icon-ikosaedr: unicode('fec6'); +$ti-icon-image-in-picture: unicode('fd9f'); +$ti-icon-inbox: unicode('eac4'); +$ti-icon-inbox-off: unicode('f14a'); +$ti-icon-indent-decrease: unicode('eb91'); +$ti-icon-indent-increase: unicode('eb92'); +$ti-icon-infinity: unicode('eb69'); +$ti-icon-infinity-off: unicode('f3fe'); +$ti-icon-info-circle: unicode('eac5'); +$ti-icon-info-circle-filled: unicode('f6d8'); +$ti-icon-info-hexagon: unicode('f7aa'); +$ti-icon-info-hexagon-filled: unicode('fa43'); +$ti-icon-info-octagon: unicode('f7ab'); +$ti-icon-info-octagon-filled: unicode('fa44'); +$ti-icon-info-small: unicode('f922'); +$ti-icon-info-square: unicode('eac6'); +$ti-icon-info-square-filled: unicode('fa45'); +$ti-icon-info-square-rounded: unicode('f635'); +$ti-icon-info-square-rounded-filled: unicode('f6d9'); +$ti-icon-info-triangle: unicode('f923'); +$ti-icon-info-triangle-filled: unicode('fa46'); +$ti-icon-inner-shadow-bottom: unicode('f520'); +$ti-icon-inner-shadow-bottom-filled: unicode('f757'); +$ti-icon-inner-shadow-bottom-left: unicode('f51e'); +$ti-icon-inner-shadow-bottom-left-filled: unicode('f758'); +$ti-icon-inner-shadow-bottom-right: unicode('f51f'); +$ti-icon-inner-shadow-bottom-right-filled: unicode('f759'); +$ti-icon-inner-shadow-left: unicode('f521'); +$ti-icon-inner-shadow-left-filled: unicode('f75a'); +$ti-icon-inner-shadow-right: unicode('f522'); +$ti-icon-inner-shadow-right-filled: unicode('f75b'); +$ti-icon-inner-shadow-top: unicode('f525'); +$ti-icon-inner-shadow-top-filled: unicode('f75c'); +$ti-icon-inner-shadow-top-left: unicode('f523'); +$ti-icon-inner-shadow-top-left-filled: unicode('f75d'); +$ti-icon-inner-shadow-top-right: unicode('f524'); +$ti-icon-inner-shadow-top-right-filled: unicode('f75e'); +$ti-icon-input-ai: unicode('fc5a'); +$ti-icon-input-check: unicode('fc5b'); +$ti-icon-input-search: unicode('f2a2'); +$ti-icon-input-x: unicode('fc5c'); +$ti-icon-invoice: unicode('feab'); +$ti-icon-ironing: unicode('fa7c'); +$ti-icon-ironing-1: unicode('f2f4'); +$ti-icon-ironing-2: unicode('f2f5'); +$ti-icon-ironing-3: unicode('f2f6'); +$ti-icon-ironing-filled: unicode('fe2a'); +$ti-icon-ironing-off: unicode('f2f7'); +$ti-icon-ironing-steam: unicode('f2f9'); +$ti-icon-ironing-steam-off: unicode('f2f8'); +$ti-icon-irregular-polyhedron: unicode('faab'); +$ti-icon-irregular-polyhedron-off: unicode('faa9'); +$ti-icon-irregular-polyhedron-plus: unicode('faaa'); +$ti-icon-italic: unicode('eb93'); +$ti-icon-jacket: unicode('f661'); +$ti-icon-jetpack: unicode('f581'); +$ti-icon-jetpack-filled: unicode('fe29'); +$ti-icon-jewish-star: unicode('f3ff'); +$ti-icon-jewish-star-filled: unicode('f67e'); +$ti-icon-jpg: unicode('f3ac'); +$ti-icon-json: unicode('f7b2'); +$ti-icon-jump-rope: unicode('ed8f'); +$ti-icon-karate: unicode('ed32'); +$ti-icon-kayak: unicode('f1d6'); +$ti-icon-kerning: unicode('efb8'); +$ti-icon-key: unicode('eac7'); +$ti-icon-key-filled: unicode('fe28'); +$ti-icon-key-off: unicode('f14b'); +$ti-icon-keyboard: unicode('ebd6'); +$ti-icon-keyboard-hide: unicode('ec7e'); +$ti-icon-keyboard-off: unicode('eea0'); +$ti-icon-keyboard-show: unicode('ec7f'); +$ti-icon-keyframe: unicode('f576'); +$ti-icon-keyframe-align-center: unicode('f582'); +$ti-icon-keyframe-align-center-filled: unicode('fc30'); +$ti-icon-keyframe-align-horizontal: unicode('f583'); +$ti-icon-keyframe-align-horizontal-filled: unicode('fc31'); +$ti-icon-keyframe-align-vertical: unicode('f584'); +$ti-icon-keyframe-align-vertical-filled: unicode('fc32'); +$ti-icon-keyframe-filled: unicode('fc33'); +$ti-icon-keyframes: unicode('f585'); +$ti-icon-keyframes-filled: unicode('fc34'); +$ti-icon-ladder: unicode('efe2'); +$ti-icon-ladder-off: unicode('f14c'); +$ti-icon-ladle: unicode('fc14'); +$ti-icon-lambda: unicode('f541'); +$ti-icon-lamp: unicode('efab'); +$ti-icon-lamp-2: unicode('f09e'); +$ti-icon-lamp-off: unicode('f14d'); +$ti-icon-lane: unicode('faf9'); +$ti-icon-language: unicode('ebbe'); +$ti-icon-language-hiragana: unicode('ef77'); +$ti-icon-language-katakana: unicode('ef78'); +$ti-icon-language-off: unicode('f14e'); +$ti-icon-lasso: unicode('efac'); +$ti-icon-lasso-off: unicode('f14f'); +$ti-icon-lasso-polygon: unicode('f388'); +$ti-icon-layers-difference: unicode('eac8'); +$ti-icon-layers-intersect: unicode('eac9'); +$ti-icon-layers-intersect-2: unicode('eff8'); +$ti-icon-layers-linked: unicode('eea1'); +$ti-icon-layers-off: unicode('f150'); +$ti-icon-layers-selected: unicode('fea9'); +$ti-icon-layers-selected-bottom: unicode('feaa'); +$ti-icon-layers-subtract: unicode('eaca'); +$ti-icon-layers-union: unicode('eacb'); +$ti-icon-layout: unicode('eadb'); +$ti-icon-layout-2: unicode('eacc'); +$ti-icon-layout-2-filled: unicode('fe27'); +$ti-icon-layout-align-bottom: unicode('eacd'); +$ti-icon-layout-align-bottom-filled: unicode('fe26'); +$ti-icon-layout-align-center: unicode('eace'); +$ti-icon-layout-align-center-filled: unicode('fe25'); +$ti-icon-layout-align-left: unicode('eacf'); +$ti-icon-layout-align-left-filled: unicode('fe24'); +$ti-icon-layout-align-middle: unicode('ead0'); +$ti-icon-layout-align-middle-filled: unicode('fe23'); +$ti-icon-layout-align-right: unicode('ead1'); +$ti-icon-layout-align-right-filled: unicode('fe22'); +$ti-icon-layout-align-top: unicode('ead2'); +$ti-icon-layout-align-top-filled: unicode('fe21'); +$ti-icon-layout-board: unicode('ef95'); +$ti-icon-layout-board-split: unicode('ef94'); +$ti-icon-layout-bottombar: unicode('ead3'); +$ti-icon-layout-bottombar-collapse: unicode('f28b'); +$ti-icon-layout-bottombar-collapse-filled: unicode('fc35'); +$ti-icon-layout-bottombar-expand: unicode('f28c'); +$ti-icon-layout-bottombar-expand-filled: unicode('fc36'); +$ti-icon-layout-bottombar-filled: unicode('fc37'); +$ti-icon-layout-bottombar-inactive: unicode('fd45'); +$ti-icon-layout-cards: unicode('ec13'); +$ti-icon-layout-cards-filled: unicode('fe20'); +$ti-icon-layout-collage: unicode('f389'); +$ti-icon-layout-columns: unicode('ead4'); +$ti-icon-layout-dashboard: unicode('f02c'); +$ti-icon-layout-dashboard-filled: unicode('fe1f'); +$ti-icon-layout-distribute-horizontal: unicode('ead5'); +$ti-icon-layout-distribute-horizontal-filled: unicode('fe1e'); +$ti-icon-layout-distribute-vertical: unicode('ead6'); +$ti-icon-layout-distribute-vertical-filled: unicode('fe1d'); +$ti-icon-layout-filled: unicode('fe17'); +$ti-icon-layout-grid: unicode('edba'); +$ti-icon-layout-grid-add: unicode('edb9'); +$ti-icon-layout-grid-filled: unicode('fe1c'); +$ti-icon-layout-grid-remove: unicode('fa7d'); +$ti-icon-layout-kanban: unicode('ec3f'); +$ti-icon-layout-kanban-filled: unicode('fe1b'); +$ti-icon-layout-list: unicode('ec14'); +$ti-icon-layout-list-filled: unicode('fe1a'); +$ti-icon-layout-navbar: unicode('ead7'); +$ti-icon-layout-navbar-collapse: unicode('f28d'); +$ti-icon-layout-navbar-collapse-filled: unicode('fc38'); +$ti-icon-layout-navbar-expand: unicode('f28e'); +$ti-icon-layout-navbar-expand-filled: unicode('fc39'); +$ti-icon-layout-navbar-filled: unicode('fc3a'); +$ti-icon-layout-navbar-inactive: unicode('fd46'); +$ti-icon-layout-off: unicode('f151'); +$ti-icon-layout-rows: unicode('ead8'); +$ti-icon-layout-sidebar: unicode('eada'); +$ti-icon-layout-sidebar-filled: unicode('fe18'); +$ti-icon-layout-sidebar-inactive: unicode('fd47'); +$ti-icon-layout-sidebar-left-collapse: unicode('f004'); +$ti-icon-layout-sidebar-left-collapse-filled: unicode('fc3b'); +$ti-icon-layout-sidebar-left-expand: unicode('f005'); +$ti-icon-layout-sidebar-left-expand-filled: unicode('fc3c'); +$ti-icon-layout-sidebar-right: unicode('ead9'); +$ti-icon-layout-sidebar-right-collapse: unicode('f006'); +$ti-icon-layout-sidebar-right-collapse-filled: unicode('fc3d'); +$ti-icon-layout-sidebar-right-expand: unicode('f007'); +$ti-icon-layout-sidebar-right-expand-filled: unicode('fc3e'); +$ti-icon-layout-sidebar-right-filled: unicode('fe19'); +$ti-icon-layout-sidebar-right-inactive: unicode('fd48'); +$ti-icon-leaf: unicode('ed4f'); +$ti-icon-leaf-off: unicode('f400'); +$ti-icon-lego: unicode('eadc'); +$ti-icon-lego-filled: unicode('fe16'); +$ti-icon-lego-off: unicode('f401'); +$ti-icon-lemon: unicode('ef10'); +$ti-icon-lemon-2: unicode('ef81'); +$ti-icon-letter-a: unicode('ec50'); +$ti-icon-letter-a-small: unicode('fcc7'); +$ti-icon-letter-b: unicode('ec51'); +$ti-icon-letter-b-small: unicode('fcc8'); +$ti-icon-letter-c: unicode('ec52'); +$ti-icon-letter-c-small: unicode('fcc9'); +$ti-icon-letter-case: unicode('eea5'); +$ti-icon-letter-case-lower: unicode('eea2'); +$ti-icon-letter-case-toggle: unicode('eea3'); +$ti-icon-letter-case-upper: unicode('eea4'); +$ti-icon-letter-d: unicode('ec53'); +$ti-icon-letter-d-small: unicode('fcca'); +$ti-icon-letter-e: unicode('ec54'); +$ti-icon-letter-e-small: unicode('fccb'); +$ti-icon-letter-f: unicode('ec55'); +$ti-icon-letter-f-small: unicode('fccc'); +$ti-icon-letter-g: unicode('ec56'); +$ti-icon-letter-g-small: unicode('fccd'); +$ti-icon-letter-h: unicode('ec57'); +$ti-icon-letter-h-small: unicode('fcce'); +$ti-icon-letter-i: unicode('ec58'); +$ti-icon-letter-i-small: unicode('fccf'); +$ti-icon-letter-j: unicode('ec59'); +$ti-icon-letter-j-small: unicode('fcd0'); +$ti-icon-letter-k: unicode('ec5a'); +$ti-icon-letter-k-small: unicode('fcd1'); +$ti-icon-letter-l: unicode('ec5b'); +$ti-icon-letter-l-small: unicode('fcd2'); +$ti-icon-letter-m: unicode('ec5c'); +$ti-icon-letter-m-small: unicode('fcd3'); +$ti-icon-letter-n: unicode('ec5d'); +$ti-icon-letter-n-small: unicode('fcd4'); +$ti-icon-letter-o: unicode('ec5e'); +$ti-icon-letter-o-small: unicode('fcd5'); +$ti-icon-letter-p: unicode('ec5f'); +$ti-icon-letter-p-small: unicode('fcd6'); +$ti-icon-letter-q: unicode('ec60'); +$ti-icon-letter-q-small: unicode('fcd7'); +$ti-icon-letter-r: unicode('ec61'); +$ti-icon-letter-r-small: unicode('fcd8'); +$ti-icon-letter-s: unicode('ec62'); +$ti-icon-letter-s-small: unicode('fcd9'); +$ti-icon-letter-spacing: unicode('eea6'); +$ti-icon-letter-t: unicode('ec63'); +$ti-icon-letter-t-small: unicode('fcda'); +$ti-icon-letter-u: unicode('ec64'); +$ti-icon-letter-u-small: unicode('fcdb'); +$ti-icon-letter-v: unicode('ec65'); +$ti-icon-letter-v-small: unicode('fcdc'); +$ti-icon-letter-w: unicode('ec66'); +$ti-icon-letter-w-small: unicode('fcdd'); +$ti-icon-letter-x: unicode('ec67'); +$ti-icon-letter-x-small: unicode('fcde'); +$ti-icon-letter-y: unicode('ec68'); +$ti-icon-letter-y-small: unicode('fcdf'); +$ti-icon-letter-z: unicode('ec69'); +$ti-icon-letter-z-small: unicode('fce0'); +$ti-icon-library: unicode('fd4c'); +$ti-icon-library-minus: unicode('fd49'); +$ti-icon-library-photo: unicode('fd4a'); +$ti-icon-library-plus: unicode('fd4b'); +$ti-icon-license: unicode('ebc0'); +$ti-icon-license-off: unicode('f153'); +$ti-icon-lifebuoy: unicode('eadd'); +$ti-icon-lifebuoy-off: unicode('f154'); +$ti-icon-lighter: unicode('f794'); +$ti-icon-line: unicode('ec40'); +$ti-icon-line-dashed: unicode('eea7'); +$ti-icon-line-dotted: unicode('eea8'); +$ti-icon-line-height: unicode('eb94'); +$ti-icon-line-scan: unicode('fcb8'); +$ti-icon-link: unicode('eade'); +$ti-icon-link-minus: unicode('fd16'); +$ti-icon-link-off: unicode('f402'); +$ti-icon-link-plus: unicode('fd17'); +$ti-icon-list: unicode('eb6b'); +$ti-icon-list-check: unicode('eb6a'); +$ti-icon-list-details: unicode('ef40'); +$ti-icon-list-letters: unicode('fc47'); +$ti-icon-list-numbers: unicode('ef11'); +$ti-icon-list-search: unicode('eea9'); +$ti-icon-list-tree: unicode('fafa'); +$ti-icon-live-photo: unicode('eadf'); +$ti-icon-live-photo-filled: unicode('fed1'); +$ti-icon-live-photo-off: unicode('f403'); +$ti-icon-live-view: unicode('ec6b'); +$ti-icon-load-balancer: unicode('fa5c'); +$ti-icon-loader: unicode('eca3'); +$ti-icon-loader-2: unicode('f226'); +$ti-icon-loader-3: unicode('f513'); +$ti-icon-loader-quarter: unicode('eca2'); +$ti-icon-location: unicode('eae0'); +$ti-icon-location-bolt: unicode('fbaf'); +$ti-icon-location-broken: unicode('f2c4'); +$ti-icon-location-cancel: unicode('fbb0'); +$ti-icon-location-check: unicode('fbb1'); +$ti-icon-location-code: unicode('fbb2'); +$ti-icon-location-cog: unicode('fbb3'); +$ti-icon-location-discount: unicode('fbb4'); +$ti-icon-location-dollar: unicode('fbb5'); +$ti-icon-location-down: unicode('fbb6'); +$ti-icon-location-exclamation: unicode('fbb7'); +$ti-icon-location-filled: unicode('f67f'); +$ti-icon-location-heart: unicode('fbb8'); +$ti-icon-location-minus: unicode('fbb9'); +$ti-icon-location-off: unicode('f155'); +$ti-icon-location-pause: unicode('fbba'); +$ti-icon-location-pin: unicode('fbbb'); +$ti-icon-location-plus: unicode('fbbc'); +$ti-icon-location-question: unicode('fbbd'); +$ti-icon-location-search: unicode('fbbe'); +$ti-icon-location-share: unicode('fbbf'); +$ti-icon-location-star: unicode('fbc0'); +$ti-icon-location-up: unicode('fbc1'); +$ti-icon-location-x: unicode('fbc2'); +$ti-icon-lock: unicode('eae2'); +$ti-icon-lock-access: unicode('eeaa'); +$ti-icon-lock-access-off: unicode('f404'); +$ti-icon-lock-bolt: unicode('f924'); +$ti-icon-lock-cancel: unicode('f925'); +$ti-icon-lock-check: unicode('f926'); +$ti-icon-lock-code: unicode('f927'); +$ti-icon-lock-cog: unicode('f928'); +$ti-icon-lock-dollar: unicode('f929'); +$ti-icon-lock-down: unicode('f92a'); +$ti-icon-lock-exclamation: unicode('f92b'); +$ti-icon-lock-filled: unicode('fe15'); +$ti-icon-lock-heart: unicode('f92c'); +$ti-icon-lock-minus: unicode('f92d'); +$ti-icon-lock-off: unicode('ed1e'); +$ti-icon-lock-open: unicode('eae1'); +$ti-icon-lock-open-2: unicode('fea8'); +$ti-icon-lock-open-off: unicode('f156'); +$ti-icon-lock-pause: unicode('f92e'); +$ti-icon-lock-pin: unicode('f92f'); +$ti-icon-lock-plus: unicode('f930'); +$ti-icon-lock-question: unicode('f931'); +$ti-icon-lock-search: unicode('f932'); +$ti-icon-lock-share: unicode('f933'); +$ti-icon-lock-square: unicode('ef51'); +$ti-icon-lock-square-rounded: unicode('f636'); +$ti-icon-lock-square-rounded-filled: unicode('f6da'); +$ti-icon-lock-star: unicode('f934'); +$ti-icon-lock-up: unicode('f935'); +$ti-icon-lock-x: unicode('f936'); +$ti-icon-logic-and: unicode('f240'); +$ti-icon-logic-buffer: unicode('f241'); +$ti-icon-logic-nand: unicode('f242'); +$ti-icon-logic-nor: unicode('f243'); +$ti-icon-logic-not: unicode('f244'); +$ti-icon-logic-or: unicode('f245'); +$ti-icon-logic-xnor: unicode('f246'); +$ti-icon-logic-xor: unicode('f247'); +$ti-icon-login: unicode('eba7'); +$ti-icon-login-2: unicode('fc76'); +$ti-icon-logout: unicode('eba8'); +$ti-icon-logout-2: unicode('fa7e'); +$ti-icon-logs: unicode('fea7'); +$ti-icon-lollipop: unicode('efcc'); +$ti-icon-lollipop-off: unicode('f157'); +$ti-icon-luggage: unicode('efad'); +$ti-icon-luggage-off: unicode('f158'); +$ti-icon-lungs: unicode('ef62'); +$ti-icon-lungs-filled: unicode('fe14'); +$ti-icon-lungs-off: unicode('f405'); +$ti-icon-macro: unicode('eeab'); +$ti-icon-macro-filled: unicode('fe13'); +$ti-icon-macro-off: unicode('f406'); +$ti-icon-magnet: unicode('eae3'); +$ti-icon-magnet-filled: unicode('fe12'); +$ti-icon-magnet-off: unicode('f159'); +$ti-icon-magnetic: unicode('fcb9'); +$ti-icon-mail: unicode('eae5'); +$ti-icon-mail-ai: unicode('fa31'); +$ti-icon-mail-bolt: unicode('f937'); +$ti-icon-mail-cancel: unicode('f938'); +$ti-icon-mail-check: unicode('f939'); +$ti-icon-mail-code: unicode('f93a'); +$ti-icon-mail-cog: unicode('f93b'); +$ti-icon-mail-dollar: unicode('f93c'); +$ti-icon-mail-down: unicode('f93d'); +$ti-icon-mail-exclamation: unicode('f93e'); +$ti-icon-mail-fast: unicode('f069'); +$ti-icon-mail-filled: unicode('fa47'); +$ti-icon-mail-forward: unicode('eeac'); +$ti-icon-mail-heart: unicode('f93f'); +$ti-icon-mail-minus: unicode('f940'); +$ti-icon-mail-off: unicode('f15a'); +$ti-icon-mail-opened: unicode('eae4'); +$ti-icon-mail-opened-filled: unicode('fa48'); +$ti-icon-mail-pause: unicode('f941'); +$ti-icon-mail-pin: unicode('f942'); +$ti-icon-mail-plus: unicode('f943'); +$ti-icon-mail-question: unicode('f944'); +$ti-icon-mail-search: unicode('f945'); +$ti-icon-mail-share: unicode('f946'); +$ti-icon-mail-star: unicode('f947'); +$ti-icon-mail-up: unicode('f948'); +$ti-icon-mail-x: unicode('f949'); +$ti-icon-mailbox: unicode('eead'); +$ti-icon-mailbox-off: unicode('f15b'); +$ti-icon-man: unicode('eae6'); +$ti-icon-man-filled: unicode('fe11'); +$ti-icon-manual-gearbox: unicode('ed7b'); +$ti-icon-manual-gearbox-filled: unicode('fe10'); +$ti-icon-map: unicode('eae9'); +$ti-icon-map-2: unicode('eae7'); +$ti-icon-map-bolt: unicode('fbc3'); +$ti-icon-map-cancel: unicode('fbc4'); +$ti-icon-map-check: unicode('fbc5'); +$ti-icon-map-code: unicode('fbc6'); +$ti-icon-map-cog: unicode('fbc7'); +$ti-icon-map-discount: unicode('fbc8'); +$ti-icon-map-dollar: unicode('fbc9'); +$ti-icon-map-down: unicode('fbca'); +$ti-icon-map-east: unicode('fc5d'); +$ti-icon-map-exclamation: unicode('fbcb'); +$ti-icon-map-heart: unicode('fbcc'); +$ti-icon-map-minus: unicode('fbcd'); +$ti-icon-map-north: unicode('fc5e'); +$ti-icon-map-off: unicode('f15c'); +$ti-icon-map-pause: unicode('fbce'); +$ti-icon-map-pin: unicode('eae8'); +$ti-icon-map-pin-2: unicode('fc48'); +$ti-icon-map-pin-bolt: unicode('f94a'); +$ti-icon-map-pin-cancel: unicode('f94b'); +$ti-icon-map-pin-check: unicode('f94c'); +$ti-icon-map-pin-code: unicode('f94d'); +$ti-icon-map-pin-cog: unicode('f94e'); +$ti-icon-map-pin-dollar: unicode('f94f'); +$ti-icon-map-pin-down: unicode('f950'); +$ti-icon-map-pin-exclamation: unicode('f951'); +$ti-icon-map-pin-filled: unicode('f680'); +$ti-icon-map-pin-heart: unicode('f952'); +$ti-icon-map-pin-minus: unicode('f953'); +$ti-icon-map-pin-off: unicode('ecf3'); +$ti-icon-map-pin-pause: unicode('f954'); +$ti-icon-map-pin-pin: unicode('f955'); +$ti-icon-map-pin-plus: unicode('f956'); +$ti-icon-map-pin-question: unicode('f957'); +$ti-icon-map-pin-search: unicode('f958'); +$ti-icon-map-pin-share: unicode('f795'); +$ti-icon-map-pin-star: unicode('f959'); +$ti-icon-map-pin-up: unicode('f95a'); +$ti-icon-map-pin-x: unicode('f95b'); +$ti-icon-map-pins: unicode('ed5e'); +$ti-icon-map-plus: unicode('fbcf'); +$ti-icon-map-question: unicode('fbd0'); +$ti-icon-map-route: unicode('fc79'); +$ti-icon-map-search: unicode('ef82'); +$ti-icon-map-share: unicode('fbd1'); +$ti-icon-map-south: unicode('fc5f'); +$ti-icon-map-star: unicode('fbd2'); +$ti-icon-map-up: unicode('fbd3'); +$ti-icon-map-west: unicode('fc60'); +$ti-icon-map-x: unicode('fbd4'); +$ti-icon-markdown: unicode('ec41'); +$ti-icon-markdown-off: unicode('f407'); +$ti-icon-marquee: unicode('ec77'); +$ti-icon-marquee-2: unicode('eeae'); +$ti-icon-marquee-off: unicode('f15d'); +$ti-icon-mars: unicode('ec80'); +$ti-icon-mask: unicode('eeb0'); +$ti-icon-mask-off: unicode('eeaf'); +$ti-icon-masks-theater: unicode('f263'); +$ti-icon-masks-theater-off: unicode('f408'); +$ti-icon-massage: unicode('eeb1'); +$ti-icon-matchstick: unicode('f577'); +$ti-icon-math: unicode('ebeb'); +$ti-icon-math-1-divide-2: unicode('f4e2'); +$ti-icon-math-1-divide-3: unicode('f4e3'); +$ti-icon-math-avg: unicode('f0f4'); +$ti-icon-math-equal-greater: unicode('f4e4'); +$ti-icon-math-equal-lower: unicode('f4e5'); +$ti-icon-math-function: unicode('eeb2'); +$ti-icon-math-function-off: unicode('f15e'); +$ti-icon-math-function-y: unicode('f4e6'); +$ti-icon-math-greater: unicode('f4e7'); +$ti-icon-math-integral: unicode('f4e9'); +$ti-icon-math-integral-x: unicode('f4e8'); +$ti-icon-math-integrals: unicode('f4ea'); +$ti-icon-math-lower: unicode('f4eb'); +$ti-icon-math-max: unicode('f0f5'); +$ti-icon-math-max-min: unicode('fda0'); +$ti-icon-math-min: unicode('f0f6'); +$ti-icon-math-not: unicode('f4ec'); +$ti-icon-math-off: unicode('f409'); +$ti-icon-math-pi: unicode('f4ee'); +$ti-icon-math-pi-divide-2: unicode('f4ed'); +$ti-icon-math-symbols: unicode('eeb3'); +$ti-icon-math-x-divide-2: unicode('f4ef'); +$ti-icon-math-x-divide-y: unicode('f4f1'); +$ti-icon-math-x-divide-y-2: unicode('f4f0'); +$ti-icon-math-x-minus-x: unicode('f4f2'); +$ti-icon-math-x-minus-y: unicode('f4f3'); +$ti-icon-math-x-plus-x: unicode('f4f4'); +$ti-icon-math-x-plus-y: unicode('f4f5'); +$ti-icon-math-xy: unicode('f4f6'); +$ti-icon-math-y-minus-y: unicode('f4f7'); +$ti-icon-math-y-plus-y: unicode('f4f8'); +$ti-icon-maximize: unicode('eaea'); +$ti-icon-maximize-off: unicode('f15f'); +$ti-icon-meat: unicode('ef12'); +$ti-icon-meat-off: unicode('f40a'); +$ti-icon-medal: unicode('ec78'); +$ti-icon-medal-2: unicode('efcd'); +$ti-icon-medical-cross: unicode('ec2f'); +$ti-icon-medical-cross-circle: unicode('fae8'); +$ti-icon-medical-cross-filled: unicode('f681'); +$ti-icon-medical-cross-off: unicode('f160'); +$ti-icon-medicine-syrup: unicode('ef63'); +$ti-icon-meeple: unicode('f514'); +$ti-icon-melon: unicode('fc7a'); +$ti-icon-menorah: unicode('f58c'); +$ti-icon-menu: unicode('eaeb'); +$ti-icon-menu-2: unicode('ec42'); +$ti-icon-menu-deep: unicode('fafb'); +$ti-icon-menu-order: unicode('f5f5'); +$ti-icon-message: unicode('eaef'); +$ti-icon-message-2: unicode('eaec'); +$ti-icon-message-2-bolt: unicode('f95c'); +$ti-icon-message-2-cancel: unicode('f95d'); +$ti-icon-message-2-check: unicode('f95e'); +$ti-icon-message-2-code: unicode('f012'); +$ti-icon-message-2-cog: unicode('f95f'); +$ti-icon-message-2-dollar: unicode('f960'); +$ti-icon-message-2-down: unicode('f961'); +$ti-icon-message-2-exclamation: unicode('f962'); +$ti-icon-message-2-heart: unicode('f963'); +$ti-icon-message-2-minus: unicode('f964'); +$ti-icon-message-2-off: unicode('f40b'); +$ti-icon-message-2-pause: unicode('f965'); +$ti-icon-message-2-pin: unicode('f966'); +$ti-icon-message-2-plus: unicode('f967'); +$ti-icon-message-2-question: unicode('f968'); +$ti-icon-message-2-search: unicode('f969'); +$ti-icon-message-2-share: unicode('f077'); +$ti-icon-message-2-star: unicode('f96a'); +$ti-icon-message-2-up: unicode('f96b'); +$ti-icon-message-2-x: unicode('f96c'); +$ti-icon-message-bolt: unicode('f96d'); +$ti-icon-message-cancel: unicode('f96e'); +$ti-icon-message-chatbot: unicode('f38a'); +$ti-icon-message-chatbot-filled: unicode('fed0'); +$ti-icon-message-check: unicode('f96f'); +$ti-icon-message-circle: unicode('eaed'); +$ti-icon-message-circle-bolt: unicode('f970'); +$ti-icon-message-circle-cancel: unicode('f971'); +$ti-icon-message-circle-check: unicode('f972'); +$ti-icon-message-circle-code: unicode('f973'); +$ti-icon-message-circle-cog: unicode('f974'); +$ti-icon-message-circle-dollar: unicode('f975'); +$ti-icon-message-circle-down: unicode('f976'); +$ti-icon-message-circle-exclamation: unicode('f977'); +$ti-icon-message-circle-filled: unicode('fecf'); +$ti-icon-message-circle-heart: unicode('f978'); +$ti-icon-message-circle-minus: unicode('f979'); +$ti-icon-message-circle-off: unicode('ed40'); +$ti-icon-message-circle-pause: unicode('f97a'); +$ti-icon-message-circle-pin: unicode('f97b'); +$ti-icon-message-circle-plus: unicode('f97c'); +$ti-icon-message-circle-question: unicode('f97d'); +$ti-icon-message-circle-search: unicode('f97e'); +$ti-icon-message-circle-share: unicode('f97f'); +$ti-icon-message-circle-star: unicode('f980'); +$ti-icon-message-circle-up: unicode('f981'); +$ti-icon-message-circle-user: unicode('fec5'); +$ti-icon-message-circle-x: unicode('f982'); +$ti-icon-message-code: unicode('f013'); +$ti-icon-message-cog: unicode('f983'); +$ti-icon-message-dollar: unicode('f984'); +$ti-icon-message-dots: unicode('eaee'); +$ti-icon-message-down: unicode('f985'); +$ti-icon-message-exclamation: unicode('f986'); +$ti-icon-message-filled: unicode('fecd'); +$ti-icon-message-forward: unicode('f28f'); +$ti-icon-message-heart: unicode('f987'); +$ti-icon-message-language: unicode('efae'); +$ti-icon-message-minus: unicode('f988'); +$ti-icon-message-off: unicode('ed41'); +$ti-icon-message-pause: unicode('f989'); +$ti-icon-message-pin: unicode('f98a'); +$ti-icon-message-plus: unicode('ec9a'); +$ti-icon-message-question: unicode('f98b'); +$ti-icon-message-reply: unicode('fd4d'); +$ti-icon-message-report: unicode('ec9b'); +$ti-icon-message-report-filled: unicode('fece'); +$ti-icon-message-search: unicode('f98c'); +$ti-icon-message-share: unicode('f078'); +$ti-icon-message-star: unicode('f98d'); +$ti-icon-message-up: unicode('f98e'); +$ti-icon-message-user: unicode('fec4'); +$ti-icon-message-x: unicode('f98f'); +$ti-icon-messages: unicode('eb6c'); +$ti-icon-messages-off: unicode('ed42'); +$ti-icon-meteor: unicode('f1fd'); +$ti-icon-meteor-off: unicode('f40c'); +$ti-icon-meter-cube: unicode('fd7c'); +$ti-icon-meter-square: unicode('fd7d'); +$ti-icon-metronome: unicode('fd25'); +$ti-icon-michelin-bib-gourmand: unicode('fae9'); +$ti-icon-michelin-star: unicode('faeb'); +$ti-icon-michelin-star-green: unicode('faea'); +$ti-icon-mickey: unicode('f2a3'); +$ti-icon-mickey-filled: unicode('f683'); +$ti-icon-microphone: unicode('eaf0'); +$ti-icon-microphone-2: unicode('ef2c'); +$ti-icon-microphone-2-off: unicode('f40d'); +$ti-icon-microphone-filled: unicode('fe0f'); +$ti-icon-microphone-off: unicode('ed16'); +$ti-icon-microscope: unicode('ef64'); +$ti-icon-microscope-off: unicode('f40e'); +$ti-icon-microwave: unicode('f248'); +$ti-icon-microwave-filled: unicode('fe0e'); +$ti-icon-microwave-off: unicode('f264'); +$ti-icon-military-award: unicode('f079'); +$ti-icon-military-rank: unicode('efcf'); +$ti-icon-milk: unicode('ef13'); +$ti-icon-milk-off: unicode('f40f'); +$ti-icon-milkshake: unicode('f4c8'); +$ti-icon-minimize: unicode('eaf1'); +$ti-icon-minus: unicode('eaf2'); +$ti-icon-minus-vertical: unicode('eeb4'); +$ti-icon-mist: unicode('ec30'); +$ti-icon-mist-off: unicode('f410'); +$ti-icon-mobiledata: unicode('f9f5'); +$ti-icon-mobiledata-off: unicode('f9f4'); +$ti-icon-moneybag: unicode('f506'); +$ti-icon-monkeybar: unicode('feb4'); +$ti-icon-mood-angry: unicode('f2de'); +$ti-icon-mood-annoyed: unicode('f2e0'); +$ti-icon-mood-annoyed-2: unicode('f2df'); +$ti-icon-mood-boy: unicode('ed2d'); +$ti-icon-mood-check: unicode('f7b3'); +$ti-icon-mood-cog: unicode('f7b4'); +$ti-icon-mood-confuzed: unicode('eaf3'); +$ti-icon-mood-confuzed-filled: unicode('f7f2'); +$ti-icon-mood-crazy-happy: unicode('ed90'); +$ti-icon-mood-cry: unicode('ecbb'); +$ti-icon-mood-dollar: unicode('f7b5'); +$ti-icon-mood-edit: unicode('fa05'); +$ti-icon-mood-empty: unicode('eeb5'); +$ti-icon-mood-empty-filled: unicode('f7f3'); +$ti-icon-mood-happy: unicode('eaf4'); +$ti-icon-mood-happy-filled: unicode('f7f4'); +$ti-icon-mood-heart: unicode('f7b6'); +$ti-icon-mood-kid: unicode('ec03'); +$ti-icon-mood-kid-filled: unicode('f7f5'); +$ti-icon-mood-look-down: unicode('fd37'); +$ti-icon-mood-look-left: unicode('f2c5'); +$ti-icon-mood-look-right: unicode('f2c6'); +$ti-icon-mood-look-up: unicode('fd38'); +$ti-icon-mood-minus: unicode('f7b7'); +$ti-icon-mood-nerd: unicode('f2e1'); +$ti-icon-mood-nervous: unicode('ef96'); +$ti-icon-mood-neutral: unicode('eaf5'); +$ti-icon-mood-neutral-filled: unicode('f7f6'); +$ti-icon-mood-off: unicode('f161'); +$ti-icon-mood-pin: unicode('f7b8'); +$ti-icon-mood-plus: unicode('f7b9'); +$ti-icon-mood-puzzled: unicode('fd39'); +$ti-icon-mood-sad: unicode('eaf6'); +$ti-icon-mood-sad-2: unicode('f2e2'); +$ti-icon-mood-sad-dizzy: unicode('f2e3'); +$ti-icon-mood-sad-filled: unicode('f7f7'); +$ti-icon-mood-sad-squint: unicode('f2e4'); +$ti-icon-mood-search: unicode('f7ba'); +$ti-icon-mood-share: unicode('fa06'); +$ti-icon-mood-sick: unicode('f2e5'); +$ti-icon-mood-silence: unicode('f2e6'); +$ti-icon-mood-sing: unicode('f2c7'); +$ti-icon-mood-smile: unicode('eaf7'); +$ti-icon-mood-smile-beam: unicode('f2e7'); +$ti-icon-mood-smile-dizzy: unicode('f2e8'); +$ti-icon-mood-smile-filled: unicode('f7f8'); +$ti-icon-mood-suprised: unicode('ec04'); +$ti-icon-mood-tongue: unicode('eb95'); +$ti-icon-mood-tongue-wink: unicode('f2ea'); +$ti-icon-mood-tongue-wink-2: unicode('f2e9'); +$ti-icon-mood-unamused: unicode('f2eb'); +$ti-icon-mood-up: unicode('f7bb'); +$ti-icon-mood-wink: unicode('f2ed'); +$ti-icon-mood-wink-2: unicode('f2ec'); +$ti-icon-mood-wrrr: unicode('f2ee'); +$ti-icon-mood-x: unicode('f7bc'); +$ti-icon-mood-xd: unicode('f2ef'); +$ti-icon-moon: unicode('eaf8'); +$ti-icon-moon-2: unicode('ece6'); +$ti-icon-moon-filled: unicode('f684'); +$ti-icon-moon-off: unicode('f162'); +$ti-icon-moon-stars: unicode('ece7'); +$ti-icon-moped: unicode('ecbc'); +$ti-icon-motorbike: unicode('eeb6'); +$ti-icon-mountain: unicode('ef97'); +$ti-icon-mountain-off: unicode('f411'); +$ti-icon-mouse: unicode('eaf9'); +$ti-icon-mouse-2: unicode('f1d7'); +$ti-icon-mouse-filled: unicode('fb2f'); +$ti-icon-mouse-off: unicode('f163'); +$ti-icon-moustache: unicode('f4c9'); +$ti-icon-movie: unicode('eafa'); +$ti-icon-movie-off: unicode('f164'); +$ti-icon-mug: unicode('eafb'); +$ti-icon-mug-off: unicode('f165'); +$ti-icon-multiplier-0-5x: unicode('ef41'); +$ti-icon-multiplier-1-5x: unicode('ef42'); +$ti-icon-multiplier-1x: unicode('ef43'); +$ti-icon-multiplier-2x: unicode('ef44'); +$ti-icon-mushroom: unicode('ef14'); +$ti-icon-mushroom-filled: unicode('f7f9'); +$ti-icon-mushroom-off: unicode('f412'); +$ti-icon-music: unicode('eafc'); +$ti-icon-music-bolt: unicode('fbd5'); +$ti-icon-music-cancel: unicode('fbd6'); +$ti-icon-music-check: unicode('fbd7'); +$ti-icon-music-code: unicode('fbd8'); +$ti-icon-music-cog: unicode('fbd9'); +$ti-icon-music-discount: unicode('fbda'); +$ti-icon-music-dollar: unicode('fbdb'); +$ti-icon-music-down: unicode('fbdc'); +$ti-icon-music-exclamation: unicode('fbdd'); +$ti-icon-music-heart: unicode('fbde'); +$ti-icon-music-minus: unicode('fbdf'); +$ti-icon-music-off: unicode('f166'); +$ti-icon-music-pause: unicode('fbe0'); +$ti-icon-music-pin: unicode('fbe1'); +$ti-icon-music-plus: unicode('fbe2'); +$ti-icon-music-question: unicode('fbe3'); +$ti-icon-music-search: unicode('fbe4'); +$ti-icon-music-share: unicode('fbe5'); +$ti-icon-music-star: unicode('fbe6'); +$ti-icon-music-up: unicode('fbe7'); +$ti-icon-music-x: unicode('fbe8'); +$ti-icon-navigation: unicode('f2c8'); +$ti-icon-navigation-bolt: unicode('fbe9'); +$ti-icon-navigation-cancel: unicode('fbea'); +$ti-icon-navigation-check: unicode('fbeb'); +$ti-icon-navigation-code: unicode('fbec'); +$ti-icon-navigation-cog: unicode('fbed'); +$ti-icon-navigation-discount: unicode('fbee'); +$ti-icon-navigation-dollar: unicode('fbef'); +$ti-icon-navigation-down: unicode('fbf0'); +$ti-icon-navigation-east: unicode('fcba'); +$ti-icon-navigation-exclamation: unicode('fbf1'); +$ti-icon-navigation-filled: unicode('f685'); +$ti-icon-navigation-heart: unicode('fbf2'); +$ti-icon-navigation-minus: unicode('fbf3'); +$ti-icon-navigation-north: unicode('fcbb'); +$ti-icon-navigation-off: unicode('f413'); +$ti-icon-navigation-pause: unicode('fbf4'); +$ti-icon-navigation-pin: unicode('fbf5'); +$ti-icon-navigation-plus: unicode('fbf6'); +$ti-icon-navigation-question: unicode('fbf7'); +$ti-icon-navigation-search: unicode('fbf8'); +$ti-icon-navigation-share: unicode('fbf9'); +$ti-icon-navigation-south: unicode('fcbc'); +$ti-icon-navigation-star: unicode('fbfa'); +$ti-icon-navigation-top: unicode('faec'); +$ti-icon-navigation-up: unicode('fbfb'); +$ti-icon-navigation-west: unicode('fcbd'); +$ti-icon-navigation-x: unicode('fbfc'); +$ti-icon-needle: unicode('f508'); +$ti-icon-needle-thread: unicode('f507'); +$ti-icon-network: unicode('f09f'); +$ti-icon-network-off: unicode('f414'); +$ti-icon-new-section: unicode('ebc1'); +$ti-icon-news: unicode('eafd'); +$ti-icon-news-off: unicode('f167'); +$ti-icon-nfc: unicode('eeb7'); +$ti-icon-nfc-off: unicode('f168'); +$ti-icon-no-copyright: unicode('efb9'); +$ti-icon-no-creative-commons: unicode('efba'); +$ti-icon-no-derivatives: unicode('efbb'); +$ti-icon-north-star: unicode('f014'); +$ti-icon-note: unicode('eb6d'); +$ti-icon-note-off: unicode('f169'); +$ti-icon-notebook: unicode('eb96'); +$ti-icon-notebook-off: unicode('f415'); +$ti-icon-notes: unicode('eb6e'); +$ti-icon-notes-off: unicode('f16a'); +$ti-icon-notification: unicode('eafe'); +$ti-icon-notification-off: unicode('f16b'); +$ti-icon-number: unicode('f1fe'); +$ti-icon-number-0: unicode('edf0'); +$ti-icon-number-0-small: unicode('fce1'); +$ti-icon-number-1: unicode('edf1'); +$ti-icon-number-1-small: unicode('fce2'); +$ti-icon-number-10-small: unicode('fce3'); +$ti-icon-number-11-small: unicode('fce4'); +$ti-icon-number-12-small: unicode('fce5'); +$ti-icon-number-123: unicode('f554'); +$ti-icon-number-13-small: unicode('fce6'); +$ti-icon-number-14-small: unicode('fce7'); +$ti-icon-number-15-small: unicode('fce8'); +$ti-icon-number-16-small: unicode('fce9'); +$ti-icon-number-17-small: unicode('fcea'); +$ti-icon-number-18-small: unicode('fceb'); +$ti-icon-number-19-small: unicode('fcec'); +$ti-icon-number-2: unicode('edf2'); +$ti-icon-number-2-small: unicode('fced'); +$ti-icon-number-20-small: unicode('fcee'); +$ti-icon-number-21-small: unicode('fcef'); +$ti-icon-number-22-small: unicode('fcf0'); +$ti-icon-number-23-small: unicode('fcf1'); +$ti-icon-number-24-small: unicode('fcf2'); +$ti-icon-number-25-small: unicode('fcf3'); +$ti-icon-number-26-small: unicode('fcf4'); +$ti-icon-number-27-small: unicode('fcf5'); +$ti-icon-number-28-small: unicode('fcf6'); +$ti-icon-number-29-small: unicode('fcf7'); +$ti-icon-number-3: unicode('edf3'); +$ti-icon-number-3-small: unicode('fcf8'); +$ti-icon-number-4: unicode('edf4'); +$ti-icon-number-4-small: unicode('fcf9'); +$ti-icon-number-5: unicode('edf5'); +$ti-icon-number-5-small: unicode('fcfa'); +$ti-icon-number-6: unicode('edf6'); +$ti-icon-number-6-small: unicode('fcfb'); +$ti-icon-number-7: unicode('edf7'); +$ti-icon-number-7-small: unicode('fcfc'); +$ti-icon-number-8: unicode('edf8'); +$ti-icon-number-8-small: unicode('fcfd'); +$ti-icon-number-9: unicode('edf9'); +$ti-icon-number-9-small: unicode('fcfe'); +$ti-icon-numbers: unicode('f015'); +$ti-icon-nurse: unicode('ef65'); +$ti-icon-nut: unicode('fc61'); +$ti-icon-octagon: unicode('ecbd'); +$ti-icon-octagon-filled: unicode('f686'); +$ti-icon-octagon-minus: unicode('fc92'); +$ti-icon-octagon-minus-2: unicode('fc91'); +$ti-icon-octagon-off: unicode('eeb8'); +$ti-icon-octagon-plus: unicode('fc94'); +$ti-icon-octagon-plus-2: unicode('fc93'); +$ti-icon-octahedron: unicode('faae'); +$ti-icon-octahedron-off: unicode('faac'); +$ti-icon-octahedron-plus: unicode('faad'); +$ti-icon-old: unicode('eeb9'); +$ti-icon-olympics: unicode('eeba'); +$ti-icon-olympics-off: unicode('f416'); +$ti-icon-om: unicode('f58d'); +$ti-icon-omega: unicode('eb97'); +$ti-icon-outbound: unicode('f249'); +$ti-icon-outlet: unicode('ebd7'); +$ti-icon-oval: unicode('f02e'); +$ti-icon-oval-filled: unicode('f687'); +$ti-icon-oval-vertical: unicode('f02d'); +$ti-icon-oval-vertical-filled: unicode('f688'); +$ti-icon-overline: unicode('eebb'); +$ti-icon-package: unicode('eaff'); +$ti-icon-package-export: unicode('f07a'); +$ti-icon-package-import: unicode('f07b'); +$ti-icon-package-off: unicode('f16c'); +$ti-icon-packages: unicode('f2c9'); +$ti-icon-pacman: unicode('eebc'); +$ti-icon-page-break: unicode('ec81'); +$ti-icon-paint: unicode('eb00'); +$ti-icon-paint-filled: unicode('f75f'); +$ti-icon-paint-off: unicode('f16d'); +$ti-icon-palette: unicode('eb01'); +$ti-icon-palette-off: unicode('f16e'); +$ti-icon-panorama-horizontal: unicode('ed33'); +$ti-icon-panorama-horizontal-filled: unicode('fecc'); +$ti-icon-panorama-horizontal-off: unicode('f417'); +$ti-icon-panorama-vertical: unicode('ed34'); +$ti-icon-panorama-vertical-filled: unicode('fecb'); +$ti-icon-panorama-vertical-off: unicode('f418'); +$ti-icon-paper-bag: unicode('f02f'); +$ti-icon-paper-bag-off: unicode('f16f'); +$ti-icon-paperclip: unicode('eb02'); +$ti-icon-parachute: unicode('ed7c'); +$ti-icon-parachute-off: unicode('f170'); +$ti-icon-parentheses: unicode('ebd8'); +$ti-icon-parentheses-off: unicode('f171'); +$ti-icon-parking: unicode('eb03'); +$ti-icon-parking-circle: unicode('fd5a'); +$ti-icon-parking-circle-filled: unicode('feca'); +$ti-icon-parking-off: unicode('f172'); +$ti-icon-password: unicode('f4ca'); +$ti-icon-password-fingerprint: unicode('fc7b'); +$ti-icon-password-mobile-phone: unicode('fc7c'); +$ti-icon-password-user: unicode('fc7d'); +$ti-icon-paw: unicode('eff9'); +$ti-icon-paw-filled: unicode('f689'); +$ti-icon-paw-off: unicode('f419'); +$ti-icon-paywall: unicode('fd7e'); +$ti-icon-pdf: unicode('f7ac'); +$ti-icon-peace: unicode('ecbe'); +$ti-icon-pencil: unicode('eb04'); +$ti-icon-pencil-bolt: unicode('fbfd'); +$ti-icon-pencil-cancel: unicode('fbfe'); +$ti-icon-pencil-check: unicode('fbff'); +$ti-icon-pencil-code: unicode('fc00'); +$ti-icon-pencil-cog: unicode('fc01'); +$ti-icon-pencil-discount: unicode('fc02'); +$ti-icon-pencil-dollar: unicode('fc03'); +$ti-icon-pencil-down: unicode('fc04'); +$ti-icon-pencil-exclamation: unicode('fc05'); +$ti-icon-pencil-heart: unicode('fc06'); +$ti-icon-pencil-minus: unicode('f1eb'); +$ti-icon-pencil-off: unicode('f173'); +$ti-icon-pencil-pause: unicode('fc07'); +$ti-icon-pencil-pin: unicode('fc08'); +$ti-icon-pencil-plus: unicode('f1ec'); +$ti-icon-pencil-question: unicode('fc09'); +$ti-icon-pencil-search: unicode('fc0a'); +$ti-icon-pencil-share: unicode('fc0b'); +$ti-icon-pencil-star: unicode('fc0c'); +$ti-icon-pencil-up: unicode('fc0d'); +$ti-icon-pencil-x: unicode('fc0e'); +$ti-icon-pennant: unicode('ed7d'); +$ti-icon-pennant-2: unicode('f06a'); +$ti-icon-pennant-2-filled: unicode('f68a'); +$ti-icon-pennant-filled: unicode('f68b'); +$ti-icon-pennant-off: unicode('f174'); +$ti-icon-pentagon: unicode('efe3'); +$ti-icon-pentagon-filled: unicode('f68c'); +$ti-icon-pentagon-minus: unicode('feb3'); +$ti-icon-pentagon-number-0: unicode('fc7e'); +$ti-icon-pentagon-number-1: unicode('fc7f'); +$ti-icon-pentagon-number-2: unicode('fc80'); +$ti-icon-pentagon-number-3: unicode('fc81'); +$ti-icon-pentagon-number-4: unicode('fc82'); +$ti-icon-pentagon-number-5: unicode('fc83'); +$ti-icon-pentagon-number-6: unicode('fc84'); +$ti-icon-pentagon-number-7: unicode('fc85'); +$ti-icon-pentagon-number-8: unicode('fc86'); +$ti-icon-pentagon-number-9: unicode('fc87'); +$ti-icon-pentagon-off: unicode('f41a'); +$ti-icon-pentagon-plus: unicode('fc49'); +$ti-icon-pentagon-x: unicode('fc88'); +$ti-icon-pentagram: unicode('f586'); +$ti-icon-pepper: unicode('ef15'); +$ti-icon-pepper-off: unicode('f175'); +$ti-icon-percentage: unicode('ecf4'); +$ti-icon-percentage-0: unicode('fee5'); +$ti-icon-percentage-10: unicode('fee4'); +$ti-icon-percentage-100: unicode('fee3'); +$ti-icon-percentage-20: unicode('fee2'); +$ti-icon-percentage-25: unicode('fee1'); +$ti-icon-percentage-30: unicode('fee0'); +$ti-icon-percentage-33: unicode('fedf'); +$ti-icon-percentage-40: unicode('fede'); +$ti-icon-percentage-50: unicode('fedd'); +$ti-icon-percentage-60: unicode('fedc'); +$ti-icon-percentage-66: unicode('fedb'); +$ti-icon-percentage-70: unicode('feda'); +$ti-icon-percentage-75: unicode('fed9'); +$ti-icon-percentage-80: unicode('fed8'); +$ti-icon-percentage-90: unicode('fed7'); +$ti-icon-perfume: unicode('f509'); +$ti-icon-perspective: unicode('eebd'); +$ti-icon-perspective-off: unicode('f176'); +$ti-icon-phone: unicode('eb09'); +$ti-icon-phone-call: unicode('eb05'); +$ti-icon-phone-calling: unicode('ec43'); +$ti-icon-phone-check: unicode('ec05'); +$ti-icon-phone-filled: unicode('fa49'); +$ti-icon-phone-incoming: unicode('eb06'); +$ti-icon-phone-off: unicode('ecf5'); +$ti-icon-phone-outgoing: unicode('eb07'); +$ti-icon-phone-pause: unicode('eb08'); +$ti-icon-phone-plus: unicode('ec06'); +$ti-icon-phone-x: unicode('ec07'); +$ti-icon-photo: unicode('eb0a'); +$ti-icon-photo-ai: unicode('fa32'); +$ti-icon-photo-bolt: unicode('f990'); +$ti-icon-photo-cancel: unicode('f35d'); +$ti-icon-photo-check: unicode('f35e'); +$ti-icon-photo-circle: unicode('fc4a'); +$ti-icon-photo-circle-minus: unicode('fc62'); +$ti-icon-photo-circle-plus: unicode('fc63'); +$ti-icon-photo-code: unicode('f991'); +$ti-icon-photo-cog: unicode('f992'); +$ti-icon-photo-dollar: unicode('f993'); +$ti-icon-photo-down: unicode('f35f'); +$ti-icon-photo-edit: unicode('f360'); +$ti-icon-photo-exclamation: unicode('f994'); +$ti-icon-photo-filled: unicode('fa4a'); +$ti-icon-photo-heart: unicode('f361'); +$ti-icon-photo-hexagon: unicode('fc4b'); +$ti-icon-photo-minus: unicode('f362'); +$ti-icon-photo-off: unicode('ecf6'); +$ti-icon-photo-pause: unicode('f995'); +$ti-icon-photo-pentagon: unicode('fc4c'); +$ti-icon-photo-pin: unicode('f996'); +$ti-icon-photo-plus: unicode('f363'); +$ti-icon-photo-question: unicode('f997'); +$ti-icon-photo-scan: unicode('fca8'); +$ti-icon-photo-search: unicode('f364'); +$ti-icon-photo-sensor: unicode('f798'); +$ti-icon-photo-sensor-2: unicode('f796'); +$ti-icon-photo-sensor-3: unicode('f797'); +$ti-icon-photo-share: unicode('f998'); +$ti-icon-photo-shield: unicode('f365'); +$ti-icon-photo-square-rounded: unicode('fc4d'); +$ti-icon-photo-star: unicode('f366'); +$ti-icon-photo-up: unicode('f38b'); +$ti-icon-photo-video: unicode('fc95'); +$ti-icon-photo-x: unicode('f367'); +$ti-icon-physotherapist: unicode('eebe'); +$ti-icon-piano: unicode('fad3'); +$ti-icon-pick: unicode('fafc'); +$ti-icon-picnic-table: unicode('fed6'); +$ti-icon-picture-in-picture: unicode('ed35'); +$ti-icon-picture-in-picture-filled: unicode('fec1'); +$ti-icon-picture-in-picture-off: unicode('ed43'); +$ti-icon-picture-in-picture-on: unicode('ed44'); +$ti-icon-picture-in-picture-top: unicode('efe4'); +$ti-icon-picture-in-picture-top-filled: unicode('fec2'); +$ti-icon-pig: unicode('ef52'); +$ti-icon-pig-money: unicode('f38c'); +$ti-icon-pig-off: unicode('f177'); +$ti-icon-pilcrow: unicode('f5f6'); +$ti-icon-pilcrow-left: unicode('fd7f'); +$ti-icon-pilcrow-right: unicode('fd80'); +$ti-icon-pill: unicode('ec44'); +$ti-icon-pill-off: unicode('f178'); +$ti-icon-pills: unicode('ef66'); +$ti-icon-pin: unicode('ec9c'); +$ti-icon-pin-end: unicode('fd5b'); +$ti-icon-pin-filled: unicode('f68d'); +$ti-icon-pin-invoke: unicode('fd5c'); +$ti-icon-ping-pong: unicode('f38d'); +$ti-icon-pinned: unicode('ed60'); +$ti-icon-pinned-filled: unicode('f68e'); +$ti-icon-pinned-off: unicode('ed5f'); +$ti-icon-pizza: unicode('edbb'); +$ti-icon-pizza-off: unicode('f179'); +$ti-icon-placeholder: unicode('f626'); +$ti-icon-plane: unicode('eb6f'); +$ti-icon-plane-arrival: unicode('eb99'); +$ti-icon-plane-departure: unicode('eb9a'); +$ti-icon-plane-inflight: unicode('ef98'); +$ti-icon-plane-off: unicode('f17a'); +$ti-icon-plane-tilt: unicode('f1ed'); +$ti-icon-planet: unicode('ec08'); +$ti-icon-planet-off: unicode('f17b'); +$ti-icon-plant: unicode('ed50'); +$ti-icon-plant-2: unicode('ed7e'); +$ti-icon-plant-2-off: unicode('f17c'); +$ti-icon-plant-off: unicode('f17d'); +$ti-icon-play-basketball: unicode('fa66'); +$ti-icon-play-card: unicode('eebf'); +$ti-icon-play-card-off: unicode('f17e'); +$ti-icon-play-football: unicode('fa67'); +$ti-icon-play-handball: unicode('fa68'); +$ti-icon-play-volleyball: unicode('fa69'); +$ti-icon-player-eject: unicode('efbc'); +$ti-icon-player-eject-filled: unicode('f68f'); +$ti-icon-player-pause: unicode('ed45'); +$ti-icon-player-pause-filled: unicode('f690'); +$ti-icon-player-play: unicode('ed46'); +$ti-icon-player-play-filled: unicode('f691'); +$ti-icon-player-record: unicode('ed47'); +$ti-icon-player-record-filled: unicode('f692'); +$ti-icon-player-skip-back: unicode('ed48'); +$ti-icon-player-skip-back-filled: unicode('f693'); +$ti-icon-player-skip-forward: unicode('ed49'); +$ti-icon-player-skip-forward-filled: unicode('f694'); +$ti-icon-player-stop: unicode('ed4a'); +$ti-icon-player-stop-filled: unicode('f695'); +$ti-icon-player-track-next: unicode('ed4b'); +$ti-icon-player-track-next-filled: unicode('f696'); +$ti-icon-player-track-prev: unicode('ed4c'); +$ti-icon-player-track-prev-filled: unicode('f697'); +$ti-icon-playlist: unicode('eec0'); +$ti-icon-playlist-add: unicode('f008'); +$ti-icon-playlist-off: unicode('f17f'); +$ti-icon-playlist-x: unicode('f009'); +$ti-icon-playstation-circle: unicode('f2ad'); +$ti-icon-playstation-square: unicode('f2ae'); +$ti-icon-playstation-triangle: unicode('f2af'); +$ti-icon-playstation-x: unicode('f2b0'); +$ti-icon-plug: unicode('ebd9'); +$ti-icon-plug-connected: unicode('f00a'); +$ti-icon-plug-connected-x: unicode('f0a0'); +$ti-icon-plug-off: unicode('f180'); +$ti-icon-plug-x: unicode('f0a1'); +$ti-icon-plus: unicode('eb0b'); +$ti-icon-plus-equal: unicode('f7ad'); +$ti-icon-plus-minus: unicode('f7ae'); +$ti-icon-png: unicode('f3ad'); +$ti-icon-podium: unicode('f1d8'); +$ti-icon-podium-off: unicode('f41b'); +$ti-icon-point: unicode('eb0c'); +$ti-icon-point-filled: unicode('f698'); +$ti-icon-point-off: unicode('f181'); +$ti-icon-pointer: unicode('f265'); +$ti-icon-pointer-bolt: unicode('f999'); +$ti-icon-pointer-cancel: unicode('f99a'); +$ti-icon-pointer-check: unicode('f99b'); +$ti-icon-pointer-code: unicode('f99c'); +$ti-icon-pointer-cog: unicode('f99d'); +$ti-icon-pointer-dollar: unicode('f99e'); +$ti-icon-pointer-down: unicode('f99f'); +$ti-icon-pointer-exclamation: unicode('f9a0'); +$ti-icon-pointer-filled: unicode('fb30'); +$ti-icon-pointer-heart: unicode('f9a1'); +$ti-icon-pointer-minus: unicode('f9a2'); +$ti-icon-pointer-off: unicode('f9a3'); +$ti-icon-pointer-pause: unicode('f9a4'); +$ti-icon-pointer-pin: unicode('f9a5'); +$ti-icon-pointer-plus: unicode('f9a6'); +$ti-icon-pointer-question: unicode('f9a7'); +$ti-icon-pointer-search: unicode('f9a8'); +$ti-icon-pointer-share: unicode('f9a9'); +$ti-icon-pointer-star: unicode('f9aa'); +$ti-icon-pointer-up: unicode('f9ab'); +$ti-icon-pointer-x: unicode('f9ac'); +$ti-icon-pokeball: unicode('eec1'); +$ti-icon-pokeball-off: unicode('f41c'); +$ti-icon-poker-chip: unicode('f515'); +$ti-icon-polaroid: unicode('eec2'); +$ti-icon-polaroid-filled: unicode('fa4b'); +$ti-icon-polygon: unicode('efd0'); +$ti-icon-polygon-off: unicode('f182'); +$ti-icon-poo: unicode('f258'); +$ti-icon-poo-filled: unicode('fec9'); +$ti-icon-pool: unicode('ed91'); +$ti-icon-pool-off: unicode('f41d'); +$ti-icon-power: unicode('eb0d'); +$ti-icon-pray: unicode('ecbf'); +$ti-icon-premium-rights: unicode('efbd'); +$ti-icon-prescription: unicode('ef99'); +$ti-icon-presentation: unicode('eb70'); +$ti-icon-presentation-analytics: unicode('eec3'); +$ti-icon-presentation-off: unicode('f183'); +$ti-icon-printer: unicode('eb0e'); +$ti-icon-printer-off: unicode('f184'); +$ti-icon-prism: unicode('fab1'); +$ti-icon-prism-light: unicode('fea6'); +$ti-icon-prism-off: unicode('faaf'); +$ti-icon-prism-plus: unicode('fab0'); +$ti-icon-prison: unicode('ef79'); +$ti-icon-progress: unicode('fa0d'); +$ti-icon-progress-alert: unicode('fa07'); +$ti-icon-progress-bolt: unicode('fa08'); +$ti-icon-progress-check: unicode('fa09'); +$ti-icon-progress-down: unicode('fa0a'); +$ti-icon-progress-help: unicode('fa0b'); +$ti-icon-progress-x: unicode('fa0c'); +$ti-icon-prompt: unicode('eb0f'); +$ti-icon-prong: unicode('fda1'); +$ti-icon-propeller: unicode('eec4'); +$ti-icon-propeller-off: unicode('f185'); +$ti-icon-protocol: unicode('fd81'); +$ti-icon-pumpkin-scary: unicode('f587'); +$ti-icon-puzzle: unicode('eb10'); +$ti-icon-puzzle-2: unicode('ef83'); +$ti-icon-puzzle-filled: unicode('f699'); +$ti-icon-puzzle-off: unicode('f186'); +$ti-icon-pyramid: unicode('eec5'); +$ti-icon-pyramid-off: unicode('f187'); +$ti-icon-pyramid-plus: unicode('fab2'); +$ti-icon-qrcode: unicode('eb11'); +$ti-icon-qrcode-off: unicode('f41e'); +$ti-icon-question-mark: unicode('ec9d'); +$ti-icon-quote: unicode('efbe'); +$ti-icon-quote-off: unicode('f188'); +$ti-icon-quotes: unicode('fb1e'); +$ti-icon-radar: unicode('f017'); +$ti-icon-radar-2: unicode('f016'); +$ti-icon-radar-filled: unicode('fe0d'); +$ti-icon-radar-off: unicode('f41f'); +$ti-icon-radio: unicode('ef2d'); +$ti-icon-radio-off: unicode('f420'); +$ti-icon-radioactive: unicode('ecc0'); +$ti-icon-radioactive-filled: unicode('f760'); +$ti-icon-radioactive-off: unicode('f189'); +$ti-icon-radius-bottom-left: unicode('eec6'); +$ti-icon-radius-bottom-right: unicode('eec7'); +$ti-icon-radius-top-left: unicode('eec8'); +$ti-icon-radius-top-right: unicode('eec9'); +$ti-icon-rainbow: unicode('edbc'); +$ti-icon-rainbow-off: unicode('f18a'); +$ti-icon-rating-12-plus: unicode('f266'); +$ti-icon-rating-14-plus: unicode('f267'); +$ti-icon-rating-16-plus: unicode('f268'); +$ti-icon-rating-18-plus: unicode('f269'); +$ti-icon-rating-21-plus: unicode('f26a'); +$ti-icon-razor: unicode('f4b5'); +$ti-icon-razor-electric: unicode('f4b4'); +$ti-icon-receipt: unicode('edfd'); +$ti-icon-receipt-2: unicode('edfa'); +$ti-icon-receipt-bitcoin: unicode('fd66'); +$ti-icon-receipt-dollar: unicode('fd67'); +$ti-icon-receipt-euro: unicode('fd68'); +$ti-icon-receipt-off: unicode('edfb'); +$ti-icon-receipt-pound: unicode('fd69'); +$ti-icon-receipt-refund: unicode('edfc'); +$ti-icon-receipt-rupee: unicode('fd82'); +$ti-icon-receipt-tax: unicode('edbd'); +$ti-icon-receipt-yen: unicode('fd6a'); +$ti-icon-receipt-yuan: unicode('fd6b'); +$ti-icon-recharging: unicode('eeca'); +$ti-icon-record-mail: unicode('eb12'); +$ti-icon-record-mail-off: unicode('f18b'); +$ti-icon-rectangle: unicode('ed37'); +$ti-icon-rectangle-filled: unicode('f69a'); +$ti-icon-rectangle-rounded-bottom: unicode('faed'); +$ti-icon-rectangle-rounded-top: unicode('faee'); +$ti-icon-rectangle-vertical: unicode('ed36'); +$ti-icon-rectangle-vertical-filled: unicode('f69b'); +$ti-icon-rectangular-prism: unicode('fab5'); +$ti-icon-rectangular-prism-off: unicode('fab3'); +$ti-icon-rectangular-prism-plus: unicode('fab4'); +$ti-icon-recycle: unicode('eb9b'); +$ti-icon-recycle-off: unicode('f18c'); +$ti-icon-refresh: unicode('eb13'); +$ti-icon-refresh-alert: unicode('ed57'); +$ti-icon-refresh-dot: unicode('efbf'); +$ti-icon-refresh-off: unicode('f18d'); +$ti-icon-regex: unicode('f31f'); +$ti-icon-regex-off: unicode('f421'); +$ti-icon-registered: unicode('eb14'); +$ti-icon-relation-many-to-many: unicode('ed7f'); +$ti-icon-relation-many-to-many-filled: unicode('fe0c'); +$ti-icon-relation-one-to-many: unicode('ed80'); +$ti-icon-relation-one-to-many-filled: unicode('fe0b'); +$ti-icon-relation-one-to-one: unicode('ed81'); +$ti-icon-relation-one-to-one-filled: unicode('fe0a'); +$ti-icon-reload: unicode('f3ae'); +$ti-icon-reorder: unicode('fc15'); +$ti-icon-repeat: unicode('eb72'); +$ti-icon-repeat-off: unicode('f18e'); +$ti-icon-repeat-once: unicode('eb71'); +$ti-icon-replace: unicode('ebc7'); +$ti-icon-replace-filled: unicode('f69c'); +$ti-icon-replace-off: unicode('f422'); +$ti-icon-report: unicode('eece'); +$ti-icon-report-analytics: unicode('eecb'); +$ti-icon-report-medical: unicode('eecc'); +$ti-icon-report-money: unicode('eecd'); +$ti-icon-report-off: unicode('f18f'); +$ti-icon-report-search: unicode('ef84'); +$ti-icon-reserved-line: unicode('f9f6'); +$ti-icon-resize: unicode('eecf'); +$ti-icon-restore: unicode('fafd'); +$ti-icon-rewind-backward-10: unicode('faba'); +$ti-icon-rewind-backward-15: unicode('fabb'); +$ti-icon-rewind-backward-20: unicode('fabc'); +$ti-icon-rewind-backward-30: unicode('fabd'); +$ti-icon-rewind-backward-40: unicode('fabe'); +$ti-icon-rewind-backward-5: unicode('fabf'); +$ti-icon-rewind-backward-50: unicode('fac0'); +$ti-icon-rewind-backward-60: unicode('fac1'); +$ti-icon-rewind-forward-10: unicode('fac2'); +$ti-icon-rewind-forward-15: unicode('fac3'); +$ti-icon-rewind-forward-20: unicode('fac4'); +$ti-icon-rewind-forward-30: unicode('fac5'); +$ti-icon-rewind-forward-40: unicode('fac6'); +$ti-icon-rewind-forward-5: unicode('fac7'); +$ti-icon-rewind-forward-50: unicode('fac8'); +$ti-icon-rewind-forward-60: unicode('fac9'); +$ti-icon-ribbon-health: unicode('f58e'); +$ti-icon-rings: unicode('fa6a'); +$ti-icon-ripple: unicode('ed82'); +$ti-icon-ripple-off: unicode('f190'); +$ti-icon-road: unicode('f018'); +$ti-icon-road-off: unicode('f191'); +$ti-icon-road-sign: unicode('ecdd'); +$ti-icon-robot: unicode('f00b'); +$ti-icon-robot-face: unicode('fcbe'); +$ti-icon-robot-off: unicode('f192'); +$ti-icon-rocket: unicode('ec45'); +$ti-icon-rocket-off: unicode('f193'); +$ti-icon-roller-skating: unicode('efd1'); +$ti-icon-rollercoaster: unicode('f0a2'); +$ti-icon-rollercoaster-off: unicode('f423'); +$ti-icon-rosette: unicode('f599'); +$ti-icon-rosette-discount: unicode('ee7c'); +$ti-icon-rosette-discount-check: unicode('f1f8'); +$ti-icon-rosette-discount-check-filled: unicode('f746'); +$ti-icon-rosette-discount-off: unicode('f3e6'); +$ti-icon-rosette-filled: unicode('f69d'); +$ti-icon-rosette-number-0: unicode('f58f'); +$ti-icon-rosette-number-1: unicode('f590'); +$ti-icon-rosette-number-2: unicode('f591'); +$ti-icon-rosette-number-3: unicode('f592'); +$ti-icon-rosette-number-4: unicode('f593'); +$ti-icon-rosette-number-5: unicode('f594'); +$ti-icon-rosette-number-6: unicode('f595'); +$ti-icon-rosette-number-7: unicode('f596'); +$ti-icon-rosette-number-8: unicode('f597'); +$ti-icon-rosette-number-9: unicode('f598'); +$ti-icon-rotate: unicode('eb16'); +$ti-icon-rotate-2: unicode('ebb4'); +$ti-icon-rotate-360: unicode('ef85'); +$ti-icon-rotate-3d: unicode('f020'); +$ti-icon-rotate-clockwise: unicode('eb15'); +$ti-icon-rotate-clockwise-2: unicode('ebb5'); +$ti-icon-rotate-dot: unicode('efe5'); +$ti-icon-rotate-rectangle: unicode('ec15'); +$ti-icon-route: unicode('eb17'); +$ti-icon-route-2: unicode('f4b6'); +$ti-icon-route-alt-left: unicode('fca9'); +$ti-icon-route-alt-right: unicode('fcaa'); +$ti-icon-route-off: unicode('f194'); +$ti-icon-route-scan: unicode('fcbf'); +$ti-icon-route-square: unicode('fcac'); +$ti-icon-route-square-2: unicode('fcab'); +$ti-icon-route-x: unicode('fcae'); +$ti-icon-route-x-2: unicode('fcad'); +$ti-icon-router: unicode('eb18'); +$ti-icon-router-off: unicode('f424'); +$ti-icon-row-insert-bottom: unicode('eed0'); +$ti-icon-row-insert-top: unicode('eed1'); +$ti-icon-row-remove: unicode('fafe'); +$ti-icon-rss: unicode('eb19'); +$ti-icon-rubber-stamp: unicode('f5ab'); +$ti-icon-rubber-stamp-off: unicode('f5aa'); +$ti-icon-ruler: unicode('eb1a'); +$ti-icon-ruler-2: unicode('eed2'); +$ti-icon-ruler-2-off: unicode('f195'); +$ti-icon-ruler-3: unicode('f290'); +$ti-icon-ruler-measure: unicode('f291'); +$ti-icon-ruler-off: unicode('f196'); +$ti-icon-run: unicode('ec82'); +$ti-icon-rv-truck: unicode('fcc0'); +$ti-icon-s-turn-down: unicode('f516'); +$ti-icon-s-turn-left: unicode('f517'); +$ti-icon-s-turn-right: unicode('f518'); +$ti-icon-s-turn-up: unicode('f519'); +$ti-icon-sailboat: unicode('ec83'); +$ti-icon-sailboat-2: unicode('f5f7'); +$ti-icon-sailboat-off: unicode('f425'); +$ti-icon-salad: unicode('f50a'); +$ti-icon-salt: unicode('ef16'); +$ti-icon-sandbox: unicode('fd6c'); +$ti-icon-satellite: unicode('eed3'); +$ti-icon-satellite-off: unicode('f197'); +$ti-icon-sausage: unicode('ef17'); +$ti-icon-scale: unicode('ebc2'); +$ti-icon-scale-off: unicode('f198'); +$ti-icon-scale-outline: unicode('ef53'); +$ti-icon-scale-outline-off: unicode('f199'); +$ti-icon-scan: unicode('ebc8'); +$ti-icon-scan-eye: unicode('f1ff'); +$ti-icon-scan-position: unicode('fdac'); +$ti-icon-schema: unicode('f200'); +$ti-icon-schema-off: unicode('f426'); +$ti-icon-school: unicode('ecf7'); +$ti-icon-school-bell: unicode('f64a'); +$ti-icon-school-off: unicode('f19a'); +$ti-icon-scissors: unicode('eb1b'); +$ti-icon-scissors-off: unicode('f19b'); +$ti-icon-scooter: unicode('ec6c'); +$ti-icon-scooter-electric: unicode('ecc1'); +$ti-icon-scoreboard: unicode('fa6b'); +$ti-icon-screen-share: unicode('ed18'); +$ti-icon-screen-share-off: unicode('ed17'); +$ti-icon-screenshot: unicode('f201'); +$ti-icon-scribble: unicode('f0a3'); +$ti-icon-scribble-off: unicode('f427'); +$ti-icon-script: unicode('f2da'); +$ti-icon-script-minus: unicode('f2d7'); +$ti-icon-script-plus: unicode('f2d8'); +$ti-icon-script-x: unicode('f2d9'); +$ti-icon-scuba-diving: unicode('fd4e'); +$ti-icon-scuba-mask: unicode('eed4'); +$ti-icon-scuba-mask-off: unicode('f428'); +$ti-icon-sdk: unicode('f3af'); +$ti-icon-search: unicode('eb1c'); +$ti-icon-search-off: unicode('f19c'); +$ti-icon-section: unicode('eed5'); +$ti-icon-section-filled: unicode('fe09'); +$ti-icon-section-sign: unicode('f019'); +$ti-icon-seeding: unicode('ed51'); +$ti-icon-seeding-off: unicode('f19d'); +$ti-icon-select: unicode('ec9e'); +$ti-icon-select-all: unicode('f9f7'); +$ti-icon-selector: unicode('eb1d'); +$ti-icon-send: unicode('eb1e'); +$ti-icon-send-2: unicode('fd5d'); +$ti-icon-send-off: unicode('f429'); +$ti-icon-seo: unicode('f26b'); +$ti-icon-separator: unicode('ebda'); +$ti-icon-separator-horizontal: unicode('ec79'); +$ti-icon-separator-vertical: unicode('ec7a'); +$ti-icon-server: unicode('eb1f'); +$ti-icon-server-2: unicode('f07c'); +$ti-icon-server-bolt: unicode('f320'); +$ti-icon-server-cog: unicode('f321'); +$ti-icon-server-off: unicode('f19e'); +$ti-icon-servicemark: unicode('ec09'); +$ti-icon-settings: unicode('eb20'); +$ti-icon-settings-2: unicode('f5ac'); +$ti-icon-settings-automation: unicode('eed6'); +$ti-icon-settings-bolt: unicode('f9ad'); +$ti-icon-settings-cancel: unicode('f9ae'); +$ti-icon-settings-check: unicode('f9af'); +$ti-icon-settings-code: unicode('f9b0'); +$ti-icon-settings-cog: unicode('f9b1'); +$ti-icon-settings-dollar: unicode('f9b2'); +$ti-icon-settings-down: unicode('f9b3'); +$ti-icon-settings-exclamation: unicode('f9b4'); +$ti-icon-settings-filled: unicode('f69e'); +$ti-icon-settings-heart: unicode('f9b5'); +$ti-icon-settings-minus: unicode('f9b6'); +$ti-icon-settings-off: unicode('f19f'); +$ti-icon-settings-pause: unicode('f9b7'); +$ti-icon-settings-pin: unicode('f9b8'); +$ti-icon-settings-plus: unicode('f9b9'); +$ti-icon-settings-question: unicode('f9ba'); +$ti-icon-settings-search: unicode('f9bb'); +$ti-icon-settings-share: unicode('f9bc'); +$ti-icon-settings-star: unicode('f9bd'); +$ti-icon-settings-up: unicode('f9be'); +$ti-icon-settings-x: unicode('f9bf'); +$ti-icon-shadow: unicode('eed8'); +$ti-icon-shadow-off: unicode('eed7'); +$ti-icon-shape: unicode('eb9c'); +$ti-icon-shape-2: unicode('eed9'); +$ti-icon-shape-3: unicode('eeda'); +$ti-icon-shape-off: unicode('f1a0'); +$ti-icon-share: unicode('eb21'); +$ti-icon-share-2: unicode('f799'); +$ti-icon-share-3: unicode('f7bd'); +$ti-icon-share-off: unicode('f1a1'); +$ti-icon-shareplay: unicode('fea5'); +$ti-icon-shield: unicode('eb24'); +$ti-icon-shield-bolt: unicode('f9c0'); +$ti-icon-shield-cancel: unicode('f9c1'); +$ti-icon-shield-check: unicode('eb22'); +$ti-icon-shield-check-filled: unicode('f761'); +$ti-icon-shield-checkered: unicode('ef9a'); +$ti-icon-shield-checkered-filled: unicode('f762'); +$ti-icon-shield-chevron: unicode('ef9b'); +$ti-icon-shield-code: unicode('f9c2'); +$ti-icon-shield-cog: unicode('f9c3'); +$ti-icon-shield-dollar: unicode('f9c4'); +$ti-icon-shield-down: unicode('f9c5'); +$ti-icon-shield-exclamation: unicode('f9c6'); +$ti-icon-shield-filled: unicode('f69f'); +$ti-icon-shield-half: unicode('f358'); +$ti-icon-shield-half-filled: unicode('f357'); +$ti-icon-shield-heart: unicode('f9c7'); +$ti-icon-shield-lock: unicode('ed58'); +$ti-icon-shield-lock-filled: unicode('f763'); +$ti-icon-shield-minus: unicode('f9c8'); +$ti-icon-shield-off: unicode('ecf8'); +$ti-icon-shield-pause: unicode('f9c9'); +$ti-icon-shield-pin: unicode('f9ca'); +$ti-icon-shield-plus: unicode('f9cb'); +$ti-icon-shield-question: unicode('f9cc'); +$ti-icon-shield-search: unicode('f9cd'); +$ti-icon-shield-share: unicode('f9ce'); +$ti-icon-shield-star: unicode('f9cf'); +$ti-icon-shield-up: unicode('f9d0'); +$ti-icon-shield-x: unicode('eb23'); +$ti-icon-ship: unicode('ec84'); +$ti-icon-ship-off: unicode('f42a'); +$ti-icon-shirt: unicode('ec0a'); +$ti-icon-shirt-filled: unicode('f6a0'); +$ti-icon-shirt-off: unicode('f1a2'); +$ti-icon-shirt-sport: unicode('f26c'); +$ti-icon-shoe: unicode('efd2'); +$ti-icon-shoe-off: unicode('f1a4'); +$ti-icon-shopping-bag: unicode('f5f8'); +$ti-icon-shopping-bag-check: unicode('fc16'); +$ti-icon-shopping-bag-discount: unicode('fc17'); +$ti-icon-shopping-bag-edit: unicode('fc18'); +$ti-icon-shopping-bag-exclamation: unicode('fc19'); +$ti-icon-shopping-bag-heart: unicode('fda2'); +$ti-icon-shopping-bag-minus: unicode('fc1a'); +$ti-icon-shopping-bag-plus: unicode('fc1b'); +$ti-icon-shopping-bag-search: unicode('fc1c'); +$ti-icon-shopping-bag-x: unicode('fc1d'); +$ti-icon-shopping-cart: unicode('eb25'); +$ti-icon-shopping-cart-bolt: unicode('fb57'); +$ti-icon-shopping-cart-cancel: unicode('fb58'); +$ti-icon-shopping-cart-check: unicode('fb59'); +$ti-icon-shopping-cart-code: unicode('fb5a'); +$ti-icon-shopping-cart-cog: unicode('fb5b'); +$ti-icon-shopping-cart-copy: unicode('fb5c'); +$ti-icon-shopping-cart-discount: unicode('fb5d'); +$ti-icon-shopping-cart-dollar: unicode('fb5e'); +$ti-icon-shopping-cart-down: unicode('fb5f'); +$ti-icon-shopping-cart-exclamation: unicode('fb60'); +$ti-icon-shopping-cart-filled: unicode('fc3f'); +$ti-icon-shopping-cart-heart: unicode('fb61'); +$ti-icon-shopping-cart-minus: unicode('fb62'); +$ti-icon-shopping-cart-off: unicode('eedc'); +$ti-icon-shopping-cart-pause: unicode('fb63'); +$ti-icon-shopping-cart-pin: unicode('fb64'); +$ti-icon-shopping-cart-plus: unicode('fb65'); +$ti-icon-shopping-cart-question: unicode('fb66'); +$ti-icon-shopping-cart-search: unicode('fb67'); +$ti-icon-shopping-cart-share: unicode('fb68'); +$ti-icon-shopping-cart-star: unicode('fb69'); +$ti-icon-shopping-cart-up: unicode('fb6a'); +$ti-icon-shopping-cart-x: unicode('fb6b'); +$ti-icon-shovel: unicode('f1d9'); +$ti-icon-shovel-pitchforks: unicode('fd3a'); +$ti-icon-shredder: unicode('eedf'); +$ti-icon-sign-left: unicode('f06b'); +$ti-icon-sign-left-filled: unicode('f6a1'); +$ti-icon-sign-right: unicode('f06c'); +$ti-icon-sign-right-filled: unicode('f6a2'); +$ti-icon-signal-2g: unicode('f79a'); +$ti-icon-signal-3g: unicode('f1ee'); +$ti-icon-signal-4g: unicode('f1ef'); +$ti-icon-signal-4g-plus: unicode('f259'); +$ti-icon-signal-5g: unicode('f1f0'); +$ti-icon-signal-6g: unicode('f9f8'); +$ti-icon-signal-e: unicode('f9f9'); +$ti-icon-signal-g: unicode('f9fa'); +$ti-icon-signal-h: unicode('f9fc'); +$ti-icon-signal-h-plus: unicode('f9fb'); +$ti-icon-signal-lte: unicode('f9fd'); +$ti-icon-signature: unicode('eee0'); +$ti-icon-signature-off: unicode('f1a5'); +$ti-icon-sitemap: unicode('eb9d'); +$ti-icon-sitemap-off: unicode('f1a6'); +$ti-icon-skateboard: unicode('ecc2'); +$ti-icon-skateboard-off: unicode('f42b'); +$ti-icon-skateboarding: unicode('faca'); +$ti-icon-skew-x: unicode('fd3b'); +$ti-icon-skew-y: unicode('fd3c'); +$ti-icon-ski-jumping: unicode('fa6c'); +$ti-icon-skull: unicode('f292'); +$ti-icon-slash: unicode('f4f9'); +$ti-icon-slashes: unicode('f588'); +$ti-icon-sleigh: unicode('ef9c'); +$ti-icon-slice: unicode('ebdb'); +$ti-icon-slideshow: unicode('ebc9'); +$ti-icon-smart-home: unicode('ecde'); +$ti-icon-smart-home-off: unicode('f1a7'); +$ti-icon-smoking: unicode('ecc4'); +$ti-icon-smoking-no: unicode('ecc3'); +$ti-icon-snowboarding: unicode('fd4f'); +$ti-icon-snowflake: unicode('ec0b'); +$ti-icon-snowflake-off: unicode('f1a8'); +$ti-icon-snowman: unicode('f26d'); +$ti-icon-soccer-field: unicode('ed92'); +$ti-icon-social: unicode('ebec'); +$ti-icon-social-off: unicode('f1a9'); +$ti-icon-sock: unicode('eee1'); +$ti-icon-sofa: unicode('efaf'); +$ti-icon-sofa-off: unicode('f42c'); +$ti-icon-solar-electricity: unicode('fcc1'); +$ti-icon-solar-panel: unicode('f7bf'); +$ti-icon-solar-panel-2: unicode('f7be'); +$ti-icon-sort-0-9: unicode('f54d'); +$ti-icon-sort-9-0: unicode('f54e'); +$ti-icon-sort-a-z: unicode('f54f'); +$ti-icon-sort-ascending: unicode('eb26'); +$ti-icon-sort-ascending-2: unicode('eee2'); +$ti-icon-sort-ascending-letters: unicode('ef18'); +$ti-icon-sort-ascending-numbers: unicode('ef19'); +$ti-icon-sort-ascending-shapes: unicode('fd94'); +$ti-icon-sort-ascending-small-big: unicode('fd95'); +$ti-icon-sort-descending: unicode('eb27'); +$ti-icon-sort-descending-2: unicode('eee3'); +$ti-icon-sort-descending-letters: unicode('ef1a'); +$ti-icon-sort-descending-numbers: unicode('ef1b'); +$ti-icon-sort-descending-shapes: unicode('fd97'); +$ti-icon-sort-descending-small-big: unicode('fd96'); +$ti-icon-sort-z-a: unicode('f550'); +$ti-icon-sos: unicode('f24a'); +$ti-icon-soup: unicode('ef2e'); +$ti-icon-soup-filled: unicode('fe08'); +$ti-icon-soup-off: unicode('f42d'); +$ti-icon-source-code: unicode('f4a2'); +$ti-icon-space: unicode('ec0c'); +$ti-icon-space-off: unicode('f1aa'); +$ti-icon-spaces: unicode('fea4'); +$ti-icon-spacing-horizontal: unicode('ef54'); +$ti-icon-spacing-vertical: unicode('ef55'); +$ti-icon-spade: unicode('effa'); +$ti-icon-spade-filled: unicode('f6a3'); +$ti-icon-sparkles: unicode('f6d7'); +$ti-icon-speakerphone: unicode('ed61'); +$ti-icon-speedboat: unicode('ed93'); +$ti-icon-sphere: unicode('fab8'); +$ti-icon-sphere-off: unicode('fab6'); +$ti-icon-sphere-plus: unicode('fab7'); +$ti-icon-spider: unicode('f293'); +$ti-icon-spiral: unicode('f294'); +$ti-icon-spiral-off: unicode('f42e'); +$ti-icon-sport-billard: unicode('eee4'); +$ti-icon-spray: unicode('f50b'); +$ti-icon-spy: unicode('f227'); +$ti-icon-spy-off: unicode('f42f'); +$ti-icon-sql: unicode('f7c0'); +$ti-icon-square: unicode('eb2c'); +$ti-icon-square-arrow-down: unicode('f4b7'); +$ti-icon-square-arrow-down-filled: unicode('fb31'); +$ti-icon-square-arrow-left: unicode('f4b8'); +$ti-icon-square-arrow-left-filled: unicode('fb32'); +$ti-icon-square-arrow-right: unicode('f4b9'); +$ti-icon-square-arrow-right-filled: unicode('fb33'); +$ti-icon-square-arrow-up: unicode('f4ba'); +$ti-icon-square-arrow-up-filled: unicode('fb34'); +$ti-icon-square-asterisk: unicode('f01a'); +$ti-icon-square-asterisk-filled: unicode('fb35'); +$ti-icon-square-check: unicode('eb28'); +$ti-icon-square-check-filled: unicode('f76d'); +$ti-icon-square-chevron-down: unicode('f627'); +$ti-icon-square-chevron-down-filled: unicode('fb36'); +$ti-icon-square-chevron-left: unicode('f628'); +$ti-icon-square-chevron-left-filled: unicode('fb37'); +$ti-icon-square-chevron-right: unicode('f629'); +$ti-icon-square-chevron-right-filled: unicode('fb38'); +$ti-icon-square-chevron-up: unicode('f62a'); +$ti-icon-square-chevron-up-filled: unicode('fb39'); +$ti-icon-square-chevrons-down: unicode('f64b'); +$ti-icon-square-chevrons-down-filled: unicode('fb3a'); +$ti-icon-square-chevrons-left: unicode('f64c'); +$ti-icon-square-chevrons-left-filled: unicode('fb3b'); +$ti-icon-square-chevrons-right: unicode('f64d'); +$ti-icon-square-chevrons-right-filled: unicode('fb3c'); +$ti-icon-square-chevrons-up: unicode('f64e'); +$ti-icon-square-chevrons-up-filled: unicode('fb3d'); +$ti-icon-square-dot: unicode('ed59'); +$ti-icon-square-dot-filled: unicode('fb3e'); +$ti-icon-square-f0: unicode('f526'); +$ti-icon-square-f0-filled: unicode('f76e'); +$ti-icon-square-f1: unicode('f527'); +$ti-icon-square-f1-filled: unicode('f76f'); +$ti-icon-square-f2: unicode('f528'); +$ti-icon-square-f2-filled: unicode('f770'); +$ti-icon-square-f3: unicode('f529'); +$ti-icon-square-f3-filled: unicode('f771'); +$ti-icon-square-f4: unicode('f52a'); +$ti-icon-square-f4-filled: unicode('f772'); +$ti-icon-square-f5: unicode('f52b'); +$ti-icon-square-f5-filled: unicode('f773'); +$ti-icon-square-f6: unicode('f52c'); +$ti-icon-square-f6-filled: unicode('f774'); +$ti-icon-square-f7: unicode('f52d'); +$ti-icon-square-f7-filled: unicode('f775'); +$ti-icon-square-f8: unicode('f52e'); +$ti-icon-square-f8-filled: unicode('f776'); +$ti-icon-square-f9: unicode('f52f'); +$ti-icon-square-f9-filled: unicode('f777'); +$ti-icon-square-filled: unicode('fc40'); +$ti-icon-square-forbid: unicode('ed5b'); +$ti-icon-square-forbid-2: unicode('ed5a'); +$ti-icon-square-half: unicode('effb'); +$ti-icon-square-key: unicode('f638'); +$ti-icon-square-letter-a: unicode('f47c'); +$ti-icon-square-letter-a-filled: unicode('fe07'); +$ti-icon-square-letter-b: unicode('f47d'); +$ti-icon-square-letter-b-filled: unicode('fe06'); +$ti-icon-square-letter-c: unicode('f47e'); +$ti-icon-square-letter-c-filled: unicode('fe05'); +$ti-icon-square-letter-d: unicode('f47f'); +$ti-icon-square-letter-d-filled: unicode('fe04'); +$ti-icon-square-letter-e: unicode('f480'); +$ti-icon-square-letter-e-filled: unicode('fe03'); +$ti-icon-square-letter-f: unicode('f481'); +$ti-icon-square-letter-f-filled: unicode('fe02'); +$ti-icon-square-letter-g: unicode('f482'); +$ti-icon-square-letter-g-filled: unicode('fe01'); +$ti-icon-square-letter-h: unicode('f483'); +$ti-icon-square-letter-h-filled: unicode('fe00'); +$ti-icon-square-letter-i: unicode('f484'); +$ti-icon-square-letter-i-filled: unicode('fdff'); +$ti-icon-square-letter-j: unicode('f485'); +$ti-icon-square-letter-j-filled: unicode('fdfe'); +$ti-icon-square-letter-k: unicode('f486'); +$ti-icon-square-letter-k-filled: unicode('fdfd'); +$ti-icon-square-letter-l: unicode('f487'); +$ti-icon-square-letter-l-filled: unicode('fdfc'); +$ti-icon-square-letter-m: unicode('f488'); +$ti-icon-square-letter-m-filled: unicode('fdfb'); +$ti-icon-square-letter-n: unicode('f489'); +$ti-icon-square-letter-n-filled: unicode('fdfa'); +$ti-icon-square-letter-o: unicode('f48a'); +$ti-icon-square-letter-o-filled: unicode('fdf9'); +$ti-icon-square-letter-p: unicode('f48b'); +$ti-icon-square-letter-p-filled: unicode('fdf8'); +$ti-icon-square-letter-q: unicode('f48c'); +$ti-icon-square-letter-q-filled: unicode('fdf7'); +$ti-icon-square-letter-r: unicode('f48d'); +$ti-icon-square-letter-r-filled: unicode('fdf6'); +$ti-icon-square-letter-s: unicode('f48e'); +$ti-icon-square-letter-s-filled: unicode('fdf5'); +$ti-icon-square-letter-t: unicode('f48f'); +$ti-icon-square-letter-t-filled: unicode('fdf4'); +$ti-icon-square-letter-u: unicode('f490'); +$ti-icon-square-letter-u-filled: unicode('fdf3'); +$ti-icon-square-letter-v: unicode('f4bb'); +$ti-icon-square-letter-v-filled: unicode('fdf2'); +$ti-icon-square-letter-w: unicode('f491'); +$ti-icon-square-letter-w-filled: unicode('fdf1'); +$ti-icon-square-letter-x: unicode('f4bc'); +$ti-icon-square-letter-x-filled: unicode('fdf0'); +$ti-icon-square-letter-y: unicode('f492'); +$ti-icon-square-letter-y-filled: unicode('fdef'); +$ti-icon-square-letter-z: unicode('f493'); +$ti-icon-square-letter-z-filled: unicode('fdee'); +$ti-icon-square-minus: unicode('eb29'); +$ti-icon-square-minus-filled: unicode('fb3f'); +$ti-icon-square-number-0: unicode('eee5'); +$ti-icon-square-number-0-filled: unicode('f764'); +$ti-icon-square-number-1: unicode('eee6'); +$ti-icon-square-number-1-filled: unicode('f765'); +$ti-icon-square-number-2: unicode('eee7'); +$ti-icon-square-number-2-filled: unicode('f7fa'); +$ti-icon-square-number-3: unicode('eee8'); +$ti-icon-square-number-3-filled: unicode('f766'); +$ti-icon-square-number-4: unicode('eee9'); +$ti-icon-square-number-4-filled: unicode('f767'); +$ti-icon-square-number-5: unicode('eeea'); +$ti-icon-square-number-5-filled: unicode('f768'); +$ti-icon-square-number-6: unicode('eeeb'); +$ti-icon-square-number-6-filled: unicode('f769'); +$ti-icon-square-number-7: unicode('eeec'); +$ti-icon-square-number-7-filled: unicode('f76a'); +$ti-icon-square-number-8: unicode('eeed'); +$ti-icon-square-number-8-filled: unicode('f76b'); +$ti-icon-square-number-9: unicode('eeee'); +$ti-icon-square-number-9-filled: unicode('f76c'); +$ti-icon-square-off: unicode('eeef'); +$ti-icon-square-percentage: unicode('fd83'); +$ti-icon-square-plus: unicode('eb2a'); +$ti-icon-square-plus-2: unicode('fc96'); +$ti-icon-square-root: unicode('eef1'); +$ti-icon-square-root-2: unicode('eef0'); +$ti-icon-square-rotated: unicode('ecdf'); +$ti-icon-square-rotated-filled: unicode('f6a4'); +$ti-icon-square-rotated-forbid: unicode('f01c'); +$ti-icon-square-rotated-forbid-2: unicode('f01b'); +$ti-icon-square-rotated-off: unicode('eef2'); +$ti-icon-square-rounded: unicode('f59a'); +$ti-icon-square-rounded-arrow-down: unicode('f639'); +$ti-icon-square-rounded-arrow-down-filled: unicode('f6db'); +$ti-icon-square-rounded-arrow-left: unicode('f63a'); +$ti-icon-square-rounded-arrow-left-filled: unicode('f6dc'); +$ti-icon-square-rounded-arrow-right: unicode('f63b'); +$ti-icon-square-rounded-arrow-right-filled: unicode('f6dd'); +$ti-icon-square-rounded-arrow-up: unicode('f63c'); +$ti-icon-square-rounded-arrow-up-filled: unicode('f6de'); +$ti-icon-square-rounded-check: unicode('f63d'); +$ti-icon-square-rounded-check-filled: unicode('f6df'); +$ti-icon-square-rounded-chevron-down: unicode('f62b'); +$ti-icon-square-rounded-chevron-down-filled: unicode('f6e0'); +$ti-icon-square-rounded-chevron-left: unicode('f62c'); +$ti-icon-square-rounded-chevron-left-filled: unicode('f6e1'); +$ti-icon-square-rounded-chevron-right: unicode('f62d'); +$ti-icon-square-rounded-chevron-right-filled: unicode('f6e2'); +$ti-icon-square-rounded-chevron-up: unicode('f62e'); +$ti-icon-square-rounded-chevron-up-filled: unicode('f6e3'); +$ti-icon-square-rounded-chevrons-down: unicode('f64f'); +$ti-icon-square-rounded-chevrons-down-filled: unicode('f6e4'); +$ti-icon-square-rounded-chevrons-left: unicode('f650'); +$ti-icon-square-rounded-chevrons-left-filled: unicode('f6e5'); +$ti-icon-square-rounded-chevrons-right: unicode('f651'); +$ti-icon-square-rounded-chevrons-right-filled: unicode('f6e6'); +$ti-icon-square-rounded-chevrons-up: unicode('f652'); +$ti-icon-square-rounded-chevrons-up-filled: unicode('f6e7'); +$ti-icon-square-rounded-filled: unicode('f6a5'); +$ti-icon-square-rounded-letter-a: unicode('f5ae'); +$ti-icon-square-rounded-letter-a-filled: unicode('fded'); +$ti-icon-square-rounded-letter-b: unicode('f5af'); +$ti-icon-square-rounded-letter-b-filled: unicode('fdec'); +$ti-icon-square-rounded-letter-c: unicode('f5b0'); +$ti-icon-square-rounded-letter-c-filled: unicode('fdeb'); +$ti-icon-square-rounded-letter-d: unicode('f5b1'); +$ti-icon-square-rounded-letter-d-filled: unicode('fdea'); +$ti-icon-square-rounded-letter-e: unicode('f5b2'); +$ti-icon-square-rounded-letter-e-filled: unicode('fde9'); +$ti-icon-square-rounded-letter-f: unicode('f5b3'); +$ti-icon-square-rounded-letter-f-filled: unicode('fde8'); +$ti-icon-square-rounded-letter-g: unicode('f5b4'); +$ti-icon-square-rounded-letter-g-filled: unicode('fde7'); +$ti-icon-square-rounded-letter-h: unicode('f5b5'); +$ti-icon-square-rounded-letter-h-filled: unicode('fde6'); +$ti-icon-square-rounded-letter-i: unicode('f5b6'); +$ti-icon-square-rounded-letter-i-filled: unicode('fde5'); +$ti-icon-square-rounded-letter-j: unicode('f5b7'); +$ti-icon-square-rounded-letter-j-filled: unicode('fde4'); +$ti-icon-square-rounded-letter-k: unicode('f5b8'); +$ti-icon-square-rounded-letter-k-filled: unicode('fde3'); +$ti-icon-square-rounded-letter-l: unicode('f5b9'); +$ti-icon-square-rounded-letter-l-filled: unicode('fde2'); +$ti-icon-square-rounded-letter-m: unicode('f5ba'); +$ti-icon-square-rounded-letter-m-filled: unicode('fde1'); +$ti-icon-square-rounded-letter-n: unicode('f5bb'); +$ti-icon-square-rounded-letter-n-filled: unicode('fde0'); +$ti-icon-square-rounded-letter-o: unicode('f5bc'); +$ti-icon-square-rounded-letter-o-filled: unicode('fddf'); +$ti-icon-square-rounded-letter-p: unicode('f5bd'); +$ti-icon-square-rounded-letter-p-filled: unicode('fdde'); +$ti-icon-square-rounded-letter-q: unicode('f5be'); +$ti-icon-square-rounded-letter-q-filled: unicode('fddd'); +$ti-icon-square-rounded-letter-r: unicode('f5bf'); +$ti-icon-square-rounded-letter-r-filled: unicode('fddc'); +$ti-icon-square-rounded-letter-s: unicode('f5c0'); +$ti-icon-square-rounded-letter-s-filled: unicode('fddb'); +$ti-icon-square-rounded-letter-t: unicode('f5c1'); +$ti-icon-square-rounded-letter-t-filled: unicode('fdda'); +$ti-icon-square-rounded-letter-u: unicode('f5c2'); +$ti-icon-square-rounded-letter-u-filled: unicode('fdd9'); +$ti-icon-square-rounded-letter-v: unicode('f5c3'); +$ti-icon-square-rounded-letter-v-filled: unicode('fdd8'); +$ti-icon-square-rounded-letter-w: unicode('f5c4'); +$ti-icon-square-rounded-letter-w-filled: unicode('fdd7'); +$ti-icon-square-rounded-letter-x: unicode('f5c5'); +$ti-icon-square-rounded-letter-x-filled: unicode('fdd6'); +$ti-icon-square-rounded-letter-y: unicode('f5c6'); +$ti-icon-square-rounded-letter-y-filled: unicode('fdd5'); +$ti-icon-square-rounded-letter-z: unicode('f5c7'); +$ti-icon-square-rounded-letter-z-filled: unicode('fdd4'); +$ti-icon-square-rounded-minus: unicode('f63e'); +$ti-icon-square-rounded-minus-2: unicode('fc97'); +$ti-icon-square-rounded-minus-filled: unicode('fb40'); +$ti-icon-square-rounded-number-0: unicode('f5c8'); +$ti-icon-square-rounded-number-0-filled: unicode('f778'); +$ti-icon-square-rounded-number-1: unicode('f5c9'); +$ti-icon-square-rounded-number-1-filled: unicode('f779'); +$ti-icon-square-rounded-number-2: unicode('f5ca'); +$ti-icon-square-rounded-number-2-filled: unicode('f77a'); +$ti-icon-square-rounded-number-3: unicode('f5cb'); +$ti-icon-square-rounded-number-3-filled: unicode('f77b'); +$ti-icon-square-rounded-number-4: unicode('f5cc'); +$ti-icon-square-rounded-number-4-filled: unicode('f77c'); +$ti-icon-square-rounded-number-5: unicode('f5cd'); +$ti-icon-square-rounded-number-5-filled: unicode('f77d'); +$ti-icon-square-rounded-number-6: unicode('f5ce'); +$ti-icon-square-rounded-number-6-filled: unicode('f77e'); +$ti-icon-square-rounded-number-7: unicode('f5cf'); +$ti-icon-square-rounded-number-7-filled: unicode('f77f'); +$ti-icon-square-rounded-number-8: unicode('f5d0'); +$ti-icon-square-rounded-number-8-filled: unicode('f780'); +$ti-icon-square-rounded-number-9: unicode('f5d1'); +$ti-icon-square-rounded-number-9-filled: unicode('f781'); +$ti-icon-square-rounded-percentage: unicode('fd84'); +$ti-icon-square-rounded-plus: unicode('f63f'); +$ti-icon-square-rounded-plus-2: unicode('fc98'); +$ti-icon-square-rounded-plus-filled: unicode('f6e8'); +$ti-icon-square-rounded-x: unicode('f640'); +$ti-icon-square-rounded-x-filled: unicode('f6e9'); +$ti-icon-square-toggle: unicode('eef4'); +$ti-icon-square-toggle-horizontal: unicode('eef3'); +$ti-icon-square-x: unicode('eb2b'); +$ti-icon-square-x-filled: unicode('fb41'); +$ti-icon-squares: unicode('eef6'); +$ti-icon-squares-diagonal: unicode('eef5'); +$ti-icon-squares-filled: unicode('fe9f'); +$ti-icon-squares-selected: unicode('fea3'); +$ti-icon-stack: unicode('eb2d'); +$ti-icon-stack-2: unicode('eef7'); +$ti-icon-stack-2-filled: unicode('fdd3'); +$ti-icon-stack-3: unicode('ef9d'); +$ti-icon-stack-3-filled: unicode('fdd2'); +$ti-icon-stack-back: unicode('fd26'); +$ti-icon-stack-backward: unicode('fd27'); +$ti-icon-stack-filled: unicode('fdd1'); +$ti-icon-stack-forward: unicode('fd28'); +$ti-icon-stack-front: unicode('fd29'); +$ti-icon-stack-middle: unicode('fd2a'); +$ti-icon-stack-pop: unicode('f234'); +$ti-icon-stack-push: unicode('f235'); +$ti-icon-stairs: unicode('eca6'); +$ti-icon-stairs-down: unicode('eca4'); +$ti-icon-stairs-up: unicode('eca5'); +$ti-icon-star: unicode('eb2e'); +$ti-icon-star-filled: unicode('f6a6'); +$ti-icon-star-half: unicode('ed19'); +$ti-icon-star-half-filled: unicode('f6a7'); +$ti-icon-star-off: unicode('ed62'); +$ti-icon-stars: unicode('ed38'); +$ti-icon-stars-filled: unicode('f6a8'); +$ti-icon-stars-off: unicode('f430'); +$ti-icon-status-change: unicode('f3b0'); +$ti-icon-steam: unicode('f24b'); +$ti-icon-steering-wheel: unicode('ec7b'); +$ti-icon-steering-wheel-off: unicode('f431'); +$ti-icon-step-into: unicode('ece0'); +$ti-icon-step-out: unicode('ece1'); +$ti-icon-stereo-glasses: unicode('f4cb'); +$ti-icon-stethoscope: unicode('edbe'); +$ti-icon-stethoscope-off: unicode('f432'); +$ti-icon-sticker: unicode('eb2f'); +$ti-icon-sticker-2: unicode('fd3d'); +$ti-icon-storm: unicode('f24c'); +$ti-icon-storm-off: unicode('f433'); +$ti-icon-stretching: unicode('f2db'); +$ti-icon-stretching-2: unicode('fa6d'); +$ti-icon-strikethrough: unicode('eb9e'); +$ti-icon-submarine: unicode('ed94'); +$ti-icon-subscript: unicode('eb9f'); +$ti-icon-subtask: unicode('ec9f'); +$ti-icon-sum: unicode('eb73'); +$ti-icon-sum-off: unicode('f1ab'); +$ti-icon-sun: unicode('eb30'); +$ti-icon-sun-electricity: unicode('fcc2'); +$ti-icon-sun-filled: unicode('f6a9'); +$ti-icon-sun-high: unicode('f236'); +$ti-icon-sun-low: unicode('f237'); +$ti-icon-sun-moon: unicode('f4a3'); +$ti-icon-sun-off: unicode('ed63'); +$ti-icon-sun-wind: unicode('f238'); +$ti-icon-sunglasses: unicode('f239'); +$ti-icon-sunglasses-filled: unicode('fec8'); +$ti-icon-sunrise: unicode('ef1c'); +$ti-icon-sunset: unicode('ec31'); +$ti-icon-sunset-2: unicode('f23a'); +$ti-icon-superscript: unicode('eba0'); +$ti-icon-svg: unicode('f25a'); +$ti-icon-swimming: unicode('ec92'); +$ti-icon-swipe: unicode('f551'); +$ti-icon-swipe-down: unicode('fd5e'); +$ti-icon-swipe-left: unicode('fd5f'); +$ti-icon-swipe-right: unicode('fd60'); +$ti-icon-swipe-up: unicode('fd61'); +$ti-icon-switch: unicode('eb33'); +$ti-icon-switch-2: unicode('edbf'); +$ti-icon-switch-3: unicode('edc0'); +$ti-icon-switch-horizontal: unicode('eb31'); +$ti-icon-switch-vertical: unicode('eb32'); +$ti-icon-sword: unicode('f030'); +$ti-icon-sword-off: unicode('f434'); +$ti-icon-swords: unicode('f132'); +$ti-icon-table: unicode('eba1'); +$ti-icon-table-alias: unicode('f25b'); +$ti-icon-table-column: unicode('faff'); +$ti-icon-table-down: unicode('fa1c'); +$ti-icon-table-export: unicode('eef8'); +$ti-icon-table-filled: unicode('f782'); +$ti-icon-table-heart: unicode('fa1d'); +$ti-icon-table-import: unicode('eef9'); +$ti-icon-table-minus: unicode('fa1e'); +$ti-icon-table-off: unicode('eefa'); +$ti-icon-table-options: unicode('f25c'); +$ti-icon-table-plus: unicode('fa1f'); +$ti-icon-table-row: unicode('fb00'); +$ti-icon-table-share: unicode('fa20'); +$ti-icon-table-shortcut: unicode('f25d'); +$ti-icon-tag: unicode('eb34'); +$ti-icon-tag-off: unicode('efc0'); +$ti-icon-tag-starred: unicode('fc99'); +$ti-icon-tags: unicode('ef86'); +$ti-icon-tags-off: unicode('efc1'); +$ti-icon-tallymark-1: unicode('ec46'); +$ti-icon-tallymark-2: unicode('ec47'); +$ti-icon-tallymark-3: unicode('ec48'); +$ti-icon-tallymark-4: unicode('ec49'); +$ti-icon-tallymarks: unicode('ec4a'); +$ti-icon-tank: unicode('ed95'); +$ti-icon-target: unicode('eb35'); +$ti-icon-target-arrow: unicode('f51a'); +$ti-icon-target-off: unicode('f1ad'); +$ti-icon-teapot: unicode('f552'); +$ti-icon-telescope: unicode('f07d'); +$ti-icon-telescope-off: unicode('f1ae'); +$ti-icon-temperature: unicode('eb38'); +$ti-icon-temperature-celsius: unicode('eb36'); +$ti-icon-temperature-fahrenheit: unicode('eb37'); +$ti-icon-temperature-minus: unicode('ebed'); +$ti-icon-temperature-off: unicode('f1af'); +$ti-icon-temperature-plus: unicode('ebee'); +$ti-icon-temperature-snow: unicode('fda3'); +$ti-icon-temperature-sun: unicode('fda4'); +$ti-icon-template: unicode('eb39'); +$ti-icon-template-off: unicode('f1b0'); +$ti-icon-tent: unicode('eefb'); +$ti-icon-tent-off: unicode('f435'); +$ti-icon-terminal: unicode('ebdc'); +$ti-icon-terminal-2: unicode('ebef'); +$ti-icon-test-pipe: unicode('eb3a'); +$ti-icon-test-pipe-2: unicode('f0a4'); +$ti-icon-test-pipe-off: unicode('f1b1'); +$ti-icon-tex: unicode('f4e0'); +$ti-icon-text-caption: unicode('f4a4'); +$ti-icon-text-color: unicode('f2dc'); +$ti-icon-text-decrease: unicode('f202'); +$ti-icon-text-direction-ltr: unicode('eefc'); +$ti-icon-text-direction-rtl: unicode('eefd'); +$ti-icon-text-grammar: unicode('fd6d'); +$ti-icon-text-increase: unicode('f203'); +$ti-icon-text-orientation: unicode('f2a4'); +$ti-icon-text-plus: unicode('f2a5'); +$ti-icon-text-recognition: unicode('f204'); +$ti-icon-text-resize: unicode('ef87'); +$ti-icon-text-scan-2: unicode('fcc3'); +$ti-icon-text-size: unicode('f2b1'); +$ti-icon-text-spellcheck: unicode('f2a6'); +$ti-icon-text-wrap: unicode('ebdd'); +$ti-icon-text-wrap-column: unicode('feb2'); +$ti-icon-text-wrap-disabled: unicode('eca7'); +$ti-icon-texture: unicode('f51b'); +$ti-icon-theater: unicode('f79b'); +$ti-icon-thermometer: unicode('ef67'); +$ti-icon-thumb-down: unicode('eb3b'); +$ti-icon-thumb-down-filled: unicode('f6aa'); +$ti-icon-thumb-down-off: unicode('f436'); +$ti-icon-thumb-up: unicode('eb3c'); +$ti-icon-thumb-up-filled: unicode('f6ab'); +$ti-icon-thumb-up-off: unicode('f437'); +$ti-icon-tic-tac: unicode('f51c'); +$ti-icon-ticket: unicode('eb3d'); +$ti-icon-ticket-off: unicode('f1b2'); +$ti-icon-tie: unicode('f07e'); +$ti-icon-tilde: unicode('f4a5'); +$ti-icon-tilt-shift: unicode('eefe'); +$ti-icon-tilt-shift-filled: unicode('fec7'); +$ti-icon-tilt-shift-off: unicode('f1b3'); +$ti-icon-time-duration-0: unicode('fad4'); +$ti-icon-time-duration-10: unicode('fad5'); +$ti-icon-time-duration-15: unicode('fad6'); +$ti-icon-time-duration-30: unicode('fad7'); +$ti-icon-time-duration-45: unicode('fad8'); +$ti-icon-time-duration-5: unicode('fad9'); +$ti-icon-time-duration-60: unicode('fada'); +$ti-icon-time-duration-90: unicode('fadb'); +$ti-icon-time-duration-off: unicode('fadc'); +$ti-icon-timeline: unicode('f031'); +$ti-icon-timeline-event: unicode('f553'); +$ti-icon-timeline-event-exclamation: unicode('f662'); +$ti-icon-timeline-event-filled: unicode('fd18'); +$ti-icon-timeline-event-minus: unicode('f663'); +$ti-icon-timeline-event-plus: unicode('f664'); +$ti-icon-timeline-event-text: unicode('f665'); +$ti-icon-timeline-event-x: unicode('f666'); +$ti-icon-tir: unicode('ebf0'); +$ti-icon-toggle-left: unicode('eb3e'); +$ti-icon-toggle-left-filled: unicode('fec0'); +$ti-icon-toggle-right: unicode('eb3f'); +$ti-icon-toggle-right-filled: unicode('febf'); +$ti-icon-toilet-paper: unicode('efd3'); +$ti-icon-toilet-paper-off: unicode('f1b4'); +$ti-icon-toml: unicode('fa5d'); +$ti-icon-tool: unicode('eb40'); +$ti-icon-tools: unicode('ebca'); +$ti-icon-tools-kitchen: unicode('ed64'); +$ti-icon-tools-kitchen-2: unicode('eeff'); +$ti-icon-tools-kitchen-2-off: unicode('f1b5'); +$ti-icon-tools-kitchen-3: unicode('fd2b'); +$ti-icon-tools-kitchen-off: unicode('f1b6'); +$ti-icon-tools-off: unicode('f1b7'); +$ti-icon-tooltip: unicode('f2dd'); +$ti-icon-topology-bus: unicode('f5d9'); +$ti-icon-topology-complex: unicode('f5da'); +$ti-icon-topology-full: unicode('f5dc'); +$ti-icon-topology-full-hierarchy: unicode('f5db'); +$ti-icon-topology-ring: unicode('f5df'); +$ti-icon-topology-ring-2: unicode('f5dd'); +$ti-icon-topology-ring-3: unicode('f5de'); +$ti-icon-topology-star: unicode('f5e5'); +$ti-icon-topology-star-2: unicode('f5e0'); +$ti-icon-topology-star-3: unicode('f5e1'); +$ti-icon-topology-star-ring: unicode('f5e4'); +$ti-icon-topology-star-ring-2: unicode('f5e2'); +$ti-icon-topology-star-ring-3: unicode('f5e3'); +$ti-icon-torii: unicode('f59b'); +$ti-icon-tornado: unicode('ece2'); +$ti-icon-tournament: unicode('ecd0'); +$ti-icon-tower: unicode('f2cb'); +$ti-icon-tower-off: unicode('f2ca'); +$ti-icon-track: unicode('ef00'); +$ti-icon-tractor: unicode('ec0d'); +$ti-icon-trademark: unicode('ec0e'); +$ti-icon-traffic-cone: unicode('ec0f'); +$ti-icon-traffic-cone-off: unicode('f1b8'); +$ti-icon-traffic-lights: unicode('ed39'); +$ti-icon-traffic-lights-off: unicode('f1b9'); +$ti-icon-train: unicode('ed96'); +$ti-icon-transaction-bitcoin: unicode('fd6e'); +$ti-icon-transaction-dollar: unicode('fd6f'); +$ti-icon-transaction-euro: unicode('fd70'); +$ti-icon-transaction-pound: unicode('fd71'); +$ti-icon-transaction-rupee: unicode('fd85'); +$ti-icon-transaction-yen: unicode('fd72'); +$ti-icon-transaction-yuan: unicode('fd73'); +$ti-icon-transfer: unicode('fc1f'); +$ti-icon-transfer-in: unicode('ef2f'); +$ti-icon-transfer-out: unicode('ef30'); +$ti-icon-transfer-vertical: unicode('fc1e'); +$ti-icon-transform: unicode('f38e'); +$ti-icon-transform-filled: unicode('f6ac'); +$ti-icon-transform-point: unicode('fda9'); +$ti-icon-transform-point-bottom-left: unicode('fda5'); +$ti-icon-transform-point-bottom-right: unicode('fda6'); +$ti-icon-transform-point-top-left: unicode('fda7'); +$ti-icon-transform-point-top-right: unicode('fda8'); +$ti-icon-transition-bottom: unicode('f2b2'); +$ti-icon-transition-bottom-filled: unicode('fdd0'); +$ti-icon-transition-left: unicode('f2b3'); +$ti-icon-transition-left-filled: unicode('fdcf'); +$ti-icon-transition-right: unicode('f2b4'); +$ti-icon-transition-right-filled: unicode('fdce'); +$ti-icon-transition-top: unicode('f2b5'); +$ti-icon-transition-top-filled: unicode('fdcd'); +$ti-icon-trash: unicode('eb41'); +$ti-icon-trash-filled: unicode('f783'); +$ti-icon-trash-off: unicode('ed65'); +$ti-icon-trash-x: unicode('ef88'); +$ti-icon-trash-x-filled: unicode('f784'); +$ti-icon-treadmill: unicode('fa6e'); +$ti-icon-tree: unicode('ef01'); +$ti-icon-trees: unicode('ec10'); +$ti-icon-trekking: unicode('f5ad'); +$ti-icon-trending-down: unicode('eb42'); +$ti-icon-trending-down-2: unicode('edc1'); +$ti-icon-trending-down-3: unicode('edc2'); +$ti-icon-trending-up: unicode('eb43'); +$ti-icon-trending-up-2: unicode('edc3'); +$ti-icon-trending-up-3: unicode('edc4'); +$ti-icon-triangle: unicode('eb44'); +$ti-icon-triangle-filled: unicode('f6ad'); +$ti-icon-triangle-inverted: unicode('f01d'); +$ti-icon-triangle-inverted-filled: unicode('f6ae'); +$ti-icon-triangle-minus: unicode('fc9b'); +$ti-icon-triangle-minus-2: unicode('fc9a'); +$ti-icon-triangle-off: unicode('ef02'); +$ti-icon-triangle-plus: unicode('fc9d'); +$ti-icon-triangle-plus-2: unicode('fc9c'); +$ti-icon-triangle-square-circle: unicode('ece8'); +$ti-icon-triangle-square-circle-filled: unicode('fb42'); +$ti-icon-triangles: unicode('f0a5'); +$ti-icon-trident: unicode('ecc5'); +$ti-icon-trolley: unicode('f4cc'); +$ti-icon-trophy: unicode('eb45'); +$ti-icon-trophy-filled: unicode('f6af'); +$ti-icon-trophy-off: unicode('f438'); +$ti-icon-trowel: unicode('f368'); +$ti-icon-truck: unicode('ebc4'); +$ti-icon-truck-delivery: unicode('ec4b'); +$ti-icon-truck-loading: unicode('f1da'); +$ti-icon-truck-off: unicode('ef03'); +$ti-icon-truck-return: unicode('ec4c'); +$ti-icon-txt: unicode('f3b1'); +$ti-icon-typeface: unicode('fdab'); +$ti-icon-typography: unicode('ebc5'); +$ti-icon-typography-off: unicode('f1ba'); +$ti-icon-u-turn-left: unicode('fea2'); +$ti-icon-u-turn-right: unicode('fea1'); +$ti-icon-ufo: unicode('f26f'); +$ti-icon-ufo-off: unicode('f26e'); +$ti-icon-umbrella: unicode('ebf1'); +$ti-icon-umbrella-filled: unicode('f6b0'); +$ti-icon-umbrella-off: unicode('f1bb'); +$ti-icon-underline: unicode('eba2'); +$ti-icon-universe: unicode('fcc4'); +$ti-icon-unlink: unicode('eb46'); +$ti-icon-upload: unicode('eb47'); +$ti-icon-urgent: unicode('eb48'); +$ti-icon-usb: unicode('f00c'); +$ti-icon-user: unicode('eb4d'); +$ti-icon-user-bolt: unicode('f9d1'); +$ti-icon-user-cancel: unicode('f9d2'); +$ti-icon-user-check: unicode('eb49'); +$ti-icon-user-circle: unicode('ef68'); +$ti-icon-user-code: unicode('f9d3'); +$ti-icon-user-cog: unicode('f9d4'); +$ti-icon-user-dollar: unicode('f9d5'); +$ti-icon-user-down: unicode('f9d6'); +$ti-icon-user-edit: unicode('f7cc'); +$ti-icon-user-exclamation: unicode('ec12'); +$ti-icon-user-filled: unicode('fd19'); +$ti-icon-user-heart: unicode('f7cd'); +$ti-icon-user-hexagon: unicode('fc4e'); +$ti-icon-user-minus: unicode('eb4a'); +$ti-icon-user-off: unicode('ecf9'); +$ti-icon-user-pause: unicode('f9d7'); +$ti-icon-user-pentagon: unicode('fc4f'); +$ti-icon-user-pin: unicode('f7ce'); +$ti-icon-user-plus: unicode('eb4b'); +$ti-icon-user-question: unicode('f7cf'); +$ti-icon-user-scan: unicode('fcaf'); +$ti-icon-user-screen: unicode('fea0'); +$ti-icon-user-search: unicode('ef89'); +$ti-icon-user-share: unicode('f9d8'); +$ti-icon-user-shield: unicode('f7d0'); +$ti-icon-user-square: unicode('fc51'); +$ti-icon-user-square-rounded: unicode('fc50'); +$ti-icon-user-star: unicode('f7d1'); +$ti-icon-user-up: unicode('f7d2'); +$ti-icon-user-x: unicode('eb4c'); +$ti-icon-users: unicode('ebf2'); +$ti-icon-users-group: unicode('fa21'); +$ti-icon-users-minus: unicode('fa0e'); +$ti-icon-users-plus: unicode('fa0f'); +$ti-icon-uv-index: unicode('f3b2'); +$ti-icon-ux-circle: unicode('f369'); +$ti-icon-vaccine: unicode('ef04'); +$ti-icon-vaccine-bottle: unicode('ef69'); +$ti-icon-vaccine-bottle-off: unicode('f439'); +$ti-icon-vaccine-off: unicode('f1bc'); +$ti-icon-vacuum-cleaner: unicode('f5e6'); +$ti-icon-variable: unicode('ef05'); +$ti-icon-variable-minus: unicode('f36a'); +$ti-icon-variable-off: unicode('f1bd'); +$ti-icon-variable-plus: unicode('f36b'); +$ti-icon-vector: unicode('eca9'); +$ti-icon-vector-bezier: unicode('ef1d'); +$ti-icon-vector-bezier-2: unicode('f1a3'); +$ti-icon-vector-bezier-arc: unicode('f4cd'); +$ti-icon-vector-bezier-circle: unicode('f4ce'); +$ti-icon-vector-off: unicode('f1be'); +$ti-icon-vector-spline: unicode('f565'); +$ti-icon-vector-triangle: unicode('eca8'); +$ti-icon-vector-triangle-off: unicode('f1bf'); +$ti-icon-venus: unicode('ec86'); +$ti-icon-versions: unicode('ed52'); +$ti-icon-versions-filled: unicode('f6b1'); +$ti-icon-versions-off: unicode('f1c0'); +$ti-icon-video: unicode('ed22'); +$ti-icon-video-minus: unicode('ed1f'); +$ti-icon-video-off: unicode('ed20'); +$ti-icon-video-plus: unicode('ed21'); +$ti-icon-view-360: unicode('ed84'); +$ti-icon-view-360-arrow: unicode('f62f'); +$ti-icon-view-360-number: unicode('f566'); +$ti-icon-view-360-off: unicode('f1c1'); +$ti-icon-viewfinder: unicode('eb4e'); +$ti-icon-viewfinder-off: unicode('f1c2'); +$ti-icon-viewport-narrow: unicode('ebf3'); +$ti-icon-viewport-wide: unicode('ebf4'); +$ti-icon-vinyl: unicode('f00d'); +$ti-icon-vip: unicode('f3b3'); +$ti-icon-vip-off: unicode('f43a'); +$ti-icon-virus: unicode('eb74'); +$ti-icon-virus-off: unicode('ed66'); +$ti-icon-virus-search: unicode('ed67'); +$ti-icon-vocabulary: unicode('ef1e'); +$ti-icon-vocabulary-off: unicode('f43b'); +$ti-icon-volcano: unicode('f79c'); +$ti-icon-volume: unicode('eb51'); +$ti-icon-volume-2: unicode('eb4f'); +$ti-icon-volume-3: unicode('eb50'); +$ti-icon-volume-off: unicode('f1c3'); +$ti-icon-vs: unicode('fc52'); +$ti-icon-walk: unicode('ec87'); +$ti-icon-wall: unicode('ef7a'); +$ti-icon-wall-off: unicode('f43c'); +$ti-icon-wallet: unicode('eb75'); +$ti-icon-wallet-off: unicode('f1c4'); +$ti-icon-wallpaper: unicode('ef56'); +$ti-icon-wallpaper-off: unicode('f1c5'); +$ti-icon-wand: unicode('ebcb'); +$ti-icon-wand-off: unicode('f1c6'); +$ti-icon-wash: unicode('f311'); +$ti-icon-wash-dry: unicode('f304'); +$ti-icon-wash-dry-1: unicode('f2fa'); +$ti-icon-wash-dry-2: unicode('f2fb'); +$ti-icon-wash-dry-3: unicode('f2fc'); +$ti-icon-wash-dry-a: unicode('f2fd'); +$ti-icon-wash-dry-dip: unicode('f2fe'); +$ti-icon-wash-dry-f: unicode('f2ff'); +$ti-icon-wash-dry-flat: unicode('fa7f'); +$ti-icon-wash-dry-hang: unicode('f300'); +$ti-icon-wash-dry-off: unicode('f301'); +$ti-icon-wash-dry-p: unicode('f302'); +$ti-icon-wash-dry-shade: unicode('f303'); +$ti-icon-wash-dry-w: unicode('f322'); +$ti-icon-wash-dryclean: unicode('f305'); +$ti-icon-wash-dryclean-off: unicode('f323'); +$ti-icon-wash-eco: unicode('fa80'); +$ti-icon-wash-gentle: unicode('f306'); +$ti-icon-wash-hand: unicode('fa81'); +$ti-icon-wash-machine: unicode('f25e'); +$ti-icon-wash-off: unicode('f307'); +$ti-icon-wash-press: unicode('f308'); +$ti-icon-wash-temperature-1: unicode('f309'); +$ti-icon-wash-temperature-2: unicode('f30a'); +$ti-icon-wash-temperature-3: unicode('f30b'); +$ti-icon-wash-temperature-4: unicode('f30c'); +$ti-icon-wash-temperature-5: unicode('f30d'); +$ti-icon-wash-temperature-6: unicode('f30e'); +$ti-icon-wash-tumble-dry: unicode('f30f'); +$ti-icon-wash-tumble-off: unicode('f310'); +$ti-icon-waterpolo: unicode('fa6f'); +$ti-icon-wave-saw-tool: unicode('ecd3'); +$ti-icon-wave-sine: unicode('ecd4'); +$ti-icon-wave-square: unicode('ecd5'); +$ti-icon-waves-electricity: unicode('fcc5'); +$ti-icon-webhook: unicode('f01e'); +$ti-icon-webhook-off: unicode('f43d'); +$ti-icon-weight: unicode('f589'); +$ti-icon-wheel: unicode('fc64'); +$ti-icon-wheelchair: unicode('f1db'); +$ti-icon-wheelchair-off: unicode('f43e'); +$ti-icon-whirl: unicode('f51d'); +$ti-icon-wifi: unicode('eb52'); +$ti-icon-wifi-0: unicode('eba3'); +$ti-icon-wifi-1: unicode('eba4'); +$ti-icon-wifi-2: unicode('eba5'); +$ti-icon-wifi-off: unicode('ecfa'); +$ti-icon-wind: unicode('ec34'); +$ti-icon-wind-electricity: unicode('fcc6'); +$ti-icon-wind-off: unicode('f1c7'); +$ti-icon-windmill: unicode('ed85'); +$ti-icon-windmill-filled: unicode('f6b2'); +$ti-icon-windmill-off: unicode('f1c8'); +$ti-icon-window: unicode('ef06'); +$ti-icon-window-maximize: unicode('f1f1'); +$ti-icon-window-minimize: unicode('f1f2'); +$ti-icon-window-off: unicode('f1c9'); +$ti-icon-windsock: unicode('f06d'); +$ti-icon-wiper: unicode('ecab'); +$ti-icon-wiper-wash: unicode('ecaa'); +$ti-icon-woman: unicode('eb53'); +$ti-icon-woman-filled: unicode('fdcc'); +$ti-icon-wood: unicode('f359'); +$ti-icon-world: unicode('eb54'); +$ti-icon-world-bolt: unicode('f9d9'); +$ti-icon-world-cancel: unicode('f9da'); +$ti-icon-world-check: unicode('f9db'); +$ti-icon-world-code: unicode('f9dc'); +$ti-icon-world-cog: unicode('f9dd'); +$ti-icon-world-dollar: unicode('f9de'); +$ti-icon-world-down: unicode('f9df'); +$ti-icon-world-download: unicode('ef8a'); +$ti-icon-world-exclamation: unicode('f9e0'); +$ti-icon-world-heart: unicode('f9e1'); +$ti-icon-world-latitude: unicode('ed2e'); +$ti-icon-world-longitude: unicode('ed2f'); +$ti-icon-world-minus: unicode('f9e2'); +$ti-icon-world-off: unicode('f1ca'); +$ti-icon-world-pause: unicode('f9e3'); +$ti-icon-world-pin: unicode('f9e4'); +$ti-icon-world-plus: unicode('f9e5'); +$ti-icon-world-question: unicode('f9e6'); +$ti-icon-world-search: unicode('f9e7'); +$ti-icon-world-share: unicode('f9e8'); +$ti-icon-world-star: unicode('f9e9'); +$ti-icon-world-up: unicode('f9ea'); +$ti-icon-world-upload: unicode('ef8b'); +$ti-icon-world-www: unicode('f38f'); +$ti-icon-world-x: unicode('f9eb'); +$ti-icon-wrecking-ball: unicode('ed97'); +$ti-icon-writing: unicode('ef08'); +$ti-icon-writing-off: unicode('f1cb'); +$ti-icon-writing-sign: unicode('ef07'); +$ti-icon-writing-sign-off: unicode('f1cc'); +$ti-icon-x: unicode('eb55'); +$ti-icon-xbox-a: unicode('f2b6'); +$ti-icon-xbox-a-filled: unicode('fdcb'); +$ti-icon-xbox-b: unicode('f2b7'); +$ti-icon-xbox-b-filled: unicode('fdca'); +$ti-icon-xbox-x: unicode('f2b8'); +$ti-icon-xbox-x-filled: unicode('fdc9'); +$ti-icon-xbox-y: unicode('f2b9'); +$ti-icon-xbox-y-filled: unicode('fdc8'); +$ti-icon-xd: unicode('fa33'); +$ti-icon-xxx: unicode('fc20'); +$ti-icon-yin-yang: unicode('ec35'); +$ti-icon-yin-yang-filled: unicode('f785'); +$ti-icon-yoga: unicode('f01f'); +$ti-icon-zeppelin: unicode('f270'); +$ti-icon-zeppelin-filled: unicode('fdc7'); +$ti-icon-zeppelin-off: unicode('f43f'); +$ti-icon-zip: unicode('f3b4'); +$ti-icon-zodiac-aquarius: unicode('ecac'); +$ti-icon-zodiac-aries: unicode('ecad'); +$ti-icon-zodiac-cancer: unicode('ecae'); +$ti-icon-zodiac-capricorn: unicode('ecaf'); +$ti-icon-zodiac-gemini: unicode('ecb0'); +$ti-icon-zodiac-leo: unicode('ecb1'); +$ti-icon-zodiac-libra: unicode('ecb2'); +$ti-icon-zodiac-pisces: unicode('ecb3'); +$ti-icon-zodiac-sagittarius: unicode('ecb4'); +$ti-icon-zodiac-scorpio: unicode('ecb5'); +$ti-icon-zodiac-taurus: unicode('ecb6'); +$ti-icon-zodiac-virgo: unicode('ecb7'); +$ti-icon-zoom: unicode('fdaa'); +$ti-icon-zoom-cancel: unicode('ec4d'); +$ti-icon-zoom-cancel-filled: unicode('fdc6'); +$ti-icon-zoom-check: unicode('ef09'); +$ti-icon-zoom-check-filled: unicode('f786'); +$ti-icon-zoom-code: unicode('f07f'); +$ti-icon-zoom-code-filled: unicode('fdc5'); +$ti-icon-zoom-exclamation: unicode('f080'); +$ti-icon-zoom-exclamation-filled: unicode('fdc4'); +$ti-icon-zoom-filled: unicode('f787'); +$ti-icon-zoom-in: unicode('eb56'); +$ti-icon-zoom-in-area: unicode('f1dc'); +$ti-icon-zoom-in-area-filled: unicode('f788'); +$ti-icon-zoom-in-filled: unicode('f789'); +$ti-icon-zoom-money: unicode('ef0a'); +$ti-icon-zoom-money-filled: unicode('fdc3'); +$ti-icon-zoom-out: unicode('eb57'); +$ti-icon-zoom-out-area: unicode('f1dd'); +$ti-icon-zoom-out-area-filled: unicode('fdc2'); +$ti-icon-zoom-out-filled: unicode('f78a'); +$ti-icon-zoom-pan: unicode('f1de'); +$ti-icon-zoom-pan-filled: unicode('fdc1'); +$ti-icon-zoom-question: unicode('edeb'); +$ti-icon-zoom-question-filled: unicode('fdc0'); +$ti-icon-zoom-replace: unicode('f2a7'); +$ti-icon-zoom-reset: unicode('f295'); +$ti-icon-zoom-scan: unicode('fcb0'); +$ti-icon-zoom-scan-filled: unicode('fdbf'); +$ti-icon-zzz: unicode('f228'); +$ti-icon-zzz-off: unicode('f440'); + +.#{$ti-prefix}-a-b:before { + content: $ti-icon-a-b; +} +.#{$ti-prefix}-a-b-2:before { + content: $ti-icon-a-b-2; +} +.#{$ti-prefix}-a-b-off:before { + content: $ti-icon-a-b-off; +} +.#{$ti-prefix}-abacus:before { + content: $ti-icon-abacus; +} +.#{$ti-prefix}-abacus-off:before { + content: $ti-icon-abacus-off; +} +.#{$ti-prefix}-abc:before { + content: $ti-icon-abc; +} +.#{$ti-prefix}-access-point:before { + content: $ti-icon-access-point; +} +.#{$ti-prefix}-access-point-off:before { + content: $ti-icon-access-point-off; +} +.#{$ti-prefix}-accessible:before { + content: $ti-icon-accessible; +} +.#{$ti-prefix}-accessible-filled:before { + content: $ti-icon-accessible-filled; +} +.#{$ti-prefix}-accessible-off:before { + content: $ti-icon-accessible-off; +} +.#{$ti-prefix}-activity:before { + content: $ti-icon-activity; +} +.#{$ti-prefix}-activity-heartbeat:before { + content: $ti-icon-activity-heartbeat; +} +.#{$ti-prefix}-ad:before { + content: $ti-icon-ad; +} +.#{$ti-prefix}-ad-2:before { + content: $ti-icon-ad-2; +} +.#{$ti-prefix}-ad-circle:before { + content: $ti-icon-ad-circle; +} +.#{$ti-prefix}-ad-circle-filled:before { + content: $ti-icon-ad-circle-filled; +} +.#{$ti-prefix}-ad-circle-off:before { + content: $ti-icon-ad-circle-off; +} +.#{$ti-prefix}-ad-filled:before { + content: $ti-icon-ad-filled; +} +.#{$ti-prefix}-ad-off:before { + content: $ti-icon-ad-off; +} +.#{$ti-prefix}-address-book:before { + content: $ti-icon-address-book; +} +.#{$ti-prefix}-address-book-off:before { + content: $ti-icon-address-book-off; +} +.#{$ti-prefix}-adjustments:before { + content: $ti-icon-adjustments; +} +.#{$ti-prefix}-adjustments-alt:before { + content: $ti-icon-adjustments-alt; +} +.#{$ti-prefix}-adjustments-bolt:before { + content: $ti-icon-adjustments-bolt; +} +.#{$ti-prefix}-adjustments-cancel:before { + content: $ti-icon-adjustments-cancel; +} +.#{$ti-prefix}-adjustments-check:before { + content: $ti-icon-adjustments-check; +} +.#{$ti-prefix}-adjustments-code:before { + content: $ti-icon-adjustments-code; +} +.#{$ti-prefix}-adjustments-cog:before { + content: $ti-icon-adjustments-cog; +} +.#{$ti-prefix}-adjustments-dollar:before { + content: $ti-icon-adjustments-dollar; +} +.#{$ti-prefix}-adjustments-down:before { + content: $ti-icon-adjustments-down; +} +.#{$ti-prefix}-adjustments-exclamation:before { + content: $ti-icon-adjustments-exclamation; +} +.#{$ti-prefix}-adjustments-filled:before { + content: $ti-icon-adjustments-filled; +} +.#{$ti-prefix}-adjustments-heart:before { + content: $ti-icon-adjustments-heart; +} +.#{$ti-prefix}-adjustments-horizontal:before { + content: $ti-icon-adjustments-horizontal; +} +.#{$ti-prefix}-adjustments-minus:before { + content: $ti-icon-adjustments-minus; +} +.#{$ti-prefix}-adjustments-off:before { + content: $ti-icon-adjustments-off; +} +.#{$ti-prefix}-adjustments-pause:before { + content: $ti-icon-adjustments-pause; +} +.#{$ti-prefix}-adjustments-pin:before { + content: $ti-icon-adjustments-pin; +} +.#{$ti-prefix}-adjustments-plus:before { + content: $ti-icon-adjustments-plus; +} +.#{$ti-prefix}-adjustments-question:before { + content: $ti-icon-adjustments-question; +} +.#{$ti-prefix}-adjustments-search:before { + content: $ti-icon-adjustments-search; +} +.#{$ti-prefix}-adjustments-share:before { + content: $ti-icon-adjustments-share; +} +.#{$ti-prefix}-adjustments-star:before { + content: $ti-icon-adjustments-star; +} +.#{$ti-prefix}-adjustments-up:before { + content: $ti-icon-adjustments-up; +} +.#{$ti-prefix}-adjustments-x:before { + content: $ti-icon-adjustments-x; +} +.#{$ti-prefix}-aerial-lift:before { + content: $ti-icon-aerial-lift; +} +.#{$ti-prefix}-affiliate:before { + content: $ti-icon-affiliate; +} +.#{$ti-prefix}-affiliate-filled:before { + content: $ti-icon-affiliate-filled; +} +.#{$ti-prefix}-ai:before { + content: $ti-icon-ai; +} +.#{$ti-prefix}-air-balloon:before { + content: $ti-icon-air-balloon; +} +.#{$ti-prefix}-air-conditioning:before { + content: $ti-icon-air-conditioning; +} +.#{$ti-prefix}-air-conditioning-disabled:before { + content: $ti-icon-air-conditioning-disabled; +} +.#{$ti-prefix}-air-traffic-control:before { + content: $ti-icon-air-traffic-control; +} +.#{$ti-prefix}-alarm:before { + content: $ti-icon-alarm; +} +.#{$ti-prefix}-alarm-average:before { + content: $ti-icon-alarm-average; +} +.#{$ti-prefix}-alarm-filled:before { + content: $ti-icon-alarm-filled; +} +.#{$ti-prefix}-alarm-minus:before { + content: $ti-icon-alarm-minus; +} +.#{$ti-prefix}-alarm-minus-filled:before { + content: $ti-icon-alarm-minus-filled; +} +.#{$ti-prefix}-alarm-off:before { + content: $ti-icon-alarm-off; +} +.#{$ti-prefix}-alarm-plus:before { + content: $ti-icon-alarm-plus; +} +.#{$ti-prefix}-alarm-plus-filled:before { + content: $ti-icon-alarm-plus-filled; +} +.#{$ti-prefix}-alarm-snooze:before { + content: $ti-icon-alarm-snooze; +} +.#{$ti-prefix}-alarm-snooze-filled:before { + content: $ti-icon-alarm-snooze-filled; +} +.#{$ti-prefix}-album:before { + content: $ti-icon-album; +} +.#{$ti-prefix}-album-off:before { + content: $ti-icon-album-off; +} +.#{$ti-prefix}-alert-circle:before { + content: $ti-icon-alert-circle; +} +.#{$ti-prefix}-alert-circle-filled:before { + content: $ti-icon-alert-circle-filled; +} +.#{$ti-prefix}-alert-circle-off:before { + content: $ti-icon-alert-circle-off; +} +.#{$ti-prefix}-alert-hexagon:before { + content: $ti-icon-alert-hexagon; +} +.#{$ti-prefix}-alert-hexagon-filled:before { + content: $ti-icon-alert-hexagon-filled; +} +.#{$ti-prefix}-alert-hexagon-off:before { + content: $ti-icon-alert-hexagon-off; +} +.#{$ti-prefix}-alert-octagon:before { + content: $ti-icon-alert-octagon; +} +.#{$ti-prefix}-alert-octagon-filled:before { + content: $ti-icon-alert-octagon-filled; +} +.#{$ti-prefix}-alert-small:before { + content: $ti-icon-alert-small; +} +.#{$ti-prefix}-alert-small-off:before { + content: $ti-icon-alert-small-off; +} +.#{$ti-prefix}-alert-square:before { + content: $ti-icon-alert-square; +} +.#{$ti-prefix}-alert-square-filled:before { + content: $ti-icon-alert-square-filled; +} +.#{$ti-prefix}-alert-square-rounded:before { + content: $ti-icon-alert-square-rounded; +} +.#{$ti-prefix}-alert-square-rounded-filled:before { + content: $ti-icon-alert-square-rounded-filled; +} +.#{$ti-prefix}-alert-square-rounded-off:before { + content: $ti-icon-alert-square-rounded-off; +} +.#{$ti-prefix}-alert-triangle:before { + content: $ti-icon-alert-triangle; +} +.#{$ti-prefix}-alert-triangle-filled:before { + content: $ti-icon-alert-triangle-filled; +} +.#{$ti-prefix}-alert-triangle-off:before { + content: $ti-icon-alert-triangle-off; +} +.#{$ti-prefix}-alien:before { + content: $ti-icon-alien; +} +.#{$ti-prefix}-alien-filled:before { + content: $ti-icon-alien-filled; +} +.#{$ti-prefix}-align-box-bottom-center:before { + content: $ti-icon-align-box-bottom-center; +} +.#{$ti-prefix}-align-box-bottom-center-filled:before { + content: $ti-icon-align-box-bottom-center-filled; +} +.#{$ti-prefix}-align-box-bottom-left:before { + content: $ti-icon-align-box-bottom-left; +} +.#{$ti-prefix}-align-box-bottom-left-filled:before { + content: $ti-icon-align-box-bottom-left-filled; +} +.#{$ti-prefix}-align-box-bottom-right:before { + content: $ti-icon-align-box-bottom-right; +} +.#{$ti-prefix}-align-box-bottom-right-filled:before { + content: $ti-icon-align-box-bottom-right-filled; +} +.#{$ti-prefix}-align-box-center-bottom:before { + content: $ti-icon-align-box-center-bottom; +} +.#{$ti-prefix}-align-box-center-middle:before { + content: $ti-icon-align-box-center-middle; +} +.#{$ti-prefix}-align-box-center-middle-filled:before { + content: $ti-icon-align-box-center-middle-filled; +} +.#{$ti-prefix}-align-box-center-stretch:before { + content: $ti-icon-align-box-center-stretch; +} +.#{$ti-prefix}-align-box-center-top:before { + content: $ti-icon-align-box-center-top; +} +.#{$ti-prefix}-align-box-left-bottom:before { + content: $ti-icon-align-box-left-bottom; +} +.#{$ti-prefix}-align-box-left-bottom-filled:before { + content: $ti-icon-align-box-left-bottom-filled; +} +.#{$ti-prefix}-align-box-left-middle:before { + content: $ti-icon-align-box-left-middle; +} +.#{$ti-prefix}-align-box-left-middle-filled:before { + content: $ti-icon-align-box-left-middle-filled; +} +.#{$ti-prefix}-align-box-left-stretch:before { + content: $ti-icon-align-box-left-stretch; +} +.#{$ti-prefix}-align-box-left-top:before { + content: $ti-icon-align-box-left-top; +} +.#{$ti-prefix}-align-box-left-top-filled:before { + content: $ti-icon-align-box-left-top-filled; +} +.#{$ti-prefix}-align-box-right-bottom:before { + content: $ti-icon-align-box-right-bottom; +} +.#{$ti-prefix}-align-box-right-bottom-filled:before { + content: $ti-icon-align-box-right-bottom-filled; +} +.#{$ti-prefix}-align-box-right-middle:before { + content: $ti-icon-align-box-right-middle; +} +.#{$ti-prefix}-align-box-right-middle-filled:before { + content: $ti-icon-align-box-right-middle-filled; +} +.#{$ti-prefix}-align-box-right-stretch:before { + content: $ti-icon-align-box-right-stretch; +} +.#{$ti-prefix}-align-box-right-top:before { + content: $ti-icon-align-box-right-top; +} +.#{$ti-prefix}-align-box-right-top-filled:before { + content: $ti-icon-align-box-right-top-filled; +} +.#{$ti-prefix}-align-box-top-center:before { + content: $ti-icon-align-box-top-center; +} +.#{$ti-prefix}-align-box-top-center-filled:before { + content: $ti-icon-align-box-top-center-filled; +} +.#{$ti-prefix}-align-box-top-left:before { + content: $ti-icon-align-box-top-left; +} +.#{$ti-prefix}-align-box-top-left-filled:before { + content: $ti-icon-align-box-top-left-filled; +} +.#{$ti-prefix}-align-box-top-right:before { + content: $ti-icon-align-box-top-right; +} +.#{$ti-prefix}-align-box-top-right-filled:before { + content: $ti-icon-align-box-top-right-filled; +} +.#{$ti-prefix}-align-center:before { + content: $ti-icon-align-center; +} +.#{$ti-prefix}-align-justified:before { + content: $ti-icon-align-justified; +} +.#{$ti-prefix}-align-left:before { + content: $ti-icon-align-left; +} +.#{$ti-prefix}-align-right:before { + content: $ti-icon-align-right; +} +.#{$ti-prefix}-alpha:before { + content: $ti-icon-alpha; +} +.#{$ti-prefix}-alphabet-cyrillic:before { + content: $ti-icon-alphabet-cyrillic; +} +.#{$ti-prefix}-alphabet-greek:before { + content: $ti-icon-alphabet-greek; +} +.#{$ti-prefix}-alphabet-latin:before { + content: $ti-icon-alphabet-latin; +} +.#{$ti-prefix}-alt:before { + content: $ti-icon-alt; +} +.#{$ti-prefix}-ambulance:before { + content: $ti-icon-ambulance; +} +.#{$ti-prefix}-ampersand:before { + content: $ti-icon-ampersand; +} +.#{$ti-prefix}-analyze:before { + content: $ti-icon-analyze; +} +.#{$ti-prefix}-analyze-filled:before { + content: $ti-icon-analyze-filled; +} +.#{$ti-prefix}-analyze-off:before { + content: $ti-icon-analyze-off; +} +.#{$ti-prefix}-anchor:before { + content: $ti-icon-anchor; +} +.#{$ti-prefix}-anchor-off:before { + content: $ti-icon-anchor-off; +} +.#{$ti-prefix}-angle:before { + content: $ti-icon-angle; +} +.#{$ti-prefix}-ankh:before { + content: $ti-icon-ankh; +} +.#{$ti-prefix}-antenna:before { + content: $ti-icon-antenna; +} +.#{$ti-prefix}-antenna-bars-1:before { + content: $ti-icon-antenna-bars-1; +} +.#{$ti-prefix}-antenna-bars-2:before { + content: $ti-icon-antenna-bars-2; +} +.#{$ti-prefix}-antenna-bars-3:before { + content: $ti-icon-antenna-bars-3; +} +.#{$ti-prefix}-antenna-bars-4:before { + content: $ti-icon-antenna-bars-4; +} +.#{$ti-prefix}-antenna-bars-5:before { + content: $ti-icon-antenna-bars-5; +} +.#{$ti-prefix}-antenna-bars-off:before { + content: $ti-icon-antenna-bars-off; +} +.#{$ti-prefix}-antenna-off:before { + content: $ti-icon-antenna-off; +} +.#{$ti-prefix}-aperture:before { + content: $ti-icon-aperture; +} +.#{$ti-prefix}-aperture-off:before { + content: $ti-icon-aperture-off; +} +.#{$ti-prefix}-api:before { + content: $ti-icon-api; +} +.#{$ti-prefix}-api-app:before { + content: $ti-icon-api-app; +} +.#{$ti-prefix}-api-app-off:before { + content: $ti-icon-api-app-off; +} +.#{$ti-prefix}-api-off:before { + content: $ti-icon-api-off; +} +.#{$ti-prefix}-app-window:before { + content: $ti-icon-app-window; +} +.#{$ti-prefix}-app-window-filled:before { + content: $ti-icon-app-window-filled; +} +.#{$ti-prefix}-apple:before { + content: $ti-icon-apple; +} +.#{$ti-prefix}-apps:before { + content: $ti-icon-apps; +} +.#{$ti-prefix}-apps-filled:before { + content: $ti-icon-apps-filled; +} +.#{$ti-prefix}-apps-off:before { + content: $ti-icon-apps-off; +} +.#{$ti-prefix}-archery-arrow:before { + content: $ti-icon-archery-arrow; +} +.#{$ti-prefix}-archive:before { + content: $ti-icon-archive; +} +.#{$ti-prefix}-archive-filled:before { + content: $ti-icon-archive-filled; +} +.#{$ti-prefix}-archive-off:before { + content: $ti-icon-archive-off; +} +.#{$ti-prefix}-armchair:before { + content: $ti-icon-armchair; +} +.#{$ti-prefix}-armchair-2:before { + content: $ti-icon-armchair-2; +} +.#{$ti-prefix}-armchair-2-off:before { + content: $ti-icon-armchair-2-off; +} +.#{$ti-prefix}-armchair-off:before { + content: $ti-icon-armchair-off; +} +.#{$ti-prefix}-arrow-autofit-content:before { + content: $ti-icon-arrow-autofit-content; +} +.#{$ti-prefix}-arrow-autofit-content-filled:before { + content: $ti-icon-arrow-autofit-content-filled; +} +.#{$ti-prefix}-arrow-autofit-down:before { + content: $ti-icon-arrow-autofit-down; +} +.#{$ti-prefix}-arrow-autofit-height:before { + content: $ti-icon-arrow-autofit-height; +} +.#{$ti-prefix}-arrow-autofit-left:before { + content: $ti-icon-arrow-autofit-left; +} +.#{$ti-prefix}-arrow-autofit-right:before { + content: $ti-icon-arrow-autofit-right; +} +.#{$ti-prefix}-arrow-autofit-up:before { + content: $ti-icon-arrow-autofit-up; +} +.#{$ti-prefix}-arrow-autofit-width:before { + content: $ti-icon-arrow-autofit-width; +} +.#{$ti-prefix}-arrow-back:before { + content: $ti-icon-arrow-back; +} +.#{$ti-prefix}-arrow-back-up:before { + content: $ti-icon-arrow-back-up; +} +.#{$ti-prefix}-arrow-back-up-double:before { + content: $ti-icon-arrow-back-up-double; +} +.#{$ti-prefix}-arrow-badge-down:before { + content: $ti-icon-arrow-badge-down; +} +.#{$ti-prefix}-arrow-badge-down-filled:before { + content: $ti-icon-arrow-badge-down-filled; +} +.#{$ti-prefix}-arrow-badge-left:before { + content: $ti-icon-arrow-badge-left; +} +.#{$ti-prefix}-arrow-badge-left-filled:before { + content: $ti-icon-arrow-badge-left-filled; +} +.#{$ti-prefix}-arrow-badge-right:before { + content: $ti-icon-arrow-badge-right; +} +.#{$ti-prefix}-arrow-badge-right-filled:before { + content: $ti-icon-arrow-badge-right-filled; +} +.#{$ti-prefix}-arrow-badge-up:before { + content: $ti-icon-arrow-badge-up; +} +.#{$ti-prefix}-arrow-badge-up-filled:before { + content: $ti-icon-arrow-badge-up-filled; +} +.#{$ti-prefix}-arrow-bar-both:before { + content: $ti-icon-arrow-bar-both; +} +.#{$ti-prefix}-arrow-bar-down:before { + content: $ti-icon-arrow-bar-down; +} +.#{$ti-prefix}-arrow-bar-left:before { + content: $ti-icon-arrow-bar-left; +} +.#{$ti-prefix}-arrow-bar-right:before { + content: $ti-icon-arrow-bar-right; +} +.#{$ti-prefix}-arrow-bar-to-down:before { + content: $ti-icon-arrow-bar-to-down; +} +.#{$ti-prefix}-arrow-bar-to-left:before { + content: $ti-icon-arrow-bar-to-left; +} +.#{$ti-prefix}-arrow-bar-to-right:before { + content: $ti-icon-arrow-bar-to-right; +} +.#{$ti-prefix}-arrow-bar-to-up:before { + content: $ti-icon-arrow-bar-to-up; +} +.#{$ti-prefix}-arrow-bar-up:before { + content: $ti-icon-arrow-bar-up; +} +.#{$ti-prefix}-arrow-bear-left:before { + content: $ti-icon-arrow-bear-left; +} +.#{$ti-prefix}-arrow-bear-left-2:before { + content: $ti-icon-arrow-bear-left-2; +} +.#{$ti-prefix}-arrow-bear-right:before { + content: $ti-icon-arrow-bear-right; +} +.#{$ti-prefix}-arrow-bear-right-2:before { + content: $ti-icon-arrow-bear-right-2; +} +.#{$ti-prefix}-arrow-big-down:before { + content: $ti-icon-arrow-big-down; +} +.#{$ti-prefix}-arrow-big-down-filled:before { + content: $ti-icon-arrow-big-down-filled; +} +.#{$ti-prefix}-arrow-big-down-line:before { + content: $ti-icon-arrow-big-down-line; +} +.#{$ti-prefix}-arrow-big-down-line-filled:before { + content: $ti-icon-arrow-big-down-line-filled; +} +.#{$ti-prefix}-arrow-big-down-lines:before { + content: $ti-icon-arrow-big-down-lines; +} +.#{$ti-prefix}-arrow-big-down-lines-filled:before { + content: $ti-icon-arrow-big-down-lines-filled; +} +.#{$ti-prefix}-arrow-big-left:before { + content: $ti-icon-arrow-big-left; +} +.#{$ti-prefix}-arrow-big-left-filled:before { + content: $ti-icon-arrow-big-left-filled; +} +.#{$ti-prefix}-arrow-big-left-line:before { + content: $ti-icon-arrow-big-left-line; +} +.#{$ti-prefix}-arrow-big-left-line-filled:before { + content: $ti-icon-arrow-big-left-line-filled; +} +.#{$ti-prefix}-arrow-big-left-lines:before { + content: $ti-icon-arrow-big-left-lines; +} +.#{$ti-prefix}-arrow-big-left-lines-filled:before { + content: $ti-icon-arrow-big-left-lines-filled; +} +.#{$ti-prefix}-arrow-big-right:before { + content: $ti-icon-arrow-big-right; +} +.#{$ti-prefix}-arrow-big-right-filled:before { + content: $ti-icon-arrow-big-right-filled; +} +.#{$ti-prefix}-arrow-big-right-line:before { + content: $ti-icon-arrow-big-right-line; +} +.#{$ti-prefix}-arrow-big-right-line-filled:before { + content: $ti-icon-arrow-big-right-line-filled; +} +.#{$ti-prefix}-arrow-big-right-lines:before { + content: $ti-icon-arrow-big-right-lines; +} +.#{$ti-prefix}-arrow-big-right-lines-filled:before { + content: $ti-icon-arrow-big-right-lines-filled; +} +.#{$ti-prefix}-arrow-big-up:before { + content: $ti-icon-arrow-big-up; +} +.#{$ti-prefix}-arrow-big-up-filled:before { + content: $ti-icon-arrow-big-up-filled; +} +.#{$ti-prefix}-arrow-big-up-line:before { + content: $ti-icon-arrow-big-up-line; +} +.#{$ti-prefix}-arrow-big-up-line-filled:before { + content: $ti-icon-arrow-big-up-line-filled; +} +.#{$ti-prefix}-arrow-big-up-lines:before { + content: $ti-icon-arrow-big-up-lines; +} +.#{$ti-prefix}-arrow-big-up-lines-filled:before { + content: $ti-icon-arrow-big-up-lines-filled; +} +.#{$ti-prefix}-arrow-bounce:before { + content: $ti-icon-arrow-bounce; +} +.#{$ti-prefix}-arrow-capsule:before { + content: $ti-icon-arrow-capsule; +} +.#{$ti-prefix}-arrow-curve-left:before { + content: $ti-icon-arrow-curve-left; +} +.#{$ti-prefix}-arrow-curve-right:before { + content: $ti-icon-arrow-curve-right; +} +.#{$ti-prefix}-arrow-down:before { + content: $ti-icon-arrow-down; +} +.#{$ti-prefix}-arrow-down-bar:before { + content: $ti-icon-arrow-down-bar; +} +.#{$ti-prefix}-arrow-down-circle:before { + content: $ti-icon-arrow-down-circle; +} +.#{$ti-prefix}-arrow-down-from-arc:before { + content: $ti-icon-arrow-down-from-arc; +} +.#{$ti-prefix}-arrow-down-left:before { + content: $ti-icon-arrow-down-left; +} +.#{$ti-prefix}-arrow-down-left-circle:before { + content: $ti-icon-arrow-down-left-circle; +} +.#{$ti-prefix}-arrow-down-rhombus:before { + content: $ti-icon-arrow-down-rhombus; +} +.#{$ti-prefix}-arrow-down-right:before { + content: $ti-icon-arrow-down-right; +} +.#{$ti-prefix}-arrow-down-right-circle:before { + content: $ti-icon-arrow-down-right-circle; +} +.#{$ti-prefix}-arrow-down-square:before { + content: $ti-icon-arrow-down-square; +} +.#{$ti-prefix}-arrow-down-tail:before { + content: $ti-icon-arrow-down-tail; +} +.#{$ti-prefix}-arrow-down-to-arc:before { + content: $ti-icon-arrow-down-to-arc; +} +.#{$ti-prefix}-arrow-elbow-left:before { + content: $ti-icon-arrow-elbow-left; +} +.#{$ti-prefix}-arrow-elbow-right:before { + content: $ti-icon-arrow-elbow-right; +} +.#{$ti-prefix}-arrow-fork:before { + content: $ti-icon-arrow-fork; +} +.#{$ti-prefix}-arrow-forward:before { + content: $ti-icon-arrow-forward; +} +.#{$ti-prefix}-arrow-forward-up:before { + content: $ti-icon-arrow-forward-up; +} +.#{$ti-prefix}-arrow-forward-up-double:before { + content: $ti-icon-arrow-forward-up-double; +} +.#{$ti-prefix}-arrow-guide:before { + content: $ti-icon-arrow-guide; +} +.#{$ti-prefix}-arrow-iteration:before { + content: $ti-icon-arrow-iteration; +} +.#{$ti-prefix}-arrow-left:before { + content: $ti-icon-arrow-left; +} +.#{$ti-prefix}-arrow-left-bar:before { + content: $ti-icon-arrow-left-bar; +} +.#{$ti-prefix}-arrow-left-circle:before { + content: $ti-icon-arrow-left-circle; +} +.#{$ti-prefix}-arrow-left-from-arc:before { + content: $ti-icon-arrow-left-from-arc; +} +.#{$ti-prefix}-arrow-left-rhombus:before { + content: $ti-icon-arrow-left-rhombus; +} +.#{$ti-prefix}-arrow-left-right:before { + content: $ti-icon-arrow-left-right; +} +.#{$ti-prefix}-arrow-left-square:before { + content: $ti-icon-arrow-left-square; +} +.#{$ti-prefix}-arrow-left-tail:before { + content: $ti-icon-arrow-left-tail; +} +.#{$ti-prefix}-arrow-left-to-arc:before { + content: $ti-icon-arrow-left-to-arc; +} +.#{$ti-prefix}-arrow-loop-left:before { + content: $ti-icon-arrow-loop-left; +} +.#{$ti-prefix}-arrow-loop-left-2:before { + content: $ti-icon-arrow-loop-left-2; +} +.#{$ti-prefix}-arrow-loop-right:before { + content: $ti-icon-arrow-loop-right; +} +.#{$ti-prefix}-arrow-loop-right-2:before { + content: $ti-icon-arrow-loop-right-2; +} +.#{$ti-prefix}-arrow-merge:before { + content: $ti-icon-arrow-merge; +} +.#{$ti-prefix}-arrow-merge-alt-left:before { + content: $ti-icon-arrow-merge-alt-left; +} +.#{$ti-prefix}-arrow-merge-alt-right:before { + content: $ti-icon-arrow-merge-alt-right; +} +.#{$ti-prefix}-arrow-merge-both:before { + content: $ti-icon-arrow-merge-both; +} +.#{$ti-prefix}-arrow-merge-left:before { + content: $ti-icon-arrow-merge-left; +} +.#{$ti-prefix}-arrow-merge-right:before { + content: $ti-icon-arrow-merge-right; +} +.#{$ti-prefix}-arrow-move-down:before { + content: $ti-icon-arrow-move-down; +} +.#{$ti-prefix}-arrow-move-left:before { + content: $ti-icon-arrow-move-left; +} +.#{$ti-prefix}-arrow-move-right:before { + content: $ti-icon-arrow-move-right; +} +.#{$ti-prefix}-arrow-move-up:before { + content: $ti-icon-arrow-move-up; +} +.#{$ti-prefix}-arrow-narrow-down:before { + content: $ti-icon-arrow-narrow-down; +} +.#{$ti-prefix}-arrow-narrow-left:before { + content: $ti-icon-arrow-narrow-left; +} +.#{$ti-prefix}-arrow-narrow-right:before { + content: $ti-icon-arrow-narrow-right; +} +.#{$ti-prefix}-arrow-narrow-up:before { + content: $ti-icon-arrow-narrow-up; +} +.#{$ti-prefix}-arrow-ramp-left:before { + content: $ti-icon-arrow-ramp-left; +} +.#{$ti-prefix}-arrow-ramp-left-2:before { + content: $ti-icon-arrow-ramp-left-2; +} +.#{$ti-prefix}-arrow-ramp-left-3:before { + content: $ti-icon-arrow-ramp-left-3; +} +.#{$ti-prefix}-arrow-ramp-right:before { + content: $ti-icon-arrow-ramp-right; +} +.#{$ti-prefix}-arrow-ramp-right-2:before { + content: $ti-icon-arrow-ramp-right-2; +} +.#{$ti-prefix}-arrow-ramp-right-3:before { + content: $ti-icon-arrow-ramp-right-3; +} +.#{$ti-prefix}-arrow-right:before { + content: $ti-icon-arrow-right; +} +.#{$ti-prefix}-arrow-right-bar:before { + content: $ti-icon-arrow-right-bar; +} +.#{$ti-prefix}-arrow-right-circle:before { + content: $ti-icon-arrow-right-circle; +} +.#{$ti-prefix}-arrow-right-from-arc:before { + content: $ti-icon-arrow-right-from-arc; +} +.#{$ti-prefix}-arrow-right-rhombus:before { + content: $ti-icon-arrow-right-rhombus; +} +.#{$ti-prefix}-arrow-right-square:before { + content: $ti-icon-arrow-right-square; +} +.#{$ti-prefix}-arrow-right-tail:before { + content: $ti-icon-arrow-right-tail; +} +.#{$ti-prefix}-arrow-right-to-arc:before { + content: $ti-icon-arrow-right-to-arc; +} +.#{$ti-prefix}-arrow-rotary-first-left:before { + content: $ti-icon-arrow-rotary-first-left; +} +.#{$ti-prefix}-arrow-rotary-first-right:before { + content: $ti-icon-arrow-rotary-first-right; +} +.#{$ti-prefix}-arrow-rotary-last-left:before { + content: $ti-icon-arrow-rotary-last-left; +} +.#{$ti-prefix}-arrow-rotary-last-right:before { + content: $ti-icon-arrow-rotary-last-right; +} +.#{$ti-prefix}-arrow-rotary-left:before { + content: $ti-icon-arrow-rotary-left; +} +.#{$ti-prefix}-arrow-rotary-right:before { + content: $ti-icon-arrow-rotary-right; +} +.#{$ti-prefix}-arrow-rotary-straight:before { + content: $ti-icon-arrow-rotary-straight; +} +.#{$ti-prefix}-arrow-roundabout-left:before { + content: $ti-icon-arrow-roundabout-left; +} +.#{$ti-prefix}-arrow-roundabout-right:before { + content: $ti-icon-arrow-roundabout-right; +} +.#{$ti-prefix}-arrow-sharp-turn-left:before { + content: $ti-icon-arrow-sharp-turn-left; +} +.#{$ti-prefix}-arrow-sharp-turn-right:before { + content: $ti-icon-arrow-sharp-turn-right; +} +.#{$ti-prefix}-arrow-up:before { + content: $ti-icon-arrow-up; +} +.#{$ti-prefix}-arrow-up-bar:before { + content: $ti-icon-arrow-up-bar; +} +.#{$ti-prefix}-arrow-up-circle:before { + content: $ti-icon-arrow-up-circle; +} +.#{$ti-prefix}-arrow-up-from-arc:before { + content: $ti-icon-arrow-up-from-arc; +} +.#{$ti-prefix}-arrow-up-left:before { + content: $ti-icon-arrow-up-left; +} +.#{$ti-prefix}-arrow-up-left-circle:before { + content: $ti-icon-arrow-up-left-circle; +} +.#{$ti-prefix}-arrow-up-rhombus:before { + content: $ti-icon-arrow-up-rhombus; +} +.#{$ti-prefix}-arrow-up-right:before { + content: $ti-icon-arrow-up-right; +} +.#{$ti-prefix}-arrow-up-right-circle:before { + content: $ti-icon-arrow-up-right-circle; +} +.#{$ti-prefix}-arrow-up-square:before { + content: $ti-icon-arrow-up-square; +} +.#{$ti-prefix}-arrow-up-tail:before { + content: $ti-icon-arrow-up-tail; +} +.#{$ti-prefix}-arrow-up-to-arc:before { + content: $ti-icon-arrow-up-to-arc; +} +.#{$ti-prefix}-arrow-wave-left-down:before { + content: $ti-icon-arrow-wave-left-down; +} +.#{$ti-prefix}-arrow-wave-left-up:before { + content: $ti-icon-arrow-wave-left-up; +} +.#{$ti-prefix}-arrow-wave-right-down:before { + content: $ti-icon-arrow-wave-right-down; +} +.#{$ti-prefix}-arrow-wave-right-up:before { + content: $ti-icon-arrow-wave-right-up; +} +.#{$ti-prefix}-arrow-zig-zag:before { + content: $ti-icon-arrow-zig-zag; +} +.#{$ti-prefix}-arrows-cross:before { + content: $ti-icon-arrows-cross; +} +.#{$ti-prefix}-arrows-diagonal:before { + content: $ti-icon-arrows-diagonal; +} +.#{$ti-prefix}-arrows-diagonal-2:before { + content: $ti-icon-arrows-diagonal-2; +} +.#{$ti-prefix}-arrows-diagonal-minimize:before { + content: $ti-icon-arrows-diagonal-minimize; +} +.#{$ti-prefix}-arrows-diagonal-minimize-2:before { + content: $ti-icon-arrows-diagonal-minimize-2; +} +.#{$ti-prefix}-arrows-diff:before { + content: $ti-icon-arrows-diff; +} +.#{$ti-prefix}-arrows-double-ne-sw:before { + content: $ti-icon-arrows-double-ne-sw; +} +.#{$ti-prefix}-arrows-double-nw-se:before { + content: $ti-icon-arrows-double-nw-se; +} +.#{$ti-prefix}-arrows-double-se-nw:before { + content: $ti-icon-arrows-double-se-nw; +} +.#{$ti-prefix}-arrows-double-sw-ne:before { + content: $ti-icon-arrows-double-sw-ne; +} +.#{$ti-prefix}-arrows-down:before { + content: $ti-icon-arrows-down; +} +.#{$ti-prefix}-arrows-down-up:before { + content: $ti-icon-arrows-down-up; +} +.#{$ti-prefix}-arrows-exchange:before { + content: $ti-icon-arrows-exchange; +} +.#{$ti-prefix}-arrows-exchange-2:before { + content: $ti-icon-arrows-exchange-2; +} +.#{$ti-prefix}-arrows-horizontal:before { + content: $ti-icon-arrows-horizontal; +} +.#{$ti-prefix}-arrows-join:before { + content: $ti-icon-arrows-join; +} +.#{$ti-prefix}-arrows-join-2:before { + content: $ti-icon-arrows-join-2; +} +.#{$ti-prefix}-arrows-left:before { + content: $ti-icon-arrows-left; +} +.#{$ti-prefix}-arrows-left-down:before { + content: $ti-icon-arrows-left-down; +} +.#{$ti-prefix}-arrows-left-right:before { + content: $ti-icon-arrows-left-right; +} +.#{$ti-prefix}-arrows-maximize:before { + content: $ti-icon-arrows-maximize; +} +.#{$ti-prefix}-arrows-minimize:before { + content: $ti-icon-arrows-minimize; +} +.#{$ti-prefix}-arrows-move:before { + content: $ti-icon-arrows-move; +} +.#{$ti-prefix}-arrows-move-horizontal:before { + content: $ti-icon-arrows-move-horizontal; +} +.#{$ti-prefix}-arrows-move-vertical:before { + content: $ti-icon-arrows-move-vertical; +} +.#{$ti-prefix}-arrows-random:before { + content: $ti-icon-arrows-random; +} +.#{$ti-prefix}-arrows-right:before { + content: $ti-icon-arrows-right; +} +.#{$ti-prefix}-arrows-right-down:before { + content: $ti-icon-arrows-right-down; +} +.#{$ti-prefix}-arrows-right-left:before { + content: $ti-icon-arrows-right-left; +} +.#{$ti-prefix}-arrows-shuffle:before { + content: $ti-icon-arrows-shuffle; +} +.#{$ti-prefix}-arrows-shuffle-2:before { + content: $ti-icon-arrows-shuffle-2; +} +.#{$ti-prefix}-arrows-sort:before { + content: $ti-icon-arrows-sort; +} +.#{$ti-prefix}-arrows-split:before { + content: $ti-icon-arrows-split; +} +.#{$ti-prefix}-arrows-split-2:before { + content: $ti-icon-arrows-split-2; +} +.#{$ti-prefix}-arrows-transfer-down:before { + content: $ti-icon-arrows-transfer-down; +} +.#{$ti-prefix}-arrows-transfer-up:before { + content: $ti-icon-arrows-transfer-up; +} +.#{$ti-prefix}-arrows-up:before { + content: $ti-icon-arrows-up; +} +.#{$ti-prefix}-arrows-up-down:before { + content: $ti-icon-arrows-up-down; +} +.#{$ti-prefix}-arrows-up-left:before { + content: $ti-icon-arrows-up-left; +} +.#{$ti-prefix}-arrows-up-right:before { + content: $ti-icon-arrows-up-right; +} +.#{$ti-prefix}-arrows-vertical:before { + content: $ti-icon-arrows-vertical; +} +.#{$ti-prefix}-artboard:before { + content: $ti-icon-artboard; +} +.#{$ti-prefix}-artboard-filled:before { + content: $ti-icon-artboard-filled; +} +.#{$ti-prefix}-artboard-off:before { + content: $ti-icon-artboard-off; +} +.#{$ti-prefix}-article:before { + content: $ti-icon-article; +} +.#{$ti-prefix}-article-filled:before { + content: $ti-icon-article-filled; +} +.#{$ti-prefix}-article-off:before { + content: $ti-icon-article-off; +} +.#{$ti-prefix}-aspect-ratio:before { + content: $ti-icon-aspect-ratio; +} +.#{$ti-prefix}-aspect-ratio-filled:before { + content: $ti-icon-aspect-ratio-filled; +} +.#{$ti-prefix}-aspect-ratio-off:before { + content: $ti-icon-aspect-ratio-off; +} +.#{$ti-prefix}-assembly:before { + content: $ti-icon-assembly; +} +.#{$ti-prefix}-assembly-filled:before { + content: $ti-icon-assembly-filled; +} +.#{$ti-prefix}-assembly-off:before { + content: $ti-icon-assembly-off; +} +.#{$ti-prefix}-asset:before { + content: $ti-icon-asset; +} +.#{$ti-prefix}-asset-filled:before { + content: $ti-icon-asset-filled; +} +.#{$ti-prefix}-asterisk:before { + content: $ti-icon-asterisk; +} +.#{$ti-prefix}-asterisk-simple:before { + content: $ti-icon-asterisk-simple; +} +.#{$ti-prefix}-at:before { + content: $ti-icon-at; +} +.#{$ti-prefix}-at-off:before { + content: $ti-icon-at-off; +} +.#{$ti-prefix}-atom:before { + content: $ti-icon-atom; +} +.#{$ti-prefix}-atom-2:before { + content: $ti-icon-atom-2; +} +.#{$ti-prefix}-atom-2-filled:before { + content: $ti-icon-atom-2-filled; +} +.#{$ti-prefix}-atom-off:before { + content: $ti-icon-atom-off; +} +.#{$ti-prefix}-augmented-reality:before { + content: $ti-icon-augmented-reality; +} +.#{$ti-prefix}-augmented-reality-2:before { + content: $ti-icon-augmented-reality-2; +} +.#{$ti-prefix}-augmented-reality-off:before { + content: $ti-icon-augmented-reality-off; +} +.#{$ti-prefix}-auth-2fa:before { + content: $ti-icon-auth-2fa; +} +.#{$ti-prefix}-automatic-gearbox:before { + content: $ti-icon-automatic-gearbox; +} +.#{$ti-prefix}-avocado:before { + content: $ti-icon-avocado; +} +.#{$ti-prefix}-award:before { + content: $ti-icon-award; +} +.#{$ti-prefix}-award-filled:before { + content: $ti-icon-award-filled; +} +.#{$ti-prefix}-award-off:before { + content: $ti-icon-award-off; +} +.#{$ti-prefix}-axe:before { + content: $ti-icon-axe; +} +.#{$ti-prefix}-axis-x:before { + content: $ti-icon-axis-x; +} +.#{$ti-prefix}-axis-y:before { + content: $ti-icon-axis-y; +} +.#{$ti-prefix}-baby-bottle:before { + content: $ti-icon-baby-bottle; +} +.#{$ti-prefix}-baby-carriage:before { + content: $ti-icon-baby-carriage; +} +.#{$ti-prefix}-baby-carriage-filled:before { + content: $ti-icon-baby-carriage-filled; +} +.#{$ti-prefix}-background:before { + content: $ti-icon-background; +} +.#{$ti-prefix}-backhoe:before { + content: $ti-icon-backhoe; +} +.#{$ti-prefix}-backpack:before { + content: $ti-icon-backpack; +} +.#{$ti-prefix}-backpack-off:before { + content: $ti-icon-backpack-off; +} +.#{$ti-prefix}-backslash:before { + content: $ti-icon-backslash; +} +.#{$ti-prefix}-backspace:before { + content: $ti-icon-backspace; +} +.#{$ti-prefix}-backspace-filled:before { + content: $ti-icon-backspace-filled; +} +.#{$ti-prefix}-badge:before { + content: $ti-icon-badge; +} +.#{$ti-prefix}-badge-3d:before { + content: $ti-icon-badge-3d; +} +.#{$ti-prefix}-badge-3d-filled:before { + content: $ti-icon-badge-3d-filled; +} +.#{$ti-prefix}-badge-4k:before { + content: $ti-icon-badge-4k; +} +.#{$ti-prefix}-badge-4k-filled:before { + content: $ti-icon-badge-4k-filled; +} +.#{$ti-prefix}-badge-8k:before { + content: $ti-icon-badge-8k; +} +.#{$ti-prefix}-badge-8k-filled:before { + content: $ti-icon-badge-8k-filled; +} +.#{$ti-prefix}-badge-ad:before { + content: $ti-icon-badge-ad; +} +.#{$ti-prefix}-badge-ad-filled:before { + content: $ti-icon-badge-ad-filled; +} +.#{$ti-prefix}-badge-ad-off:before { + content: $ti-icon-badge-ad-off; +} +.#{$ti-prefix}-badge-ar:before { + content: $ti-icon-badge-ar; +} +.#{$ti-prefix}-badge-ar-filled:before { + content: $ti-icon-badge-ar-filled; +} +.#{$ti-prefix}-badge-cc:before { + content: $ti-icon-badge-cc; +} +.#{$ti-prefix}-badge-cc-filled:before { + content: $ti-icon-badge-cc-filled; +} +.#{$ti-prefix}-badge-filled:before { + content: $ti-icon-badge-filled; +} +.#{$ti-prefix}-badge-hd:before { + content: $ti-icon-badge-hd; +} +.#{$ti-prefix}-badge-hd-filled:before { + content: $ti-icon-badge-hd-filled; +} +.#{$ti-prefix}-badge-off:before { + content: $ti-icon-badge-off; +} +.#{$ti-prefix}-badge-sd:before { + content: $ti-icon-badge-sd; +} +.#{$ti-prefix}-badge-sd-filled:before { + content: $ti-icon-badge-sd-filled; +} +.#{$ti-prefix}-badge-tm:before { + content: $ti-icon-badge-tm; +} +.#{$ti-prefix}-badge-tm-filled:before { + content: $ti-icon-badge-tm-filled; +} +.#{$ti-prefix}-badge-vo:before { + content: $ti-icon-badge-vo; +} +.#{$ti-prefix}-badge-vo-filled:before { + content: $ti-icon-badge-vo-filled; +} +.#{$ti-prefix}-badge-vr:before { + content: $ti-icon-badge-vr; +} +.#{$ti-prefix}-badge-vr-filled:before { + content: $ti-icon-badge-vr-filled; +} +.#{$ti-prefix}-badge-wc:before { + content: $ti-icon-badge-wc; +} +.#{$ti-prefix}-badge-wc-filled:before { + content: $ti-icon-badge-wc-filled; +} +.#{$ti-prefix}-badges:before { + content: $ti-icon-badges; +} +.#{$ti-prefix}-badges-filled:before { + content: $ti-icon-badges-filled; +} +.#{$ti-prefix}-badges-off:before { + content: $ti-icon-badges-off; +} +.#{$ti-prefix}-baguette:before { + content: $ti-icon-baguette; +} +.#{$ti-prefix}-ball-american-football:before { + content: $ti-icon-ball-american-football; +} +.#{$ti-prefix}-ball-american-football-off:before { + content: $ti-icon-ball-american-football-off; +} +.#{$ti-prefix}-ball-baseball:before { + content: $ti-icon-ball-baseball; +} +.#{$ti-prefix}-ball-basketball:before { + content: $ti-icon-ball-basketball; +} +.#{$ti-prefix}-ball-bowling:before { + content: $ti-icon-ball-bowling; +} +.#{$ti-prefix}-ball-football:before { + content: $ti-icon-ball-football; +} +.#{$ti-prefix}-ball-football-off:before { + content: $ti-icon-ball-football-off; +} +.#{$ti-prefix}-ball-tennis:before { + content: $ti-icon-ball-tennis; +} +.#{$ti-prefix}-ball-volleyball:before { + content: $ti-icon-ball-volleyball; +} +.#{$ti-prefix}-balloon:before { + content: $ti-icon-balloon; +} +.#{$ti-prefix}-balloon-filled:before { + content: $ti-icon-balloon-filled; +} +.#{$ti-prefix}-balloon-off:before { + content: $ti-icon-balloon-off; +} +.#{$ti-prefix}-ballpen:before { + content: $ti-icon-ballpen; +} +.#{$ti-prefix}-ballpen-filled:before { + content: $ti-icon-ballpen-filled; +} +.#{$ti-prefix}-ballpen-off:before { + content: $ti-icon-ballpen-off; +} +.#{$ti-prefix}-ban:before { + content: $ti-icon-ban; +} +.#{$ti-prefix}-bandage:before { + content: $ti-icon-bandage; +} +.#{$ti-prefix}-bandage-filled:before { + content: $ti-icon-bandage-filled; +} +.#{$ti-prefix}-bandage-off:before { + content: $ti-icon-bandage-off; +} +.#{$ti-prefix}-barbell:before { + content: $ti-icon-barbell; +} +.#{$ti-prefix}-barbell-filled:before { + content: $ti-icon-barbell-filled; +} +.#{$ti-prefix}-barbell-off:before { + content: $ti-icon-barbell-off; +} +.#{$ti-prefix}-barcode:before { + content: $ti-icon-barcode; +} +.#{$ti-prefix}-barcode-off:before { + content: $ti-icon-barcode-off; +} +.#{$ti-prefix}-barrel:before { + content: $ti-icon-barrel; +} +.#{$ti-prefix}-barrel-off:before { + content: $ti-icon-barrel-off; +} +.#{$ti-prefix}-barrier-block:before { + content: $ti-icon-barrier-block; +} +.#{$ti-prefix}-barrier-block-filled:before { + content: $ti-icon-barrier-block-filled; +} +.#{$ti-prefix}-barrier-block-off:before { + content: $ti-icon-barrier-block-off; +} +.#{$ti-prefix}-baseline:before { + content: $ti-icon-baseline; +} +.#{$ti-prefix}-baseline-density-large:before { + content: $ti-icon-baseline-density-large; +} +.#{$ti-prefix}-baseline-density-medium:before { + content: $ti-icon-baseline-density-medium; +} +.#{$ti-prefix}-baseline-density-small:before { + content: $ti-icon-baseline-density-small; +} +.#{$ti-prefix}-basket:before { + content: $ti-icon-basket; +} +.#{$ti-prefix}-basket-bolt:before { + content: $ti-icon-basket-bolt; +} +.#{$ti-prefix}-basket-cancel:before { + content: $ti-icon-basket-cancel; +} +.#{$ti-prefix}-basket-check:before { + content: $ti-icon-basket-check; +} +.#{$ti-prefix}-basket-code:before { + content: $ti-icon-basket-code; +} +.#{$ti-prefix}-basket-cog:before { + content: $ti-icon-basket-cog; +} +.#{$ti-prefix}-basket-discount:before { + content: $ti-icon-basket-discount; +} +.#{$ti-prefix}-basket-dollar:before { + content: $ti-icon-basket-dollar; +} +.#{$ti-prefix}-basket-down:before { + content: $ti-icon-basket-down; +} +.#{$ti-prefix}-basket-exclamation:before { + content: $ti-icon-basket-exclamation; +} +.#{$ti-prefix}-basket-filled:before { + content: $ti-icon-basket-filled; +} +.#{$ti-prefix}-basket-heart:before { + content: $ti-icon-basket-heart; +} +.#{$ti-prefix}-basket-minus:before { + content: $ti-icon-basket-minus; +} +.#{$ti-prefix}-basket-off:before { + content: $ti-icon-basket-off; +} +.#{$ti-prefix}-basket-pause:before { + content: $ti-icon-basket-pause; +} +.#{$ti-prefix}-basket-pin:before { + content: $ti-icon-basket-pin; +} +.#{$ti-prefix}-basket-plus:before { + content: $ti-icon-basket-plus; +} +.#{$ti-prefix}-basket-question:before { + content: $ti-icon-basket-question; +} +.#{$ti-prefix}-basket-search:before { + content: $ti-icon-basket-search; +} +.#{$ti-prefix}-basket-share:before { + content: $ti-icon-basket-share; +} +.#{$ti-prefix}-basket-star:before { + content: $ti-icon-basket-star; +} +.#{$ti-prefix}-basket-up:before { + content: $ti-icon-basket-up; +} +.#{$ti-prefix}-basket-x:before { + content: $ti-icon-basket-x; +} +.#{$ti-prefix}-bat:before { + content: $ti-icon-bat; +} +.#{$ti-prefix}-bath:before { + content: $ti-icon-bath; +} +.#{$ti-prefix}-bath-filled:before { + content: $ti-icon-bath-filled; +} +.#{$ti-prefix}-bath-off:before { + content: $ti-icon-bath-off; +} +.#{$ti-prefix}-battery:before { + content: $ti-icon-battery; +} +.#{$ti-prefix}-battery-1:before { + content: $ti-icon-battery-1; +} +.#{$ti-prefix}-battery-1-filled:before { + content: $ti-icon-battery-1-filled; +} +.#{$ti-prefix}-battery-2:before { + content: $ti-icon-battery-2; +} +.#{$ti-prefix}-battery-2-filled:before { + content: $ti-icon-battery-2-filled; +} +.#{$ti-prefix}-battery-3:before { + content: $ti-icon-battery-3; +} +.#{$ti-prefix}-battery-3-filled:before { + content: $ti-icon-battery-3-filled; +} +.#{$ti-prefix}-battery-4:before { + content: $ti-icon-battery-4; +} +.#{$ti-prefix}-battery-4-filled:before { + content: $ti-icon-battery-4-filled; +} +.#{$ti-prefix}-battery-automotive:before { + content: $ti-icon-battery-automotive; +} +.#{$ti-prefix}-battery-charging:before { + content: $ti-icon-battery-charging; +} +.#{$ti-prefix}-battery-charging-2:before { + content: $ti-icon-battery-charging-2; +} +.#{$ti-prefix}-battery-eco:before { + content: $ti-icon-battery-eco; +} +.#{$ti-prefix}-battery-filled:before { + content: $ti-icon-battery-filled; +} +.#{$ti-prefix}-battery-off:before { + content: $ti-icon-battery-off; +} +.#{$ti-prefix}-beach:before { + content: $ti-icon-beach; +} +.#{$ti-prefix}-beach-off:before { + content: $ti-icon-beach-off; +} +.#{$ti-prefix}-bed:before { + content: $ti-icon-bed; +} +.#{$ti-prefix}-bed-filled:before { + content: $ti-icon-bed-filled; +} +.#{$ti-prefix}-bed-flat:before { + content: $ti-icon-bed-flat; +} +.#{$ti-prefix}-bed-flat-filled:before { + content: $ti-icon-bed-flat-filled; +} +.#{$ti-prefix}-bed-off:before { + content: $ti-icon-bed-off; +} +.#{$ti-prefix}-beer:before { + content: $ti-icon-beer; +} +.#{$ti-prefix}-beer-filled:before { + content: $ti-icon-beer-filled; +} +.#{$ti-prefix}-beer-off:before { + content: $ti-icon-beer-off; +} +.#{$ti-prefix}-bell:before { + content: $ti-icon-bell; +} +.#{$ti-prefix}-bell-bolt:before { + content: $ti-icon-bell-bolt; +} +.#{$ti-prefix}-bell-cancel:before { + content: $ti-icon-bell-cancel; +} +.#{$ti-prefix}-bell-check:before { + content: $ti-icon-bell-check; +} +.#{$ti-prefix}-bell-code:before { + content: $ti-icon-bell-code; +} +.#{$ti-prefix}-bell-cog:before { + content: $ti-icon-bell-cog; +} +.#{$ti-prefix}-bell-dollar:before { + content: $ti-icon-bell-dollar; +} +.#{$ti-prefix}-bell-down:before { + content: $ti-icon-bell-down; +} +.#{$ti-prefix}-bell-exclamation:before { + content: $ti-icon-bell-exclamation; +} +.#{$ti-prefix}-bell-filled:before { + content: $ti-icon-bell-filled; +} +.#{$ti-prefix}-bell-heart:before { + content: $ti-icon-bell-heart; +} +.#{$ti-prefix}-bell-minus:before { + content: $ti-icon-bell-minus; +} +.#{$ti-prefix}-bell-minus-filled:before { + content: $ti-icon-bell-minus-filled; +} +.#{$ti-prefix}-bell-off:before { + content: $ti-icon-bell-off; +} +.#{$ti-prefix}-bell-pause:before { + content: $ti-icon-bell-pause; +} +.#{$ti-prefix}-bell-pin:before { + content: $ti-icon-bell-pin; +} +.#{$ti-prefix}-bell-plus:before { + content: $ti-icon-bell-plus; +} +.#{$ti-prefix}-bell-plus-filled:before { + content: $ti-icon-bell-plus-filled; +} +.#{$ti-prefix}-bell-question:before { + content: $ti-icon-bell-question; +} +.#{$ti-prefix}-bell-ringing:before { + content: $ti-icon-bell-ringing; +} +.#{$ti-prefix}-bell-ringing-2:before { + content: $ti-icon-bell-ringing-2; +} +.#{$ti-prefix}-bell-ringing-2-filled:before { + content: $ti-icon-bell-ringing-2-filled; +} +.#{$ti-prefix}-bell-ringing-filled:before { + content: $ti-icon-bell-ringing-filled; +} +.#{$ti-prefix}-bell-school:before { + content: $ti-icon-bell-school; +} +.#{$ti-prefix}-bell-search:before { + content: $ti-icon-bell-search; +} +.#{$ti-prefix}-bell-share:before { + content: $ti-icon-bell-share; +} +.#{$ti-prefix}-bell-star:before { + content: $ti-icon-bell-star; +} +.#{$ti-prefix}-bell-up:before { + content: $ti-icon-bell-up; +} +.#{$ti-prefix}-bell-x:before { + content: $ti-icon-bell-x; +} +.#{$ti-prefix}-bell-x-filled:before { + content: $ti-icon-bell-x-filled; +} +.#{$ti-prefix}-bell-z:before { + content: $ti-icon-bell-z; +} +.#{$ti-prefix}-bell-z-filled:before { + content: $ti-icon-bell-z-filled; +} +.#{$ti-prefix}-beta:before { + content: $ti-icon-beta; +} +.#{$ti-prefix}-bible:before { + content: $ti-icon-bible; +} +.#{$ti-prefix}-bike:before { + content: $ti-icon-bike; +} +.#{$ti-prefix}-bike-off:before { + content: $ti-icon-bike-off; +} +.#{$ti-prefix}-binary:before { + content: $ti-icon-binary; +} +.#{$ti-prefix}-binary-off:before { + content: $ti-icon-binary-off; +} +.#{$ti-prefix}-binary-tree:before { + content: $ti-icon-binary-tree; +} +.#{$ti-prefix}-binary-tree-2:before { + content: $ti-icon-binary-tree-2; +} +.#{$ti-prefix}-biohazard:before { + content: $ti-icon-biohazard; +} +.#{$ti-prefix}-biohazard-filled:before { + content: $ti-icon-biohazard-filled; +} +.#{$ti-prefix}-biohazard-off:before { + content: $ti-icon-biohazard-off; +} +.#{$ti-prefix}-blade:before { + content: $ti-icon-blade; +} +.#{$ti-prefix}-blade-filled:before { + content: $ti-icon-blade-filled; +} +.#{$ti-prefix}-bleach:before { + content: $ti-icon-bleach; +} +.#{$ti-prefix}-bleach-chlorine:before { + content: $ti-icon-bleach-chlorine; +} +.#{$ti-prefix}-bleach-no-chlorine:before { + content: $ti-icon-bleach-no-chlorine; +} +.#{$ti-prefix}-bleach-off:before { + content: $ti-icon-bleach-off; +} +.#{$ti-prefix}-blend-mode:before { + content: $ti-icon-blend-mode; +} +.#{$ti-prefix}-blender:before { + content: $ti-icon-blender; +} +.#{$ti-prefix}-blob:before { + content: $ti-icon-blob; +} +.#{$ti-prefix}-blob-filled:before { + content: $ti-icon-blob-filled; +} +.#{$ti-prefix}-blockquote:before { + content: $ti-icon-blockquote; +} +.#{$ti-prefix}-bluetooth:before { + content: $ti-icon-bluetooth; +} +.#{$ti-prefix}-bluetooth-connected:before { + content: $ti-icon-bluetooth-connected; +} +.#{$ti-prefix}-bluetooth-off:before { + content: $ti-icon-bluetooth-off; +} +.#{$ti-prefix}-bluetooth-x:before { + content: $ti-icon-bluetooth-x; +} +.#{$ti-prefix}-blur:before { + content: $ti-icon-blur; +} +.#{$ti-prefix}-blur-off:before { + content: $ti-icon-blur-off; +} +.#{$ti-prefix}-bmp:before { + content: $ti-icon-bmp; +} +.#{$ti-prefix}-body-scan:before { + content: $ti-icon-body-scan; +} +.#{$ti-prefix}-bold:before { + content: $ti-icon-bold; +} +.#{$ti-prefix}-bold-off:before { + content: $ti-icon-bold-off; +} +.#{$ti-prefix}-bolt:before { + content: $ti-icon-bolt; +} +.#{$ti-prefix}-bolt-off:before { + content: $ti-icon-bolt-off; +} +.#{$ti-prefix}-bomb:before { + content: $ti-icon-bomb; +} +.#{$ti-prefix}-bomb-filled:before { + content: $ti-icon-bomb-filled; +} +.#{$ti-prefix}-bone:before { + content: $ti-icon-bone; +} +.#{$ti-prefix}-bone-filled:before { + content: $ti-icon-bone-filled; +} +.#{$ti-prefix}-bone-off:before { + content: $ti-icon-bone-off; +} +.#{$ti-prefix}-bong:before { + content: $ti-icon-bong; +} +.#{$ti-prefix}-bong-off:before { + content: $ti-icon-bong-off; +} +.#{$ti-prefix}-book:before { + content: $ti-icon-book; +} +.#{$ti-prefix}-book-2:before { + content: $ti-icon-book-2; +} +.#{$ti-prefix}-book-download:before { + content: $ti-icon-book-download; +} +.#{$ti-prefix}-book-filled:before { + content: $ti-icon-book-filled; +} +.#{$ti-prefix}-book-off:before { + content: $ti-icon-book-off; +} +.#{$ti-prefix}-book-upload:before { + content: $ti-icon-book-upload; +} +.#{$ti-prefix}-bookmark:before { + content: $ti-icon-bookmark; +} +.#{$ti-prefix}-bookmark-ai:before { + content: $ti-icon-bookmark-ai; +} +.#{$ti-prefix}-bookmark-edit:before { + content: $ti-icon-bookmark-edit; +} +.#{$ti-prefix}-bookmark-filled:before { + content: $ti-icon-bookmark-filled; +} +.#{$ti-prefix}-bookmark-minus:before { + content: $ti-icon-bookmark-minus; +} +.#{$ti-prefix}-bookmark-off:before { + content: $ti-icon-bookmark-off; +} +.#{$ti-prefix}-bookmark-plus:before { + content: $ti-icon-bookmark-plus; +} +.#{$ti-prefix}-bookmark-question:before { + content: $ti-icon-bookmark-question; +} +.#{$ti-prefix}-bookmarks:before { + content: $ti-icon-bookmarks; +} +.#{$ti-prefix}-bookmarks-filled:before { + content: $ti-icon-bookmarks-filled; +} +.#{$ti-prefix}-bookmarks-off:before { + content: $ti-icon-bookmarks-off; +} +.#{$ti-prefix}-books:before { + content: $ti-icon-books; +} +.#{$ti-prefix}-books-off:before { + content: $ti-icon-books-off; +} +.#{$ti-prefix}-boom:before { + content: $ti-icon-boom; +} +.#{$ti-prefix}-boom-filled:before { + content: $ti-icon-boom-filled; +} +.#{$ti-prefix}-border-all:before { + content: $ti-icon-border-all; +} +.#{$ti-prefix}-border-bottom:before { + content: $ti-icon-border-bottom; +} +.#{$ti-prefix}-border-bottom-plus:before { + content: $ti-icon-border-bottom-plus; +} +.#{$ti-prefix}-border-corner-ios:before { + content: $ti-icon-border-corner-ios; +} +.#{$ti-prefix}-border-corner-pill:before { + content: $ti-icon-border-corner-pill; +} +.#{$ti-prefix}-border-corner-rounded:before { + content: $ti-icon-border-corner-rounded; +} +.#{$ti-prefix}-border-corner-square:before { + content: $ti-icon-border-corner-square; +} +.#{$ti-prefix}-border-corners:before { + content: $ti-icon-border-corners; +} +.#{$ti-prefix}-border-horizontal:before { + content: $ti-icon-border-horizontal; +} +.#{$ti-prefix}-border-inner:before { + content: $ti-icon-border-inner; +} +.#{$ti-prefix}-border-left:before { + content: $ti-icon-border-left; +} +.#{$ti-prefix}-border-left-plus:before { + content: $ti-icon-border-left-plus; +} +.#{$ti-prefix}-border-none:before { + content: $ti-icon-border-none; +} +.#{$ti-prefix}-border-outer:before { + content: $ti-icon-border-outer; +} +.#{$ti-prefix}-border-radius:before { + content: $ti-icon-border-radius; +} +.#{$ti-prefix}-border-right:before { + content: $ti-icon-border-right; +} +.#{$ti-prefix}-border-right-plus:before { + content: $ti-icon-border-right-plus; +} +.#{$ti-prefix}-border-sides:before { + content: $ti-icon-border-sides; +} +.#{$ti-prefix}-border-style:before { + content: $ti-icon-border-style; +} +.#{$ti-prefix}-border-style-2:before { + content: $ti-icon-border-style-2; +} +.#{$ti-prefix}-border-top:before { + content: $ti-icon-border-top; +} +.#{$ti-prefix}-border-top-plus:before { + content: $ti-icon-border-top-plus; +} +.#{$ti-prefix}-border-vertical:before { + content: $ti-icon-border-vertical; +} +.#{$ti-prefix}-bottle:before { + content: $ti-icon-bottle; +} +.#{$ti-prefix}-bottle-filled:before { + content: $ti-icon-bottle-filled; +} +.#{$ti-prefix}-bottle-off:before { + content: $ti-icon-bottle-off; +} +.#{$ti-prefix}-bounce-left:before { + content: $ti-icon-bounce-left; +} +.#{$ti-prefix}-bounce-left-filled:before { + content: $ti-icon-bounce-left-filled; +} +.#{$ti-prefix}-bounce-right:before { + content: $ti-icon-bounce-right; +} +.#{$ti-prefix}-bounce-right-filled:before { + content: $ti-icon-bounce-right-filled; +} +.#{$ti-prefix}-bow:before { + content: $ti-icon-bow; +} +.#{$ti-prefix}-bow-filled:before { + content: $ti-icon-bow-filled; +} +.#{$ti-prefix}-bowl:before { + content: $ti-icon-bowl; +} +.#{$ti-prefix}-bowl-chopsticks:before { + content: $ti-icon-bowl-chopsticks; +} +.#{$ti-prefix}-bowl-chopsticks-filled:before { + content: $ti-icon-bowl-chopsticks-filled; +} +.#{$ti-prefix}-bowl-filled:before { + content: $ti-icon-bowl-filled; +} +.#{$ti-prefix}-bowl-spoon:before { + content: $ti-icon-bowl-spoon; +} +.#{$ti-prefix}-bowl-spoon-filled:before { + content: $ti-icon-bowl-spoon-filled; +} +.#{$ti-prefix}-box:before { + content: $ti-icon-box; +} +.#{$ti-prefix}-box-align-bottom:before { + content: $ti-icon-box-align-bottom; +} +.#{$ti-prefix}-box-align-bottom-filled:before { + content: $ti-icon-box-align-bottom-filled; +} +.#{$ti-prefix}-box-align-bottom-left:before { + content: $ti-icon-box-align-bottom-left; +} +.#{$ti-prefix}-box-align-bottom-left-filled:before { + content: $ti-icon-box-align-bottom-left-filled; +} +.#{$ti-prefix}-box-align-bottom-right:before { + content: $ti-icon-box-align-bottom-right; +} +.#{$ti-prefix}-box-align-bottom-right-filled:before { + content: $ti-icon-box-align-bottom-right-filled; +} +.#{$ti-prefix}-box-align-left:before { + content: $ti-icon-box-align-left; +} +.#{$ti-prefix}-box-align-left-filled:before { + content: $ti-icon-box-align-left-filled; +} +.#{$ti-prefix}-box-align-right:before { + content: $ti-icon-box-align-right; +} +.#{$ti-prefix}-box-align-right-filled:before { + content: $ti-icon-box-align-right-filled; +} +.#{$ti-prefix}-box-align-top:before { + content: $ti-icon-box-align-top; +} +.#{$ti-prefix}-box-align-top-filled:before { + content: $ti-icon-box-align-top-filled; +} +.#{$ti-prefix}-box-align-top-left:before { + content: $ti-icon-box-align-top-left; +} +.#{$ti-prefix}-box-align-top-left-filled:before { + content: $ti-icon-box-align-top-left-filled; +} +.#{$ti-prefix}-box-align-top-right:before { + content: $ti-icon-box-align-top-right; +} +.#{$ti-prefix}-box-align-top-right-filled:before { + content: $ti-icon-box-align-top-right-filled; +} +.#{$ti-prefix}-box-margin:before { + content: $ti-icon-box-margin; +} +.#{$ti-prefix}-box-model:before { + content: $ti-icon-box-model; +} +.#{$ti-prefix}-box-model-2:before { + content: $ti-icon-box-model-2; +} +.#{$ti-prefix}-box-model-2-off:before { + content: $ti-icon-box-model-2-off; +} +.#{$ti-prefix}-box-model-off:before { + content: $ti-icon-box-model-off; +} +.#{$ti-prefix}-box-multiple:before { + content: $ti-icon-box-multiple; +} +.#{$ti-prefix}-box-multiple-0:before { + content: $ti-icon-box-multiple-0; +} +.#{$ti-prefix}-box-multiple-1:before { + content: $ti-icon-box-multiple-1; +} +.#{$ti-prefix}-box-multiple-2:before { + content: $ti-icon-box-multiple-2; +} +.#{$ti-prefix}-box-multiple-3:before { + content: $ti-icon-box-multiple-3; +} +.#{$ti-prefix}-box-multiple-4:before { + content: $ti-icon-box-multiple-4; +} +.#{$ti-prefix}-box-multiple-5:before { + content: $ti-icon-box-multiple-5; +} +.#{$ti-prefix}-box-multiple-6:before { + content: $ti-icon-box-multiple-6; +} +.#{$ti-prefix}-box-multiple-7:before { + content: $ti-icon-box-multiple-7; +} +.#{$ti-prefix}-box-multiple-8:before { + content: $ti-icon-box-multiple-8; +} +.#{$ti-prefix}-box-multiple-9:before { + content: $ti-icon-box-multiple-9; +} +.#{$ti-prefix}-box-off:before { + content: $ti-icon-box-off; +} +.#{$ti-prefix}-box-padding:before { + content: $ti-icon-box-padding; +} +.#{$ti-prefix}-braces:before { + content: $ti-icon-braces; +} +.#{$ti-prefix}-braces-off:before { + content: $ti-icon-braces-off; +} +.#{$ti-prefix}-brackets:before { + content: $ti-icon-brackets; +} +.#{$ti-prefix}-brackets-angle:before { + content: $ti-icon-brackets-angle; +} +.#{$ti-prefix}-brackets-angle-off:before { + content: $ti-icon-brackets-angle-off; +} +.#{$ti-prefix}-brackets-contain:before { + content: $ti-icon-brackets-contain; +} +.#{$ti-prefix}-brackets-contain-end:before { + content: $ti-icon-brackets-contain-end; +} +.#{$ti-prefix}-brackets-contain-start:before { + content: $ti-icon-brackets-contain-start; +} +.#{$ti-prefix}-brackets-off:before { + content: $ti-icon-brackets-off; +} +.#{$ti-prefix}-braille:before { + content: $ti-icon-braille; +} +.#{$ti-prefix}-brain:before { + content: $ti-icon-brain; +} +.#{$ti-prefix}-brand-4chan:before { + content: $ti-icon-brand-4chan; +} +.#{$ti-prefix}-brand-abstract:before { + content: $ti-icon-brand-abstract; +} +.#{$ti-prefix}-brand-adobe:before { + content: $ti-icon-brand-adobe; +} +.#{$ti-prefix}-brand-adonis-js:before { + content: $ti-icon-brand-adonis-js; +} +.#{$ti-prefix}-brand-airbnb:before { + content: $ti-icon-brand-airbnb; +} +.#{$ti-prefix}-brand-airtable:before { + content: $ti-icon-brand-airtable; +} +.#{$ti-prefix}-brand-algolia:before { + content: $ti-icon-brand-algolia; +} +.#{$ti-prefix}-brand-alipay:before { + content: $ti-icon-brand-alipay; +} +.#{$ti-prefix}-brand-alpine-js:before { + content: $ti-icon-brand-alpine-js; +} +.#{$ti-prefix}-brand-amazon:before { + content: $ti-icon-brand-amazon; +} +.#{$ti-prefix}-brand-amd:before { + content: $ti-icon-brand-amd; +} +.#{$ti-prefix}-brand-amigo:before { + content: $ti-icon-brand-amigo; +} +.#{$ti-prefix}-brand-among-us:before { + content: $ti-icon-brand-among-us; +} +.#{$ti-prefix}-brand-android:before { + content: $ti-icon-brand-android; +} +.#{$ti-prefix}-brand-angular:before { + content: $ti-icon-brand-angular; +} +.#{$ti-prefix}-brand-ansible:before { + content: $ti-icon-brand-ansible; +} +.#{$ti-prefix}-brand-ao3:before { + content: $ti-icon-brand-ao3; +} +.#{$ti-prefix}-brand-appgallery:before { + content: $ti-icon-brand-appgallery; +} +.#{$ti-prefix}-brand-apple:before { + content: $ti-icon-brand-apple; +} +.#{$ti-prefix}-brand-apple-arcade:before { + content: $ti-icon-brand-apple-arcade; +} +.#{$ti-prefix}-brand-apple-filled:before { + content: $ti-icon-brand-apple-filled; +} +.#{$ti-prefix}-brand-apple-podcast:before { + content: $ti-icon-brand-apple-podcast; +} +.#{$ti-prefix}-brand-appstore:before { + content: $ti-icon-brand-appstore; +} +.#{$ti-prefix}-brand-arc:before { + content: $ti-icon-brand-arc; +} +.#{$ti-prefix}-brand-asana:before { + content: $ti-icon-brand-asana; +} +.#{$ti-prefix}-brand-astro:before { + content: $ti-icon-brand-astro; +} +.#{$ti-prefix}-brand-auth0:before { + content: $ti-icon-brand-auth0; +} +.#{$ti-prefix}-brand-aws:before { + content: $ti-icon-brand-aws; +} +.#{$ti-prefix}-brand-azure:before { + content: $ti-icon-brand-azure; +} +.#{$ti-prefix}-brand-backbone:before { + content: $ti-icon-brand-backbone; +} +.#{$ti-prefix}-brand-badoo:before { + content: $ti-icon-brand-badoo; +} +.#{$ti-prefix}-brand-baidu:before { + content: $ti-icon-brand-baidu; +} +.#{$ti-prefix}-brand-bandcamp:before { + content: $ti-icon-brand-bandcamp; +} +.#{$ti-prefix}-brand-bandlab:before { + content: $ti-icon-brand-bandlab; +} +.#{$ti-prefix}-brand-beats:before { + content: $ti-icon-brand-beats; +} +.#{$ti-prefix}-brand-behance:before { + content: $ti-icon-brand-behance; +} +.#{$ti-prefix}-brand-bilibili:before { + content: $ti-icon-brand-bilibili; +} +.#{$ti-prefix}-brand-binance:before { + content: $ti-icon-brand-binance; +} +.#{$ti-prefix}-brand-bing:before { + content: $ti-icon-brand-bing; +} +.#{$ti-prefix}-brand-bitbucket:before { + content: $ti-icon-brand-bitbucket; +} +.#{$ti-prefix}-brand-blackberry:before { + content: $ti-icon-brand-blackberry; +} +.#{$ti-prefix}-brand-blender:before { + content: $ti-icon-brand-blender; +} +.#{$ti-prefix}-brand-blogger:before { + content: $ti-icon-brand-blogger; +} +.#{$ti-prefix}-brand-bluesky:before { + content: $ti-icon-brand-bluesky; +} +.#{$ti-prefix}-brand-booking:before { + content: $ti-icon-brand-booking; +} +.#{$ti-prefix}-brand-bootstrap:before { + content: $ti-icon-brand-bootstrap; +} +.#{$ti-prefix}-brand-bulma:before { + content: $ti-icon-brand-bulma; +} +.#{$ti-prefix}-brand-bumble:before { + content: $ti-icon-brand-bumble; +} +.#{$ti-prefix}-brand-bunpo:before { + content: $ti-icon-brand-bunpo; +} +.#{$ti-prefix}-brand-c-sharp:before { + content: $ti-icon-brand-c-sharp; +} +.#{$ti-prefix}-brand-cake:before { + content: $ti-icon-brand-cake; +} +.#{$ti-prefix}-brand-cakephp:before { + content: $ti-icon-brand-cakephp; +} +.#{$ti-prefix}-brand-campaignmonitor:before { + content: $ti-icon-brand-campaignmonitor; +} +.#{$ti-prefix}-brand-carbon:before { + content: $ti-icon-brand-carbon; +} +.#{$ti-prefix}-brand-cashapp:before { + content: $ti-icon-brand-cashapp; +} +.#{$ti-prefix}-brand-chrome:before { + content: $ti-icon-brand-chrome; +} +.#{$ti-prefix}-brand-cinema-4d:before { + content: $ti-icon-brand-cinema-4d; +} +.#{$ti-prefix}-brand-citymapper:before { + content: $ti-icon-brand-citymapper; +} +.#{$ti-prefix}-brand-cloudflare:before { + content: $ti-icon-brand-cloudflare; +} +.#{$ti-prefix}-brand-codecov:before { + content: $ti-icon-brand-codecov; +} +.#{$ti-prefix}-brand-codepen:before { + content: $ti-icon-brand-codepen; +} +.#{$ti-prefix}-brand-codesandbox:before { + content: $ti-icon-brand-codesandbox; +} +.#{$ti-prefix}-brand-cohost:before { + content: $ti-icon-brand-cohost; +} +.#{$ti-prefix}-brand-coinbase:before { + content: $ti-icon-brand-coinbase; +} +.#{$ti-prefix}-brand-comedy-central:before { + content: $ti-icon-brand-comedy-central; +} +.#{$ti-prefix}-brand-coreos:before { + content: $ti-icon-brand-coreos; +} +.#{$ti-prefix}-brand-couchdb:before { + content: $ti-icon-brand-couchdb; +} +.#{$ti-prefix}-brand-couchsurfing:before { + content: $ti-icon-brand-couchsurfing; +} +.#{$ti-prefix}-brand-cpp:before { + content: $ti-icon-brand-cpp; +} +.#{$ti-prefix}-brand-craft:before { + content: $ti-icon-brand-craft; +} +.#{$ti-prefix}-brand-crunchbase:before { + content: $ti-icon-brand-crunchbase; +} +.#{$ti-prefix}-brand-css3:before { + content: $ti-icon-brand-css3; +} +.#{$ti-prefix}-brand-ctemplar:before { + content: $ti-icon-brand-ctemplar; +} +.#{$ti-prefix}-brand-cucumber:before { + content: $ti-icon-brand-cucumber; +} +.#{$ti-prefix}-brand-cupra:before { + content: $ti-icon-brand-cupra; +} +.#{$ti-prefix}-brand-cypress:before { + content: $ti-icon-brand-cypress; +} +.#{$ti-prefix}-brand-d3:before { + content: $ti-icon-brand-d3; +} +.#{$ti-prefix}-brand-databricks:before { + content: $ti-icon-brand-databricks; +} +.#{$ti-prefix}-brand-days-counter:before { + content: $ti-icon-brand-days-counter; +} +.#{$ti-prefix}-brand-dcos:before { + content: $ti-icon-brand-dcos; +} +.#{$ti-prefix}-brand-debian:before { + content: $ti-icon-brand-debian; +} +.#{$ti-prefix}-brand-deezer:before { + content: $ti-icon-brand-deezer; +} +.#{$ti-prefix}-brand-deliveroo:before { + content: $ti-icon-brand-deliveroo; +} +.#{$ti-prefix}-brand-deno:before { + content: $ti-icon-brand-deno; +} +.#{$ti-prefix}-brand-denodo:before { + content: $ti-icon-brand-denodo; +} +.#{$ti-prefix}-brand-deviantart:before { + content: $ti-icon-brand-deviantart; +} +.#{$ti-prefix}-brand-digg:before { + content: $ti-icon-brand-digg; +} +.#{$ti-prefix}-brand-dingtalk:before { + content: $ti-icon-brand-dingtalk; +} +.#{$ti-prefix}-brand-discord:before { + content: $ti-icon-brand-discord; +} +.#{$ti-prefix}-brand-discord-filled:before { + content: $ti-icon-brand-discord-filled; +} +.#{$ti-prefix}-brand-disney:before { + content: $ti-icon-brand-disney; +} +.#{$ti-prefix}-brand-disqus:before { + content: $ti-icon-brand-disqus; +} +.#{$ti-prefix}-brand-django:before { + content: $ti-icon-brand-django; +} +.#{$ti-prefix}-brand-docker:before { + content: $ti-icon-brand-docker; +} +.#{$ti-prefix}-brand-doctrine:before { + content: $ti-icon-brand-doctrine; +} +.#{$ti-prefix}-brand-dolby-digital:before { + content: $ti-icon-brand-dolby-digital; +} +.#{$ti-prefix}-brand-douban:before { + content: $ti-icon-brand-douban; +} +.#{$ti-prefix}-brand-dribbble:before { + content: $ti-icon-brand-dribbble; +} +.#{$ti-prefix}-brand-dribbble-filled:before { + content: $ti-icon-brand-dribbble-filled; +} +.#{$ti-prefix}-brand-drops:before { + content: $ti-icon-brand-drops; +} +.#{$ti-prefix}-brand-drupal:before { + content: $ti-icon-brand-drupal; +} +.#{$ti-prefix}-brand-edge:before { + content: $ti-icon-brand-edge; +} +.#{$ti-prefix}-brand-elastic:before { + content: $ti-icon-brand-elastic; +} +.#{$ti-prefix}-brand-electronic-arts:before { + content: $ti-icon-brand-electronic-arts; +} +.#{$ti-prefix}-brand-ember:before { + content: $ti-icon-brand-ember; +} +.#{$ti-prefix}-brand-envato:before { + content: $ti-icon-brand-envato; +} +.#{$ti-prefix}-brand-etsy:before { + content: $ti-icon-brand-etsy; +} +.#{$ti-prefix}-brand-evernote:before { + content: $ti-icon-brand-evernote; +} +.#{$ti-prefix}-brand-facebook:before { + content: $ti-icon-brand-facebook; +} +.#{$ti-prefix}-brand-facebook-filled:before { + content: $ti-icon-brand-facebook-filled; +} +.#{$ti-prefix}-brand-feedly:before { + content: $ti-icon-brand-feedly; +} +.#{$ti-prefix}-brand-figma:before { + content: $ti-icon-brand-figma; +} +.#{$ti-prefix}-brand-filezilla:before { + content: $ti-icon-brand-filezilla; +} +.#{$ti-prefix}-brand-finder:before { + content: $ti-icon-brand-finder; +} +.#{$ti-prefix}-brand-firebase:before { + content: $ti-icon-brand-firebase; +} +.#{$ti-prefix}-brand-firefox:before { + content: $ti-icon-brand-firefox; +} +.#{$ti-prefix}-brand-fiverr:before { + content: $ti-icon-brand-fiverr; +} +.#{$ti-prefix}-brand-flickr:before { + content: $ti-icon-brand-flickr; +} +.#{$ti-prefix}-brand-flightradar24:before { + content: $ti-icon-brand-flightradar24; +} +.#{$ti-prefix}-brand-flipboard:before { + content: $ti-icon-brand-flipboard; +} +.#{$ti-prefix}-brand-flutter:before { + content: $ti-icon-brand-flutter; +} +.#{$ti-prefix}-brand-fortnite:before { + content: $ti-icon-brand-fortnite; +} +.#{$ti-prefix}-brand-foursquare:before { + content: $ti-icon-brand-foursquare; +} +.#{$ti-prefix}-brand-framer:before { + content: $ti-icon-brand-framer; +} +.#{$ti-prefix}-brand-framer-motion:before { + content: $ti-icon-brand-framer-motion; +} +.#{$ti-prefix}-brand-funimation:before { + content: $ti-icon-brand-funimation; +} +.#{$ti-prefix}-brand-gatsby:before { + content: $ti-icon-brand-gatsby; +} +.#{$ti-prefix}-brand-git:before { + content: $ti-icon-brand-git; +} +.#{$ti-prefix}-brand-github:before { + content: $ti-icon-brand-github; +} +.#{$ti-prefix}-brand-github-copilot:before { + content: $ti-icon-brand-github-copilot; +} +.#{$ti-prefix}-brand-github-filled:before { + content: $ti-icon-brand-github-filled; +} +.#{$ti-prefix}-brand-gitlab:before { + content: $ti-icon-brand-gitlab; +} +.#{$ti-prefix}-brand-gmail:before { + content: $ti-icon-brand-gmail; +} +.#{$ti-prefix}-brand-golang:before { + content: $ti-icon-brand-golang; +} +.#{$ti-prefix}-brand-google:before { + content: $ti-icon-brand-google; +} +.#{$ti-prefix}-brand-google-analytics:before { + content: $ti-icon-brand-google-analytics; +} +.#{$ti-prefix}-brand-google-big-query:before { + content: $ti-icon-brand-google-big-query; +} +.#{$ti-prefix}-brand-google-drive:before { + content: $ti-icon-brand-google-drive; +} +.#{$ti-prefix}-brand-google-filled:before { + content: $ti-icon-brand-google-filled; +} +.#{$ti-prefix}-brand-google-fit:before { + content: $ti-icon-brand-google-fit; +} +.#{$ti-prefix}-brand-google-home:before { + content: $ti-icon-brand-google-home; +} +.#{$ti-prefix}-brand-google-maps:before { + content: $ti-icon-brand-google-maps; +} +.#{$ti-prefix}-brand-google-one:before { + content: $ti-icon-brand-google-one; +} +.#{$ti-prefix}-brand-google-photos:before { + content: $ti-icon-brand-google-photos; +} +.#{$ti-prefix}-brand-google-play:before { + content: $ti-icon-brand-google-play; +} +.#{$ti-prefix}-brand-google-podcasts:before { + content: $ti-icon-brand-google-podcasts; +} +.#{$ti-prefix}-brand-grammarly:before { + content: $ti-icon-brand-grammarly; +} +.#{$ti-prefix}-brand-graphql:before { + content: $ti-icon-brand-graphql; +} +.#{$ti-prefix}-brand-gravatar:before { + content: $ti-icon-brand-gravatar; +} +.#{$ti-prefix}-brand-grindr:before { + content: $ti-icon-brand-grindr; +} +.#{$ti-prefix}-brand-guardian:before { + content: $ti-icon-brand-guardian; +} +.#{$ti-prefix}-brand-gumroad:before { + content: $ti-icon-brand-gumroad; +} +.#{$ti-prefix}-brand-hbo:before { + content: $ti-icon-brand-hbo; +} +.#{$ti-prefix}-brand-headlessui:before { + content: $ti-icon-brand-headlessui; +} +.#{$ti-prefix}-brand-hexo:before { + content: $ti-icon-brand-hexo; +} +.#{$ti-prefix}-brand-hipchat:before { + content: $ti-icon-brand-hipchat; +} +.#{$ti-prefix}-brand-html5:before { + content: $ti-icon-brand-html5; +} +.#{$ti-prefix}-brand-inertia:before { + content: $ti-icon-brand-inertia; +} +.#{$ti-prefix}-brand-instagram:before { + content: $ti-icon-brand-instagram; +} +.#{$ti-prefix}-brand-intercom:before { + content: $ti-icon-brand-intercom; +} +.#{$ti-prefix}-brand-itch:before { + content: $ti-icon-brand-itch; +} +.#{$ti-prefix}-brand-javascript:before { + content: $ti-icon-brand-javascript; +} +.#{$ti-prefix}-brand-juejin:before { + content: $ti-icon-brand-juejin; +} +.#{$ti-prefix}-brand-kako-talk:before { + content: $ti-icon-brand-kako-talk; +} +.#{$ti-prefix}-brand-kbin:before { + content: $ti-icon-brand-kbin; +} +.#{$ti-prefix}-brand-kick:before { + content: $ti-icon-brand-kick; +} +.#{$ti-prefix}-brand-kickstarter:before { + content: $ti-icon-brand-kickstarter; +} +.#{$ti-prefix}-brand-kotlin:before { + content: $ti-icon-brand-kotlin; +} +.#{$ti-prefix}-brand-laravel:before { + content: $ti-icon-brand-laravel; +} +.#{$ti-prefix}-brand-lastfm:before { + content: $ti-icon-brand-lastfm; +} +.#{$ti-prefix}-brand-leetcode:before { + content: $ti-icon-brand-leetcode; +} +.#{$ti-prefix}-brand-letterboxd:before { + content: $ti-icon-brand-letterboxd; +} +.#{$ti-prefix}-brand-line:before { + content: $ti-icon-brand-line; +} +.#{$ti-prefix}-brand-linkedin:before { + content: $ti-icon-brand-linkedin; +} +.#{$ti-prefix}-brand-linktree:before { + content: $ti-icon-brand-linktree; +} +.#{$ti-prefix}-brand-linqpad:before { + content: $ti-icon-brand-linqpad; +} +.#{$ti-prefix}-brand-livewire:before { + content: $ti-icon-brand-livewire; +} +.#{$ti-prefix}-brand-loom:before { + content: $ti-icon-brand-loom; +} +.#{$ti-prefix}-brand-mailgun:before { + content: $ti-icon-brand-mailgun; +} +.#{$ti-prefix}-brand-mantine:before { + content: $ti-icon-brand-mantine; +} +.#{$ti-prefix}-brand-mastercard:before { + content: $ti-icon-brand-mastercard; +} +.#{$ti-prefix}-brand-mastodon:before { + content: $ti-icon-brand-mastodon; +} +.#{$ti-prefix}-brand-matrix:before { + content: $ti-icon-brand-matrix; +} +.#{$ti-prefix}-brand-mcdonalds:before { + content: $ti-icon-brand-mcdonalds; +} +.#{$ti-prefix}-brand-medium:before { + content: $ti-icon-brand-medium; +} +.#{$ti-prefix}-brand-meetup:before { + content: $ti-icon-brand-meetup; +} +.#{$ti-prefix}-brand-mercedes:before { + content: $ti-icon-brand-mercedes; +} +.#{$ti-prefix}-brand-messenger:before { + content: $ti-icon-brand-messenger; +} +.#{$ti-prefix}-brand-meta:before { + content: $ti-icon-brand-meta; +} +.#{$ti-prefix}-brand-minecraft:before { + content: $ti-icon-brand-minecraft; +} +.#{$ti-prefix}-brand-miniprogram:before { + content: $ti-icon-brand-miniprogram; +} +.#{$ti-prefix}-brand-mixpanel:before { + content: $ti-icon-brand-mixpanel; +} +.#{$ti-prefix}-brand-monday:before { + content: $ti-icon-brand-monday; +} +.#{$ti-prefix}-brand-mongodb:before { + content: $ti-icon-brand-mongodb; +} +.#{$ti-prefix}-brand-my-oppo:before { + content: $ti-icon-brand-my-oppo; +} +.#{$ti-prefix}-brand-mysql:before { + content: $ti-icon-brand-mysql; +} +.#{$ti-prefix}-brand-national-geographic:before { + content: $ti-icon-brand-national-geographic; +} +.#{$ti-prefix}-brand-nem:before { + content: $ti-icon-brand-nem; +} +.#{$ti-prefix}-brand-netbeans:before { + content: $ti-icon-brand-netbeans; +} +.#{$ti-prefix}-brand-netease-music:before { + content: $ti-icon-brand-netease-music; +} +.#{$ti-prefix}-brand-netflix:before { + content: $ti-icon-brand-netflix; +} +.#{$ti-prefix}-brand-nexo:before { + content: $ti-icon-brand-nexo; +} +.#{$ti-prefix}-brand-nextcloud:before { + content: $ti-icon-brand-nextcloud; +} +.#{$ti-prefix}-brand-nextjs:before { + content: $ti-icon-brand-nextjs; +} +.#{$ti-prefix}-brand-nodejs:before { + content: $ti-icon-brand-nodejs; +} +.#{$ti-prefix}-brand-nord-vpn:before { + content: $ti-icon-brand-nord-vpn; +} +.#{$ti-prefix}-brand-notion:before { + content: $ti-icon-brand-notion; +} +.#{$ti-prefix}-brand-npm:before { + content: $ti-icon-brand-npm; +} +.#{$ti-prefix}-brand-nuxt:before { + content: $ti-icon-brand-nuxt; +} +.#{$ti-prefix}-brand-nytimes:before { + content: $ti-icon-brand-nytimes; +} +.#{$ti-prefix}-brand-oauth:before { + content: $ti-icon-brand-oauth; +} +.#{$ti-prefix}-brand-office:before { + content: $ti-icon-brand-office; +} +.#{$ti-prefix}-brand-ok-ru:before { + content: $ti-icon-brand-ok-ru; +} +.#{$ti-prefix}-brand-onedrive:before { + content: $ti-icon-brand-onedrive; +} +.#{$ti-prefix}-brand-onlyfans:before { + content: $ti-icon-brand-onlyfans; +} +.#{$ti-prefix}-brand-open-source:before { + content: $ti-icon-brand-open-source; +} +.#{$ti-prefix}-brand-openai:before { + content: $ti-icon-brand-openai; +} +.#{$ti-prefix}-brand-openvpn:before { + content: $ti-icon-brand-openvpn; +} +.#{$ti-prefix}-brand-opera:before { + content: $ti-icon-brand-opera; +} +.#{$ti-prefix}-brand-pagekit:before { + content: $ti-icon-brand-pagekit; +} +.#{$ti-prefix}-brand-parsinta:before { + content: $ti-icon-brand-parsinta; +} +.#{$ti-prefix}-brand-patreon:before { + content: $ti-icon-brand-patreon; +} +.#{$ti-prefix}-brand-patreon-filled:before { + content: $ti-icon-brand-patreon-filled; +} +.#{$ti-prefix}-brand-paypal:before { + content: $ti-icon-brand-paypal; +} +.#{$ti-prefix}-brand-paypal-filled:before { + content: $ti-icon-brand-paypal-filled; +} +.#{$ti-prefix}-brand-paypay:before { + content: $ti-icon-brand-paypay; +} +.#{$ti-prefix}-brand-peanut:before { + content: $ti-icon-brand-peanut; +} +.#{$ti-prefix}-brand-pepsi:before { + content: $ti-icon-brand-pepsi; +} +.#{$ti-prefix}-brand-php:before { + content: $ti-icon-brand-php; +} +.#{$ti-prefix}-brand-picsart:before { + content: $ti-icon-brand-picsart; +} +.#{$ti-prefix}-brand-pinterest:before { + content: $ti-icon-brand-pinterest; +} +.#{$ti-prefix}-brand-planetscale:before { + content: $ti-icon-brand-planetscale; +} +.#{$ti-prefix}-brand-pnpm:before { + content: $ti-icon-brand-pnpm; +} +.#{$ti-prefix}-brand-pocket:before { + content: $ti-icon-brand-pocket; +} +.#{$ti-prefix}-brand-polymer:before { + content: $ti-icon-brand-polymer; +} +.#{$ti-prefix}-brand-powershell:before { + content: $ti-icon-brand-powershell; +} +.#{$ti-prefix}-brand-printables:before { + content: $ti-icon-brand-printables; +} +.#{$ti-prefix}-brand-prisma:before { + content: $ti-icon-brand-prisma; +} +.#{$ti-prefix}-brand-producthunt:before { + content: $ti-icon-brand-producthunt; +} +.#{$ti-prefix}-brand-pushbullet:before { + content: $ti-icon-brand-pushbullet; +} +.#{$ti-prefix}-brand-pushover:before { + content: $ti-icon-brand-pushover; +} +.#{$ti-prefix}-brand-python:before { + content: $ti-icon-brand-python; +} +.#{$ti-prefix}-brand-qq:before { + content: $ti-icon-brand-qq; +} +.#{$ti-prefix}-brand-radix-ui:before { + content: $ti-icon-brand-radix-ui; +} +.#{$ti-prefix}-brand-react:before { + content: $ti-icon-brand-react; +} +.#{$ti-prefix}-brand-react-native:before { + content: $ti-icon-brand-react-native; +} +.#{$ti-prefix}-brand-reason:before { + content: $ti-icon-brand-reason; +} +.#{$ti-prefix}-brand-reddit:before { + content: $ti-icon-brand-reddit; +} +.#{$ti-prefix}-brand-redhat:before { + content: $ti-icon-brand-redhat; +} +.#{$ti-prefix}-brand-redux:before { + content: $ti-icon-brand-redux; +} +.#{$ti-prefix}-brand-revolut:before { + content: $ti-icon-brand-revolut; +} +.#{$ti-prefix}-brand-rumble:before { + content: $ti-icon-brand-rumble; +} +.#{$ti-prefix}-brand-rust:before { + content: $ti-icon-brand-rust; +} +.#{$ti-prefix}-brand-safari:before { + content: $ti-icon-brand-safari; +} +.#{$ti-prefix}-brand-samsungpass:before { + content: $ti-icon-brand-samsungpass; +} +.#{$ti-prefix}-brand-sass:before { + content: $ti-icon-brand-sass; +} +.#{$ti-prefix}-brand-sentry:before { + content: $ti-icon-brand-sentry; +} +.#{$ti-prefix}-brand-sharik:before { + content: $ti-icon-brand-sharik; +} +.#{$ti-prefix}-brand-shazam:before { + content: $ti-icon-brand-shazam; +} +.#{$ti-prefix}-brand-shopee:before { + content: $ti-icon-brand-shopee; +} +.#{$ti-prefix}-brand-sketch:before { + content: $ti-icon-brand-sketch; +} +.#{$ti-prefix}-brand-skype:before { + content: $ti-icon-brand-skype; +} +.#{$ti-prefix}-brand-slack:before { + content: $ti-icon-brand-slack; +} +.#{$ti-prefix}-brand-snapchat:before { + content: $ti-icon-brand-snapchat; +} +.#{$ti-prefix}-brand-snapseed:before { + content: $ti-icon-brand-snapseed; +} +.#{$ti-prefix}-brand-snowflake:before { + content: $ti-icon-brand-snowflake; +} +.#{$ti-prefix}-brand-socket-io:before { + content: $ti-icon-brand-socket-io; +} +.#{$ti-prefix}-brand-solidjs:before { + content: $ti-icon-brand-solidjs; +} +.#{$ti-prefix}-brand-soundcloud:before { + content: $ti-icon-brand-soundcloud; +} +.#{$ti-prefix}-brand-spacehey:before { + content: $ti-icon-brand-spacehey; +} +.#{$ti-prefix}-brand-speedtest:before { + content: $ti-icon-brand-speedtest; +} +.#{$ti-prefix}-brand-spotify:before { + content: $ti-icon-brand-spotify; +} +.#{$ti-prefix}-brand-spotify-filled:before { + content: $ti-icon-brand-spotify-filled; +} +.#{$ti-prefix}-brand-stackoverflow:before { + content: $ti-icon-brand-stackoverflow; +} +.#{$ti-prefix}-brand-stackshare:before { + content: $ti-icon-brand-stackshare; +} +.#{$ti-prefix}-brand-steam:before { + content: $ti-icon-brand-steam; +} +.#{$ti-prefix}-brand-stocktwits:before { + content: $ti-icon-brand-stocktwits; +} +.#{$ti-prefix}-brand-storj:before { + content: $ti-icon-brand-storj; +} +.#{$ti-prefix}-brand-storybook:before { + content: $ti-icon-brand-storybook; +} +.#{$ti-prefix}-brand-storytel:before { + content: $ti-icon-brand-storytel; +} +.#{$ti-prefix}-brand-strava:before { + content: $ti-icon-brand-strava; +} +.#{$ti-prefix}-brand-stripe:before { + content: $ti-icon-brand-stripe; +} +.#{$ti-prefix}-brand-sublime-text:before { + content: $ti-icon-brand-sublime-text; +} +.#{$ti-prefix}-brand-sugarizer:before { + content: $ti-icon-brand-sugarizer; +} +.#{$ti-prefix}-brand-supabase:before { + content: $ti-icon-brand-supabase; +} +.#{$ti-prefix}-brand-superhuman:before { + content: $ti-icon-brand-superhuman; +} +.#{$ti-prefix}-brand-supernova:before { + content: $ti-icon-brand-supernova; +} +.#{$ti-prefix}-brand-surfshark:before { + content: $ti-icon-brand-surfshark; +} +.#{$ti-prefix}-brand-svelte:before { + content: $ti-icon-brand-svelte; +} +.#{$ti-prefix}-brand-swift:before { + content: $ti-icon-brand-swift; +} +.#{$ti-prefix}-brand-symfony:before { + content: $ti-icon-brand-symfony; +} +.#{$ti-prefix}-brand-tabler:before { + content: $ti-icon-brand-tabler; +} +.#{$ti-prefix}-brand-tailwind:before { + content: $ti-icon-brand-tailwind; +} +.#{$ti-prefix}-brand-taobao:before { + content: $ti-icon-brand-taobao; +} +.#{$ti-prefix}-brand-teams:before { + content: $ti-icon-brand-teams; +} +.#{$ti-prefix}-brand-ted:before { + content: $ti-icon-brand-ted; +} +.#{$ti-prefix}-brand-telegram:before { + content: $ti-icon-brand-telegram; +} +.#{$ti-prefix}-brand-terraform:before { + content: $ti-icon-brand-terraform; +} +.#{$ti-prefix}-brand-tether:before { + content: $ti-icon-brand-tether; +} +.#{$ti-prefix}-brand-thingiverse:before { + content: $ti-icon-brand-thingiverse; +} +.#{$ti-prefix}-brand-threads:before { + content: $ti-icon-brand-threads; +} +.#{$ti-prefix}-brand-threejs:before { + content: $ti-icon-brand-threejs; +} +.#{$ti-prefix}-brand-tidal:before { + content: $ti-icon-brand-tidal; +} +.#{$ti-prefix}-brand-tiktok:before { + content: $ti-icon-brand-tiktok; +} +.#{$ti-prefix}-brand-tiktok-filled:before { + content: $ti-icon-brand-tiktok-filled; +} +.#{$ti-prefix}-brand-tinder:before { + content: $ti-icon-brand-tinder; +} +.#{$ti-prefix}-brand-topbuzz:before { + content: $ti-icon-brand-topbuzz; +} +.#{$ti-prefix}-brand-torchain:before { + content: $ti-icon-brand-torchain; +} +.#{$ti-prefix}-brand-toyota:before { + content: $ti-icon-brand-toyota; +} +.#{$ti-prefix}-brand-trello:before { + content: $ti-icon-brand-trello; +} +.#{$ti-prefix}-brand-tripadvisor:before { + content: $ti-icon-brand-tripadvisor; +} +.#{$ti-prefix}-brand-tumblr:before { + content: $ti-icon-brand-tumblr; +} +.#{$ti-prefix}-brand-twilio:before { + content: $ti-icon-brand-twilio; +} +.#{$ti-prefix}-brand-twitch:before { + content: $ti-icon-brand-twitch; +} +.#{$ti-prefix}-brand-twitter:before { + content: $ti-icon-brand-twitter; +} +.#{$ti-prefix}-brand-twitter-filled:before { + content: $ti-icon-brand-twitter-filled; +} +.#{$ti-prefix}-brand-typescript:before { + content: $ti-icon-brand-typescript; +} +.#{$ti-prefix}-brand-uber:before { + content: $ti-icon-brand-uber; +} +.#{$ti-prefix}-brand-ubuntu:before { + content: $ti-icon-brand-ubuntu; +} +.#{$ti-prefix}-brand-unity:before { + content: $ti-icon-brand-unity; +} +.#{$ti-prefix}-brand-unsplash:before { + content: $ti-icon-brand-unsplash; +} +.#{$ti-prefix}-brand-upwork:before { + content: $ti-icon-brand-upwork; +} +.#{$ti-prefix}-brand-valorant:before { + content: $ti-icon-brand-valorant; +} +.#{$ti-prefix}-brand-vercel:before { + content: $ti-icon-brand-vercel; +} +.#{$ti-prefix}-brand-vimeo:before { + content: $ti-icon-brand-vimeo; +} +.#{$ti-prefix}-brand-vinted:before { + content: $ti-icon-brand-vinted; +} +.#{$ti-prefix}-brand-visa:before { + content: $ti-icon-brand-visa; +} +.#{$ti-prefix}-brand-visual-studio:before { + content: $ti-icon-brand-visual-studio; +} +.#{$ti-prefix}-brand-vite:before { + content: $ti-icon-brand-vite; +} +.#{$ti-prefix}-brand-vivaldi:before { + content: $ti-icon-brand-vivaldi; +} +.#{$ti-prefix}-brand-vk:before { + content: $ti-icon-brand-vk; +} +.#{$ti-prefix}-brand-vlc:before { + content: $ti-icon-brand-vlc; +} +.#{$ti-prefix}-brand-volkswagen:before { + content: $ti-icon-brand-volkswagen; +} +.#{$ti-prefix}-brand-vsco:before { + content: $ti-icon-brand-vsco; +} +.#{$ti-prefix}-brand-vscode:before { + content: $ti-icon-brand-vscode; +} +.#{$ti-prefix}-brand-vue:before { + content: $ti-icon-brand-vue; +} +.#{$ti-prefix}-brand-walmart:before { + content: $ti-icon-brand-walmart; +} +.#{$ti-prefix}-brand-waze:before { + content: $ti-icon-brand-waze; +} +.#{$ti-prefix}-brand-webflow:before { + content: $ti-icon-brand-webflow; +} +.#{$ti-prefix}-brand-wechat:before { + content: $ti-icon-brand-wechat; +} +.#{$ti-prefix}-brand-weibo:before { + content: $ti-icon-brand-weibo; +} +.#{$ti-prefix}-brand-whatsapp:before { + content: $ti-icon-brand-whatsapp; +} +.#{$ti-prefix}-brand-wikipedia:before { + content: $ti-icon-brand-wikipedia; +} +.#{$ti-prefix}-brand-windows:before { + content: $ti-icon-brand-windows; +} +.#{$ti-prefix}-brand-windy:before { + content: $ti-icon-brand-windy; +} +.#{$ti-prefix}-brand-wish:before { + content: $ti-icon-brand-wish; +} +.#{$ti-prefix}-brand-wix:before { + content: $ti-icon-brand-wix; +} +.#{$ti-prefix}-brand-wordpress:before { + content: $ti-icon-brand-wordpress; +} +.#{$ti-prefix}-brand-x:before { + content: $ti-icon-brand-x; +} +.#{$ti-prefix}-brand-x-filled:before { + content: $ti-icon-brand-x-filled; +} +.#{$ti-prefix}-brand-xamarin:before { + content: $ti-icon-brand-xamarin; +} +.#{$ti-prefix}-brand-xbox:before { + content: $ti-icon-brand-xbox; +} +.#{$ti-prefix}-brand-xdeep:before { + content: $ti-icon-brand-xdeep; +} +.#{$ti-prefix}-brand-xing:before { + content: $ti-icon-brand-xing; +} +.#{$ti-prefix}-brand-yahoo:before { + content: $ti-icon-brand-yahoo; +} +.#{$ti-prefix}-brand-yandex:before { + content: $ti-icon-brand-yandex; +} +.#{$ti-prefix}-brand-yarn:before { + content: $ti-icon-brand-yarn; +} +.#{$ti-prefix}-brand-yatse:before { + content: $ti-icon-brand-yatse; +} +.#{$ti-prefix}-brand-ycombinator:before { + content: $ti-icon-brand-ycombinator; +} +.#{$ti-prefix}-brand-youtube:before { + content: $ti-icon-brand-youtube; +} +.#{$ti-prefix}-brand-youtube-filled:before { + content: $ti-icon-brand-youtube-filled; +} +.#{$ti-prefix}-brand-youtube-kids:before { + content: $ti-icon-brand-youtube-kids; +} +.#{$ti-prefix}-brand-zalando:before { + content: $ti-icon-brand-zalando; +} +.#{$ti-prefix}-brand-zapier:before { + content: $ti-icon-brand-zapier; +} +.#{$ti-prefix}-brand-zeit:before { + content: $ti-icon-brand-zeit; +} +.#{$ti-prefix}-brand-zhihu:before { + content: $ti-icon-brand-zhihu; +} +.#{$ti-prefix}-brand-zoom:before { + content: $ti-icon-brand-zoom; +} +.#{$ti-prefix}-brand-zulip:before { + content: $ti-icon-brand-zulip; +} +.#{$ti-prefix}-brand-zwift:before { + content: $ti-icon-brand-zwift; +} +.#{$ti-prefix}-bread:before { + content: $ti-icon-bread; +} +.#{$ti-prefix}-bread-filled:before { + content: $ti-icon-bread-filled; +} +.#{$ti-prefix}-bread-off:before { + content: $ti-icon-bread-off; +} +.#{$ti-prefix}-briefcase:before { + content: $ti-icon-briefcase; +} +.#{$ti-prefix}-briefcase-2:before { + content: $ti-icon-briefcase-2; +} +.#{$ti-prefix}-briefcase-2-filled:before { + content: $ti-icon-briefcase-2-filled; +} +.#{$ti-prefix}-briefcase-filled:before { + content: $ti-icon-briefcase-filled; +} +.#{$ti-prefix}-briefcase-off:before { + content: $ti-icon-briefcase-off; +} +.#{$ti-prefix}-brightness:before { + content: $ti-icon-brightness; +} +.#{$ti-prefix}-brightness-2:before { + content: $ti-icon-brightness-2; +} +.#{$ti-prefix}-brightness-auto:before { + content: $ti-icon-brightness-auto; +} +.#{$ti-prefix}-brightness-auto-filled:before { + content: $ti-icon-brightness-auto-filled; +} +.#{$ti-prefix}-brightness-down:before { + content: $ti-icon-brightness-down; +} +.#{$ti-prefix}-brightness-down-filled:before { + content: $ti-icon-brightness-down-filled; +} +.#{$ti-prefix}-brightness-filled:before { + content: $ti-icon-brightness-filled; +} +.#{$ti-prefix}-brightness-half:before { + content: $ti-icon-brightness-half; +} +.#{$ti-prefix}-brightness-off:before { + content: $ti-icon-brightness-off; +} +.#{$ti-prefix}-brightness-up:before { + content: $ti-icon-brightness-up; +} +.#{$ti-prefix}-brightness-up-filled:before { + content: $ti-icon-brightness-up-filled; +} +.#{$ti-prefix}-broadcast:before { + content: $ti-icon-broadcast; +} +.#{$ti-prefix}-broadcast-off:before { + content: $ti-icon-broadcast-off; +} +.#{$ti-prefix}-browser:before { + content: $ti-icon-browser; +} +.#{$ti-prefix}-browser-check:before { + content: $ti-icon-browser-check; +} +.#{$ti-prefix}-browser-off:before { + content: $ti-icon-browser-off; +} +.#{$ti-prefix}-browser-plus:before { + content: $ti-icon-browser-plus; +} +.#{$ti-prefix}-browser-x:before { + content: $ti-icon-browser-x; +} +.#{$ti-prefix}-brush:before { + content: $ti-icon-brush; +} +.#{$ti-prefix}-brush-off:before { + content: $ti-icon-brush-off; +} +.#{$ti-prefix}-bubble:before { + content: $ti-icon-bubble; +} +.#{$ti-prefix}-bubble-filled:before { + content: $ti-icon-bubble-filled; +} +.#{$ti-prefix}-bubble-minus:before { + content: $ti-icon-bubble-minus; +} +.#{$ti-prefix}-bubble-plus:before { + content: $ti-icon-bubble-plus; +} +.#{$ti-prefix}-bubble-text:before { + content: $ti-icon-bubble-text; +} +.#{$ti-prefix}-bubble-x:before { + content: $ti-icon-bubble-x; +} +.#{$ti-prefix}-bucket:before { + content: $ti-icon-bucket; +} +.#{$ti-prefix}-bucket-droplet:before { + content: $ti-icon-bucket-droplet; +} +.#{$ti-prefix}-bucket-off:before { + content: $ti-icon-bucket-off; +} +.#{$ti-prefix}-bug:before { + content: $ti-icon-bug; +} +.#{$ti-prefix}-bug-filled:before { + content: $ti-icon-bug-filled; +} +.#{$ti-prefix}-bug-off:before { + content: $ti-icon-bug-off; +} +.#{$ti-prefix}-building:before { + content: $ti-icon-building; +} +.#{$ti-prefix}-building-arch:before { + content: $ti-icon-building-arch; +} +.#{$ti-prefix}-building-bank:before { + content: $ti-icon-building-bank; +} +.#{$ti-prefix}-building-bridge:before { + content: $ti-icon-building-bridge; +} +.#{$ti-prefix}-building-bridge-2:before { + content: $ti-icon-building-bridge-2; +} +.#{$ti-prefix}-building-broadcast-tower:before { + content: $ti-icon-building-broadcast-tower; +} +.#{$ti-prefix}-building-broadcast-tower-filled:before { + content: $ti-icon-building-broadcast-tower-filled; +} +.#{$ti-prefix}-building-carousel:before { + content: $ti-icon-building-carousel; +} +.#{$ti-prefix}-building-castle:before { + content: $ti-icon-building-castle; +} +.#{$ti-prefix}-building-church:before { + content: $ti-icon-building-church; +} +.#{$ti-prefix}-building-circus:before { + content: $ti-icon-building-circus; +} +.#{$ti-prefix}-building-community:before { + content: $ti-icon-building-community; +} +.#{$ti-prefix}-building-cottage:before { + content: $ti-icon-building-cottage; +} +.#{$ti-prefix}-building-estate:before { + content: $ti-icon-building-estate; +} +.#{$ti-prefix}-building-factory:before { + content: $ti-icon-building-factory; +} +.#{$ti-prefix}-building-factory-2:before { + content: $ti-icon-building-factory-2; +} +.#{$ti-prefix}-building-fortress:before { + content: $ti-icon-building-fortress; +} +.#{$ti-prefix}-building-hospital:before { + content: $ti-icon-building-hospital; +} +.#{$ti-prefix}-building-lighthouse:before { + content: $ti-icon-building-lighthouse; +} +.#{$ti-prefix}-building-monument:before { + content: $ti-icon-building-monument; +} +.#{$ti-prefix}-building-mosque:before { + content: $ti-icon-building-mosque; +} +.#{$ti-prefix}-building-pavilion:before { + content: $ti-icon-building-pavilion; +} +.#{$ti-prefix}-building-skyscraper:before { + content: $ti-icon-building-skyscraper; +} +.#{$ti-prefix}-building-stadium:before { + content: $ti-icon-building-stadium; +} +.#{$ti-prefix}-building-store:before { + content: $ti-icon-building-store; +} +.#{$ti-prefix}-building-tunnel:before { + content: $ti-icon-building-tunnel; +} +.#{$ti-prefix}-building-warehouse:before { + content: $ti-icon-building-warehouse; +} +.#{$ti-prefix}-building-wind-turbine:before { + content: $ti-icon-building-wind-turbine; +} +.#{$ti-prefix}-bulb:before { + content: $ti-icon-bulb; +} +.#{$ti-prefix}-bulb-filled:before { + content: $ti-icon-bulb-filled; +} +.#{$ti-prefix}-bulb-off:before { + content: $ti-icon-bulb-off; +} +.#{$ti-prefix}-bulldozer:before { + content: $ti-icon-bulldozer; +} +.#{$ti-prefix}-burger:before { + content: $ti-icon-burger; +} +.#{$ti-prefix}-bus:before { + content: $ti-icon-bus; +} +.#{$ti-prefix}-bus-off:before { + content: $ti-icon-bus-off; +} +.#{$ti-prefix}-bus-stop:before { + content: $ti-icon-bus-stop; +} +.#{$ti-prefix}-businessplan:before { + content: $ti-icon-businessplan; +} +.#{$ti-prefix}-butterfly:before { + content: $ti-icon-butterfly; +} +.#{$ti-prefix}-cactus:before { + content: $ti-icon-cactus; +} +.#{$ti-prefix}-cactus-filled:before { + content: $ti-icon-cactus-filled; +} +.#{$ti-prefix}-cactus-off:before { + content: $ti-icon-cactus-off; +} +.#{$ti-prefix}-cake:before { + content: $ti-icon-cake; +} +.#{$ti-prefix}-cake-off:before { + content: $ti-icon-cake-off; +} +.#{$ti-prefix}-calculator:before { + content: $ti-icon-calculator; +} +.#{$ti-prefix}-calculator-filled:before { + content: $ti-icon-calculator-filled; +} +.#{$ti-prefix}-calculator-off:before { + content: $ti-icon-calculator-off; +} +.#{$ti-prefix}-calendar:before { + content: $ti-icon-calendar; +} +.#{$ti-prefix}-calendar-bolt:before { + content: $ti-icon-calendar-bolt; +} +.#{$ti-prefix}-calendar-cancel:before { + content: $ti-icon-calendar-cancel; +} +.#{$ti-prefix}-calendar-check:before { + content: $ti-icon-calendar-check; +} +.#{$ti-prefix}-calendar-clock:before { + content: $ti-icon-calendar-clock; +} +.#{$ti-prefix}-calendar-code:before { + content: $ti-icon-calendar-code; +} +.#{$ti-prefix}-calendar-cog:before { + content: $ti-icon-calendar-cog; +} +.#{$ti-prefix}-calendar-dollar:before { + content: $ti-icon-calendar-dollar; +} +.#{$ti-prefix}-calendar-dot:before { + content: $ti-icon-calendar-dot; +} +.#{$ti-prefix}-calendar-down:before { + content: $ti-icon-calendar-down; +} +.#{$ti-prefix}-calendar-due:before { + content: $ti-icon-calendar-due; +} +.#{$ti-prefix}-calendar-event:before { + content: $ti-icon-calendar-event; +} +.#{$ti-prefix}-calendar-exclamation:before { + content: $ti-icon-calendar-exclamation; +} +.#{$ti-prefix}-calendar-filled:before { + content: $ti-icon-calendar-filled; +} +.#{$ti-prefix}-calendar-heart:before { + content: $ti-icon-calendar-heart; +} +.#{$ti-prefix}-calendar-minus:before { + content: $ti-icon-calendar-minus; +} +.#{$ti-prefix}-calendar-month:before { + content: $ti-icon-calendar-month; +} +.#{$ti-prefix}-calendar-off:before { + content: $ti-icon-calendar-off; +} +.#{$ti-prefix}-calendar-pause:before { + content: $ti-icon-calendar-pause; +} +.#{$ti-prefix}-calendar-pin:before { + content: $ti-icon-calendar-pin; +} +.#{$ti-prefix}-calendar-plus:before { + content: $ti-icon-calendar-plus; +} +.#{$ti-prefix}-calendar-question:before { + content: $ti-icon-calendar-question; +} +.#{$ti-prefix}-calendar-repeat:before { + content: $ti-icon-calendar-repeat; +} +.#{$ti-prefix}-calendar-sad:before { + content: $ti-icon-calendar-sad; +} +.#{$ti-prefix}-calendar-search:before { + content: $ti-icon-calendar-search; +} +.#{$ti-prefix}-calendar-share:before { + content: $ti-icon-calendar-share; +} +.#{$ti-prefix}-calendar-smile:before { + content: $ti-icon-calendar-smile; +} +.#{$ti-prefix}-calendar-star:before { + content: $ti-icon-calendar-star; +} +.#{$ti-prefix}-calendar-stats:before { + content: $ti-icon-calendar-stats; +} +.#{$ti-prefix}-calendar-time:before { + content: $ti-icon-calendar-time; +} +.#{$ti-prefix}-calendar-up:before { + content: $ti-icon-calendar-up; +} +.#{$ti-prefix}-calendar-user:before { + content: $ti-icon-calendar-user; +} +.#{$ti-prefix}-calendar-week:before { + content: $ti-icon-calendar-week; +} +.#{$ti-prefix}-calendar-x:before { + content: $ti-icon-calendar-x; +} +.#{$ti-prefix}-camera:before { + content: $ti-icon-camera; +} +.#{$ti-prefix}-camera-bolt:before { + content: $ti-icon-camera-bolt; +} +.#{$ti-prefix}-camera-cancel:before { + content: $ti-icon-camera-cancel; +} +.#{$ti-prefix}-camera-check:before { + content: $ti-icon-camera-check; +} +.#{$ti-prefix}-camera-code:before { + content: $ti-icon-camera-code; +} +.#{$ti-prefix}-camera-cog:before { + content: $ti-icon-camera-cog; +} +.#{$ti-prefix}-camera-dollar:before { + content: $ti-icon-camera-dollar; +} +.#{$ti-prefix}-camera-down:before { + content: $ti-icon-camera-down; +} +.#{$ti-prefix}-camera-exclamation:before { + content: $ti-icon-camera-exclamation; +} +.#{$ti-prefix}-camera-filled:before { + content: $ti-icon-camera-filled; +} +.#{$ti-prefix}-camera-heart:before { + content: $ti-icon-camera-heart; +} +.#{$ti-prefix}-camera-minus:before { + content: $ti-icon-camera-minus; +} +.#{$ti-prefix}-camera-off:before { + content: $ti-icon-camera-off; +} +.#{$ti-prefix}-camera-pause:before { + content: $ti-icon-camera-pause; +} +.#{$ti-prefix}-camera-pin:before { + content: $ti-icon-camera-pin; +} +.#{$ti-prefix}-camera-plus:before { + content: $ti-icon-camera-plus; +} +.#{$ti-prefix}-camera-question:before { + content: $ti-icon-camera-question; +} +.#{$ti-prefix}-camera-rotate:before { + content: $ti-icon-camera-rotate; +} +.#{$ti-prefix}-camera-search:before { + content: $ti-icon-camera-search; +} +.#{$ti-prefix}-camera-selfie:before { + content: $ti-icon-camera-selfie; +} +.#{$ti-prefix}-camera-share:before { + content: $ti-icon-camera-share; +} +.#{$ti-prefix}-camera-star:before { + content: $ti-icon-camera-star; +} +.#{$ti-prefix}-camera-up:before { + content: $ti-icon-camera-up; +} +.#{$ti-prefix}-camera-x:before { + content: $ti-icon-camera-x; +} +.#{$ti-prefix}-camper:before { + content: $ti-icon-camper; +} +.#{$ti-prefix}-campfire:before { + content: $ti-icon-campfire; +} +.#{$ti-prefix}-campfire-filled:before { + content: $ti-icon-campfire-filled; +} +.#{$ti-prefix}-candle:before { + content: $ti-icon-candle; +} +.#{$ti-prefix}-candle-filled:before { + content: $ti-icon-candle-filled; +} +.#{$ti-prefix}-candy:before { + content: $ti-icon-candy; +} +.#{$ti-prefix}-candy-off:before { + content: $ti-icon-candy-off; +} +.#{$ti-prefix}-cane:before { + content: $ti-icon-cane; +} +.#{$ti-prefix}-cannabis:before { + content: $ti-icon-cannabis; +} +.#{$ti-prefix}-capsule:before { + content: $ti-icon-capsule; +} +.#{$ti-prefix}-capsule-filled:before { + content: $ti-icon-capsule-filled; +} +.#{$ti-prefix}-capsule-horizontal:before { + content: $ti-icon-capsule-horizontal; +} +.#{$ti-prefix}-capsule-horizontal-filled:before { + content: $ti-icon-capsule-horizontal-filled; +} +.#{$ti-prefix}-capture:before { + content: $ti-icon-capture; +} +.#{$ti-prefix}-capture-filled:before { + content: $ti-icon-capture-filled; +} +.#{$ti-prefix}-capture-off:before { + content: $ti-icon-capture-off; +} +.#{$ti-prefix}-car:before { + content: $ti-icon-car; +} +.#{$ti-prefix}-car-4wd:before { + content: $ti-icon-car-4wd; +} +.#{$ti-prefix}-car-crane:before { + content: $ti-icon-car-crane; +} +.#{$ti-prefix}-car-crash:before { + content: $ti-icon-car-crash; +} +.#{$ti-prefix}-car-fan:before { + content: $ti-icon-car-fan; +} +.#{$ti-prefix}-car-fan-1:before { + content: $ti-icon-car-fan-1; +} +.#{$ti-prefix}-car-fan-2:before { + content: $ti-icon-car-fan-2; +} +.#{$ti-prefix}-car-fan-3:before { + content: $ti-icon-car-fan-3; +} +.#{$ti-prefix}-car-fan-auto:before { + content: $ti-icon-car-fan-auto; +} +.#{$ti-prefix}-car-garage:before { + content: $ti-icon-car-garage; +} +.#{$ti-prefix}-car-off:before { + content: $ti-icon-car-off; +} +.#{$ti-prefix}-car-suv:before { + content: $ti-icon-car-suv; +} +.#{$ti-prefix}-car-turbine:before { + content: $ti-icon-car-turbine; +} +.#{$ti-prefix}-carambola:before { + content: $ti-icon-carambola; +} +.#{$ti-prefix}-caravan:before { + content: $ti-icon-caravan; +} +.#{$ti-prefix}-cardboards:before { + content: $ti-icon-cardboards; +} +.#{$ti-prefix}-cardboards-off:before { + content: $ti-icon-cardboards-off; +} +.#{$ti-prefix}-cards:before { + content: $ti-icon-cards; +} +.#{$ti-prefix}-cards-filled:before { + content: $ti-icon-cards-filled; +} +.#{$ti-prefix}-caret-down:before { + content: $ti-icon-caret-down; +} +.#{$ti-prefix}-caret-down-filled:before { + content: $ti-icon-caret-down-filled; +} +.#{$ti-prefix}-caret-left:before { + content: $ti-icon-caret-left; +} +.#{$ti-prefix}-caret-left-filled:before { + content: $ti-icon-caret-left-filled; +} +.#{$ti-prefix}-caret-left-right:before { + content: $ti-icon-caret-left-right; +} +.#{$ti-prefix}-caret-left-right-filled:before { + content: $ti-icon-caret-left-right-filled; +} +.#{$ti-prefix}-caret-right:before { + content: $ti-icon-caret-right; +} +.#{$ti-prefix}-caret-right-filled:before { + content: $ti-icon-caret-right-filled; +} +.#{$ti-prefix}-caret-up:before { + content: $ti-icon-caret-up; +} +.#{$ti-prefix}-caret-up-down:before { + content: $ti-icon-caret-up-down; +} +.#{$ti-prefix}-caret-up-down-filled:before { + content: $ti-icon-caret-up-down-filled; +} +.#{$ti-prefix}-caret-up-filled:before { + content: $ti-icon-caret-up-filled; +} +.#{$ti-prefix}-carousel-horizontal:before { + content: $ti-icon-carousel-horizontal; +} +.#{$ti-prefix}-carousel-horizontal-filled:before { + content: $ti-icon-carousel-horizontal-filled; +} +.#{$ti-prefix}-carousel-vertical:before { + content: $ti-icon-carousel-vertical; +} +.#{$ti-prefix}-carousel-vertical-filled:before { + content: $ti-icon-carousel-vertical-filled; +} +.#{$ti-prefix}-carrot:before { + content: $ti-icon-carrot; +} +.#{$ti-prefix}-carrot-off:before { + content: $ti-icon-carrot-off; +} +.#{$ti-prefix}-cash:before { + content: $ti-icon-cash; +} +.#{$ti-prefix}-cash-banknote:before { + content: $ti-icon-cash-banknote; +} +.#{$ti-prefix}-cash-banknote-filled:before { + content: $ti-icon-cash-banknote-filled; +} +.#{$ti-prefix}-cash-banknote-off:before { + content: $ti-icon-cash-banknote-off; +} +.#{$ti-prefix}-cash-off:before { + content: $ti-icon-cash-off; +} +.#{$ti-prefix}-cash-register:before { + content: $ti-icon-cash-register; +} +.#{$ti-prefix}-cast:before { + content: $ti-icon-cast; +} +.#{$ti-prefix}-cast-off:before { + content: $ti-icon-cast-off; +} +.#{$ti-prefix}-cat:before { + content: $ti-icon-cat; +} +.#{$ti-prefix}-category:before { + content: $ti-icon-category; +} +.#{$ti-prefix}-category-2:before { + content: $ti-icon-category-2; +} +.#{$ti-prefix}-category-filled:before { + content: $ti-icon-category-filled; +} +.#{$ti-prefix}-category-minus:before { + content: $ti-icon-category-minus; +} +.#{$ti-prefix}-category-plus:before { + content: $ti-icon-category-plus; +} +.#{$ti-prefix}-ce:before { + content: $ti-icon-ce; +} +.#{$ti-prefix}-ce-off:before { + content: $ti-icon-ce-off; +} +.#{$ti-prefix}-cell:before { + content: $ti-icon-cell; +} +.#{$ti-prefix}-cell-signal-1:before { + content: $ti-icon-cell-signal-1; +} +.#{$ti-prefix}-cell-signal-2:before { + content: $ti-icon-cell-signal-2; +} +.#{$ti-prefix}-cell-signal-3:before { + content: $ti-icon-cell-signal-3; +} +.#{$ti-prefix}-cell-signal-4:before { + content: $ti-icon-cell-signal-4; +} +.#{$ti-prefix}-cell-signal-5:before { + content: $ti-icon-cell-signal-5; +} +.#{$ti-prefix}-cell-signal-off:before { + content: $ti-icon-cell-signal-off; +} +.#{$ti-prefix}-certificate:before { + content: $ti-icon-certificate; +} +.#{$ti-prefix}-certificate-2:before { + content: $ti-icon-certificate-2; +} +.#{$ti-prefix}-certificate-2-off:before { + content: $ti-icon-certificate-2-off; +} +.#{$ti-prefix}-certificate-off:before { + content: $ti-icon-certificate-off; +} +.#{$ti-prefix}-chair-director:before { + content: $ti-icon-chair-director; +} +.#{$ti-prefix}-chalkboard:before { + content: $ti-icon-chalkboard; +} +.#{$ti-prefix}-chalkboard-off:before { + content: $ti-icon-chalkboard-off; +} +.#{$ti-prefix}-charging-pile:before { + content: $ti-icon-charging-pile; +} +.#{$ti-prefix}-chart-arcs:before { + content: $ti-icon-chart-arcs; +} +.#{$ti-prefix}-chart-arcs-3:before { + content: $ti-icon-chart-arcs-3; +} +.#{$ti-prefix}-chart-area:before { + content: $ti-icon-chart-area; +} +.#{$ti-prefix}-chart-area-filled:before { + content: $ti-icon-chart-area-filled; +} +.#{$ti-prefix}-chart-area-line:before { + content: $ti-icon-chart-area-line; +} +.#{$ti-prefix}-chart-area-line-filled:before { + content: $ti-icon-chart-area-line-filled; +} +.#{$ti-prefix}-chart-arrows:before { + content: $ti-icon-chart-arrows; +} +.#{$ti-prefix}-chart-arrows-vertical:before { + content: $ti-icon-chart-arrows-vertical; +} +.#{$ti-prefix}-chart-bar:before { + content: $ti-icon-chart-bar; +} +.#{$ti-prefix}-chart-bar-off:before { + content: $ti-icon-chart-bar-off; +} +.#{$ti-prefix}-chart-bubble:before { + content: $ti-icon-chart-bubble; +} +.#{$ti-prefix}-chart-bubble-filled:before { + content: $ti-icon-chart-bubble-filled; +} +.#{$ti-prefix}-chart-candle:before { + content: $ti-icon-chart-candle; +} +.#{$ti-prefix}-chart-candle-filled:before { + content: $ti-icon-chart-candle-filled; +} +.#{$ti-prefix}-chart-circles:before { + content: $ti-icon-chart-circles; +} +.#{$ti-prefix}-chart-donut:before { + content: $ti-icon-chart-donut; +} +.#{$ti-prefix}-chart-donut-2:before { + content: $ti-icon-chart-donut-2; +} +.#{$ti-prefix}-chart-donut-3:before { + content: $ti-icon-chart-donut-3; +} +.#{$ti-prefix}-chart-donut-4:before { + content: $ti-icon-chart-donut-4; +} +.#{$ti-prefix}-chart-donut-filled:before { + content: $ti-icon-chart-donut-filled; +} +.#{$ti-prefix}-chart-dots:before { + content: $ti-icon-chart-dots; +} +.#{$ti-prefix}-chart-dots-2:before { + content: $ti-icon-chart-dots-2; +} +.#{$ti-prefix}-chart-dots-3:before { + content: $ti-icon-chart-dots-3; +} +.#{$ti-prefix}-chart-dots-filled:before { + content: $ti-icon-chart-dots-filled; +} +.#{$ti-prefix}-chart-grid-dots:before { + content: $ti-icon-chart-grid-dots; +} +.#{$ti-prefix}-chart-grid-dots-filled:before { + content: $ti-icon-chart-grid-dots-filled; +} +.#{$ti-prefix}-chart-histogram:before { + content: $ti-icon-chart-histogram; +} +.#{$ti-prefix}-chart-infographic:before { + content: $ti-icon-chart-infographic; +} +.#{$ti-prefix}-chart-line:before { + content: $ti-icon-chart-line; +} +.#{$ti-prefix}-chart-pie:before { + content: $ti-icon-chart-pie; +} +.#{$ti-prefix}-chart-pie-2:before { + content: $ti-icon-chart-pie-2; +} +.#{$ti-prefix}-chart-pie-3:before { + content: $ti-icon-chart-pie-3; +} +.#{$ti-prefix}-chart-pie-4:before { + content: $ti-icon-chart-pie-4; +} +.#{$ti-prefix}-chart-pie-filled:before { + content: $ti-icon-chart-pie-filled; +} +.#{$ti-prefix}-chart-pie-off:before { + content: $ti-icon-chart-pie-off; +} +.#{$ti-prefix}-chart-ppf:before { + content: $ti-icon-chart-ppf; +} +.#{$ti-prefix}-chart-radar:before { + content: $ti-icon-chart-radar; +} +.#{$ti-prefix}-chart-sankey:before { + content: $ti-icon-chart-sankey; +} +.#{$ti-prefix}-chart-scatter:before { + content: $ti-icon-chart-scatter; +} +.#{$ti-prefix}-chart-scatter-3d:before { + content: $ti-icon-chart-scatter-3d; +} +.#{$ti-prefix}-chart-treemap:before { + content: $ti-icon-chart-treemap; +} +.#{$ti-prefix}-check:before { + content: $ti-icon-check; +} +.#{$ti-prefix}-checkbox:before { + content: $ti-icon-checkbox; +} +.#{$ti-prefix}-checklist:before { + content: $ti-icon-checklist; +} +.#{$ti-prefix}-checks:before { + content: $ti-icon-checks; +} +.#{$ti-prefix}-checkup-list:before { + content: $ti-icon-checkup-list; +} +.#{$ti-prefix}-cheese:before { + content: $ti-icon-cheese; +} +.#{$ti-prefix}-chef-hat:before { + content: $ti-icon-chef-hat; +} +.#{$ti-prefix}-chef-hat-off:before { + content: $ti-icon-chef-hat-off; +} +.#{$ti-prefix}-cherry:before { + content: $ti-icon-cherry; +} +.#{$ti-prefix}-cherry-filled:before { + content: $ti-icon-cherry-filled; +} +.#{$ti-prefix}-chess:before { + content: $ti-icon-chess; +} +.#{$ti-prefix}-chess-bishop:before { + content: $ti-icon-chess-bishop; +} +.#{$ti-prefix}-chess-bishop-filled:before { + content: $ti-icon-chess-bishop-filled; +} +.#{$ti-prefix}-chess-filled:before { + content: $ti-icon-chess-filled; +} +.#{$ti-prefix}-chess-king:before { + content: $ti-icon-chess-king; +} +.#{$ti-prefix}-chess-king-filled:before { + content: $ti-icon-chess-king-filled; +} +.#{$ti-prefix}-chess-knight:before { + content: $ti-icon-chess-knight; +} +.#{$ti-prefix}-chess-knight-filled:before { + content: $ti-icon-chess-knight-filled; +} +.#{$ti-prefix}-chess-queen:before { + content: $ti-icon-chess-queen; +} +.#{$ti-prefix}-chess-queen-filled:before { + content: $ti-icon-chess-queen-filled; +} +.#{$ti-prefix}-chess-rook:before { + content: $ti-icon-chess-rook; +} +.#{$ti-prefix}-chess-rook-filled:before { + content: $ti-icon-chess-rook-filled; +} +.#{$ti-prefix}-chevron-compact-down:before { + content: $ti-icon-chevron-compact-down; +} +.#{$ti-prefix}-chevron-compact-left:before { + content: $ti-icon-chevron-compact-left; +} +.#{$ti-prefix}-chevron-compact-right:before { + content: $ti-icon-chevron-compact-right; +} +.#{$ti-prefix}-chevron-compact-up:before { + content: $ti-icon-chevron-compact-up; +} +.#{$ti-prefix}-chevron-down:before { + content: $ti-icon-chevron-down; +} +.#{$ti-prefix}-chevron-down-left:before { + content: $ti-icon-chevron-down-left; +} +.#{$ti-prefix}-chevron-down-right:before { + content: $ti-icon-chevron-down-right; +} +.#{$ti-prefix}-chevron-left:before { + content: $ti-icon-chevron-left; +} +.#{$ti-prefix}-chevron-left-pipe:before { + content: $ti-icon-chevron-left-pipe; +} +.#{$ti-prefix}-chevron-right:before { + content: $ti-icon-chevron-right; +} +.#{$ti-prefix}-chevron-right-pipe:before { + content: $ti-icon-chevron-right-pipe; +} +.#{$ti-prefix}-chevron-up:before { + content: $ti-icon-chevron-up; +} +.#{$ti-prefix}-chevron-up-left:before { + content: $ti-icon-chevron-up-left; +} +.#{$ti-prefix}-chevron-up-right:before { + content: $ti-icon-chevron-up-right; +} +.#{$ti-prefix}-chevrons-down:before { + content: $ti-icon-chevrons-down; +} +.#{$ti-prefix}-chevrons-down-left:before { + content: $ti-icon-chevrons-down-left; +} +.#{$ti-prefix}-chevrons-down-right:before { + content: $ti-icon-chevrons-down-right; +} +.#{$ti-prefix}-chevrons-left:before { + content: $ti-icon-chevrons-left; +} +.#{$ti-prefix}-chevrons-right:before { + content: $ti-icon-chevrons-right; +} +.#{$ti-prefix}-chevrons-up:before { + content: $ti-icon-chevrons-up; +} +.#{$ti-prefix}-chevrons-up-left:before { + content: $ti-icon-chevrons-up-left; +} +.#{$ti-prefix}-chevrons-up-right:before { + content: $ti-icon-chevrons-up-right; +} +.#{$ti-prefix}-chisel:before { + content: $ti-icon-chisel; +} +.#{$ti-prefix}-christmas-ball:before { + content: $ti-icon-christmas-ball; +} +.#{$ti-prefix}-christmas-tree:before { + content: $ti-icon-christmas-tree; +} +.#{$ti-prefix}-christmas-tree-off:before { + content: $ti-icon-christmas-tree-off; +} +.#{$ti-prefix}-circle:before { + content: $ti-icon-circle; +} +.#{$ti-prefix}-circle-arrow-down:before { + content: $ti-icon-circle-arrow-down; +} +.#{$ti-prefix}-circle-arrow-down-filled:before { + content: $ti-icon-circle-arrow-down-filled; +} +.#{$ti-prefix}-circle-arrow-down-left:before { + content: $ti-icon-circle-arrow-down-left; +} +.#{$ti-prefix}-circle-arrow-down-left-filled:before { + content: $ti-icon-circle-arrow-down-left-filled; +} +.#{$ti-prefix}-circle-arrow-down-right:before { + content: $ti-icon-circle-arrow-down-right; +} +.#{$ti-prefix}-circle-arrow-down-right-filled:before { + content: $ti-icon-circle-arrow-down-right-filled; +} +.#{$ti-prefix}-circle-arrow-left:before { + content: $ti-icon-circle-arrow-left; +} +.#{$ti-prefix}-circle-arrow-left-filled:before { + content: $ti-icon-circle-arrow-left-filled; +} +.#{$ti-prefix}-circle-arrow-right:before { + content: $ti-icon-circle-arrow-right; +} +.#{$ti-prefix}-circle-arrow-right-filled:before { + content: $ti-icon-circle-arrow-right-filled; +} +.#{$ti-prefix}-circle-arrow-up:before { + content: $ti-icon-circle-arrow-up; +} +.#{$ti-prefix}-circle-arrow-up-filled:before { + content: $ti-icon-circle-arrow-up-filled; +} +.#{$ti-prefix}-circle-arrow-up-left:before { + content: $ti-icon-circle-arrow-up-left; +} +.#{$ti-prefix}-circle-arrow-up-left-filled:before { + content: $ti-icon-circle-arrow-up-left-filled; +} +.#{$ti-prefix}-circle-arrow-up-right:before { + content: $ti-icon-circle-arrow-up-right; +} +.#{$ti-prefix}-circle-arrow-up-right-filled:before { + content: $ti-icon-circle-arrow-up-right-filled; +} +.#{$ti-prefix}-circle-caret-down:before { + content: $ti-icon-circle-caret-down; +} +.#{$ti-prefix}-circle-caret-left:before { + content: $ti-icon-circle-caret-left; +} +.#{$ti-prefix}-circle-caret-right:before { + content: $ti-icon-circle-caret-right; +} +.#{$ti-prefix}-circle-caret-up:before { + content: $ti-icon-circle-caret-up; +} +.#{$ti-prefix}-circle-check:before { + content: $ti-icon-circle-check; +} +.#{$ti-prefix}-circle-check-filled:before { + content: $ti-icon-circle-check-filled; +} +.#{$ti-prefix}-circle-chevron-down:before { + content: $ti-icon-circle-chevron-down; +} +.#{$ti-prefix}-circle-chevron-left:before { + content: $ti-icon-circle-chevron-left; +} +.#{$ti-prefix}-circle-chevron-right:before { + content: $ti-icon-circle-chevron-right; +} +.#{$ti-prefix}-circle-chevron-up:before { + content: $ti-icon-circle-chevron-up; +} +.#{$ti-prefix}-circle-chevrons-down:before { + content: $ti-icon-circle-chevrons-down; +} +.#{$ti-prefix}-circle-chevrons-left:before { + content: $ti-icon-circle-chevrons-left; +} +.#{$ti-prefix}-circle-chevrons-right:before { + content: $ti-icon-circle-chevrons-right; +} +.#{$ti-prefix}-circle-chevrons-up:before { + content: $ti-icon-circle-chevrons-up; +} +.#{$ti-prefix}-circle-dashed:before { + content: $ti-icon-circle-dashed; +} +.#{$ti-prefix}-circle-dashed-check:before { + content: $ti-icon-circle-dashed-check; +} +.#{$ti-prefix}-circle-dashed-minus:before { + content: $ti-icon-circle-dashed-minus; +} +.#{$ti-prefix}-circle-dashed-number-0:before { + content: $ti-icon-circle-dashed-number-0; +} +.#{$ti-prefix}-circle-dashed-number-1:before { + content: $ti-icon-circle-dashed-number-1; +} +.#{$ti-prefix}-circle-dashed-number-2:before { + content: $ti-icon-circle-dashed-number-2; +} +.#{$ti-prefix}-circle-dashed-number-3:before { + content: $ti-icon-circle-dashed-number-3; +} +.#{$ti-prefix}-circle-dashed-number-4:before { + content: $ti-icon-circle-dashed-number-4; +} +.#{$ti-prefix}-circle-dashed-number-5:before { + content: $ti-icon-circle-dashed-number-5; +} +.#{$ti-prefix}-circle-dashed-number-6:before { + content: $ti-icon-circle-dashed-number-6; +} +.#{$ti-prefix}-circle-dashed-number-7:before { + content: $ti-icon-circle-dashed-number-7; +} +.#{$ti-prefix}-circle-dashed-number-8:before { + content: $ti-icon-circle-dashed-number-8; +} +.#{$ti-prefix}-circle-dashed-number-9:before { + content: $ti-icon-circle-dashed-number-9; +} +.#{$ti-prefix}-circle-dashed-percentage:before { + content: $ti-icon-circle-dashed-percentage; +} +.#{$ti-prefix}-circle-dashed-plus:before { + content: $ti-icon-circle-dashed-plus; +} +.#{$ti-prefix}-circle-dashed-x:before { + content: $ti-icon-circle-dashed-x; +} +.#{$ti-prefix}-circle-dot:before { + content: $ti-icon-circle-dot; +} +.#{$ti-prefix}-circle-dot-filled:before { + content: $ti-icon-circle-dot-filled; +} +.#{$ti-prefix}-circle-dotted:before { + content: $ti-icon-circle-dotted; +} +.#{$ti-prefix}-circle-filled:before { + content: $ti-icon-circle-filled; +} +.#{$ti-prefix}-circle-half:before { + content: $ti-icon-circle-half; +} +.#{$ti-prefix}-circle-half-2:before { + content: $ti-icon-circle-half-2; +} +.#{$ti-prefix}-circle-half-vertical:before { + content: $ti-icon-circle-half-vertical; +} +.#{$ti-prefix}-circle-key:before { + content: $ti-icon-circle-key; +} +.#{$ti-prefix}-circle-key-filled:before { + content: $ti-icon-circle-key-filled; +} +.#{$ti-prefix}-circle-letter-a:before { + content: $ti-icon-circle-letter-a; +} +.#{$ti-prefix}-circle-letter-a-filled:before { + content: $ti-icon-circle-letter-a-filled; +} +.#{$ti-prefix}-circle-letter-b:before { + content: $ti-icon-circle-letter-b; +} +.#{$ti-prefix}-circle-letter-b-filled:before { + content: $ti-icon-circle-letter-b-filled; +} +.#{$ti-prefix}-circle-letter-c:before { + content: $ti-icon-circle-letter-c; +} +.#{$ti-prefix}-circle-letter-c-filled:before { + content: $ti-icon-circle-letter-c-filled; +} +.#{$ti-prefix}-circle-letter-d:before { + content: $ti-icon-circle-letter-d; +} +.#{$ti-prefix}-circle-letter-d-filled:before { + content: $ti-icon-circle-letter-d-filled; +} +.#{$ti-prefix}-circle-letter-e:before { + content: $ti-icon-circle-letter-e; +} +.#{$ti-prefix}-circle-letter-e-filled:before { + content: $ti-icon-circle-letter-e-filled; +} +.#{$ti-prefix}-circle-letter-f:before { + content: $ti-icon-circle-letter-f; +} +.#{$ti-prefix}-circle-letter-f-filled:before { + content: $ti-icon-circle-letter-f-filled; +} +.#{$ti-prefix}-circle-letter-g:before { + content: $ti-icon-circle-letter-g; +} +.#{$ti-prefix}-circle-letter-g-filled:before { + content: $ti-icon-circle-letter-g-filled; +} +.#{$ti-prefix}-circle-letter-h:before { + content: $ti-icon-circle-letter-h; +} +.#{$ti-prefix}-circle-letter-h-filled:before { + content: $ti-icon-circle-letter-h-filled; +} +.#{$ti-prefix}-circle-letter-i:before { + content: $ti-icon-circle-letter-i; +} +.#{$ti-prefix}-circle-letter-i-filled:before { + content: $ti-icon-circle-letter-i-filled; +} +.#{$ti-prefix}-circle-letter-j:before { + content: $ti-icon-circle-letter-j; +} +.#{$ti-prefix}-circle-letter-j-filled:before { + content: $ti-icon-circle-letter-j-filled; +} +.#{$ti-prefix}-circle-letter-k:before { + content: $ti-icon-circle-letter-k; +} +.#{$ti-prefix}-circle-letter-k-filled:before { + content: $ti-icon-circle-letter-k-filled; +} +.#{$ti-prefix}-circle-letter-l:before { + content: $ti-icon-circle-letter-l; +} +.#{$ti-prefix}-circle-letter-l-filled:before { + content: $ti-icon-circle-letter-l-filled; +} +.#{$ti-prefix}-circle-letter-m:before { + content: $ti-icon-circle-letter-m; +} +.#{$ti-prefix}-circle-letter-m-filled:before { + content: $ti-icon-circle-letter-m-filled; +} +.#{$ti-prefix}-circle-letter-n:before { + content: $ti-icon-circle-letter-n; +} +.#{$ti-prefix}-circle-letter-n-filled:before { + content: $ti-icon-circle-letter-n-filled; +} +.#{$ti-prefix}-circle-letter-o:before { + content: $ti-icon-circle-letter-o; +} +.#{$ti-prefix}-circle-letter-o-filled:before { + content: $ti-icon-circle-letter-o-filled; +} +.#{$ti-prefix}-circle-letter-p:before { + content: $ti-icon-circle-letter-p; +} +.#{$ti-prefix}-circle-letter-p-filled:before { + content: $ti-icon-circle-letter-p-filled; +} +.#{$ti-prefix}-circle-letter-q:before { + content: $ti-icon-circle-letter-q; +} +.#{$ti-prefix}-circle-letter-q-filled:before { + content: $ti-icon-circle-letter-q-filled; +} +.#{$ti-prefix}-circle-letter-r:before { + content: $ti-icon-circle-letter-r; +} +.#{$ti-prefix}-circle-letter-r-filled:before { + content: $ti-icon-circle-letter-r-filled; +} +.#{$ti-prefix}-circle-letter-s:before { + content: $ti-icon-circle-letter-s; +} +.#{$ti-prefix}-circle-letter-s-filled:before { + content: $ti-icon-circle-letter-s-filled; +} +.#{$ti-prefix}-circle-letter-t:before { + content: $ti-icon-circle-letter-t; +} +.#{$ti-prefix}-circle-letter-t-filled:before { + content: $ti-icon-circle-letter-t-filled; +} +.#{$ti-prefix}-circle-letter-u:before { + content: $ti-icon-circle-letter-u; +} +.#{$ti-prefix}-circle-letter-u-filled:before { + content: $ti-icon-circle-letter-u-filled; +} +.#{$ti-prefix}-circle-letter-v:before { + content: $ti-icon-circle-letter-v; +} +.#{$ti-prefix}-circle-letter-v-filled:before { + content: $ti-icon-circle-letter-v-filled; +} +.#{$ti-prefix}-circle-letter-w:before { + content: $ti-icon-circle-letter-w; +} +.#{$ti-prefix}-circle-letter-w-filled:before { + content: $ti-icon-circle-letter-w-filled; +} +.#{$ti-prefix}-circle-letter-x:before { + content: $ti-icon-circle-letter-x; +} +.#{$ti-prefix}-circle-letter-x-filled:before { + content: $ti-icon-circle-letter-x-filled; +} +.#{$ti-prefix}-circle-letter-y:before { + content: $ti-icon-circle-letter-y; +} +.#{$ti-prefix}-circle-letter-y-filled:before { + content: $ti-icon-circle-letter-y-filled; +} +.#{$ti-prefix}-circle-letter-z:before { + content: $ti-icon-circle-letter-z; +} +.#{$ti-prefix}-circle-letter-z-filled:before { + content: $ti-icon-circle-letter-z-filled; +} +.#{$ti-prefix}-circle-minus:before { + content: $ti-icon-circle-minus; +} +.#{$ti-prefix}-circle-minus-2:before { + content: $ti-icon-circle-minus-2; +} +.#{$ti-prefix}-circle-number-0:before { + content: $ti-icon-circle-number-0; +} +.#{$ti-prefix}-circle-number-0-filled:before { + content: $ti-icon-circle-number-0-filled; +} +.#{$ti-prefix}-circle-number-1:before { + content: $ti-icon-circle-number-1; +} +.#{$ti-prefix}-circle-number-1-filled:before { + content: $ti-icon-circle-number-1-filled; +} +.#{$ti-prefix}-circle-number-2:before { + content: $ti-icon-circle-number-2; +} +.#{$ti-prefix}-circle-number-2-filled:before { + content: $ti-icon-circle-number-2-filled; +} +.#{$ti-prefix}-circle-number-3:before { + content: $ti-icon-circle-number-3; +} +.#{$ti-prefix}-circle-number-3-filled:before { + content: $ti-icon-circle-number-3-filled; +} +.#{$ti-prefix}-circle-number-4:before { + content: $ti-icon-circle-number-4; +} +.#{$ti-prefix}-circle-number-4-filled:before { + content: $ti-icon-circle-number-4-filled; +} +.#{$ti-prefix}-circle-number-5:before { + content: $ti-icon-circle-number-5; +} +.#{$ti-prefix}-circle-number-5-filled:before { + content: $ti-icon-circle-number-5-filled; +} +.#{$ti-prefix}-circle-number-6:before { + content: $ti-icon-circle-number-6; +} +.#{$ti-prefix}-circle-number-6-filled:before { + content: $ti-icon-circle-number-6-filled; +} +.#{$ti-prefix}-circle-number-7:before { + content: $ti-icon-circle-number-7; +} +.#{$ti-prefix}-circle-number-7-filled:before { + content: $ti-icon-circle-number-7-filled; +} +.#{$ti-prefix}-circle-number-8:before { + content: $ti-icon-circle-number-8; +} +.#{$ti-prefix}-circle-number-8-filled:before { + content: $ti-icon-circle-number-8-filled; +} +.#{$ti-prefix}-circle-number-9:before { + content: $ti-icon-circle-number-9; +} +.#{$ti-prefix}-circle-number-9-filled:before { + content: $ti-icon-circle-number-9-filled; +} +.#{$ti-prefix}-circle-off:before { + content: $ti-icon-circle-off; +} +.#{$ti-prefix}-circle-percentage:before { + content: $ti-icon-circle-percentage; +} +.#{$ti-prefix}-circle-percentage-filled:before { + content: $ti-icon-circle-percentage-filled; +} +.#{$ti-prefix}-circle-plus:before { + content: $ti-icon-circle-plus; +} +.#{$ti-prefix}-circle-plus-2:before { + content: $ti-icon-circle-plus-2; +} +.#{$ti-prefix}-circle-rectangle:before { + content: $ti-icon-circle-rectangle; +} +.#{$ti-prefix}-circle-rectangle-off:before { + content: $ti-icon-circle-rectangle-off; +} +.#{$ti-prefix}-circle-square:before { + content: $ti-icon-circle-square; +} +.#{$ti-prefix}-circle-triangle:before { + content: $ti-icon-circle-triangle; +} +.#{$ti-prefix}-circle-x:before { + content: $ti-icon-circle-x; +} +.#{$ti-prefix}-circle-x-filled:before { + content: $ti-icon-circle-x-filled; +} +.#{$ti-prefix}-circles:before { + content: $ti-icon-circles; +} +.#{$ti-prefix}-circles-filled:before { + content: $ti-icon-circles-filled; +} +.#{$ti-prefix}-circles-relation:before { + content: $ti-icon-circles-relation; +} +.#{$ti-prefix}-circuit-ammeter:before { + content: $ti-icon-circuit-ammeter; +} +.#{$ti-prefix}-circuit-battery:before { + content: $ti-icon-circuit-battery; +} +.#{$ti-prefix}-circuit-bulb:before { + content: $ti-icon-circuit-bulb; +} +.#{$ti-prefix}-circuit-capacitor:before { + content: $ti-icon-circuit-capacitor; +} +.#{$ti-prefix}-circuit-capacitor-polarized:before { + content: $ti-icon-circuit-capacitor-polarized; +} +.#{$ti-prefix}-circuit-cell:before { + content: $ti-icon-circuit-cell; +} +.#{$ti-prefix}-circuit-cell-plus:before { + content: $ti-icon-circuit-cell-plus; +} +.#{$ti-prefix}-circuit-changeover:before { + content: $ti-icon-circuit-changeover; +} +.#{$ti-prefix}-circuit-diode:before { + content: $ti-icon-circuit-diode; +} +.#{$ti-prefix}-circuit-diode-zener:before { + content: $ti-icon-circuit-diode-zener; +} +.#{$ti-prefix}-circuit-ground:before { + content: $ti-icon-circuit-ground; +} +.#{$ti-prefix}-circuit-ground-digital:before { + content: $ti-icon-circuit-ground-digital; +} +.#{$ti-prefix}-circuit-inductor:before { + content: $ti-icon-circuit-inductor; +} +.#{$ti-prefix}-circuit-motor:before { + content: $ti-icon-circuit-motor; +} +.#{$ti-prefix}-circuit-pushbutton:before { + content: $ti-icon-circuit-pushbutton; +} +.#{$ti-prefix}-circuit-resistor:before { + content: $ti-icon-circuit-resistor; +} +.#{$ti-prefix}-circuit-switch-closed:before { + content: $ti-icon-circuit-switch-closed; +} +.#{$ti-prefix}-circuit-switch-open:before { + content: $ti-icon-circuit-switch-open; +} +.#{$ti-prefix}-circuit-voltmeter:before { + content: $ti-icon-circuit-voltmeter; +} +.#{$ti-prefix}-clear-all:before { + content: $ti-icon-clear-all; +} +.#{$ti-prefix}-clear-formatting:before { + content: $ti-icon-clear-formatting; +} +.#{$ti-prefix}-click:before { + content: $ti-icon-click; +} +.#{$ti-prefix}-clipboard:before { + content: $ti-icon-clipboard; +} +.#{$ti-prefix}-clipboard-check:before { + content: $ti-icon-clipboard-check; +} +.#{$ti-prefix}-clipboard-copy:before { + content: $ti-icon-clipboard-copy; +} +.#{$ti-prefix}-clipboard-data:before { + content: $ti-icon-clipboard-data; +} +.#{$ti-prefix}-clipboard-heart:before { + content: $ti-icon-clipboard-heart; +} +.#{$ti-prefix}-clipboard-list:before { + content: $ti-icon-clipboard-list; +} +.#{$ti-prefix}-clipboard-off:before { + content: $ti-icon-clipboard-off; +} +.#{$ti-prefix}-clipboard-plus:before { + content: $ti-icon-clipboard-plus; +} +.#{$ti-prefix}-clipboard-smile:before { + content: $ti-icon-clipboard-smile; +} +.#{$ti-prefix}-clipboard-text:before { + content: $ti-icon-clipboard-text; +} +.#{$ti-prefix}-clipboard-typography:before { + content: $ti-icon-clipboard-typography; +} +.#{$ti-prefix}-clipboard-x:before { + content: $ti-icon-clipboard-x; +} +.#{$ti-prefix}-clock:before { + content: $ti-icon-clock; +} +.#{$ti-prefix}-clock-12:before { + content: $ti-icon-clock-12; +} +.#{$ti-prefix}-clock-2:before { + content: $ti-icon-clock-2; +} +.#{$ti-prefix}-clock-24:before { + content: $ti-icon-clock-24; +} +.#{$ti-prefix}-clock-bolt:before { + content: $ti-icon-clock-bolt; +} +.#{$ti-prefix}-clock-cancel:before { + content: $ti-icon-clock-cancel; +} +.#{$ti-prefix}-clock-check:before { + content: $ti-icon-clock-check; +} +.#{$ti-prefix}-clock-code:before { + content: $ti-icon-clock-code; +} +.#{$ti-prefix}-clock-cog:before { + content: $ti-icon-clock-cog; +} +.#{$ti-prefix}-clock-dollar:before { + content: $ti-icon-clock-dollar; +} +.#{$ti-prefix}-clock-down:before { + content: $ti-icon-clock-down; +} +.#{$ti-prefix}-clock-edit:before { + content: $ti-icon-clock-edit; +} +.#{$ti-prefix}-clock-exclamation:before { + content: $ti-icon-clock-exclamation; +} +.#{$ti-prefix}-clock-filled:before { + content: $ti-icon-clock-filled; +} +.#{$ti-prefix}-clock-heart:before { + content: $ti-icon-clock-heart; +} +.#{$ti-prefix}-clock-hour-1:before { + content: $ti-icon-clock-hour-1; +} +.#{$ti-prefix}-clock-hour-1-filled:before { + content: $ti-icon-clock-hour-1-filled; +} +.#{$ti-prefix}-clock-hour-10:before { + content: $ti-icon-clock-hour-10; +} +.#{$ti-prefix}-clock-hour-10-filled:before { + content: $ti-icon-clock-hour-10-filled; +} +.#{$ti-prefix}-clock-hour-11:before { + content: $ti-icon-clock-hour-11; +} +.#{$ti-prefix}-clock-hour-11-filled:before { + content: $ti-icon-clock-hour-11-filled; +} +.#{$ti-prefix}-clock-hour-12:before { + content: $ti-icon-clock-hour-12; +} +.#{$ti-prefix}-clock-hour-12-filled:before { + content: $ti-icon-clock-hour-12-filled; +} +.#{$ti-prefix}-clock-hour-2:before { + content: $ti-icon-clock-hour-2; +} +.#{$ti-prefix}-clock-hour-2-filled:before { + content: $ti-icon-clock-hour-2-filled; +} +.#{$ti-prefix}-clock-hour-3:before { + content: $ti-icon-clock-hour-3; +} +.#{$ti-prefix}-clock-hour-3-filled:before { + content: $ti-icon-clock-hour-3-filled; +} +.#{$ti-prefix}-clock-hour-4:before { + content: $ti-icon-clock-hour-4; +} +.#{$ti-prefix}-clock-hour-4-filled:before { + content: $ti-icon-clock-hour-4-filled; +} +.#{$ti-prefix}-clock-hour-5:before { + content: $ti-icon-clock-hour-5; +} +.#{$ti-prefix}-clock-hour-5-filled:before { + content: $ti-icon-clock-hour-5-filled; +} +.#{$ti-prefix}-clock-hour-6:before { + content: $ti-icon-clock-hour-6; +} +.#{$ti-prefix}-clock-hour-6-filled:before { + content: $ti-icon-clock-hour-6-filled; +} +.#{$ti-prefix}-clock-hour-7:before { + content: $ti-icon-clock-hour-7; +} +.#{$ti-prefix}-clock-hour-7-filled:before { + content: $ti-icon-clock-hour-7-filled; +} +.#{$ti-prefix}-clock-hour-8:before { + content: $ti-icon-clock-hour-8; +} +.#{$ti-prefix}-clock-hour-8-filled:before { + content: $ti-icon-clock-hour-8-filled; +} +.#{$ti-prefix}-clock-hour-9:before { + content: $ti-icon-clock-hour-9; +} +.#{$ti-prefix}-clock-hour-9-filled:before { + content: $ti-icon-clock-hour-9-filled; +} +.#{$ti-prefix}-clock-minus:before { + content: $ti-icon-clock-minus; +} +.#{$ti-prefix}-clock-off:before { + content: $ti-icon-clock-off; +} +.#{$ti-prefix}-clock-pause:before { + content: $ti-icon-clock-pause; +} +.#{$ti-prefix}-clock-pin:before { + content: $ti-icon-clock-pin; +} +.#{$ti-prefix}-clock-play:before { + content: $ti-icon-clock-play; +} +.#{$ti-prefix}-clock-plus:before { + content: $ti-icon-clock-plus; +} +.#{$ti-prefix}-clock-question:before { + content: $ti-icon-clock-question; +} +.#{$ti-prefix}-clock-record:before { + content: $ti-icon-clock-record; +} +.#{$ti-prefix}-clock-search:before { + content: $ti-icon-clock-search; +} +.#{$ti-prefix}-clock-share:before { + content: $ti-icon-clock-share; +} +.#{$ti-prefix}-clock-shield:before { + content: $ti-icon-clock-shield; +} +.#{$ti-prefix}-clock-star:before { + content: $ti-icon-clock-star; +} +.#{$ti-prefix}-clock-stop:before { + content: $ti-icon-clock-stop; +} +.#{$ti-prefix}-clock-up:before { + content: $ti-icon-clock-up; +} +.#{$ti-prefix}-clock-x:before { + content: $ti-icon-clock-x; +} +.#{$ti-prefix}-clothes-rack:before { + content: $ti-icon-clothes-rack; +} +.#{$ti-prefix}-clothes-rack-off:before { + content: $ti-icon-clothes-rack-off; +} +.#{$ti-prefix}-cloud:before { + content: $ti-icon-cloud; +} +.#{$ti-prefix}-cloud-bolt:before { + content: $ti-icon-cloud-bolt; +} +.#{$ti-prefix}-cloud-cancel:before { + content: $ti-icon-cloud-cancel; +} +.#{$ti-prefix}-cloud-check:before { + content: $ti-icon-cloud-check; +} +.#{$ti-prefix}-cloud-code:before { + content: $ti-icon-cloud-code; +} +.#{$ti-prefix}-cloud-cog:before { + content: $ti-icon-cloud-cog; +} +.#{$ti-prefix}-cloud-computing:before { + content: $ti-icon-cloud-computing; +} +.#{$ti-prefix}-cloud-data-connection:before { + content: $ti-icon-cloud-data-connection; +} +.#{$ti-prefix}-cloud-dollar:before { + content: $ti-icon-cloud-dollar; +} +.#{$ti-prefix}-cloud-down:before { + content: $ti-icon-cloud-down; +} +.#{$ti-prefix}-cloud-download:before { + content: $ti-icon-cloud-download; +} +.#{$ti-prefix}-cloud-exclamation:before { + content: $ti-icon-cloud-exclamation; +} +.#{$ti-prefix}-cloud-filled:before { + content: $ti-icon-cloud-filled; +} +.#{$ti-prefix}-cloud-fog:before { + content: $ti-icon-cloud-fog; +} +.#{$ti-prefix}-cloud-heart:before { + content: $ti-icon-cloud-heart; +} +.#{$ti-prefix}-cloud-lock:before { + content: $ti-icon-cloud-lock; +} +.#{$ti-prefix}-cloud-lock-open:before { + content: $ti-icon-cloud-lock-open; +} +.#{$ti-prefix}-cloud-minus:before { + content: $ti-icon-cloud-minus; +} +.#{$ti-prefix}-cloud-network:before { + content: $ti-icon-cloud-network; +} +.#{$ti-prefix}-cloud-off:before { + content: $ti-icon-cloud-off; +} +.#{$ti-prefix}-cloud-pause:before { + content: $ti-icon-cloud-pause; +} +.#{$ti-prefix}-cloud-pin:before { + content: $ti-icon-cloud-pin; +} +.#{$ti-prefix}-cloud-plus:before { + content: $ti-icon-cloud-plus; +} +.#{$ti-prefix}-cloud-question:before { + content: $ti-icon-cloud-question; +} +.#{$ti-prefix}-cloud-rain:before { + content: $ti-icon-cloud-rain; +} +.#{$ti-prefix}-cloud-search:before { + content: $ti-icon-cloud-search; +} +.#{$ti-prefix}-cloud-share:before { + content: $ti-icon-cloud-share; +} +.#{$ti-prefix}-cloud-snow:before { + content: $ti-icon-cloud-snow; +} +.#{$ti-prefix}-cloud-star:before { + content: $ti-icon-cloud-star; +} +.#{$ti-prefix}-cloud-storm:before { + content: $ti-icon-cloud-storm; +} +.#{$ti-prefix}-cloud-up:before { + content: $ti-icon-cloud-up; +} +.#{$ti-prefix}-cloud-upload:before { + content: $ti-icon-cloud-upload; +} +.#{$ti-prefix}-cloud-x:before { + content: $ti-icon-cloud-x; +} +.#{$ti-prefix}-clover:before { + content: $ti-icon-clover; +} +.#{$ti-prefix}-clover-2:before { + content: $ti-icon-clover-2; +} +.#{$ti-prefix}-clubs:before { + content: $ti-icon-clubs; +} +.#{$ti-prefix}-clubs-filled:before { + content: $ti-icon-clubs-filled; +} +.#{$ti-prefix}-code:before { + content: $ti-icon-code; +} +.#{$ti-prefix}-code-asterisk:before { + content: $ti-icon-code-asterisk; +} +.#{$ti-prefix}-code-circle:before { + content: $ti-icon-code-circle; +} +.#{$ti-prefix}-code-circle-2:before { + content: $ti-icon-code-circle-2; +} +.#{$ti-prefix}-code-circle-2-filled:before { + content: $ti-icon-code-circle-2-filled; +} +.#{$ti-prefix}-code-circle-filled:before { + content: $ti-icon-code-circle-filled; +} +.#{$ti-prefix}-code-dots:before { + content: $ti-icon-code-dots; +} +.#{$ti-prefix}-code-minus:before { + content: $ti-icon-code-minus; +} +.#{$ti-prefix}-code-off:before { + content: $ti-icon-code-off; +} +.#{$ti-prefix}-code-plus:before { + content: $ti-icon-code-plus; +} +.#{$ti-prefix}-coffee:before { + content: $ti-icon-coffee; +} +.#{$ti-prefix}-coffee-off:before { + content: $ti-icon-coffee-off; +} +.#{$ti-prefix}-coffin:before { + content: $ti-icon-coffin; +} +.#{$ti-prefix}-coin:before { + content: $ti-icon-coin; +} +.#{$ti-prefix}-coin-bitcoin:before { + content: $ti-icon-coin-bitcoin; +} +.#{$ti-prefix}-coin-bitcoin-filled:before { + content: $ti-icon-coin-bitcoin-filled; +} +.#{$ti-prefix}-coin-euro:before { + content: $ti-icon-coin-euro; +} +.#{$ti-prefix}-coin-euro-filled:before { + content: $ti-icon-coin-euro-filled; +} +.#{$ti-prefix}-coin-filled:before { + content: $ti-icon-coin-filled; +} +.#{$ti-prefix}-coin-monero:before { + content: $ti-icon-coin-monero; +} +.#{$ti-prefix}-coin-monero-filled:before { + content: $ti-icon-coin-monero-filled; +} +.#{$ti-prefix}-coin-off:before { + content: $ti-icon-coin-off; +} +.#{$ti-prefix}-coin-pound:before { + content: $ti-icon-coin-pound; +} +.#{$ti-prefix}-coin-pound-filled:before { + content: $ti-icon-coin-pound-filled; +} +.#{$ti-prefix}-coin-rupee:before { + content: $ti-icon-coin-rupee; +} +.#{$ti-prefix}-coin-rupee-filled:before { + content: $ti-icon-coin-rupee-filled; +} +.#{$ti-prefix}-coin-taka:before { + content: $ti-icon-coin-taka; +} +.#{$ti-prefix}-coin-taka-filled:before { + content: $ti-icon-coin-taka-filled; +} +.#{$ti-prefix}-coin-yen:before { + content: $ti-icon-coin-yen; +} +.#{$ti-prefix}-coin-yen-filled:before { + content: $ti-icon-coin-yen-filled; +} +.#{$ti-prefix}-coin-yuan:before { + content: $ti-icon-coin-yuan; +} +.#{$ti-prefix}-coin-yuan-filled:before { + content: $ti-icon-coin-yuan-filled; +} +.#{$ti-prefix}-coins:before { + content: $ti-icon-coins; +} +.#{$ti-prefix}-color-filter:before { + content: $ti-icon-color-filter; +} +.#{$ti-prefix}-color-picker:before { + content: $ti-icon-color-picker; +} +.#{$ti-prefix}-color-picker-off:before { + content: $ti-icon-color-picker-off; +} +.#{$ti-prefix}-color-swatch:before { + content: $ti-icon-color-swatch; +} +.#{$ti-prefix}-color-swatch-off:before { + content: $ti-icon-color-swatch-off; +} +.#{$ti-prefix}-column-insert-left:before { + content: $ti-icon-column-insert-left; +} +.#{$ti-prefix}-column-insert-right:before { + content: $ti-icon-column-insert-right; +} +.#{$ti-prefix}-column-remove:before { + content: $ti-icon-column-remove; +} +.#{$ti-prefix}-columns:before { + content: $ti-icon-columns; +} +.#{$ti-prefix}-columns-1:before { + content: $ti-icon-columns-1; +} +.#{$ti-prefix}-columns-2:before { + content: $ti-icon-columns-2; +} +.#{$ti-prefix}-columns-3:before { + content: $ti-icon-columns-3; +} +.#{$ti-prefix}-columns-off:before { + content: $ti-icon-columns-off; +} +.#{$ti-prefix}-comet:before { + content: $ti-icon-comet; +} +.#{$ti-prefix}-command:before { + content: $ti-icon-command; +} +.#{$ti-prefix}-command-off:before { + content: $ti-icon-command-off; +} +.#{$ti-prefix}-compass:before { + content: $ti-icon-compass; +} +.#{$ti-prefix}-compass-filled:before { + content: $ti-icon-compass-filled; +} +.#{$ti-prefix}-compass-off:before { + content: $ti-icon-compass-off; +} +.#{$ti-prefix}-components:before { + content: $ti-icon-components; +} +.#{$ti-prefix}-components-off:before { + content: $ti-icon-components-off; +} +.#{$ti-prefix}-cone:before { + content: $ti-icon-cone; +} +.#{$ti-prefix}-cone-2:before { + content: $ti-icon-cone-2; +} +.#{$ti-prefix}-cone-2-filled:before { + content: $ti-icon-cone-2-filled; +} +.#{$ti-prefix}-cone-filled:before { + content: $ti-icon-cone-filled; +} +.#{$ti-prefix}-cone-off:before { + content: $ti-icon-cone-off; +} +.#{$ti-prefix}-cone-plus:before { + content: $ti-icon-cone-plus; +} +.#{$ti-prefix}-confetti:before { + content: $ti-icon-confetti; +} +.#{$ti-prefix}-confetti-off:before { + content: $ti-icon-confetti-off; +} +.#{$ti-prefix}-confucius:before { + content: $ti-icon-confucius; +} +.#{$ti-prefix}-container:before { + content: $ti-icon-container; +} +.#{$ti-prefix}-container-off:before { + content: $ti-icon-container-off; +} +.#{$ti-prefix}-contrast:before { + content: $ti-icon-contrast; +} +.#{$ti-prefix}-contrast-2:before { + content: $ti-icon-contrast-2; +} +.#{$ti-prefix}-contrast-2-filled:before { + content: $ti-icon-contrast-2-filled; +} +.#{$ti-prefix}-contrast-2-off:before { + content: $ti-icon-contrast-2-off; +} +.#{$ti-prefix}-contrast-filled:before { + content: $ti-icon-contrast-filled; +} +.#{$ti-prefix}-contrast-off:before { + content: $ti-icon-contrast-off; +} +.#{$ti-prefix}-cooker:before { + content: $ti-icon-cooker; +} +.#{$ti-prefix}-cookie:before { + content: $ti-icon-cookie; +} +.#{$ti-prefix}-cookie-filled:before { + content: $ti-icon-cookie-filled; +} +.#{$ti-prefix}-cookie-man:before { + content: $ti-icon-cookie-man; +} +.#{$ti-prefix}-cookie-man-filled:before { + content: $ti-icon-cookie-man-filled; +} +.#{$ti-prefix}-cookie-off:before { + content: $ti-icon-cookie-off; +} +.#{$ti-prefix}-copy:before { + content: $ti-icon-copy; +} +.#{$ti-prefix}-copy-check:before { + content: $ti-icon-copy-check; +} +.#{$ti-prefix}-copy-check-filled:before { + content: $ti-icon-copy-check-filled; +} +.#{$ti-prefix}-copy-minus:before { + content: $ti-icon-copy-minus; +} +.#{$ti-prefix}-copy-minus-filled:before { + content: $ti-icon-copy-minus-filled; +} +.#{$ti-prefix}-copy-off:before { + content: $ti-icon-copy-off; +} +.#{$ti-prefix}-copy-plus:before { + content: $ti-icon-copy-plus; +} +.#{$ti-prefix}-copy-plus-filled:before { + content: $ti-icon-copy-plus-filled; +} +.#{$ti-prefix}-copy-x:before { + content: $ti-icon-copy-x; +} +.#{$ti-prefix}-copy-x-filled:before { + content: $ti-icon-copy-x-filled; +} +.#{$ti-prefix}-copyleft:before { + content: $ti-icon-copyleft; +} +.#{$ti-prefix}-copyleft-filled:before { + content: $ti-icon-copyleft-filled; +} +.#{$ti-prefix}-copyleft-off:before { + content: $ti-icon-copyleft-off; +} +.#{$ti-prefix}-copyright:before { + content: $ti-icon-copyright; +} +.#{$ti-prefix}-copyright-filled:before { + content: $ti-icon-copyright-filled; +} +.#{$ti-prefix}-copyright-off:before { + content: $ti-icon-copyright-off; +} +.#{$ti-prefix}-corner-down-left:before { + content: $ti-icon-corner-down-left; +} +.#{$ti-prefix}-corner-down-left-double:before { + content: $ti-icon-corner-down-left-double; +} +.#{$ti-prefix}-corner-down-right:before { + content: $ti-icon-corner-down-right; +} +.#{$ti-prefix}-corner-down-right-double:before { + content: $ti-icon-corner-down-right-double; +} +.#{$ti-prefix}-corner-left-down:before { + content: $ti-icon-corner-left-down; +} +.#{$ti-prefix}-corner-left-down-double:before { + content: $ti-icon-corner-left-down-double; +} +.#{$ti-prefix}-corner-left-up:before { + content: $ti-icon-corner-left-up; +} +.#{$ti-prefix}-corner-left-up-double:before { + content: $ti-icon-corner-left-up-double; +} +.#{$ti-prefix}-corner-right-down:before { + content: $ti-icon-corner-right-down; +} +.#{$ti-prefix}-corner-right-down-double:before { + content: $ti-icon-corner-right-down-double; +} +.#{$ti-prefix}-corner-right-up:before { + content: $ti-icon-corner-right-up; +} +.#{$ti-prefix}-corner-right-up-double:before { + content: $ti-icon-corner-right-up-double; +} +.#{$ti-prefix}-corner-up-left:before { + content: $ti-icon-corner-up-left; +} +.#{$ti-prefix}-corner-up-left-double:before { + content: $ti-icon-corner-up-left-double; +} +.#{$ti-prefix}-corner-up-right:before { + content: $ti-icon-corner-up-right; +} +.#{$ti-prefix}-corner-up-right-double:before { + content: $ti-icon-corner-up-right-double; +} +.#{$ti-prefix}-cpu:before { + content: $ti-icon-cpu; +} +.#{$ti-prefix}-cpu-2:before { + content: $ti-icon-cpu-2; +} +.#{$ti-prefix}-cpu-off:before { + content: $ti-icon-cpu-off; +} +.#{$ti-prefix}-crane:before { + content: $ti-icon-crane; +} +.#{$ti-prefix}-crane-off:before { + content: $ti-icon-crane-off; +} +.#{$ti-prefix}-creative-commons:before { + content: $ti-icon-creative-commons; +} +.#{$ti-prefix}-creative-commons-by:before { + content: $ti-icon-creative-commons-by; +} +.#{$ti-prefix}-creative-commons-nc:before { + content: $ti-icon-creative-commons-nc; +} +.#{$ti-prefix}-creative-commons-nd:before { + content: $ti-icon-creative-commons-nd; +} +.#{$ti-prefix}-creative-commons-off:before { + content: $ti-icon-creative-commons-off; +} +.#{$ti-prefix}-creative-commons-sa:before { + content: $ti-icon-creative-commons-sa; +} +.#{$ti-prefix}-creative-commons-zero:before { + content: $ti-icon-creative-commons-zero; +} +.#{$ti-prefix}-credit-card:before { + content: $ti-icon-credit-card; +} +.#{$ti-prefix}-credit-card-filled:before { + content: $ti-icon-credit-card-filled; +} +.#{$ti-prefix}-credit-card-off:before { + content: $ti-icon-credit-card-off; +} +.#{$ti-prefix}-credit-card-pay:before { + content: $ti-icon-credit-card-pay; +} +.#{$ti-prefix}-credit-card-refund:before { + content: $ti-icon-credit-card-refund; +} +.#{$ti-prefix}-cricket:before { + content: $ti-icon-cricket; +} +.#{$ti-prefix}-crop:before { + content: $ti-icon-crop; +} +.#{$ti-prefix}-crop-1-1:before { + content: $ti-icon-crop-1-1; +} +.#{$ti-prefix}-crop-1-1-filled:before { + content: $ti-icon-crop-1-1-filled; +} +.#{$ti-prefix}-crop-16-9:before { + content: $ti-icon-crop-16-9; +} +.#{$ti-prefix}-crop-16-9-filled:before { + content: $ti-icon-crop-16-9-filled; +} +.#{$ti-prefix}-crop-3-2:before { + content: $ti-icon-crop-3-2; +} +.#{$ti-prefix}-crop-3-2-filled:before { + content: $ti-icon-crop-3-2-filled; +} +.#{$ti-prefix}-crop-5-4:before { + content: $ti-icon-crop-5-4; +} +.#{$ti-prefix}-crop-5-4-filled:before { + content: $ti-icon-crop-5-4-filled; +} +.#{$ti-prefix}-crop-7-5:before { + content: $ti-icon-crop-7-5; +} +.#{$ti-prefix}-crop-7-5-filled:before { + content: $ti-icon-crop-7-5-filled; +} +.#{$ti-prefix}-crop-landscape:before { + content: $ti-icon-crop-landscape; +} +.#{$ti-prefix}-crop-landscape-filled:before { + content: $ti-icon-crop-landscape-filled; +} +.#{$ti-prefix}-crop-portrait:before { + content: $ti-icon-crop-portrait; +} +.#{$ti-prefix}-crop-portrait-filled:before { + content: $ti-icon-crop-portrait-filled; +} +.#{$ti-prefix}-cross:before { + content: $ti-icon-cross; +} +.#{$ti-prefix}-cross-filled:before { + content: $ti-icon-cross-filled; +} +.#{$ti-prefix}-cross-off:before { + content: $ti-icon-cross-off; +} +.#{$ti-prefix}-crosshair:before { + content: $ti-icon-crosshair; +} +.#{$ti-prefix}-crown:before { + content: $ti-icon-crown; +} +.#{$ti-prefix}-crown-off:before { + content: $ti-icon-crown-off; +} +.#{$ti-prefix}-crutches:before { + content: $ti-icon-crutches; +} +.#{$ti-prefix}-crutches-off:before { + content: $ti-icon-crutches-off; +} +.#{$ti-prefix}-crystal-ball:before { + content: $ti-icon-crystal-ball; +} +.#{$ti-prefix}-csv:before { + content: $ti-icon-csv; +} +.#{$ti-prefix}-cube:before { + content: $ti-icon-cube; +} +.#{$ti-prefix}-cube-3d-sphere:before { + content: $ti-icon-cube-3d-sphere; +} +.#{$ti-prefix}-cube-3d-sphere-off:before { + content: $ti-icon-cube-3d-sphere-off; +} +.#{$ti-prefix}-cube-off:before { + content: $ti-icon-cube-off; +} +.#{$ti-prefix}-cube-plus:before { + content: $ti-icon-cube-plus; +} +.#{$ti-prefix}-cube-send:before { + content: $ti-icon-cube-send; +} +.#{$ti-prefix}-cube-unfolded:before { + content: $ti-icon-cube-unfolded; +} +.#{$ti-prefix}-cup:before { + content: $ti-icon-cup; +} +.#{$ti-prefix}-cup-off:before { + content: $ti-icon-cup-off; +} +.#{$ti-prefix}-curling:before { + content: $ti-icon-curling; +} +.#{$ti-prefix}-curly-loop:before { + content: $ti-icon-curly-loop; +} +.#{$ti-prefix}-currency:before { + content: $ti-icon-currency; +} +.#{$ti-prefix}-currency-afghani:before { + content: $ti-icon-currency-afghani; +} +.#{$ti-prefix}-currency-bahraini:before { + content: $ti-icon-currency-bahraini; +} +.#{$ti-prefix}-currency-baht:before { + content: $ti-icon-currency-baht; +} +.#{$ti-prefix}-currency-bitcoin:before { + content: $ti-icon-currency-bitcoin; +} +.#{$ti-prefix}-currency-cent:before { + content: $ti-icon-currency-cent; +} +.#{$ti-prefix}-currency-dinar:before { + content: $ti-icon-currency-dinar; +} +.#{$ti-prefix}-currency-dirham:before { + content: $ti-icon-currency-dirham; +} +.#{$ti-prefix}-currency-dogecoin:before { + content: $ti-icon-currency-dogecoin; +} +.#{$ti-prefix}-currency-dollar:before { + content: $ti-icon-currency-dollar; +} +.#{$ti-prefix}-currency-dollar-australian:before { + content: $ti-icon-currency-dollar-australian; +} +.#{$ti-prefix}-currency-dollar-brunei:before { + content: $ti-icon-currency-dollar-brunei; +} +.#{$ti-prefix}-currency-dollar-canadian:before { + content: $ti-icon-currency-dollar-canadian; +} +.#{$ti-prefix}-currency-dollar-guyanese:before { + content: $ti-icon-currency-dollar-guyanese; +} +.#{$ti-prefix}-currency-dollar-off:before { + content: $ti-icon-currency-dollar-off; +} +.#{$ti-prefix}-currency-dollar-singapore:before { + content: $ti-icon-currency-dollar-singapore; +} +.#{$ti-prefix}-currency-dollar-zimbabwean:before { + content: $ti-icon-currency-dollar-zimbabwean; +} +.#{$ti-prefix}-currency-dong:before { + content: $ti-icon-currency-dong; +} +.#{$ti-prefix}-currency-dram:before { + content: $ti-icon-currency-dram; +} +.#{$ti-prefix}-currency-ethereum:before { + content: $ti-icon-currency-ethereum; +} +.#{$ti-prefix}-currency-euro:before { + content: $ti-icon-currency-euro; +} +.#{$ti-prefix}-currency-euro-off:before { + content: $ti-icon-currency-euro-off; +} +.#{$ti-prefix}-currency-florin:before { + content: $ti-icon-currency-florin; +} +.#{$ti-prefix}-currency-forint:before { + content: $ti-icon-currency-forint; +} +.#{$ti-prefix}-currency-frank:before { + content: $ti-icon-currency-frank; +} +.#{$ti-prefix}-currency-guarani:before { + content: $ti-icon-currency-guarani; +} +.#{$ti-prefix}-currency-hryvnia:before { + content: $ti-icon-currency-hryvnia; +} +.#{$ti-prefix}-currency-iranian-rial:before { + content: $ti-icon-currency-iranian-rial; +} +.#{$ti-prefix}-currency-kip:before { + content: $ti-icon-currency-kip; +} +.#{$ti-prefix}-currency-krone-czech:before { + content: $ti-icon-currency-krone-czech; +} +.#{$ti-prefix}-currency-krone-danish:before { + content: $ti-icon-currency-krone-danish; +} +.#{$ti-prefix}-currency-krone-swedish:before { + content: $ti-icon-currency-krone-swedish; +} +.#{$ti-prefix}-currency-lari:before { + content: $ti-icon-currency-lari; +} +.#{$ti-prefix}-currency-leu:before { + content: $ti-icon-currency-leu; +} +.#{$ti-prefix}-currency-lira:before { + content: $ti-icon-currency-lira; +} +.#{$ti-prefix}-currency-litecoin:before { + content: $ti-icon-currency-litecoin; +} +.#{$ti-prefix}-currency-lyd:before { + content: $ti-icon-currency-lyd; +} +.#{$ti-prefix}-currency-manat:before { + content: $ti-icon-currency-manat; +} +.#{$ti-prefix}-currency-monero:before { + content: $ti-icon-currency-monero; +} +.#{$ti-prefix}-currency-naira:before { + content: $ti-icon-currency-naira; +} +.#{$ti-prefix}-currency-nano:before { + content: $ti-icon-currency-nano; +} +.#{$ti-prefix}-currency-off:before { + content: $ti-icon-currency-off; +} +.#{$ti-prefix}-currency-paanga:before { + content: $ti-icon-currency-paanga; +} +.#{$ti-prefix}-currency-peso:before { + content: $ti-icon-currency-peso; +} +.#{$ti-prefix}-currency-pound:before { + content: $ti-icon-currency-pound; +} +.#{$ti-prefix}-currency-pound-off:before { + content: $ti-icon-currency-pound-off; +} +.#{$ti-prefix}-currency-quetzal:before { + content: $ti-icon-currency-quetzal; +} +.#{$ti-prefix}-currency-real:before { + content: $ti-icon-currency-real; +} +.#{$ti-prefix}-currency-renminbi:before { + content: $ti-icon-currency-renminbi; +} +.#{$ti-prefix}-currency-ripple:before { + content: $ti-icon-currency-ripple; +} +.#{$ti-prefix}-currency-riyal:before { + content: $ti-icon-currency-riyal; +} +.#{$ti-prefix}-currency-rubel:before { + content: $ti-icon-currency-rubel; +} +.#{$ti-prefix}-currency-rufiyaa:before { + content: $ti-icon-currency-rufiyaa; +} +.#{$ti-prefix}-currency-rupee:before { + content: $ti-icon-currency-rupee; +} +.#{$ti-prefix}-currency-rupee-nepalese:before { + content: $ti-icon-currency-rupee-nepalese; +} +.#{$ti-prefix}-currency-shekel:before { + content: $ti-icon-currency-shekel; +} +.#{$ti-prefix}-currency-solana:before { + content: $ti-icon-currency-solana; +} +.#{$ti-prefix}-currency-som:before { + content: $ti-icon-currency-som; +} +.#{$ti-prefix}-currency-taka:before { + content: $ti-icon-currency-taka; +} +.#{$ti-prefix}-currency-tenge:before { + content: $ti-icon-currency-tenge; +} +.#{$ti-prefix}-currency-tugrik:before { + content: $ti-icon-currency-tugrik; +} +.#{$ti-prefix}-currency-won:before { + content: $ti-icon-currency-won; +} +.#{$ti-prefix}-currency-xrp:before { + content: $ti-icon-currency-xrp; +} +.#{$ti-prefix}-currency-yen:before { + content: $ti-icon-currency-yen; +} +.#{$ti-prefix}-currency-yen-off:before { + content: $ti-icon-currency-yen-off; +} +.#{$ti-prefix}-currency-yuan:before { + content: $ti-icon-currency-yuan; +} +.#{$ti-prefix}-currency-zloty:before { + content: $ti-icon-currency-zloty; +} +.#{$ti-prefix}-current-location:before { + content: $ti-icon-current-location; +} +.#{$ti-prefix}-current-location-off:before { + content: $ti-icon-current-location-off; +} +.#{$ti-prefix}-cursor-off:before { + content: $ti-icon-cursor-off; +} +.#{$ti-prefix}-cursor-text:before { + content: $ti-icon-cursor-text; +} +.#{$ti-prefix}-cut:before { + content: $ti-icon-cut; +} +.#{$ti-prefix}-cylinder:before { + content: $ti-icon-cylinder; +} +.#{$ti-prefix}-cylinder-off:before { + content: $ti-icon-cylinder-off; +} +.#{$ti-prefix}-cylinder-plus:before { + content: $ti-icon-cylinder-plus; +} +.#{$ti-prefix}-dashboard:before { + content: $ti-icon-dashboard; +} +.#{$ti-prefix}-dashboard-off:before { + content: $ti-icon-dashboard-off; +} +.#{$ti-prefix}-database:before { + content: $ti-icon-database; +} +.#{$ti-prefix}-database-cog:before { + content: $ti-icon-database-cog; +} +.#{$ti-prefix}-database-dollar:before { + content: $ti-icon-database-dollar; +} +.#{$ti-prefix}-database-edit:before { + content: $ti-icon-database-edit; +} +.#{$ti-prefix}-database-exclamation:before { + content: $ti-icon-database-exclamation; +} +.#{$ti-prefix}-database-export:before { + content: $ti-icon-database-export; +} +.#{$ti-prefix}-database-heart:before { + content: $ti-icon-database-heart; +} +.#{$ti-prefix}-database-import:before { + content: $ti-icon-database-import; +} +.#{$ti-prefix}-database-leak:before { + content: $ti-icon-database-leak; +} +.#{$ti-prefix}-database-minus:before { + content: $ti-icon-database-minus; +} +.#{$ti-prefix}-database-off:before { + content: $ti-icon-database-off; +} +.#{$ti-prefix}-database-plus:before { + content: $ti-icon-database-plus; +} +.#{$ti-prefix}-database-search:before { + content: $ti-icon-database-search; +} +.#{$ti-prefix}-database-share:before { + content: $ti-icon-database-share; +} +.#{$ti-prefix}-database-smile:before { + content: $ti-icon-database-smile; +} +.#{$ti-prefix}-database-star:before { + content: $ti-icon-database-star; +} +.#{$ti-prefix}-database-x:before { + content: $ti-icon-database-x; +} +.#{$ti-prefix}-decimal:before { + content: $ti-icon-decimal; +} +.#{$ti-prefix}-deer:before { + content: $ti-icon-deer; +} +.#{$ti-prefix}-delta:before { + content: $ti-icon-delta; +} +.#{$ti-prefix}-dental:before { + content: $ti-icon-dental; +} +.#{$ti-prefix}-dental-broken:before { + content: $ti-icon-dental-broken; +} +.#{$ti-prefix}-dental-off:before { + content: $ti-icon-dental-off; +} +.#{$ti-prefix}-deselect:before { + content: $ti-icon-deselect; +} +.#{$ti-prefix}-desk:before { + content: $ti-icon-desk; +} +.#{$ti-prefix}-details:before { + content: $ti-icon-details; +} +.#{$ti-prefix}-details-off:before { + content: $ti-icon-details-off; +} +.#{$ti-prefix}-device-airpods:before { + content: $ti-icon-device-airpods; +} +.#{$ti-prefix}-device-airpods-case:before { + content: $ti-icon-device-airpods-case; +} +.#{$ti-prefix}-device-airtag:before { + content: $ti-icon-device-airtag; +} +.#{$ti-prefix}-device-analytics:before { + content: $ti-icon-device-analytics; +} +.#{$ti-prefix}-device-audio-tape:before { + content: $ti-icon-device-audio-tape; +} +.#{$ti-prefix}-device-camera-phone:before { + content: $ti-icon-device-camera-phone; +} +.#{$ti-prefix}-device-cctv:before { + content: $ti-icon-device-cctv; +} +.#{$ti-prefix}-device-cctv-off:before { + content: $ti-icon-device-cctv-off; +} +.#{$ti-prefix}-device-computer-camera:before { + content: $ti-icon-device-computer-camera; +} +.#{$ti-prefix}-device-computer-camera-off:before { + content: $ti-icon-device-computer-camera-off; +} +.#{$ti-prefix}-device-desktop:before { + content: $ti-icon-device-desktop; +} +.#{$ti-prefix}-device-desktop-analytics:before { + content: $ti-icon-device-desktop-analytics; +} +.#{$ti-prefix}-device-desktop-bolt:before { + content: $ti-icon-device-desktop-bolt; +} +.#{$ti-prefix}-device-desktop-cancel:before { + content: $ti-icon-device-desktop-cancel; +} +.#{$ti-prefix}-device-desktop-check:before { + content: $ti-icon-device-desktop-check; +} +.#{$ti-prefix}-device-desktop-code:before { + content: $ti-icon-device-desktop-code; +} +.#{$ti-prefix}-device-desktop-cog:before { + content: $ti-icon-device-desktop-cog; +} +.#{$ti-prefix}-device-desktop-dollar:before { + content: $ti-icon-device-desktop-dollar; +} +.#{$ti-prefix}-device-desktop-down:before { + content: $ti-icon-device-desktop-down; +} +.#{$ti-prefix}-device-desktop-exclamation:before { + content: $ti-icon-device-desktop-exclamation; +} +.#{$ti-prefix}-device-desktop-heart:before { + content: $ti-icon-device-desktop-heart; +} +.#{$ti-prefix}-device-desktop-minus:before { + content: $ti-icon-device-desktop-minus; +} +.#{$ti-prefix}-device-desktop-off:before { + content: $ti-icon-device-desktop-off; +} +.#{$ti-prefix}-device-desktop-pause:before { + content: $ti-icon-device-desktop-pause; +} +.#{$ti-prefix}-device-desktop-pin:before { + content: $ti-icon-device-desktop-pin; +} +.#{$ti-prefix}-device-desktop-plus:before { + content: $ti-icon-device-desktop-plus; +} +.#{$ti-prefix}-device-desktop-question:before { + content: $ti-icon-device-desktop-question; +} +.#{$ti-prefix}-device-desktop-search:before { + content: $ti-icon-device-desktop-search; +} +.#{$ti-prefix}-device-desktop-share:before { + content: $ti-icon-device-desktop-share; +} +.#{$ti-prefix}-device-desktop-star:before { + content: $ti-icon-device-desktop-star; +} +.#{$ti-prefix}-device-desktop-up:before { + content: $ti-icon-device-desktop-up; +} +.#{$ti-prefix}-device-desktop-x:before { + content: $ti-icon-device-desktop-x; +} +.#{$ti-prefix}-device-floppy:before { + content: $ti-icon-device-floppy; +} +.#{$ti-prefix}-device-gamepad:before { + content: $ti-icon-device-gamepad; +} +.#{$ti-prefix}-device-gamepad-2:before { + content: $ti-icon-device-gamepad-2; +} +.#{$ti-prefix}-device-gamepad-3:before { + content: $ti-icon-device-gamepad-3; +} +.#{$ti-prefix}-device-heart-monitor:before { + content: $ti-icon-device-heart-monitor; +} +.#{$ti-prefix}-device-heart-monitor-filled:before { + content: $ti-icon-device-heart-monitor-filled; +} +.#{$ti-prefix}-device-imac:before { + content: $ti-icon-device-imac; +} +.#{$ti-prefix}-device-imac-bolt:before { + content: $ti-icon-device-imac-bolt; +} +.#{$ti-prefix}-device-imac-cancel:before { + content: $ti-icon-device-imac-cancel; +} +.#{$ti-prefix}-device-imac-check:before { + content: $ti-icon-device-imac-check; +} +.#{$ti-prefix}-device-imac-code:before { + content: $ti-icon-device-imac-code; +} +.#{$ti-prefix}-device-imac-cog:before { + content: $ti-icon-device-imac-cog; +} +.#{$ti-prefix}-device-imac-dollar:before { + content: $ti-icon-device-imac-dollar; +} +.#{$ti-prefix}-device-imac-down:before { + content: $ti-icon-device-imac-down; +} +.#{$ti-prefix}-device-imac-exclamation:before { + content: $ti-icon-device-imac-exclamation; +} +.#{$ti-prefix}-device-imac-heart:before { + content: $ti-icon-device-imac-heart; +} +.#{$ti-prefix}-device-imac-minus:before { + content: $ti-icon-device-imac-minus; +} +.#{$ti-prefix}-device-imac-off:before { + content: $ti-icon-device-imac-off; +} +.#{$ti-prefix}-device-imac-pause:before { + content: $ti-icon-device-imac-pause; +} +.#{$ti-prefix}-device-imac-pin:before { + content: $ti-icon-device-imac-pin; +} +.#{$ti-prefix}-device-imac-plus:before { + content: $ti-icon-device-imac-plus; +} +.#{$ti-prefix}-device-imac-question:before { + content: $ti-icon-device-imac-question; +} +.#{$ti-prefix}-device-imac-search:before { + content: $ti-icon-device-imac-search; +} +.#{$ti-prefix}-device-imac-share:before { + content: $ti-icon-device-imac-share; +} +.#{$ti-prefix}-device-imac-star:before { + content: $ti-icon-device-imac-star; +} +.#{$ti-prefix}-device-imac-up:before { + content: $ti-icon-device-imac-up; +} +.#{$ti-prefix}-device-imac-x:before { + content: $ti-icon-device-imac-x; +} +.#{$ti-prefix}-device-ipad:before { + content: $ti-icon-device-ipad; +} +.#{$ti-prefix}-device-ipad-bolt:before { + content: $ti-icon-device-ipad-bolt; +} +.#{$ti-prefix}-device-ipad-cancel:before { + content: $ti-icon-device-ipad-cancel; +} +.#{$ti-prefix}-device-ipad-check:before { + content: $ti-icon-device-ipad-check; +} +.#{$ti-prefix}-device-ipad-code:before { + content: $ti-icon-device-ipad-code; +} +.#{$ti-prefix}-device-ipad-cog:before { + content: $ti-icon-device-ipad-cog; +} +.#{$ti-prefix}-device-ipad-dollar:before { + content: $ti-icon-device-ipad-dollar; +} +.#{$ti-prefix}-device-ipad-down:before { + content: $ti-icon-device-ipad-down; +} +.#{$ti-prefix}-device-ipad-exclamation:before { + content: $ti-icon-device-ipad-exclamation; +} +.#{$ti-prefix}-device-ipad-heart:before { + content: $ti-icon-device-ipad-heart; +} +.#{$ti-prefix}-device-ipad-horizontal:before { + content: $ti-icon-device-ipad-horizontal; +} +.#{$ti-prefix}-device-ipad-horizontal-bolt:before { + content: $ti-icon-device-ipad-horizontal-bolt; +} +.#{$ti-prefix}-device-ipad-horizontal-cancel:before { + content: $ti-icon-device-ipad-horizontal-cancel; +} +.#{$ti-prefix}-device-ipad-horizontal-check:before { + content: $ti-icon-device-ipad-horizontal-check; +} +.#{$ti-prefix}-device-ipad-horizontal-code:before { + content: $ti-icon-device-ipad-horizontal-code; +} +.#{$ti-prefix}-device-ipad-horizontal-cog:before { + content: $ti-icon-device-ipad-horizontal-cog; +} +.#{$ti-prefix}-device-ipad-horizontal-dollar:before { + content: $ti-icon-device-ipad-horizontal-dollar; +} +.#{$ti-prefix}-device-ipad-horizontal-down:before { + content: $ti-icon-device-ipad-horizontal-down; +} +.#{$ti-prefix}-device-ipad-horizontal-exclamation:before { + content: $ti-icon-device-ipad-horizontal-exclamation; +} +.#{$ti-prefix}-device-ipad-horizontal-heart:before { + content: $ti-icon-device-ipad-horizontal-heart; +} +.#{$ti-prefix}-device-ipad-horizontal-minus:before { + content: $ti-icon-device-ipad-horizontal-minus; +} +.#{$ti-prefix}-device-ipad-horizontal-off:before { + content: $ti-icon-device-ipad-horizontal-off; +} +.#{$ti-prefix}-device-ipad-horizontal-pause:before { + content: $ti-icon-device-ipad-horizontal-pause; +} +.#{$ti-prefix}-device-ipad-horizontal-pin:before { + content: $ti-icon-device-ipad-horizontal-pin; +} +.#{$ti-prefix}-device-ipad-horizontal-plus:before { + content: $ti-icon-device-ipad-horizontal-plus; +} +.#{$ti-prefix}-device-ipad-horizontal-question:before { + content: $ti-icon-device-ipad-horizontal-question; +} +.#{$ti-prefix}-device-ipad-horizontal-search:before { + content: $ti-icon-device-ipad-horizontal-search; +} +.#{$ti-prefix}-device-ipad-horizontal-share:before { + content: $ti-icon-device-ipad-horizontal-share; +} +.#{$ti-prefix}-device-ipad-horizontal-star:before { + content: $ti-icon-device-ipad-horizontal-star; +} +.#{$ti-prefix}-device-ipad-horizontal-up:before { + content: $ti-icon-device-ipad-horizontal-up; +} +.#{$ti-prefix}-device-ipad-horizontal-x:before { + content: $ti-icon-device-ipad-horizontal-x; +} +.#{$ti-prefix}-device-ipad-minus:before { + content: $ti-icon-device-ipad-minus; +} +.#{$ti-prefix}-device-ipad-off:before { + content: $ti-icon-device-ipad-off; +} +.#{$ti-prefix}-device-ipad-pause:before { + content: $ti-icon-device-ipad-pause; +} +.#{$ti-prefix}-device-ipad-pin:before { + content: $ti-icon-device-ipad-pin; +} +.#{$ti-prefix}-device-ipad-plus:before { + content: $ti-icon-device-ipad-plus; +} +.#{$ti-prefix}-device-ipad-question:before { + content: $ti-icon-device-ipad-question; +} +.#{$ti-prefix}-device-ipad-search:before { + content: $ti-icon-device-ipad-search; +} +.#{$ti-prefix}-device-ipad-share:before { + content: $ti-icon-device-ipad-share; +} +.#{$ti-prefix}-device-ipad-star:before { + content: $ti-icon-device-ipad-star; +} +.#{$ti-prefix}-device-ipad-up:before { + content: $ti-icon-device-ipad-up; +} +.#{$ti-prefix}-device-ipad-x:before { + content: $ti-icon-device-ipad-x; +} +.#{$ti-prefix}-device-landline-phone:before { + content: $ti-icon-device-landline-phone; +} +.#{$ti-prefix}-device-laptop:before { + content: $ti-icon-device-laptop; +} +.#{$ti-prefix}-device-laptop-off:before { + content: $ti-icon-device-laptop-off; +} +.#{$ti-prefix}-device-mobile:before { + content: $ti-icon-device-mobile; +} +.#{$ti-prefix}-device-mobile-bolt:before { + content: $ti-icon-device-mobile-bolt; +} +.#{$ti-prefix}-device-mobile-cancel:before { + content: $ti-icon-device-mobile-cancel; +} +.#{$ti-prefix}-device-mobile-charging:before { + content: $ti-icon-device-mobile-charging; +} +.#{$ti-prefix}-device-mobile-check:before { + content: $ti-icon-device-mobile-check; +} +.#{$ti-prefix}-device-mobile-code:before { + content: $ti-icon-device-mobile-code; +} +.#{$ti-prefix}-device-mobile-cog:before { + content: $ti-icon-device-mobile-cog; +} +.#{$ti-prefix}-device-mobile-dollar:before { + content: $ti-icon-device-mobile-dollar; +} +.#{$ti-prefix}-device-mobile-down:before { + content: $ti-icon-device-mobile-down; +} +.#{$ti-prefix}-device-mobile-exclamation:before { + content: $ti-icon-device-mobile-exclamation; +} +.#{$ti-prefix}-device-mobile-filled:before { + content: $ti-icon-device-mobile-filled; +} +.#{$ti-prefix}-device-mobile-heart:before { + content: $ti-icon-device-mobile-heart; +} +.#{$ti-prefix}-device-mobile-message:before { + content: $ti-icon-device-mobile-message; +} +.#{$ti-prefix}-device-mobile-minus:before { + content: $ti-icon-device-mobile-minus; +} +.#{$ti-prefix}-device-mobile-off:before { + content: $ti-icon-device-mobile-off; +} +.#{$ti-prefix}-device-mobile-pause:before { + content: $ti-icon-device-mobile-pause; +} +.#{$ti-prefix}-device-mobile-pin:before { + content: $ti-icon-device-mobile-pin; +} +.#{$ti-prefix}-device-mobile-plus:before { + content: $ti-icon-device-mobile-plus; +} +.#{$ti-prefix}-device-mobile-question:before { + content: $ti-icon-device-mobile-question; +} +.#{$ti-prefix}-device-mobile-rotated:before { + content: $ti-icon-device-mobile-rotated; +} +.#{$ti-prefix}-device-mobile-search:before { + content: $ti-icon-device-mobile-search; +} +.#{$ti-prefix}-device-mobile-share:before { + content: $ti-icon-device-mobile-share; +} +.#{$ti-prefix}-device-mobile-star:before { + content: $ti-icon-device-mobile-star; +} +.#{$ti-prefix}-device-mobile-up:before { + content: $ti-icon-device-mobile-up; +} +.#{$ti-prefix}-device-mobile-vibration:before { + content: $ti-icon-device-mobile-vibration; +} +.#{$ti-prefix}-device-mobile-x:before { + content: $ti-icon-device-mobile-x; +} +.#{$ti-prefix}-device-nintendo:before { + content: $ti-icon-device-nintendo; +} +.#{$ti-prefix}-device-nintendo-off:before { + content: $ti-icon-device-nintendo-off; +} +.#{$ti-prefix}-device-projector:before { + content: $ti-icon-device-projector; +} +.#{$ti-prefix}-device-remote:before { + content: $ti-icon-device-remote; +} +.#{$ti-prefix}-device-sd-card:before { + content: $ti-icon-device-sd-card; +} +.#{$ti-prefix}-device-sim:before { + content: $ti-icon-device-sim; +} +.#{$ti-prefix}-device-sim-1:before { + content: $ti-icon-device-sim-1; +} +.#{$ti-prefix}-device-sim-2:before { + content: $ti-icon-device-sim-2; +} +.#{$ti-prefix}-device-sim-3:before { + content: $ti-icon-device-sim-3; +} +.#{$ti-prefix}-device-speaker:before { + content: $ti-icon-device-speaker; +} +.#{$ti-prefix}-device-speaker-off:before { + content: $ti-icon-device-speaker-off; +} +.#{$ti-prefix}-device-tablet:before { + content: $ti-icon-device-tablet; +} +.#{$ti-prefix}-device-tablet-bolt:before { + content: $ti-icon-device-tablet-bolt; +} +.#{$ti-prefix}-device-tablet-cancel:before { + content: $ti-icon-device-tablet-cancel; +} +.#{$ti-prefix}-device-tablet-check:before { + content: $ti-icon-device-tablet-check; +} +.#{$ti-prefix}-device-tablet-code:before { + content: $ti-icon-device-tablet-code; +} +.#{$ti-prefix}-device-tablet-cog:before { + content: $ti-icon-device-tablet-cog; +} +.#{$ti-prefix}-device-tablet-dollar:before { + content: $ti-icon-device-tablet-dollar; +} +.#{$ti-prefix}-device-tablet-down:before { + content: $ti-icon-device-tablet-down; +} +.#{$ti-prefix}-device-tablet-exclamation:before { + content: $ti-icon-device-tablet-exclamation; +} +.#{$ti-prefix}-device-tablet-filled:before { + content: $ti-icon-device-tablet-filled; +} +.#{$ti-prefix}-device-tablet-heart:before { + content: $ti-icon-device-tablet-heart; +} +.#{$ti-prefix}-device-tablet-minus:before { + content: $ti-icon-device-tablet-minus; +} +.#{$ti-prefix}-device-tablet-off:before { + content: $ti-icon-device-tablet-off; +} +.#{$ti-prefix}-device-tablet-pause:before { + content: $ti-icon-device-tablet-pause; +} +.#{$ti-prefix}-device-tablet-pin:before { + content: $ti-icon-device-tablet-pin; +} +.#{$ti-prefix}-device-tablet-plus:before { + content: $ti-icon-device-tablet-plus; +} +.#{$ti-prefix}-device-tablet-question:before { + content: $ti-icon-device-tablet-question; +} +.#{$ti-prefix}-device-tablet-search:before { + content: $ti-icon-device-tablet-search; +} +.#{$ti-prefix}-device-tablet-share:before { + content: $ti-icon-device-tablet-share; +} +.#{$ti-prefix}-device-tablet-star:before { + content: $ti-icon-device-tablet-star; +} +.#{$ti-prefix}-device-tablet-up:before { + content: $ti-icon-device-tablet-up; +} +.#{$ti-prefix}-device-tablet-x:before { + content: $ti-icon-device-tablet-x; +} +.#{$ti-prefix}-device-tv:before { + content: $ti-icon-device-tv; +} +.#{$ti-prefix}-device-tv-off:before { + content: $ti-icon-device-tv-off; +} +.#{$ti-prefix}-device-tv-old:before { + content: $ti-icon-device-tv-old; +} +.#{$ti-prefix}-device-usb:before { + content: $ti-icon-device-usb; +} +.#{$ti-prefix}-device-vision-pro:before { + content: $ti-icon-device-vision-pro; +} +.#{$ti-prefix}-device-watch:before { + content: $ti-icon-device-watch; +} +.#{$ti-prefix}-device-watch-bolt:before { + content: $ti-icon-device-watch-bolt; +} +.#{$ti-prefix}-device-watch-cancel:before { + content: $ti-icon-device-watch-cancel; +} +.#{$ti-prefix}-device-watch-check:before { + content: $ti-icon-device-watch-check; +} +.#{$ti-prefix}-device-watch-code:before { + content: $ti-icon-device-watch-code; +} +.#{$ti-prefix}-device-watch-cog:before { + content: $ti-icon-device-watch-cog; +} +.#{$ti-prefix}-device-watch-dollar:before { + content: $ti-icon-device-watch-dollar; +} +.#{$ti-prefix}-device-watch-down:before { + content: $ti-icon-device-watch-down; +} +.#{$ti-prefix}-device-watch-exclamation:before { + content: $ti-icon-device-watch-exclamation; +} +.#{$ti-prefix}-device-watch-heart:before { + content: $ti-icon-device-watch-heart; +} +.#{$ti-prefix}-device-watch-minus:before { + content: $ti-icon-device-watch-minus; +} +.#{$ti-prefix}-device-watch-off:before { + content: $ti-icon-device-watch-off; +} +.#{$ti-prefix}-device-watch-pause:before { + content: $ti-icon-device-watch-pause; +} +.#{$ti-prefix}-device-watch-pin:before { + content: $ti-icon-device-watch-pin; +} +.#{$ti-prefix}-device-watch-plus:before { + content: $ti-icon-device-watch-plus; +} +.#{$ti-prefix}-device-watch-question:before { + content: $ti-icon-device-watch-question; +} +.#{$ti-prefix}-device-watch-search:before { + content: $ti-icon-device-watch-search; +} +.#{$ti-prefix}-device-watch-share:before { + content: $ti-icon-device-watch-share; +} +.#{$ti-prefix}-device-watch-star:before { + content: $ti-icon-device-watch-star; +} +.#{$ti-prefix}-device-watch-stats:before { + content: $ti-icon-device-watch-stats; +} +.#{$ti-prefix}-device-watch-stats-2:before { + content: $ti-icon-device-watch-stats-2; +} +.#{$ti-prefix}-device-watch-up:before { + content: $ti-icon-device-watch-up; +} +.#{$ti-prefix}-device-watch-x:before { + content: $ti-icon-device-watch-x; +} +.#{$ti-prefix}-devices:before { + content: $ti-icon-devices; +} +.#{$ti-prefix}-devices-2:before { + content: $ti-icon-devices-2; +} +.#{$ti-prefix}-devices-bolt:before { + content: $ti-icon-devices-bolt; +} +.#{$ti-prefix}-devices-cancel:before { + content: $ti-icon-devices-cancel; +} +.#{$ti-prefix}-devices-check:before { + content: $ti-icon-devices-check; +} +.#{$ti-prefix}-devices-code:before { + content: $ti-icon-devices-code; +} +.#{$ti-prefix}-devices-cog:before { + content: $ti-icon-devices-cog; +} +.#{$ti-prefix}-devices-dollar:before { + content: $ti-icon-devices-dollar; +} +.#{$ti-prefix}-devices-down:before { + content: $ti-icon-devices-down; +} +.#{$ti-prefix}-devices-exclamation:before { + content: $ti-icon-devices-exclamation; +} +.#{$ti-prefix}-devices-heart:before { + content: $ti-icon-devices-heart; +} +.#{$ti-prefix}-devices-minus:before { + content: $ti-icon-devices-minus; +} +.#{$ti-prefix}-devices-off:before { + content: $ti-icon-devices-off; +} +.#{$ti-prefix}-devices-pause:before { + content: $ti-icon-devices-pause; +} +.#{$ti-prefix}-devices-pc:before { + content: $ti-icon-devices-pc; +} +.#{$ti-prefix}-devices-pc-off:before { + content: $ti-icon-devices-pc-off; +} +.#{$ti-prefix}-devices-pin:before { + content: $ti-icon-devices-pin; +} +.#{$ti-prefix}-devices-plus:before { + content: $ti-icon-devices-plus; +} +.#{$ti-prefix}-devices-question:before { + content: $ti-icon-devices-question; +} +.#{$ti-prefix}-devices-search:before { + content: $ti-icon-devices-search; +} +.#{$ti-prefix}-devices-share:before { + content: $ti-icon-devices-share; +} +.#{$ti-prefix}-devices-star:before { + content: $ti-icon-devices-star; +} +.#{$ti-prefix}-devices-up:before { + content: $ti-icon-devices-up; +} +.#{$ti-prefix}-devices-x:before { + content: $ti-icon-devices-x; +} +.#{$ti-prefix}-diabolo:before { + content: $ti-icon-diabolo; +} +.#{$ti-prefix}-diabolo-off:before { + content: $ti-icon-diabolo-off; +} +.#{$ti-prefix}-diabolo-plus:before { + content: $ti-icon-diabolo-plus; +} +.#{$ti-prefix}-dialpad:before { + content: $ti-icon-dialpad; +} +.#{$ti-prefix}-dialpad-filled:before { + content: $ti-icon-dialpad-filled; +} +.#{$ti-prefix}-dialpad-off:before { + content: $ti-icon-dialpad-off; +} +.#{$ti-prefix}-diamond:before { + content: $ti-icon-diamond; +} +.#{$ti-prefix}-diamond-filled:before { + content: $ti-icon-diamond-filled; +} +.#{$ti-prefix}-diamond-off:before { + content: $ti-icon-diamond-off; +} +.#{$ti-prefix}-diamonds:before { + content: $ti-icon-diamonds; +} +.#{$ti-prefix}-diamonds-filled:before { + content: $ti-icon-diamonds-filled; +} +.#{$ti-prefix}-dice:before { + content: $ti-icon-dice; +} +.#{$ti-prefix}-dice-1:before { + content: $ti-icon-dice-1; +} +.#{$ti-prefix}-dice-1-filled:before { + content: $ti-icon-dice-1-filled; +} +.#{$ti-prefix}-dice-2:before { + content: $ti-icon-dice-2; +} +.#{$ti-prefix}-dice-2-filled:before { + content: $ti-icon-dice-2-filled; +} +.#{$ti-prefix}-dice-3:before { + content: $ti-icon-dice-3; +} +.#{$ti-prefix}-dice-3-filled:before { + content: $ti-icon-dice-3-filled; +} +.#{$ti-prefix}-dice-4:before { + content: $ti-icon-dice-4; +} +.#{$ti-prefix}-dice-4-filled:before { + content: $ti-icon-dice-4-filled; +} +.#{$ti-prefix}-dice-5:before { + content: $ti-icon-dice-5; +} +.#{$ti-prefix}-dice-5-filled:before { + content: $ti-icon-dice-5-filled; +} +.#{$ti-prefix}-dice-6:before { + content: $ti-icon-dice-6; +} +.#{$ti-prefix}-dice-6-filled:before { + content: $ti-icon-dice-6-filled; +} +.#{$ti-prefix}-dice-filled:before { + content: $ti-icon-dice-filled; +} +.#{$ti-prefix}-dimensions:before { + content: $ti-icon-dimensions; +} +.#{$ti-prefix}-direction:before { + content: $ti-icon-direction; +} +.#{$ti-prefix}-direction-arrows:before { + content: $ti-icon-direction-arrows; +} +.#{$ti-prefix}-direction-horizontal:before { + content: $ti-icon-direction-horizontal; +} +.#{$ti-prefix}-direction-sign:before { + content: $ti-icon-direction-sign; +} +.#{$ti-prefix}-direction-sign-filled:before { + content: $ti-icon-direction-sign-filled; +} +.#{$ti-prefix}-direction-sign-off:before { + content: $ti-icon-direction-sign-off; +} +.#{$ti-prefix}-directions:before { + content: $ti-icon-directions; +} +.#{$ti-prefix}-directions-off:before { + content: $ti-icon-directions-off; +} +.#{$ti-prefix}-disabled:before { + content: $ti-icon-disabled; +} +.#{$ti-prefix}-disabled-2:before { + content: $ti-icon-disabled-2; +} +.#{$ti-prefix}-disabled-off:before { + content: $ti-icon-disabled-off; +} +.#{$ti-prefix}-disc:before { + content: $ti-icon-disc; +} +.#{$ti-prefix}-disc-golf:before { + content: $ti-icon-disc-golf; +} +.#{$ti-prefix}-disc-off:before { + content: $ti-icon-disc-off; +} +.#{$ti-prefix}-discount:before { + content: $ti-icon-discount; +} +.#{$ti-prefix}-discount-off:before { + content: $ti-icon-discount-off; +} +.#{$ti-prefix}-divide:before { + content: $ti-icon-divide; +} +.#{$ti-prefix}-dna:before { + content: $ti-icon-dna; +} +.#{$ti-prefix}-dna-2:before { + content: $ti-icon-dna-2; +} +.#{$ti-prefix}-dna-2-off:before { + content: $ti-icon-dna-2-off; +} +.#{$ti-prefix}-dna-off:before { + content: $ti-icon-dna-off; +} +.#{$ti-prefix}-dog:before { + content: $ti-icon-dog; +} +.#{$ti-prefix}-dog-bowl:before { + content: $ti-icon-dog-bowl; +} +.#{$ti-prefix}-door:before { + content: $ti-icon-door; +} +.#{$ti-prefix}-door-enter:before { + content: $ti-icon-door-enter; +} +.#{$ti-prefix}-door-exit:before { + content: $ti-icon-door-exit; +} +.#{$ti-prefix}-door-off:before { + content: $ti-icon-door-off; +} +.#{$ti-prefix}-dots:before { + content: $ti-icon-dots; +} +.#{$ti-prefix}-dots-circle-horizontal:before { + content: $ti-icon-dots-circle-horizontal; +} +.#{$ti-prefix}-dots-diagonal:before { + content: $ti-icon-dots-diagonal; +} +.#{$ti-prefix}-dots-diagonal-2:before { + content: $ti-icon-dots-diagonal-2; +} +.#{$ti-prefix}-dots-vertical:before { + content: $ti-icon-dots-vertical; +} +.#{$ti-prefix}-download:before { + content: $ti-icon-download; +} +.#{$ti-prefix}-download-off:before { + content: $ti-icon-download-off; +} +.#{$ti-prefix}-drag-drop:before { + content: $ti-icon-drag-drop; +} +.#{$ti-prefix}-drag-drop-2:before { + content: $ti-icon-drag-drop-2; +} +.#{$ti-prefix}-drone:before { + content: $ti-icon-drone; +} +.#{$ti-prefix}-drone-off:before { + content: $ti-icon-drone-off; +} +.#{$ti-prefix}-drop-circle:before { + content: $ti-icon-drop-circle; +} +.#{$ti-prefix}-droplet:before { + content: $ti-icon-droplet; +} +.#{$ti-prefix}-droplet-bolt:before { + content: $ti-icon-droplet-bolt; +} +.#{$ti-prefix}-droplet-cancel:before { + content: $ti-icon-droplet-cancel; +} +.#{$ti-prefix}-droplet-check:before { + content: $ti-icon-droplet-check; +} +.#{$ti-prefix}-droplet-code:before { + content: $ti-icon-droplet-code; +} +.#{$ti-prefix}-droplet-cog:before { + content: $ti-icon-droplet-cog; +} +.#{$ti-prefix}-droplet-dollar:before { + content: $ti-icon-droplet-dollar; +} +.#{$ti-prefix}-droplet-down:before { + content: $ti-icon-droplet-down; +} +.#{$ti-prefix}-droplet-exclamation:before { + content: $ti-icon-droplet-exclamation; +} +.#{$ti-prefix}-droplet-filled:before { + content: $ti-icon-droplet-filled; +} +.#{$ti-prefix}-droplet-half:before { + content: $ti-icon-droplet-half; +} +.#{$ti-prefix}-droplet-half-2:before { + content: $ti-icon-droplet-half-2; +} +.#{$ti-prefix}-droplet-half-2-filled:before { + content: $ti-icon-droplet-half-2-filled; +} +.#{$ti-prefix}-droplet-half-filled:before { + content: $ti-icon-droplet-half-filled; +} +.#{$ti-prefix}-droplet-heart:before { + content: $ti-icon-droplet-heart; +} +.#{$ti-prefix}-droplet-minus:before { + content: $ti-icon-droplet-minus; +} +.#{$ti-prefix}-droplet-off:before { + content: $ti-icon-droplet-off; +} +.#{$ti-prefix}-droplet-pause:before { + content: $ti-icon-droplet-pause; +} +.#{$ti-prefix}-droplet-pin:before { + content: $ti-icon-droplet-pin; +} +.#{$ti-prefix}-droplet-plus:before { + content: $ti-icon-droplet-plus; +} +.#{$ti-prefix}-droplet-question:before { + content: $ti-icon-droplet-question; +} +.#{$ti-prefix}-droplet-search:before { + content: $ti-icon-droplet-search; +} +.#{$ti-prefix}-droplet-share:before { + content: $ti-icon-droplet-share; +} +.#{$ti-prefix}-droplet-star:before { + content: $ti-icon-droplet-star; +} +.#{$ti-prefix}-droplet-up:before { + content: $ti-icon-droplet-up; +} +.#{$ti-prefix}-droplet-x:before { + content: $ti-icon-droplet-x; +} +.#{$ti-prefix}-droplets:before { + content: $ti-icon-droplets; +} +.#{$ti-prefix}-dual-screen:before { + content: $ti-icon-dual-screen; +} +.#{$ti-prefix}-dumpling:before { + content: $ti-icon-dumpling; +} +.#{$ti-prefix}-e-passport:before { + content: $ti-icon-e-passport; +} +.#{$ti-prefix}-ear:before { + content: $ti-icon-ear; +} +.#{$ti-prefix}-ear-off:before { + content: $ti-icon-ear-off; +} +.#{$ti-prefix}-ear-scan:before { + content: $ti-icon-ear-scan; +} +.#{$ti-prefix}-ease-in:before { + content: $ti-icon-ease-in; +} +.#{$ti-prefix}-ease-in-control-point:before { + content: $ti-icon-ease-in-control-point; +} +.#{$ti-prefix}-ease-in-out:before { + content: $ti-icon-ease-in-out; +} +.#{$ti-prefix}-ease-in-out-control-points:before { + content: $ti-icon-ease-in-out-control-points; +} +.#{$ti-prefix}-ease-out:before { + content: $ti-icon-ease-out; +} +.#{$ti-prefix}-ease-out-control-point:before { + content: $ti-icon-ease-out-control-point; +} +.#{$ti-prefix}-edit:before { + content: $ti-icon-edit; +} +.#{$ti-prefix}-edit-circle:before { + content: $ti-icon-edit-circle; +} +.#{$ti-prefix}-edit-circle-off:before { + content: $ti-icon-edit-circle-off; +} +.#{$ti-prefix}-edit-off:before { + content: $ti-icon-edit-off; +} +.#{$ti-prefix}-egg:before { + content: $ti-icon-egg; +} +.#{$ti-prefix}-egg-cracked:before { + content: $ti-icon-egg-cracked; +} +.#{$ti-prefix}-egg-filled:before { + content: $ti-icon-egg-filled; +} +.#{$ti-prefix}-egg-fried:before { + content: $ti-icon-egg-fried; +} +.#{$ti-prefix}-egg-off:before { + content: $ti-icon-egg-off; +} +.#{$ti-prefix}-eggs:before { + content: $ti-icon-eggs; +} +.#{$ti-prefix}-elevator:before { + content: $ti-icon-elevator; +} +.#{$ti-prefix}-elevator-off:before { + content: $ti-icon-elevator-off; +} +.#{$ti-prefix}-emergency-bed:before { + content: $ti-icon-emergency-bed; +} +.#{$ti-prefix}-empathize:before { + content: $ti-icon-empathize; +} +.#{$ti-prefix}-empathize-off:before { + content: $ti-icon-empathize-off; +} +.#{$ti-prefix}-emphasis:before { + content: $ti-icon-emphasis; +} +.#{$ti-prefix}-engine:before { + content: $ti-icon-engine; +} +.#{$ti-prefix}-engine-off:before { + content: $ti-icon-engine-off; +} +.#{$ti-prefix}-equal:before { + content: $ti-icon-equal; +} +.#{$ti-prefix}-equal-double:before { + content: $ti-icon-equal-double; +} +.#{$ti-prefix}-equal-not:before { + content: $ti-icon-equal-not; +} +.#{$ti-prefix}-eraser:before { + content: $ti-icon-eraser; +} +.#{$ti-prefix}-eraser-off:before { + content: $ti-icon-eraser-off; +} +.#{$ti-prefix}-error-404:before { + content: $ti-icon-error-404; +} +.#{$ti-prefix}-error-404-off:before { + content: $ti-icon-error-404-off; +} +.#{$ti-prefix}-escalator:before { + content: $ti-icon-escalator; +} +.#{$ti-prefix}-escalator-down:before { + content: $ti-icon-escalator-down; +} +.#{$ti-prefix}-escalator-up:before { + content: $ti-icon-escalator-up; +} +.#{$ti-prefix}-exchange:before { + content: $ti-icon-exchange; +} +.#{$ti-prefix}-exchange-off:before { + content: $ti-icon-exchange-off; +} +.#{$ti-prefix}-exclamation-circle:before { + content: $ti-icon-exclamation-circle; +} +.#{$ti-prefix}-exclamation-mark:before { + content: $ti-icon-exclamation-mark; +} +.#{$ti-prefix}-exclamation-mark-off:before { + content: $ti-icon-exclamation-mark-off; +} +.#{$ti-prefix}-explicit:before { + content: $ti-icon-explicit; +} +.#{$ti-prefix}-explicit-off:before { + content: $ti-icon-explicit-off; +} +.#{$ti-prefix}-exposure:before { + content: $ti-icon-exposure; +} +.#{$ti-prefix}-exposure-0:before { + content: $ti-icon-exposure-0; +} +.#{$ti-prefix}-exposure-minus-1:before { + content: $ti-icon-exposure-minus-1; +} +.#{$ti-prefix}-exposure-minus-2:before { + content: $ti-icon-exposure-minus-2; +} +.#{$ti-prefix}-exposure-off:before { + content: $ti-icon-exposure-off; +} +.#{$ti-prefix}-exposure-plus-1:before { + content: $ti-icon-exposure-plus-1; +} +.#{$ti-prefix}-exposure-plus-2:before { + content: $ti-icon-exposure-plus-2; +} +.#{$ti-prefix}-external-link:before { + content: $ti-icon-external-link; +} +.#{$ti-prefix}-external-link-off:before { + content: $ti-icon-external-link-off; +} +.#{$ti-prefix}-eye:before { + content: $ti-icon-eye; +} +.#{$ti-prefix}-eye-bolt:before { + content: $ti-icon-eye-bolt; +} +.#{$ti-prefix}-eye-cancel:before { + content: $ti-icon-eye-cancel; +} +.#{$ti-prefix}-eye-check:before { + content: $ti-icon-eye-check; +} +.#{$ti-prefix}-eye-closed:before { + content: $ti-icon-eye-closed; +} +.#{$ti-prefix}-eye-code:before { + content: $ti-icon-eye-code; +} +.#{$ti-prefix}-eye-cog:before { + content: $ti-icon-eye-cog; +} +.#{$ti-prefix}-eye-discount:before { + content: $ti-icon-eye-discount; +} +.#{$ti-prefix}-eye-dollar:before { + content: $ti-icon-eye-dollar; +} +.#{$ti-prefix}-eye-dotted:before { + content: $ti-icon-eye-dotted; +} +.#{$ti-prefix}-eye-down:before { + content: $ti-icon-eye-down; +} +.#{$ti-prefix}-eye-edit:before { + content: $ti-icon-eye-edit; +} +.#{$ti-prefix}-eye-exclamation:before { + content: $ti-icon-eye-exclamation; +} +.#{$ti-prefix}-eye-filled:before { + content: $ti-icon-eye-filled; +} +.#{$ti-prefix}-eye-heart:before { + content: $ti-icon-eye-heart; +} +.#{$ti-prefix}-eye-minus:before { + content: $ti-icon-eye-minus; +} +.#{$ti-prefix}-eye-off:before { + content: $ti-icon-eye-off; +} +.#{$ti-prefix}-eye-pause:before { + content: $ti-icon-eye-pause; +} +.#{$ti-prefix}-eye-pin:before { + content: $ti-icon-eye-pin; +} +.#{$ti-prefix}-eye-plus:before { + content: $ti-icon-eye-plus; +} +.#{$ti-prefix}-eye-question:before { + content: $ti-icon-eye-question; +} +.#{$ti-prefix}-eye-search:before { + content: $ti-icon-eye-search; +} +.#{$ti-prefix}-eye-share:before { + content: $ti-icon-eye-share; +} +.#{$ti-prefix}-eye-star:before { + content: $ti-icon-eye-star; +} +.#{$ti-prefix}-eye-table:before { + content: $ti-icon-eye-table; +} +.#{$ti-prefix}-eye-up:before { + content: $ti-icon-eye-up; +} +.#{$ti-prefix}-eye-x:before { + content: $ti-icon-eye-x; +} +.#{$ti-prefix}-eyeglass:before { + content: $ti-icon-eyeglass; +} +.#{$ti-prefix}-eyeglass-2:before { + content: $ti-icon-eyeglass-2; +} +.#{$ti-prefix}-eyeglass-off:before { + content: $ti-icon-eyeglass-off; +} +.#{$ti-prefix}-face-id:before { + content: $ti-icon-face-id; +} +.#{$ti-prefix}-face-id-error:before { + content: $ti-icon-face-id-error; +} +.#{$ti-prefix}-face-mask:before { + content: $ti-icon-face-mask; +} +.#{$ti-prefix}-face-mask-off:before { + content: $ti-icon-face-mask-off; +} +.#{$ti-prefix}-fall:before { + content: $ti-icon-fall; +} +.#{$ti-prefix}-favicon:before { + content: $ti-icon-favicon; +} +.#{$ti-prefix}-feather:before { + content: $ti-icon-feather; +} +.#{$ti-prefix}-feather-off:before { + content: $ti-icon-feather-off; +} +.#{$ti-prefix}-fence:before { + content: $ti-icon-fence; +} +.#{$ti-prefix}-fence-off:before { + content: $ti-icon-fence-off; +} +.#{$ti-prefix}-fidget-spinner:before { + content: $ti-icon-fidget-spinner; +} +.#{$ti-prefix}-file:before { + content: $ti-icon-file; +} +.#{$ti-prefix}-file-3d:before { + content: $ti-icon-file-3d; +} +.#{$ti-prefix}-file-alert:before { + content: $ti-icon-file-alert; +} +.#{$ti-prefix}-file-analytics:before { + content: $ti-icon-file-analytics; +} +.#{$ti-prefix}-file-arrow-left:before { + content: $ti-icon-file-arrow-left; +} +.#{$ti-prefix}-file-arrow-right:before { + content: $ti-icon-file-arrow-right; +} +.#{$ti-prefix}-file-barcode:before { + content: $ti-icon-file-barcode; +} +.#{$ti-prefix}-file-broken:before { + content: $ti-icon-file-broken; +} +.#{$ti-prefix}-file-certificate:before { + content: $ti-icon-file-certificate; +} +.#{$ti-prefix}-file-chart:before { + content: $ti-icon-file-chart; +} +.#{$ti-prefix}-file-check:before { + content: $ti-icon-file-check; +} +.#{$ti-prefix}-file-code:before { + content: $ti-icon-file-code; +} +.#{$ti-prefix}-file-code-2:before { + content: $ti-icon-file-code-2; +} +.#{$ti-prefix}-file-cv:before { + content: $ti-icon-file-cv; +} +.#{$ti-prefix}-file-database:before { + content: $ti-icon-file-database; +} +.#{$ti-prefix}-file-delta:before { + content: $ti-icon-file-delta; +} +.#{$ti-prefix}-file-description:before { + content: $ti-icon-file-description; +} +.#{$ti-prefix}-file-diff:before { + content: $ti-icon-file-diff; +} +.#{$ti-prefix}-file-digit:before { + content: $ti-icon-file-digit; +} +.#{$ti-prefix}-file-dislike:before { + content: $ti-icon-file-dislike; +} +.#{$ti-prefix}-file-dollar:before { + content: $ti-icon-file-dollar; +} +.#{$ti-prefix}-file-dots:before { + content: $ti-icon-file-dots; +} +.#{$ti-prefix}-file-download:before { + content: $ti-icon-file-download; +} +.#{$ti-prefix}-file-euro:before { + content: $ti-icon-file-euro; +} +.#{$ti-prefix}-file-export:before { + content: $ti-icon-file-export; +} +.#{$ti-prefix}-file-filled:before { + content: $ti-icon-file-filled; +} +.#{$ti-prefix}-file-function:before { + content: $ti-icon-file-function; +} +.#{$ti-prefix}-file-horizontal:before { + content: $ti-icon-file-horizontal; +} +.#{$ti-prefix}-file-import:before { + content: $ti-icon-file-import; +} +.#{$ti-prefix}-file-infinity:before { + content: $ti-icon-file-infinity; +} +.#{$ti-prefix}-file-info:before { + content: $ti-icon-file-info; +} +.#{$ti-prefix}-file-invoice:before { + content: $ti-icon-file-invoice; +} +.#{$ti-prefix}-file-isr:before { + content: $ti-icon-file-isr; +} +.#{$ti-prefix}-file-lambda:before { + content: $ti-icon-file-lambda; +} +.#{$ti-prefix}-file-like:before { + content: $ti-icon-file-like; +} +.#{$ti-prefix}-file-minus:before { + content: $ti-icon-file-minus; +} +.#{$ti-prefix}-file-music:before { + content: $ti-icon-file-music; +} +.#{$ti-prefix}-file-neutral:before { + content: $ti-icon-file-neutral; +} +.#{$ti-prefix}-file-off:before { + content: $ti-icon-file-off; +} +.#{$ti-prefix}-file-orientation:before { + content: $ti-icon-file-orientation; +} +.#{$ti-prefix}-file-pencil:before { + content: $ti-icon-file-pencil; +} +.#{$ti-prefix}-file-percent:before { + content: $ti-icon-file-percent; +} +.#{$ti-prefix}-file-phone:before { + content: $ti-icon-file-phone; +} +.#{$ti-prefix}-file-plus:before { + content: $ti-icon-file-plus; +} +.#{$ti-prefix}-file-power:before { + content: $ti-icon-file-power; +} +.#{$ti-prefix}-file-report:before { + content: $ti-icon-file-report; +} +.#{$ti-prefix}-file-rss:before { + content: $ti-icon-file-rss; +} +.#{$ti-prefix}-file-sad:before { + content: $ti-icon-file-sad; +} +.#{$ti-prefix}-file-scissors:before { + content: $ti-icon-file-scissors; +} +.#{$ti-prefix}-file-search:before { + content: $ti-icon-file-search; +} +.#{$ti-prefix}-file-settings:before { + content: $ti-icon-file-settings; +} +.#{$ti-prefix}-file-shredder:before { + content: $ti-icon-file-shredder; +} +.#{$ti-prefix}-file-signal:before { + content: $ti-icon-file-signal; +} +.#{$ti-prefix}-file-smile:before { + content: $ti-icon-file-smile; +} +.#{$ti-prefix}-file-spreadsheet:before { + content: $ti-icon-file-spreadsheet; +} +.#{$ti-prefix}-file-stack:before { + content: $ti-icon-file-stack; +} +.#{$ti-prefix}-file-star:before { + content: $ti-icon-file-star; +} +.#{$ti-prefix}-file-symlink:before { + content: $ti-icon-file-symlink; +} +.#{$ti-prefix}-file-text:before { + content: $ti-icon-file-text; +} +.#{$ti-prefix}-file-text-ai:before { + content: $ti-icon-file-text-ai; +} +.#{$ti-prefix}-file-time:before { + content: $ti-icon-file-time; +} +.#{$ti-prefix}-file-type-bmp:before { + content: $ti-icon-file-type-bmp; +} +.#{$ti-prefix}-file-type-css:before { + content: $ti-icon-file-type-css; +} +.#{$ti-prefix}-file-type-csv:before { + content: $ti-icon-file-type-csv; +} +.#{$ti-prefix}-file-type-doc:before { + content: $ti-icon-file-type-doc; +} +.#{$ti-prefix}-file-type-docx:before { + content: $ti-icon-file-type-docx; +} +.#{$ti-prefix}-file-type-html:before { + content: $ti-icon-file-type-html; +} +.#{$ti-prefix}-file-type-jpg:before { + content: $ti-icon-file-type-jpg; +} +.#{$ti-prefix}-file-type-js:before { + content: $ti-icon-file-type-js; +} +.#{$ti-prefix}-file-type-jsx:before { + content: $ti-icon-file-type-jsx; +} +.#{$ti-prefix}-file-type-pdf:before { + content: $ti-icon-file-type-pdf; +} +.#{$ti-prefix}-file-type-php:before { + content: $ti-icon-file-type-php; +} +.#{$ti-prefix}-file-type-png:before { + content: $ti-icon-file-type-png; +} +.#{$ti-prefix}-file-type-ppt:before { + content: $ti-icon-file-type-ppt; +} +.#{$ti-prefix}-file-type-rs:before { + content: $ti-icon-file-type-rs; +} +.#{$ti-prefix}-file-type-sql:before { + content: $ti-icon-file-type-sql; +} +.#{$ti-prefix}-file-type-svg:before { + content: $ti-icon-file-type-svg; +} +.#{$ti-prefix}-file-type-ts:before { + content: $ti-icon-file-type-ts; +} +.#{$ti-prefix}-file-type-tsx:before { + content: $ti-icon-file-type-tsx; +} +.#{$ti-prefix}-file-type-txt:before { + content: $ti-icon-file-type-txt; +} +.#{$ti-prefix}-file-type-vue:before { + content: $ti-icon-file-type-vue; +} +.#{$ti-prefix}-file-type-xls:before { + content: $ti-icon-file-type-xls; +} +.#{$ti-prefix}-file-type-xml:before { + content: $ti-icon-file-type-xml; +} +.#{$ti-prefix}-file-type-zip:before { + content: $ti-icon-file-type-zip; +} +.#{$ti-prefix}-file-typography:before { + content: $ti-icon-file-typography; +} +.#{$ti-prefix}-file-unknown:before { + content: $ti-icon-file-unknown; +} +.#{$ti-prefix}-file-upload:before { + content: $ti-icon-file-upload; +} +.#{$ti-prefix}-file-vector:before { + content: $ti-icon-file-vector; +} +.#{$ti-prefix}-file-x:before { + content: $ti-icon-file-x; +} +.#{$ti-prefix}-file-x-filled:before { + content: $ti-icon-file-x-filled; +} +.#{$ti-prefix}-file-zip:before { + content: $ti-icon-file-zip; +} +.#{$ti-prefix}-files:before { + content: $ti-icon-files; +} +.#{$ti-prefix}-files-off:before { + content: $ti-icon-files-off; +} +.#{$ti-prefix}-filter:before { + content: $ti-icon-filter; +} +.#{$ti-prefix}-filter-bolt:before { + content: $ti-icon-filter-bolt; +} +.#{$ti-prefix}-filter-cancel:before { + content: $ti-icon-filter-cancel; +} +.#{$ti-prefix}-filter-check:before { + content: $ti-icon-filter-check; +} +.#{$ti-prefix}-filter-code:before { + content: $ti-icon-filter-code; +} +.#{$ti-prefix}-filter-cog:before { + content: $ti-icon-filter-cog; +} +.#{$ti-prefix}-filter-discount:before { + content: $ti-icon-filter-discount; +} +.#{$ti-prefix}-filter-dollar:before { + content: $ti-icon-filter-dollar; +} +.#{$ti-prefix}-filter-down:before { + content: $ti-icon-filter-down; +} +.#{$ti-prefix}-filter-edit:before { + content: $ti-icon-filter-edit; +} +.#{$ti-prefix}-filter-exclamation:before { + content: $ti-icon-filter-exclamation; +} +.#{$ti-prefix}-filter-filled:before { + content: $ti-icon-filter-filled; +} +.#{$ti-prefix}-filter-heart:before { + content: $ti-icon-filter-heart; +} +.#{$ti-prefix}-filter-minus:before { + content: $ti-icon-filter-minus; +} +.#{$ti-prefix}-filter-off:before { + content: $ti-icon-filter-off; +} +.#{$ti-prefix}-filter-pause:before { + content: $ti-icon-filter-pause; +} +.#{$ti-prefix}-filter-pin:before { + content: $ti-icon-filter-pin; +} +.#{$ti-prefix}-filter-plus:before { + content: $ti-icon-filter-plus; +} +.#{$ti-prefix}-filter-question:before { + content: $ti-icon-filter-question; +} +.#{$ti-prefix}-filter-search:before { + content: $ti-icon-filter-search; +} +.#{$ti-prefix}-filter-share:before { + content: $ti-icon-filter-share; +} +.#{$ti-prefix}-filter-star:before { + content: $ti-icon-filter-star; +} +.#{$ti-prefix}-filter-up:before { + content: $ti-icon-filter-up; +} +.#{$ti-prefix}-filter-x:before { + content: $ti-icon-filter-x; +} +.#{$ti-prefix}-filters:before { + content: $ti-icon-filters; +} +.#{$ti-prefix}-fingerprint:before { + content: $ti-icon-fingerprint; +} +.#{$ti-prefix}-fingerprint-off:before { + content: $ti-icon-fingerprint-off; +} +.#{$ti-prefix}-fingerprint-scan:before { + content: $ti-icon-fingerprint-scan; +} +.#{$ti-prefix}-fire-extinguisher:before { + content: $ti-icon-fire-extinguisher; +} +.#{$ti-prefix}-fire-hydrant:before { + content: $ti-icon-fire-hydrant; +} +.#{$ti-prefix}-fire-hydrant-off:before { + content: $ti-icon-fire-hydrant-off; +} +.#{$ti-prefix}-firetruck:before { + content: $ti-icon-firetruck; +} +.#{$ti-prefix}-first-aid-kit:before { + content: $ti-icon-first-aid-kit; +} +.#{$ti-prefix}-first-aid-kit-off:before { + content: $ti-icon-first-aid-kit-off; +} +.#{$ti-prefix}-fish:before { + content: $ti-icon-fish; +} +.#{$ti-prefix}-fish-bone:before { + content: $ti-icon-fish-bone; +} +.#{$ti-prefix}-fish-christianity:before { + content: $ti-icon-fish-christianity; +} +.#{$ti-prefix}-fish-hook:before { + content: $ti-icon-fish-hook; +} +.#{$ti-prefix}-fish-hook-off:before { + content: $ti-icon-fish-hook-off; +} +.#{$ti-prefix}-fish-off:before { + content: $ti-icon-fish-off; +} +.#{$ti-prefix}-flag:before { + content: $ti-icon-flag; +} +.#{$ti-prefix}-flag-2:before { + content: $ti-icon-flag-2; +} +.#{$ti-prefix}-flag-2-filled:before { + content: $ti-icon-flag-2-filled; +} +.#{$ti-prefix}-flag-2-off:before { + content: $ti-icon-flag-2-off; +} +.#{$ti-prefix}-flag-3:before { + content: $ti-icon-flag-3; +} +.#{$ti-prefix}-flag-3-filled:before { + content: $ti-icon-flag-3-filled; +} +.#{$ti-prefix}-flag-bolt:before { + content: $ti-icon-flag-bolt; +} +.#{$ti-prefix}-flag-cancel:before { + content: $ti-icon-flag-cancel; +} +.#{$ti-prefix}-flag-check:before { + content: $ti-icon-flag-check; +} +.#{$ti-prefix}-flag-code:before { + content: $ti-icon-flag-code; +} +.#{$ti-prefix}-flag-cog:before { + content: $ti-icon-flag-cog; +} +.#{$ti-prefix}-flag-discount:before { + content: $ti-icon-flag-discount; +} +.#{$ti-prefix}-flag-dollar:before { + content: $ti-icon-flag-dollar; +} +.#{$ti-prefix}-flag-down:before { + content: $ti-icon-flag-down; +} +.#{$ti-prefix}-flag-exclamation:before { + content: $ti-icon-flag-exclamation; +} +.#{$ti-prefix}-flag-filled:before { + content: $ti-icon-flag-filled; +} +.#{$ti-prefix}-flag-heart:before { + content: $ti-icon-flag-heart; +} +.#{$ti-prefix}-flag-minus:before { + content: $ti-icon-flag-minus; +} +.#{$ti-prefix}-flag-off:before { + content: $ti-icon-flag-off; +} +.#{$ti-prefix}-flag-pause:before { + content: $ti-icon-flag-pause; +} +.#{$ti-prefix}-flag-pin:before { + content: $ti-icon-flag-pin; +} +.#{$ti-prefix}-flag-plus:before { + content: $ti-icon-flag-plus; +} +.#{$ti-prefix}-flag-question:before { + content: $ti-icon-flag-question; +} +.#{$ti-prefix}-flag-search:before { + content: $ti-icon-flag-search; +} +.#{$ti-prefix}-flag-share:before { + content: $ti-icon-flag-share; +} +.#{$ti-prefix}-flag-star:before { + content: $ti-icon-flag-star; +} +.#{$ti-prefix}-flag-up:before { + content: $ti-icon-flag-up; +} +.#{$ti-prefix}-flag-x:before { + content: $ti-icon-flag-x; +} +.#{$ti-prefix}-flame:before { + content: $ti-icon-flame; +} +.#{$ti-prefix}-flame-off:before { + content: $ti-icon-flame-off; +} +.#{$ti-prefix}-flare:before { + content: $ti-icon-flare; +} +.#{$ti-prefix}-flask:before { + content: $ti-icon-flask; +} +.#{$ti-prefix}-flask-2:before { + content: $ti-icon-flask-2; +} +.#{$ti-prefix}-flask-2-filled:before { + content: $ti-icon-flask-2-filled; +} +.#{$ti-prefix}-flask-2-off:before { + content: $ti-icon-flask-2-off; +} +.#{$ti-prefix}-flask-filled:before { + content: $ti-icon-flask-filled; +} +.#{$ti-prefix}-flask-off:before { + content: $ti-icon-flask-off; +} +.#{$ti-prefix}-flip-flops:before { + content: $ti-icon-flip-flops; +} +.#{$ti-prefix}-flip-horizontal:before { + content: $ti-icon-flip-horizontal; +} +.#{$ti-prefix}-flip-vertical:before { + content: $ti-icon-flip-vertical; +} +.#{$ti-prefix}-float-center:before { + content: $ti-icon-float-center; +} +.#{$ti-prefix}-float-left:before { + content: $ti-icon-float-left; +} +.#{$ti-prefix}-float-none:before { + content: $ti-icon-float-none; +} +.#{$ti-prefix}-float-right:before { + content: $ti-icon-float-right; +} +.#{$ti-prefix}-flower:before { + content: $ti-icon-flower; +} +.#{$ti-prefix}-flower-off:before { + content: $ti-icon-flower-off; +} +.#{$ti-prefix}-focus:before { + content: $ti-icon-focus; +} +.#{$ti-prefix}-focus-2:before { + content: $ti-icon-focus-2; +} +.#{$ti-prefix}-focus-auto:before { + content: $ti-icon-focus-auto; +} +.#{$ti-prefix}-focus-centered:before { + content: $ti-icon-focus-centered; +} +.#{$ti-prefix}-fold:before { + content: $ti-icon-fold; +} +.#{$ti-prefix}-fold-down:before { + content: $ti-icon-fold-down; +} +.#{$ti-prefix}-fold-up:before { + content: $ti-icon-fold-up; +} +.#{$ti-prefix}-folder:before { + content: $ti-icon-folder; +} +.#{$ti-prefix}-folder-bolt:before { + content: $ti-icon-folder-bolt; +} +.#{$ti-prefix}-folder-cancel:before { + content: $ti-icon-folder-cancel; +} +.#{$ti-prefix}-folder-check:before { + content: $ti-icon-folder-check; +} +.#{$ti-prefix}-folder-code:before { + content: $ti-icon-folder-code; +} +.#{$ti-prefix}-folder-cog:before { + content: $ti-icon-folder-cog; +} +.#{$ti-prefix}-folder-dollar:before { + content: $ti-icon-folder-dollar; +} +.#{$ti-prefix}-folder-down:before { + content: $ti-icon-folder-down; +} +.#{$ti-prefix}-folder-exclamation:before { + content: $ti-icon-folder-exclamation; +} +.#{$ti-prefix}-folder-filled:before { + content: $ti-icon-folder-filled; +} +.#{$ti-prefix}-folder-heart:before { + content: $ti-icon-folder-heart; +} +.#{$ti-prefix}-folder-minus:before { + content: $ti-icon-folder-minus; +} +.#{$ti-prefix}-folder-off:before { + content: $ti-icon-folder-off; +} +.#{$ti-prefix}-folder-open:before { + content: $ti-icon-folder-open; +} +.#{$ti-prefix}-folder-pause:before { + content: $ti-icon-folder-pause; +} +.#{$ti-prefix}-folder-pin:before { + content: $ti-icon-folder-pin; +} +.#{$ti-prefix}-folder-plus:before { + content: $ti-icon-folder-plus; +} +.#{$ti-prefix}-folder-question:before { + content: $ti-icon-folder-question; +} +.#{$ti-prefix}-folder-root:before { + content: $ti-icon-folder-root; +} +.#{$ti-prefix}-folder-search:before { + content: $ti-icon-folder-search; +} +.#{$ti-prefix}-folder-share:before { + content: $ti-icon-folder-share; +} +.#{$ti-prefix}-folder-star:before { + content: $ti-icon-folder-star; +} +.#{$ti-prefix}-folder-symlink:before { + content: $ti-icon-folder-symlink; +} +.#{$ti-prefix}-folder-up:before { + content: $ti-icon-folder-up; +} +.#{$ti-prefix}-folder-x:before { + content: $ti-icon-folder-x; +} +.#{$ti-prefix}-folders:before { + content: $ti-icon-folders; +} +.#{$ti-prefix}-folders-off:before { + content: $ti-icon-folders-off; +} +.#{$ti-prefix}-forbid:before { + content: $ti-icon-forbid; +} +.#{$ti-prefix}-forbid-2:before { + content: $ti-icon-forbid-2; +} +.#{$ti-prefix}-forbid-2-filled:before { + content: $ti-icon-forbid-2-filled; +} +.#{$ti-prefix}-forbid-filled:before { + content: $ti-icon-forbid-filled; +} +.#{$ti-prefix}-forklift:before { + content: $ti-icon-forklift; +} +.#{$ti-prefix}-forms:before { + content: $ti-icon-forms; +} +.#{$ti-prefix}-fountain:before { + content: $ti-icon-fountain; +} +.#{$ti-prefix}-fountain-filled:before { + content: $ti-icon-fountain-filled; +} +.#{$ti-prefix}-fountain-off:before { + content: $ti-icon-fountain-off; +} +.#{$ti-prefix}-frame:before { + content: $ti-icon-frame; +} +.#{$ti-prefix}-frame-off:before { + content: $ti-icon-frame-off; +} +.#{$ti-prefix}-free-rights:before { + content: $ti-icon-free-rights; +} +.#{$ti-prefix}-freeze-column:before { + content: $ti-icon-freeze-column; +} +.#{$ti-prefix}-freeze-row:before { + content: $ti-icon-freeze-row; +} +.#{$ti-prefix}-freeze-row-column:before { + content: $ti-icon-freeze-row-column; +} +.#{$ti-prefix}-fridge:before { + content: $ti-icon-fridge; +} +.#{$ti-prefix}-fridge-off:before { + content: $ti-icon-fridge-off; +} +.#{$ti-prefix}-friends:before { + content: $ti-icon-friends; +} +.#{$ti-prefix}-friends-off:before { + content: $ti-icon-friends-off; +} +.#{$ti-prefix}-frustum:before { + content: $ti-icon-frustum; +} +.#{$ti-prefix}-frustum-off:before { + content: $ti-icon-frustum-off; +} +.#{$ti-prefix}-frustum-plus:before { + content: $ti-icon-frustum-plus; +} +.#{$ti-prefix}-function:before { + content: $ti-icon-function; +} +.#{$ti-prefix}-function-filled:before { + content: $ti-icon-function-filled; +} +.#{$ti-prefix}-function-off:before { + content: $ti-icon-function-off; +} +.#{$ti-prefix}-galaxy:before { + content: $ti-icon-galaxy; +} +.#{$ti-prefix}-garden-cart:before { + content: $ti-icon-garden-cart; +} +.#{$ti-prefix}-garden-cart-off:before { + content: $ti-icon-garden-cart-off; +} +.#{$ti-prefix}-gas-station:before { + content: $ti-icon-gas-station; +} +.#{$ti-prefix}-gas-station-off:before { + content: $ti-icon-gas-station-off; +} +.#{$ti-prefix}-gauge:before { + content: $ti-icon-gauge; +} +.#{$ti-prefix}-gauge-filled:before { + content: $ti-icon-gauge-filled; +} +.#{$ti-prefix}-gauge-off:before { + content: $ti-icon-gauge-off; +} +.#{$ti-prefix}-gavel:before { + content: $ti-icon-gavel; +} +.#{$ti-prefix}-gender-agender:before { + content: $ti-icon-gender-agender; +} +.#{$ti-prefix}-gender-androgyne:before { + content: $ti-icon-gender-androgyne; +} +.#{$ti-prefix}-gender-bigender:before { + content: $ti-icon-gender-bigender; +} +.#{$ti-prefix}-gender-demiboy:before { + content: $ti-icon-gender-demiboy; +} +.#{$ti-prefix}-gender-demigirl:before { + content: $ti-icon-gender-demigirl; +} +.#{$ti-prefix}-gender-epicene:before { + content: $ti-icon-gender-epicene; +} +.#{$ti-prefix}-gender-female:before { + content: $ti-icon-gender-female; +} +.#{$ti-prefix}-gender-femme:before { + content: $ti-icon-gender-femme; +} +.#{$ti-prefix}-gender-genderfluid:before { + content: $ti-icon-gender-genderfluid; +} +.#{$ti-prefix}-gender-genderless:before { + content: $ti-icon-gender-genderless; +} +.#{$ti-prefix}-gender-genderqueer:before { + content: $ti-icon-gender-genderqueer; +} +.#{$ti-prefix}-gender-hermaphrodite:before { + content: $ti-icon-gender-hermaphrodite; +} +.#{$ti-prefix}-gender-intergender:before { + content: $ti-icon-gender-intergender; +} +.#{$ti-prefix}-gender-male:before { + content: $ti-icon-gender-male; +} +.#{$ti-prefix}-gender-neutrois:before { + content: $ti-icon-gender-neutrois; +} +.#{$ti-prefix}-gender-third:before { + content: $ti-icon-gender-third; +} +.#{$ti-prefix}-gender-transgender:before { + content: $ti-icon-gender-transgender; +} +.#{$ti-prefix}-gender-trasvesti:before { + content: $ti-icon-gender-trasvesti; +} +.#{$ti-prefix}-geometry:before { + content: $ti-icon-geometry; +} +.#{$ti-prefix}-ghost:before { + content: $ti-icon-ghost; +} +.#{$ti-prefix}-ghost-2:before { + content: $ti-icon-ghost-2; +} +.#{$ti-prefix}-ghost-2-filled:before { + content: $ti-icon-ghost-2-filled; +} +.#{$ti-prefix}-ghost-3:before { + content: $ti-icon-ghost-3; +} +.#{$ti-prefix}-ghost-filled:before { + content: $ti-icon-ghost-filled; +} +.#{$ti-prefix}-ghost-off:before { + content: $ti-icon-ghost-off; +} +.#{$ti-prefix}-gif:before { + content: $ti-icon-gif; +} +.#{$ti-prefix}-gift:before { + content: $ti-icon-gift; +} +.#{$ti-prefix}-gift-card:before { + content: $ti-icon-gift-card; +} +.#{$ti-prefix}-gift-card-filled:before { + content: $ti-icon-gift-card-filled; +} +.#{$ti-prefix}-gift-filled:before { + content: $ti-icon-gift-filled; +} +.#{$ti-prefix}-gift-off:before { + content: $ti-icon-gift-off; +} +.#{$ti-prefix}-git-branch:before { + content: $ti-icon-git-branch; +} +.#{$ti-prefix}-git-branch-deleted:before { + content: $ti-icon-git-branch-deleted; +} +.#{$ti-prefix}-git-cherry-pick:before { + content: $ti-icon-git-cherry-pick; +} +.#{$ti-prefix}-git-commit:before { + content: $ti-icon-git-commit; +} +.#{$ti-prefix}-git-compare:before { + content: $ti-icon-git-compare; +} +.#{$ti-prefix}-git-fork:before { + content: $ti-icon-git-fork; +} +.#{$ti-prefix}-git-merge:before { + content: $ti-icon-git-merge; +} +.#{$ti-prefix}-git-pull-request:before { + content: $ti-icon-git-pull-request; +} +.#{$ti-prefix}-git-pull-request-closed:before { + content: $ti-icon-git-pull-request-closed; +} +.#{$ti-prefix}-git-pull-request-draft:before { + content: $ti-icon-git-pull-request-draft; +} +.#{$ti-prefix}-gizmo:before { + content: $ti-icon-gizmo; +} +.#{$ti-prefix}-glass:before { + content: $ti-icon-glass; +} +.#{$ti-prefix}-glass-champagne:before { + content: $ti-icon-glass-champagne; +} +.#{$ti-prefix}-glass-cocktail:before { + content: $ti-icon-glass-cocktail; +} +.#{$ti-prefix}-glass-full:before { + content: $ti-icon-glass-full; +} +.#{$ti-prefix}-glass-full-filled:before { + content: $ti-icon-glass-full-filled; +} +.#{$ti-prefix}-glass-gin:before { + content: $ti-icon-glass-gin; +} +.#{$ti-prefix}-glass-off:before { + content: $ti-icon-glass-off; +} +.#{$ti-prefix}-globe:before { + content: $ti-icon-globe; +} +.#{$ti-prefix}-globe-filled:before { + content: $ti-icon-globe-filled; +} +.#{$ti-prefix}-globe-off:before { + content: $ti-icon-globe-off; +} +.#{$ti-prefix}-go-game:before { + content: $ti-icon-go-game; +} +.#{$ti-prefix}-golf:before { + content: $ti-icon-golf; +} +.#{$ti-prefix}-golf-off:before { + content: $ti-icon-golf-off; +} +.#{$ti-prefix}-gps:before { + content: $ti-icon-gps; +} +.#{$ti-prefix}-gps-filled:before { + content: $ti-icon-gps-filled; +} +.#{$ti-prefix}-gradienter:before { + content: $ti-icon-gradienter; +} +.#{$ti-prefix}-grain:before { + content: $ti-icon-grain; +} +.#{$ti-prefix}-graph:before { + content: $ti-icon-graph; +} +.#{$ti-prefix}-graph-filled:before { + content: $ti-icon-graph-filled; +} +.#{$ti-prefix}-graph-off:before { + content: $ti-icon-graph-off; +} +.#{$ti-prefix}-grave:before { + content: $ti-icon-grave; +} +.#{$ti-prefix}-grave-2:before { + content: $ti-icon-grave-2; +} +.#{$ti-prefix}-grid-3x3:before { + content: $ti-icon-grid-3x3; +} +.#{$ti-prefix}-grid-4x4:before { + content: $ti-icon-grid-4x4; +} +.#{$ti-prefix}-grid-dots:before { + content: $ti-icon-grid-dots; +} +.#{$ti-prefix}-grid-goldenratio:before { + content: $ti-icon-grid-goldenratio; +} +.#{$ti-prefix}-grid-pattern:before { + content: $ti-icon-grid-pattern; +} +.#{$ti-prefix}-grid-scan:before { + content: $ti-icon-grid-scan; +} +.#{$ti-prefix}-grill:before { + content: $ti-icon-grill; +} +.#{$ti-prefix}-grill-fork:before { + content: $ti-icon-grill-fork; +} +.#{$ti-prefix}-grill-off:before { + content: $ti-icon-grill-off; +} +.#{$ti-prefix}-grill-spatula:before { + content: $ti-icon-grill-spatula; +} +.#{$ti-prefix}-grip-horizontal:before { + content: $ti-icon-grip-horizontal; +} +.#{$ti-prefix}-grip-vertical:before { + content: $ti-icon-grip-vertical; +} +.#{$ti-prefix}-growth:before { + content: $ti-icon-growth; +} +.#{$ti-prefix}-guitar-pick:before { + content: $ti-icon-guitar-pick; +} +.#{$ti-prefix}-guitar-pick-filled:before { + content: $ti-icon-guitar-pick-filled; +} +.#{$ti-prefix}-gymnastics:before { + content: $ti-icon-gymnastics; +} +.#{$ti-prefix}-h-1:before { + content: $ti-icon-h-1; +} +.#{$ti-prefix}-h-2:before { + content: $ti-icon-h-2; +} +.#{$ti-prefix}-h-3:before { + content: $ti-icon-h-3; +} +.#{$ti-prefix}-h-4:before { + content: $ti-icon-h-4; +} +.#{$ti-prefix}-h-5:before { + content: $ti-icon-h-5; +} +.#{$ti-prefix}-h-6:before { + content: $ti-icon-h-6; +} +.#{$ti-prefix}-hammer:before { + content: $ti-icon-hammer; +} +.#{$ti-prefix}-hammer-off:before { + content: $ti-icon-hammer-off; +} +.#{$ti-prefix}-hand-click:before { + content: $ti-icon-hand-click; +} +.#{$ti-prefix}-hand-finger:before { + content: $ti-icon-hand-finger; +} +.#{$ti-prefix}-hand-finger-off:before { + content: $ti-icon-hand-finger-off; +} +.#{$ti-prefix}-hand-grab:before { + content: $ti-icon-hand-grab; +} +.#{$ti-prefix}-hand-little-finger:before { + content: $ti-icon-hand-little-finger; +} +.#{$ti-prefix}-hand-love-you:before { + content: $ti-icon-hand-love-you; +} +.#{$ti-prefix}-hand-middle-finger:before { + content: $ti-icon-hand-middle-finger; +} +.#{$ti-prefix}-hand-move:before { + content: $ti-icon-hand-move; +} +.#{$ti-prefix}-hand-off:before { + content: $ti-icon-hand-off; +} +.#{$ti-prefix}-hand-ring-finger:before { + content: $ti-icon-hand-ring-finger; +} +.#{$ti-prefix}-hand-sanitizer:before { + content: $ti-icon-hand-sanitizer; +} +.#{$ti-prefix}-hand-stop:before { + content: $ti-icon-hand-stop; +} +.#{$ti-prefix}-hand-three-fingers:before { + content: $ti-icon-hand-three-fingers; +} +.#{$ti-prefix}-hand-two-fingers:before { + content: $ti-icon-hand-two-fingers; +} +.#{$ti-prefix}-hanger:before { + content: $ti-icon-hanger; +} +.#{$ti-prefix}-hanger-2:before { + content: $ti-icon-hanger-2; +} +.#{$ti-prefix}-hanger-off:before { + content: $ti-icon-hanger-off; +} +.#{$ti-prefix}-hash:before { + content: $ti-icon-hash; +} +.#{$ti-prefix}-haze:before { + content: $ti-icon-haze; +} +.#{$ti-prefix}-haze-moon:before { + content: $ti-icon-haze-moon; +} +.#{$ti-prefix}-hdr:before { + content: $ti-icon-hdr; +} +.#{$ti-prefix}-heading:before { + content: $ti-icon-heading; +} +.#{$ti-prefix}-heading-off:before { + content: $ti-icon-heading-off; +} +.#{$ti-prefix}-headphones:before { + content: $ti-icon-headphones; +} +.#{$ti-prefix}-headphones-filled:before { + content: $ti-icon-headphones-filled; +} +.#{$ti-prefix}-headphones-off:before { + content: $ti-icon-headphones-off; +} +.#{$ti-prefix}-headset:before { + content: $ti-icon-headset; +} +.#{$ti-prefix}-headset-off:before { + content: $ti-icon-headset-off; +} +.#{$ti-prefix}-health-recognition:before { + content: $ti-icon-health-recognition; +} +.#{$ti-prefix}-heart:before { + content: $ti-icon-heart; +} +.#{$ti-prefix}-heart-bolt:before { + content: $ti-icon-heart-bolt; +} +.#{$ti-prefix}-heart-broken:before { + content: $ti-icon-heart-broken; +} +.#{$ti-prefix}-heart-cancel:before { + content: $ti-icon-heart-cancel; +} +.#{$ti-prefix}-heart-check:before { + content: $ti-icon-heart-check; +} +.#{$ti-prefix}-heart-code:before { + content: $ti-icon-heart-code; +} +.#{$ti-prefix}-heart-cog:before { + content: $ti-icon-heart-cog; +} +.#{$ti-prefix}-heart-discount:before { + content: $ti-icon-heart-discount; +} +.#{$ti-prefix}-heart-dollar:before { + content: $ti-icon-heart-dollar; +} +.#{$ti-prefix}-heart-down:before { + content: $ti-icon-heart-down; +} +.#{$ti-prefix}-heart-exclamation:before { + content: $ti-icon-heart-exclamation; +} +.#{$ti-prefix}-heart-filled:before { + content: $ti-icon-heart-filled; +} +.#{$ti-prefix}-heart-handshake:before { + content: $ti-icon-heart-handshake; +} +.#{$ti-prefix}-heart-minus:before { + content: $ti-icon-heart-minus; +} +.#{$ti-prefix}-heart-off:before { + content: $ti-icon-heart-off; +} +.#{$ti-prefix}-heart-pause:before { + content: $ti-icon-heart-pause; +} +.#{$ti-prefix}-heart-pin:before { + content: $ti-icon-heart-pin; +} +.#{$ti-prefix}-heart-plus:before { + content: $ti-icon-heart-plus; +} +.#{$ti-prefix}-heart-question:before { + content: $ti-icon-heart-question; +} +.#{$ti-prefix}-heart-rate-monitor:before { + content: $ti-icon-heart-rate-monitor; +} +.#{$ti-prefix}-heart-search:before { + content: $ti-icon-heart-search; +} +.#{$ti-prefix}-heart-share:before { + content: $ti-icon-heart-share; +} +.#{$ti-prefix}-heart-star:before { + content: $ti-icon-heart-star; +} +.#{$ti-prefix}-heart-up:before { + content: $ti-icon-heart-up; +} +.#{$ti-prefix}-heart-x:before { + content: $ti-icon-heart-x; +} +.#{$ti-prefix}-heartbeat:before { + content: $ti-icon-heartbeat; +} +.#{$ti-prefix}-hearts:before { + content: $ti-icon-hearts; +} +.#{$ti-prefix}-hearts-off:before { + content: $ti-icon-hearts-off; +} +.#{$ti-prefix}-helicopter:before { + content: $ti-icon-helicopter; +} +.#{$ti-prefix}-helicopter-landing:before { + content: $ti-icon-helicopter-landing; +} +.#{$ti-prefix}-helmet:before { + content: $ti-icon-helmet; +} +.#{$ti-prefix}-helmet-off:before { + content: $ti-icon-helmet-off; +} +.#{$ti-prefix}-help:before { + content: $ti-icon-help; +} +.#{$ti-prefix}-help-circle:before { + content: $ti-icon-help-circle; +} +.#{$ti-prefix}-help-circle-filled:before { + content: $ti-icon-help-circle-filled; +} +.#{$ti-prefix}-help-hexagon:before { + content: $ti-icon-help-hexagon; +} +.#{$ti-prefix}-help-hexagon-filled:before { + content: $ti-icon-help-hexagon-filled; +} +.#{$ti-prefix}-help-octagon:before { + content: $ti-icon-help-octagon; +} +.#{$ti-prefix}-help-octagon-filled:before { + content: $ti-icon-help-octagon-filled; +} +.#{$ti-prefix}-help-off:before { + content: $ti-icon-help-off; +} +.#{$ti-prefix}-help-small:before { + content: $ti-icon-help-small; +} +.#{$ti-prefix}-help-square:before { + content: $ti-icon-help-square; +} +.#{$ti-prefix}-help-square-filled:before { + content: $ti-icon-help-square-filled; +} +.#{$ti-prefix}-help-square-rounded:before { + content: $ti-icon-help-square-rounded; +} +.#{$ti-prefix}-help-square-rounded-filled:before { + content: $ti-icon-help-square-rounded-filled; +} +.#{$ti-prefix}-help-triangle:before { + content: $ti-icon-help-triangle; +} +.#{$ti-prefix}-help-triangle-filled:before { + content: $ti-icon-help-triangle-filled; +} +.#{$ti-prefix}-hemisphere:before { + content: $ti-icon-hemisphere; +} +.#{$ti-prefix}-hemisphere-off:before { + content: $ti-icon-hemisphere-off; +} +.#{$ti-prefix}-hemisphere-plus:before { + content: $ti-icon-hemisphere-plus; +} +.#{$ti-prefix}-hexagon:before { + content: $ti-icon-hexagon; +} +.#{$ti-prefix}-hexagon-3d:before { + content: $ti-icon-hexagon-3d; +} +.#{$ti-prefix}-hexagon-filled:before { + content: $ti-icon-hexagon-filled; +} +.#{$ti-prefix}-hexagon-letter-a:before { + content: $ti-icon-hexagon-letter-a; +} +.#{$ti-prefix}-hexagon-letter-a-filled:before { + content: $ti-icon-hexagon-letter-a-filled; +} +.#{$ti-prefix}-hexagon-letter-b:before { + content: $ti-icon-hexagon-letter-b; +} +.#{$ti-prefix}-hexagon-letter-b-filled:before { + content: $ti-icon-hexagon-letter-b-filled; +} +.#{$ti-prefix}-hexagon-letter-c:before { + content: $ti-icon-hexagon-letter-c; +} +.#{$ti-prefix}-hexagon-letter-c-filled:before { + content: $ti-icon-hexagon-letter-c-filled; +} +.#{$ti-prefix}-hexagon-letter-d:before { + content: $ti-icon-hexagon-letter-d; +} +.#{$ti-prefix}-hexagon-letter-d-filled:before { + content: $ti-icon-hexagon-letter-d-filled; +} +.#{$ti-prefix}-hexagon-letter-e:before { + content: $ti-icon-hexagon-letter-e; +} +.#{$ti-prefix}-hexagon-letter-e-filled:before { + content: $ti-icon-hexagon-letter-e-filled; +} +.#{$ti-prefix}-hexagon-letter-f:before { + content: $ti-icon-hexagon-letter-f; +} +.#{$ti-prefix}-hexagon-letter-f-filled:before { + content: $ti-icon-hexagon-letter-f-filled; +} +.#{$ti-prefix}-hexagon-letter-g:before { + content: $ti-icon-hexagon-letter-g; +} +.#{$ti-prefix}-hexagon-letter-g-filled:before { + content: $ti-icon-hexagon-letter-g-filled; +} +.#{$ti-prefix}-hexagon-letter-h:before { + content: $ti-icon-hexagon-letter-h; +} +.#{$ti-prefix}-hexagon-letter-h-filled:before { + content: $ti-icon-hexagon-letter-h-filled; +} +.#{$ti-prefix}-hexagon-letter-i:before { + content: $ti-icon-hexagon-letter-i; +} +.#{$ti-prefix}-hexagon-letter-i-filled:before { + content: $ti-icon-hexagon-letter-i-filled; +} +.#{$ti-prefix}-hexagon-letter-j:before { + content: $ti-icon-hexagon-letter-j; +} +.#{$ti-prefix}-hexagon-letter-j-filled:before { + content: $ti-icon-hexagon-letter-j-filled; +} +.#{$ti-prefix}-hexagon-letter-k:before { + content: $ti-icon-hexagon-letter-k; +} +.#{$ti-prefix}-hexagon-letter-k-filled:before { + content: $ti-icon-hexagon-letter-k-filled; +} +.#{$ti-prefix}-hexagon-letter-l:before { + content: $ti-icon-hexagon-letter-l; +} +.#{$ti-prefix}-hexagon-letter-l-filled:before { + content: $ti-icon-hexagon-letter-l-filled; +} +.#{$ti-prefix}-hexagon-letter-m:before { + content: $ti-icon-hexagon-letter-m; +} +.#{$ti-prefix}-hexagon-letter-m-filled:before { + content: $ti-icon-hexagon-letter-m-filled; +} +.#{$ti-prefix}-hexagon-letter-n:before { + content: $ti-icon-hexagon-letter-n; +} +.#{$ti-prefix}-hexagon-letter-n-filled:before { + content: $ti-icon-hexagon-letter-n-filled; +} +.#{$ti-prefix}-hexagon-letter-o:before { + content: $ti-icon-hexagon-letter-o; +} +.#{$ti-prefix}-hexagon-letter-o-filled:before { + content: $ti-icon-hexagon-letter-o-filled; +} +.#{$ti-prefix}-hexagon-letter-p:before { + content: $ti-icon-hexagon-letter-p; +} +.#{$ti-prefix}-hexagon-letter-p-filled:before { + content: $ti-icon-hexagon-letter-p-filled; +} +.#{$ti-prefix}-hexagon-letter-q:before { + content: $ti-icon-hexagon-letter-q; +} +.#{$ti-prefix}-hexagon-letter-q-filled:before { + content: $ti-icon-hexagon-letter-q-filled; +} +.#{$ti-prefix}-hexagon-letter-r:before { + content: $ti-icon-hexagon-letter-r; +} +.#{$ti-prefix}-hexagon-letter-r-filled:before { + content: $ti-icon-hexagon-letter-r-filled; +} +.#{$ti-prefix}-hexagon-letter-s:before { + content: $ti-icon-hexagon-letter-s; +} +.#{$ti-prefix}-hexagon-letter-s-filled:before { + content: $ti-icon-hexagon-letter-s-filled; +} +.#{$ti-prefix}-hexagon-letter-t:before { + content: $ti-icon-hexagon-letter-t; +} +.#{$ti-prefix}-hexagon-letter-t-filled:before { + content: $ti-icon-hexagon-letter-t-filled; +} +.#{$ti-prefix}-hexagon-letter-u:before { + content: $ti-icon-hexagon-letter-u; +} +.#{$ti-prefix}-hexagon-letter-u-filled:before { + content: $ti-icon-hexagon-letter-u-filled; +} +.#{$ti-prefix}-hexagon-letter-v:before { + content: $ti-icon-hexagon-letter-v; +} +.#{$ti-prefix}-hexagon-letter-v-filled:before { + content: $ti-icon-hexagon-letter-v-filled; +} +.#{$ti-prefix}-hexagon-letter-w:before { + content: $ti-icon-hexagon-letter-w; +} +.#{$ti-prefix}-hexagon-letter-w-filled:before { + content: $ti-icon-hexagon-letter-w-filled; +} +.#{$ti-prefix}-hexagon-letter-x:before { + content: $ti-icon-hexagon-letter-x; +} +.#{$ti-prefix}-hexagon-letter-x-filled:before { + content: $ti-icon-hexagon-letter-x-filled; +} +.#{$ti-prefix}-hexagon-letter-y:before { + content: $ti-icon-hexagon-letter-y; +} +.#{$ti-prefix}-hexagon-letter-y-filled:before { + content: $ti-icon-hexagon-letter-y-filled; +} +.#{$ti-prefix}-hexagon-letter-z:before { + content: $ti-icon-hexagon-letter-z; +} +.#{$ti-prefix}-hexagon-letter-z-filled:before { + content: $ti-icon-hexagon-letter-z-filled; +} +.#{$ti-prefix}-hexagon-minus:before { + content: $ti-icon-hexagon-minus; +} +.#{$ti-prefix}-hexagon-minus-2:before { + content: $ti-icon-hexagon-minus-2; +} +.#{$ti-prefix}-hexagon-minus-filled:before { + content: $ti-icon-hexagon-minus-filled; +} +.#{$ti-prefix}-hexagon-number-0:before { + content: $ti-icon-hexagon-number-0; +} +.#{$ti-prefix}-hexagon-number-0-filled:before { + content: $ti-icon-hexagon-number-0-filled; +} +.#{$ti-prefix}-hexagon-number-1:before { + content: $ti-icon-hexagon-number-1; +} +.#{$ti-prefix}-hexagon-number-1-filled:before { + content: $ti-icon-hexagon-number-1-filled; +} +.#{$ti-prefix}-hexagon-number-2:before { + content: $ti-icon-hexagon-number-2; +} +.#{$ti-prefix}-hexagon-number-2-filled:before { + content: $ti-icon-hexagon-number-2-filled; +} +.#{$ti-prefix}-hexagon-number-3:before { + content: $ti-icon-hexagon-number-3; +} +.#{$ti-prefix}-hexagon-number-3-filled:before { + content: $ti-icon-hexagon-number-3-filled; +} +.#{$ti-prefix}-hexagon-number-4:before { + content: $ti-icon-hexagon-number-4; +} +.#{$ti-prefix}-hexagon-number-4-filled:before { + content: $ti-icon-hexagon-number-4-filled; +} +.#{$ti-prefix}-hexagon-number-5:before { + content: $ti-icon-hexagon-number-5; +} +.#{$ti-prefix}-hexagon-number-5-filled:before { + content: $ti-icon-hexagon-number-5-filled; +} +.#{$ti-prefix}-hexagon-number-6:before { + content: $ti-icon-hexagon-number-6; +} +.#{$ti-prefix}-hexagon-number-6-filled:before { + content: $ti-icon-hexagon-number-6-filled; +} +.#{$ti-prefix}-hexagon-number-7:before { + content: $ti-icon-hexagon-number-7; +} +.#{$ti-prefix}-hexagon-number-7-filled:before { + content: $ti-icon-hexagon-number-7-filled; +} +.#{$ti-prefix}-hexagon-number-8:before { + content: $ti-icon-hexagon-number-8; +} +.#{$ti-prefix}-hexagon-number-8-filled:before { + content: $ti-icon-hexagon-number-8-filled; +} +.#{$ti-prefix}-hexagon-number-9:before { + content: $ti-icon-hexagon-number-9; +} +.#{$ti-prefix}-hexagon-number-9-filled:before { + content: $ti-icon-hexagon-number-9-filled; +} +.#{$ti-prefix}-hexagon-off:before { + content: $ti-icon-hexagon-off; +} +.#{$ti-prefix}-hexagon-plus:before { + content: $ti-icon-hexagon-plus; +} +.#{$ti-prefix}-hexagon-plus-2:before { + content: $ti-icon-hexagon-plus-2; +} +.#{$ti-prefix}-hexagon-plus-filled:before { + content: $ti-icon-hexagon-plus-filled; +} +.#{$ti-prefix}-hexagonal-prism:before { + content: $ti-icon-hexagonal-prism; +} +.#{$ti-prefix}-hexagonal-prism-off:before { + content: $ti-icon-hexagonal-prism-off; +} +.#{$ti-prefix}-hexagonal-prism-plus:before { + content: $ti-icon-hexagonal-prism-plus; +} +.#{$ti-prefix}-hexagonal-pyramid:before { + content: $ti-icon-hexagonal-pyramid; +} +.#{$ti-prefix}-hexagonal-pyramid-off:before { + content: $ti-icon-hexagonal-pyramid-off; +} +.#{$ti-prefix}-hexagonal-pyramid-plus:before { + content: $ti-icon-hexagonal-pyramid-plus; +} +.#{$ti-prefix}-hexagons:before { + content: $ti-icon-hexagons; +} +.#{$ti-prefix}-hexagons-off:before { + content: $ti-icon-hexagons-off; +} +.#{$ti-prefix}-hierarchy:before { + content: $ti-icon-hierarchy; +} +.#{$ti-prefix}-hierarchy-2:before { + content: $ti-icon-hierarchy-2; +} +.#{$ti-prefix}-hierarchy-3:before { + content: $ti-icon-hierarchy-3; +} +.#{$ti-prefix}-hierarchy-off:before { + content: $ti-icon-hierarchy-off; +} +.#{$ti-prefix}-highlight:before { + content: $ti-icon-highlight; +} +.#{$ti-prefix}-highlight-off:before { + content: $ti-icon-highlight-off; +} +.#{$ti-prefix}-history:before { + content: $ti-icon-history; +} +.#{$ti-prefix}-history-off:before { + content: $ti-icon-history-off; +} +.#{$ti-prefix}-history-toggle:before { + content: $ti-icon-history-toggle; +} +.#{$ti-prefix}-home:before { + content: $ti-icon-home; +} +.#{$ti-prefix}-home-2:before { + content: $ti-icon-home-2; +} +.#{$ti-prefix}-home-bolt:before { + content: $ti-icon-home-bolt; +} +.#{$ti-prefix}-home-cancel:before { + content: $ti-icon-home-cancel; +} +.#{$ti-prefix}-home-check:before { + content: $ti-icon-home-check; +} +.#{$ti-prefix}-home-cog:before { + content: $ti-icon-home-cog; +} +.#{$ti-prefix}-home-dollar:before { + content: $ti-icon-home-dollar; +} +.#{$ti-prefix}-home-dot:before { + content: $ti-icon-home-dot; +} +.#{$ti-prefix}-home-down:before { + content: $ti-icon-home-down; +} +.#{$ti-prefix}-home-eco:before { + content: $ti-icon-home-eco; +} +.#{$ti-prefix}-home-edit:before { + content: $ti-icon-home-edit; +} +.#{$ti-prefix}-home-exclamation:before { + content: $ti-icon-home-exclamation; +} +.#{$ti-prefix}-home-filled:before { + content: $ti-icon-home-filled; +} +.#{$ti-prefix}-home-hand:before { + content: $ti-icon-home-hand; +} +.#{$ti-prefix}-home-heart:before { + content: $ti-icon-home-heart; +} +.#{$ti-prefix}-home-infinity:before { + content: $ti-icon-home-infinity; +} +.#{$ti-prefix}-home-link:before { + content: $ti-icon-home-link; +} +.#{$ti-prefix}-home-minus:before { + content: $ti-icon-home-minus; +} +.#{$ti-prefix}-home-move:before { + content: $ti-icon-home-move; +} +.#{$ti-prefix}-home-off:before { + content: $ti-icon-home-off; +} +.#{$ti-prefix}-home-plus:before { + content: $ti-icon-home-plus; +} +.#{$ti-prefix}-home-question:before { + content: $ti-icon-home-question; +} +.#{$ti-prefix}-home-ribbon:before { + content: $ti-icon-home-ribbon; +} +.#{$ti-prefix}-home-search:before { + content: $ti-icon-home-search; +} +.#{$ti-prefix}-home-share:before { + content: $ti-icon-home-share; +} +.#{$ti-prefix}-home-shield:before { + content: $ti-icon-home-shield; +} +.#{$ti-prefix}-home-signal:before { + content: $ti-icon-home-signal; +} +.#{$ti-prefix}-home-star:before { + content: $ti-icon-home-star; +} +.#{$ti-prefix}-home-stats:before { + content: $ti-icon-home-stats; +} +.#{$ti-prefix}-home-up:before { + content: $ti-icon-home-up; +} +.#{$ti-prefix}-home-x:before { + content: $ti-icon-home-x; +} +.#{$ti-prefix}-horse:before { + content: $ti-icon-horse; +} +.#{$ti-prefix}-horse-toy:before { + content: $ti-icon-horse-toy; +} +.#{$ti-prefix}-horseshoe:before { + content: $ti-icon-horseshoe; +} +.#{$ti-prefix}-hospital:before { + content: $ti-icon-hospital; +} +.#{$ti-prefix}-hospital-circle:before { + content: $ti-icon-hospital-circle; +} +.#{$ti-prefix}-hospital-circle-filled:before { + content: $ti-icon-hospital-circle-filled; +} +.#{$ti-prefix}-hotel-service:before { + content: $ti-icon-hotel-service; +} +.#{$ti-prefix}-hourglass:before { + content: $ti-icon-hourglass; +} +.#{$ti-prefix}-hourglass-empty:before { + content: $ti-icon-hourglass-empty; +} +.#{$ti-prefix}-hourglass-filled:before { + content: $ti-icon-hourglass-filled; +} +.#{$ti-prefix}-hourglass-high:before { + content: $ti-icon-hourglass-high; +} +.#{$ti-prefix}-hourglass-low:before { + content: $ti-icon-hourglass-low; +} +.#{$ti-prefix}-hourglass-off:before { + content: $ti-icon-hourglass-off; +} +.#{$ti-prefix}-hours-12:before { + content: $ti-icon-hours-12; +} +.#{$ti-prefix}-hours-24:before { + content: $ti-icon-hours-24; +} +.#{$ti-prefix}-html:before { + content: $ti-icon-html; +} +.#{$ti-prefix}-http-connect:before { + content: $ti-icon-http-connect; +} +.#{$ti-prefix}-http-delete:before { + content: $ti-icon-http-delete; +} +.#{$ti-prefix}-http-get:before { + content: $ti-icon-http-get; +} +.#{$ti-prefix}-http-head:before { + content: $ti-icon-http-head; +} +.#{$ti-prefix}-http-options:before { + content: $ti-icon-http-options; +} +.#{$ti-prefix}-http-patch:before { + content: $ti-icon-http-patch; +} +.#{$ti-prefix}-http-post:before { + content: $ti-icon-http-post; +} +.#{$ti-prefix}-http-put:before { + content: $ti-icon-http-put; +} +.#{$ti-prefix}-http-que:before { + content: $ti-icon-http-que; +} +.#{$ti-prefix}-http-trace:before { + content: $ti-icon-http-trace; +} +.#{$ti-prefix}-ice-cream:before { + content: $ti-icon-ice-cream; +} +.#{$ti-prefix}-ice-cream-2:before { + content: $ti-icon-ice-cream-2; +} +.#{$ti-prefix}-ice-cream-off:before { + content: $ti-icon-ice-cream-off; +} +.#{$ti-prefix}-ice-skating:before { + content: $ti-icon-ice-skating; +} +.#{$ti-prefix}-icons:before { + content: $ti-icon-icons; +} +.#{$ti-prefix}-icons-off:before { + content: $ti-icon-icons-off; +} +.#{$ti-prefix}-id:before { + content: $ti-icon-id; +} +.#{$ti-prefix}-id-badge:before { + content: $ti-icon-id-badge; +} +.#{$ti-prefix}-id-badge-2:before { + content: $ti-icon-id-badge-2; +} +.#{$ti-prefix}-id-badge-off:before { + content: $ti-icon-id-badge-off; +} +.#{$ti-prefix}-id-off:before { + content: $ti-icon-id-off; +} +.#{$ti-prefix}-ikosaedr:before { + content: $ti-icon-ikosaedr; +} +.#{$ti-prefix}-image-in-picture:before { + content: $ti-icon-image-in-picture; +} +.#{$ti-prefix}-inbox:before { + content: $ti-icon-inbox; +} +.#{$ti-prefix}-inbox-off:before { + content: $ti-icon-inbox-off; +} +.#{$ti-prefix}-indent-decrease:before { + content: $ti-icon-indent-decrease; +} +.#{$ti-prefix}-indent-increase:before { + content: $ti-icon-indent-increase; +} +.#{$ti-prefix}-infinity:before { + content: $ti-icon-infinity; +} +.#{$ti-prefix}-infinity-off:before { + content: $ti-icon-infinity-off; +} +.#{$ti-prefix}-info-circle:before { + content: $ti-icon-info-circle; +} +.#{$ti-prefix}-info-circle-filled:before { + content: $ti-icon-info-circle-filled; +} +.#{$ti-prefix}-info-hexagon:before { + content: $ti-icon-info-hexagon; +} +.#{$ti-prefix}-info-hexagon-filled:before { + content: $ti-icon-info-hexagon-filled; +} +.#{$ti-prefix}-info-octagon:before { + content: $ti-icon-info-octagon; +} +.#{$ti-prefix}-info-octagon-filled:before { + content: $ti-icon-info-octagon-filled; +} +.#{$ti-prefix}-info-small:before { + content: $ti-icon-info-small; +} +.#{$ti-prefix}-info-square:before { + content: $ti-icon-info-square; +} +.#{$ti-prefix}-info-square-filled:before { + content: $ti-icon-info-square-filled; +} +.#{$ti-prefix}-info-square-rounded:before { + content: $ti-icon-info-square-rounded; +} +.#{$ti-prefix}-info-square-rounded-filled:before { + content: $ti-icon-info-square-rounded-filled; +} +.#{$ti-prefix}-info-triangle:before { + content: $ti-icon-info-triangle; +} +.#{$ti-prefix}-info-triangle-filled:before { + content: $ti-icon-info-triangle-filled; +} +.#{$ti-prefix}-inner-shadow-bottom:before { + content: $ti-icon-inner-shadow-bottom; +} +.#{$ti-prefix}-inner-shadow-bottom-filled:before { + content: $ti-icon-inner-shadow-bottom-filled; +} +.#{$ti-prefix}-inner-shadow-bottom-left:before { + content: $ti-icon-inner-shadow-bottom-left; +} +.#{$ti-prefix}-inner-shadow-bottom-left-filled:before { + content: $ti-icon-inner-shadow-bottom-left-filled; +} +.#{$ti-prefix}-inner-shadow-bottom-right:before { + content: $ti-icon-inner-shadow-bottom-right; +} +.#{$ti-prefix}-inner-shadow-bottom-right-filled:before { + content: $ti-icon-inner-shadow-bottom-right-filled; +} +.#{$ti-prefix}-inner-shadow-left:before { + content: $ti-icon-inner-shadow-left; +} +.#{$ti-prefix}-inner-shadow-left-filled:before { + content: $ti-icon-inner-shadow-left-filled; +} +.#{$ti-prefix}-inner-shadow-right:before { + content: $ti-icon-inner-shadow-right; +} +.#{$ti-prefix}-inner-shadow-right-filled:before { + content: $ti-icon-inner-shadow-right-filled; +} +.#{$ti-prefix}-inner-shadow-top:before { + content: $ti-icon-inner-shadow-top; +} +.#{$ti-prefix}-inner-shadow-top-filled:before { + content: $ti-icon-inner-shadow-top-filled; +} +.#{$ti-prefix}-inner-shadow-top-left:before { + content: $ti-icon-inner-shadow-top-left; +} +.#{$ti-prefix}-inner-shadow-top-left-filled:before { + content: $ti-icon-inner-shadow-top-left-filled; +} +.#{$ti-prefix}-inner-shadow-top-right:before { + content: $ti-icon-inner-shadow-top-right; +} +.#{$ti-prefix}-inner-shadow-top-right-filled:before { + content: $ti-icon-inner-shadow-top-right-filled; +} +.#{$ti-prefix}-input-ai:before { + content: $ti-icon-input-ai; +} +.#{$ti-prefix}-input-check:before { + content: $ti-icon-input-check; +} +.#{$ti-prefix}-input-search:before { + content: $ti-icon-input-search; +} +.#{$ti-prefix}-input-x:before { + content: $ti-icon-input-x; +} +.#{$ti-prefix}-invoice:before { + content: $ti-icon-invoice; +} +.#{$ti-prefix}-ironing:before { + content: $ti-icon-ironing; +} +.#{$ti-prefix}-ironing-1:before { + content: $ti-icon-ironing-1; +} +.#{$ti-prefix}-ironing-2:before { + content: $ti-icon-ironing-2; +} +.#{$ti-prefix}-ironing-3:before { + content: $ti-icon-ironing-3; +} +.#{$ti-prefix}-ironing-filled:before { + content: $ti-icon-ironing-filled; +} +.#{$ti-prefix}-ironing-off:before { + content: $ti-icon-ironing-off; +} +.#{$ti-prefix}-ironing-steam:before { + content: $ti-icon-ironing-steam; +} +.#{$ti-prefix}-ironing-steam-off:before { + content: $ti-icon-ironing-steam-off; +} +.#{$ti-prefix}-irregular-polyhedron:before { + content: $ti-icon-irregular-polyhedron; +} +.#{$ti-prefix}-irregular-polyhedron-off:before { + content: $ti-icon-irregular-polyhedron-off; +} +.#{$ti-prefix}-irregular-polyhedron-plus:before { + content: $ti-icon-irregular-polyhedron-plus; +} +.#{$ti-prefix}-italic:before { + content: $ti-icon-italic; +} +.#{$ti-prefix}-jacket:before { + content: $ti-icon-jacket; +} +.#{$ti-prefix}-jetpack:before { + content: $ti-icon-jetpack; +} +.#{$ti-prefix}-jetpack-filled:before { + content: $ti-icon-jetpack-filled; +} +.#{$ti-prefix}-jewish-star:before { + content: $ti-icon-jewish-star; +} +.#{$ti-prefix}-jewish-star-filled:before { + content: $ti-icon-jewish-star-filled; +} +.#{$ti-prefix}-jpg:before { + content: $ti-icon-jpg; +} +.#{$ti-prefix}-json:before { + content: $ti-icon-json; +} +.#{$ti-prefix}-jump-rope:before { + content: $ti-icon-jump-rope; +} +.#{$ti-prefix}-karate:before { + content: $ti-icon-karate; +} +.#{$ti-prefix}-kayak:before { + content: $ti-icon-kayak; +} +.#{$ti-prefix}-kerning:before { + content: $ti-icon-kerning; +} +.#{$ti-prefix}-key:before { + content: $ti-icon-key; +} +.#{$ti-prefix}-key-filled:before { + content: $ti-icon-key-filled; +} +.#{$ti-prefix}-key-off:before { + content: $ti-icon-key-off; +} +.#{$ti-prefix}-keyboard:before { + content: $ti-icon-keyboard; +} +.#{$ti-prefix}-keyboard-hide:before { + content: $ti-icon-keyboard-hide; +} +.#{$ti-prefix}-keyboard-off:before { + content: $ti-icon-keyboard-off; +} +.#{$ti-prefix}-keyboard-show:before { + content: $ti-icon-keyboard-show; +} +.#{$ti-prefix}-keyframe:before { + content: $ti-icon-keyframe; +} +.#{$ti-prefix}-keyframe-align-center:before { + content: $ti-icon-keyframe-align-center; +} +.#{$ti-prefix}-keyframe-align-center-filled:before { + content: $ti-icon-keyframe-align-center-filled; +} +.#{$ti-prefix}-keyframe-align-horizontal:before { + content: $ti-icon-keyframe-align-horizontal; +} +.#{$ti-prefix}-keyframe-align-horizontal-filled:before { + content: $ti-icon-keyframe-align-horizontal-filled; +} +.#{$ti-prefix}-keyframe-align-vertical:before { + content: $ti-icon-keyframe-align-vertical; +} +.#{$ti-prefix}-keyframe-align-vertical-filled:before { + content: $ti-icon-keyframe-align-vertical-filled; +} +.#{$ti-prefix}-keyframe-filled:before { + content: $ti-icon-keyframe-filled; +} +.#{$ti-prefix}-keyframes:before { + content: $ti-icon-keyframes; +} +.#{$ti-prefix}-keyframes-filled:before { + content: $ti-icon-keyframes-filled; +} +.#{$ti-prefix}-ladder:before { + content: $ti-icon-ladder; +} +.#{$ti-prefix}-ladder-off:before { + content: $ti-icon-ladder-off; +} +.#{$ti-prefix}-ladle:before { + content: $ti-icon-ladle; +} +.#{$ti-prefix}-lambda:before { + content: $ti-icon-lambda; +} +.#{$ti-prefix}-lamp:before { + content: $ti-icon-lamp; +} +.#{$ti-prefix}-lamp-2:before { + content: $ti-icon-lamp-2; +} +.#{$ti-prefix}-lamp-off:before { + content: $ti-icon-lamp-off; +} +.#{$ti-prefix}-lane:before { + content: $ti-icon-lane; +} +.#{$ti-prefix}-language:before { + content: $ti-icon-language; +} +.#{$ti-prefix}-language-hiragana:before { + content: $ti-icon-language-hiragana; +} +.#{$ti-prefix}-language-katakana:before { + content: $ti-icon-language-katakana; +} +.#{$ti-prefix}-language-off:before { + content: $ti-icon-language-off; +} +.#{$ti-prefix}-lasso:before { + content: $ti-icon-lasso; +} +.#{$ti-prefix}-lasso-off:before { + content: $ti-icon-lasso-off; +} +.#{$ti-prefix}-lasso-polygon:before { + content: $ti-icon-lasso-polygon; +} +.#{$ti-prefix}-layers-difference:before { + content: $ti-icon-layers-difference; +} +.#{$ti-prefix}-layers-intersect:before { + content: $ti-icon-layers-intersect; +} +.#{$ti-prefix}-layers-intersect-2:before { + content: $ti-icon-layers-intersect-2; +} +.#{$ti-prefix}-layers-linked:before { + content: $ti-icon-layers-linked; +} +.#{$ti-prefix}-layers-off:before { + content: $ti-icon-layers-off; +} +.#{$ti-prefix}-layers-selected:before { + content: $ti-icon-layers-selected; +} +.#{$ti-prefix}-layers-selected-bottom:before { + content: $ti-icon-layers-selected-bottom; +} +.#{$ti-prefix}-layers-subtract:before { + content: $ti-icon-layers-subtract; +} +.#{$ti-prefix}-layers-union:before { + content: $ti-icon-layers-union; +} +.#{$ti-prefix}-layout:before { + content: $ti-icon-layout; +} +.#{$ti-prefix}-layout-2:before { + content: $ti-icon-layout-2; +} +.#{$ti-prefix}-layout-2-filled:before { + content: $ti-icon-layout-2-filled; +} +.#{$ti-prefix}-layout-align-bottom:before { + content: $ti-icon-layout-align-bottom; +} +.#{$ti-prefix}-layout-align-bottom-filled:before { + content: $ti-icon-layout-align-bottom-filled; +} +.#{$ti-prefix}-layout-align-center:before { + content: $ti-icon-layout-align-center; +} +.#{$ti-prefix}-layout-align-center-filled:before { + content: $ti-icon-layout-align-center-filled; +} +.#{$ti-prefix}-layout-align-left:before { + content: $ti-icon-layout-align-left; +} +.#{$ti-prefix}-layout-align-left-filled:before { + content: $ti-icon-layout-align-left-filled; +} +.#{$ti-prefix}-layout-align-middle:before { + content: $ti-icon-layout-align-middle; +} +.#{$ti-prefix}-layout-align-middle-filled:before { + content: $ti-icon-layout-align-middle-filled; +} +.#{$ti-prefix}-layout-align-right:before { + content: $ti-icon-layout-align-right; +} +.#{$ti-prefix}-layout-align-right-filled:before { + content: $ti-icon-layout-align-right-filled; +} +.#{$ti-prefix}-layout-align-top:before { + content: $ti-icon-layout-align-top; +} +.#{$ti-prefix}-layout-align-top-filled:before { + content: $ti-icon-layout-align-top-filled; +} +.#{$ti-prefix}-layout-board:before { + content: $ti-icon-layout-board; +} +.#{$ti-prefix}-layout-board-split:before { + content: $ti-icon-layout-board-split; +} +.#{$ti-prefix}-layout-bottombar:before { + content: $ti-icon-layout-bottombar; +} +.#{$ti-prefix}-layout-bottombar-collapse:before { + content: $ti-icon-layout-bottombar-collapse; +} +.#{$ti-prefix}-layout-bottombar-collapse-filled:before { + content: $ti-icon-layout-bottombar-collapse-filled; +} +.#{$ti-prefix}-layout-bottombar-expand:before { + content: $ti-icon-layout-bottombar-expand; +} +.#{$ti-prefix}-layout-bottombar-expand-filled:before { + content: $ti-icon-layout-bottombar-expand-filled; +} +.#{$ti-prefix}-layout-bottombar-filled:before { + content: $ti-icon-layout-bottombar-filled; +} +.#{$ti-prefix}-layout-bottombar-inactive:before { + content: $ti-icon-layout-bottombar-inactive; +} +.#{$ti-prefix}-layout-cards:before { + content: $ti-icon-layout-cards; +} +.#{$ti-prefix}-layout-cards-filled:before { + content: $ti-icon-layout-cards-filled; +} +.#{$ti-prefix}-layout-collage:before { + content: $ti-icon-layout-collage; +} +.#{$ti-prefix}-layout-columns:before { + content: $ti-icon-layout-columns; +} +.#{$ti-prefix}-layout-dashboard:before { + content: $ti-icon-layout-dashboard; +} +.#{$ti-prefix}-layout-dashboard-filled:before { + content: $ti-icon-layout-dashboard-filled; +} +.#{$ti-prefix}-layout-distribute-horizontal:before { + content: $ti-icon-layout-distribute-horizontal; +} +.#{$ti-prefix}-layout-distribute-horizontal-filled:before { + content: $ti-icon-layout-distribute-horizontal-filled; +} +.#{$ti-prefix}-layout-distribute-vertical:before { + content: $ti-icon-layout-distribute-vertical; +} +.#{$ti-prefix}-layout-distribute-vertical-filled:before { + content: $ti-icon-layout-distribute-vertical-filled; +} +.#{$ti-prefix}-layout-filled:before { + content: $ti-icon-layout-filled; +} +.#{$ti-prefix}-layout-grid:before { + content: $ti-icon-layout-grid; +} +.#{$ti-prefix}-layout-grid-add:before { + content: $ti-icon-layout-grid-add; +} +.#{$ti-prefix}-layout-grid-filled:before { + content: $ti-icon-layout-grid-filled; +} +.#{$ti-prefix}-layout-grid-remove:before { + content: $ti-icon-layout-grid-remove; +} +.#{$ti-prefix}-layout-kanban:before { + content: $ti-icon-layout-kanban; +} +.#{$ti-prefix}-layout-kanban-filled:before { + content: $ti-icon-layout-kanban-filled; +} +.#{$ti-prefix}-layout-list:before { + content: $ti-icon-layout-list; +} +.#{$ti-prefix}-layout-list-filled:before { + content: $ti-icon-layout-list-filled; +} +.#{$ti-prefix}-layout-navbar:before { + content: $ti-icon-layout-navbar; +} +.#{$ti-prefix}-layout-navbar-collapse:before { + content: $ti-icon-layout-navbar-collapse; +} +.#{$ti-prefix}-layout-navbar-collapse-filled:before { + content: $ti-icon-layout-navbar-collapse-filled; +} +.#{$ti-prefix}-layout-navbar-expand:before { + content: $ti-icon-layout-navbar-expand; +} +.#{$ti-prefix}-layout-navbar-expand-filled:before { + content: $ti-icon-layout-navbar-expand-filled; +} +.#{$ti-prefix}-layout-navbar-filled:before { + content: $ti-icon-layout-navbar-filled; +} +.#{$ti-prefix}-layout-navbar-inactive:before { + content: $ti-icon-layout-navbar-inactive; +} +.#{$ti-prefix}-layout-off:before { + content: $ti-icon-layout-off; +} +.#{$ti-prefix}-layout-rows:before { + content: $ti-icon-layout-rows; +} +.#{$ti-prefix}-layout-sidebar:before { + content: $ti-icon-layout-sidebar; +} +.#{$ti-prefix}-layout-sidebar-filled:before { + content: $ti-icon-layout-sidebar-filled; +} +.#{$ti-prefix}-layout-sidebar-inactive:before { + content: $ti-icon-layout-sidebar-inactive; +} +.#{$ti-prefix}-layout-sidebar-left-collapse:before { + content: $ti-icon-layout-sidebar-left-collapse; +} +.#{$ti-prefix}-layout-sidebar-left-collapse-filled:before { + content: $ti-icon-layout-sidebar-left-collapse-filled; +} +.#{$ti-prefix}-layout-sidebar-left-expand:before { + content: $ti-icon-layout-sidebar-left-expand; +} +.#{$ti-prefix}-layout-sidebar-left-expand-filled:before { + content: $ti-icon-layout-sidebar-left-expand-filled; +} +.#{$ti-prefix}-layout-sidebar-right:before { + content: $ti-icon-layout-sidebar-right; +} +.#{$ti-prefix}-layout-sidebar-right-collapse:before { + content: $ti-icon-layout-sidebar-right-collapse; +} +.#{$ti-prefix}-layout-sidebar-right-collapse-filled:before { + content: $ti-icon-layout-sidebar-right-collapse-filled; +} +.#{$ti-prefix}-layout-sidebar-right-expand:before { + content: $ti-icon-layout-sidebar-right-expand; +} +.#{$ti-prefix}-layout-sidebar-right-expand-filled:before { + content: $ti-icon-layout-sidebar-right-expand-filled; +} +.#{$ti-prefix}-layout-sidebar-right-filled:before { + content: $ti-icon-layout-sidebar-right-filled; +} +.#{$ti-prefix}-layout-sidebar-right-inactive:before { + content: $ti-icon-layout-sidebar-right-inactive; +} +.#{$ti-prefix}-leaf:before { + content: $ti-icon-leaf; +} +.#{$ti-prefix}-leaf-off:before { + content: $ti-icon-leaf-off; +} +.#{$ti-prefix}-lego:before { + content: $ti-icon-lego; +} +.#{$ti-prefix}-lego-filled:before { + content: $ti-icon-lego-filled; +} +.#{$ti-prefix}-lego-off:before { + content: $ti-icon-lego-off; +} +.#{$ti-prefix}-lemon:before { + content: $ti-icon-lemon; +} +.#{$ti-prefix}-lemon-2:before { + content: $ti-icon-lemon-2; +} +.#{$ti-prefix}-letter-a:before { + content: $ti-icon-letter-a; +} +.#{$ti-prefix}-letter-a-small:before { + content: $ti-icon-letter-a-small; +} +.#{$ti-prefix}-letter-b:before { + content: $ti-icon-letter-b; +} +.#{$ti-prefix}-letter-b-small:before { + content: $ti-icon-letter-b-small; +} +.#{$ti-prefix}-letter-c:before { + content: $ti-icon-letter-c; +} +.#{$ti-prefix}-letter-c-small:before { + content: $ti-icon-letter-c-small; +} +.#{$ti-prefix}-letter-case:before { + content: $ti-icon-letter-case; +} +.#{$ti-prefix}-letter-case-lower:before { + content: $ti-icon-letter-case-lower; +} +.#{$ti-prefix}-letter-case-toggle:before { + content: $ti-icon-letter-case-toggle; +} +.#{$ti-prefix}-letter-case-upper:before { + content: $ti-icon-letter-case-upper; +} +.#{$ti-prefix}-letter-d:before { + content: $ti-icon-letter-d; +} +.#{$ti-prefix}-letter-d-small:before { + content: $ti-icon-letter-d-small; +} +.#{$ti-prefix}-letter-e:before { + content: $ti-icon-letter-e; +} +.#{$ti-prefix}-letter-e-small:before { + content: $ti-icon-letter-e-small; +} +.#{$ti-prefix}-letter-f:before { + content: $ti-icon-letter-f; +} +.#{$ti-prefix}-letter-f-small:before { + content: $ti-icon-letter-f-small; +} +.#{$ti-prefix}-letter-g:before { + content: $ti-icon-letter-g; +} +.#{$ti-prefix}-letter-g-small:before { + content: $ti-icon-letter-g-small; +} +.#{$ti-prefix}-letter-h:before { + content: $ti-icon-letter-h; +} +.#{$ti-prefix}-letter-h-small:before { + content: $ti-icon-letter-h-small; +} +.#{$ti-prefix}-letter-i:before { + content: $ti-icon-letter-i; +} +.#{$ti-prefix}-letter-i-small:before { + content: $ti-icon-letter-i-small; +} +.#{$ti-prefix}-letter-j:before { + content: $ti-icon-letter-j; +} +.#{$ti-prefix}-letter-j-small:before { + content: $ti-icon-letter-j-small; +} +.#{$ti-prefix}-letter-k:before { + content: $ti-icon-letter-k; +} +.#{$ti-prefix}-letter-k-small:before { + content: $ti-icon-letter-k-small; +} +.#{$ti-prefix}-letter-l:before { + content: $ti-icon-letter-l; +} +.#{$ti-prefix}-letter-l-small:before { + content: $ti-icon-letter-l-small; +} +.#{$ti-prefix}-letter-m:before { + content: $ti-icon-letter-m; +} +.#{$ti-prefix}-letter-m-small:before { + content: $ti-icon-letter-m-small; +} +.#{$ti-prefix}-letter-n:before { + content: $ti-icon-letter-n; +} +.#{$ti-prefix}-letter-n-small:before { + content: $ti-icon-letter-n-small; +} +.#{$ti-prefix}-letter-o:before { + content: $ti-icon-letter-o; +} +.#{$ti-prefix}-letter-o-small:before { + content: $ti-icon-letter-o-small; +} +.#{$ti-prefix}-letter-p:before { + content: $ti-icon-letter-p; +} +.#{$ti-prefix}-letter-p-small:before { + content: $ti-icon-letter-p-small; +} +.#{$ti-prefix}-letter-q:before { + content: $ti-icon-letter-q; +} +.#{$ti-prefix}-letter-q-small:before { + content: $ti-icon-letter-q-small; +} +.#{$ti-prefix}-letter-r:before { + content: $ti-icon-letter-r; +} +.#{$ti-prefix}-letter-r-small:before { + content: $ti-icon-letter-r-small; +} +.#{$ti-prefix}-letter-s:before { + content: $ti-icon-letter-s; +} +.#{$ti-prefix}-letter-s-small:before { + content: $ti-icon-letter-s-small; +} +.#{$ti-prefix}-letter-spacing:before { + content: $ti-icon-letter-spacing; +} +.#{$ti-prefix}-letter-t:before { + content: $ti-icon-letter-t; +} +.#{$ti-prefix}-letter-t-small:before { + content: $ti-icon-letter-t-small; +} +.#{$ti-prefix}-letter-u:before { + content: $ti-icon-letter-u; +} +.#{$ti-prefix}-letter-u-small:before { + content: $ti-icon-letter-u-small; +} +.#{$ti-prefix}-letter-v:before { + content: $ti-icon-letter-v; +} +.#{$ti-prefix}-letter-v-small:before { + content: $ti-icon-letter-v-small; +} +.#{$ti-prefix}-letter-w:before { + content: $ti-icon-letter-w; +} +.#{$ti-prefix}-letter-w-small:before { + content: $ti-icon-letter-w-small; +} +.#{$ti-prefix}-letter-x:before { + content: $ti-icon-letter-x; +} +.#{$ti-prefix}-letter-x-small:before { + content: $ti-icon-letter-x-small; +} +.#{$ti-prefix}-letter-y:before { + content: $ti-icon-letter-y; +} +.#{$ti-prefix}-letter-y-small:before { + content: $ti-icon-letter-y-small; +} +.#{$ti-prefix}-letter-z:before { + content: $ti-icon-letter-z; +} +.#{$ti-prefix}-letter-z-small:before { + content: $ti-icon-letter-z-small; +} +.#{$ti-prefix}-library:before { + content: $ti-icon-library; +} +.#{$ti-prefix}-library-minus:before { + content: $ti-icon-library-minus; +} +.#{$ti-prefix}-library-photo:before { + content: $ti-icon-library-photo; +} +.#{$ti-prefix}-library-plus:before { + content: $ti-icon-library-plus; +} +.#{$ti-prefix}-license:before { + content: $ti-icon-license; +} +.#{$ti-prefix}-license-off:before { + content: $ti-icon-license-off; +} +.#{$ti-prefix}-lifebuoy:before { + content: $ti-icon-lifebuoy; +} +.#{$ti-prefix}-lifebuoy-off:before { + content: $ti-icon-lifebuoy-off; +} +.#{$ti-prefix}-lighter:before { + content: $ti-icon-lighter; +} +.#{$ti-prefix}-line:before { + content: $ti-icon-line; +} +.#{$ti-prefix}-line-dashed:before { + content: $ti-icon-line-dashed; +} +.#{$ti-prefix}-line-dotted:before { + content: $ti-icon-line-dotted; +} +.#{$ti-prefix}-line-height:before { + content: $ti-icon-line-height; +} +.#{$ti-prefix}-line-scan:before { + content: $ti-icon-line-scan; +} +.#{$ti-prefix}-link:before { + content: $ti-icon-link; +} +.#{$ti-prefix}-link-minus:before { + content: $ti-icon-link-minus; +} +.#{$ti-prefix}-link-off:before { + content: $ti-icon-link-off; +} +.#{$ti-prefix}-link-plus:before { + content: $ti-icon-link-plus; +} +.#{$ti-prefix}-list:before { + content: $ti-icon-list; +} +.#{$ti-prefix}-list-check:before { + content: $ti-icon-list-check; +} +.#{$ti-prefix}-list-details:before { + content: $ti-icon-list-details; +} +.#{$ti-prefix}-list-letters:before { + content: $ti-icon-list-letters; +} +.#{$ti-prefix}-list-numbers:before { + content: $ti-icon-list-numbers; +} +.#{$ti-prefix}-list-search:before { + content: $ti-icon-list-search; +} +.#{$ti-prefix}-list-tree:before { + content: $ti-icon-list-tree; +} +.#{$ti-prefix}-live-photo:before { + content: $ti-icon-live-photo; +} +.#{$ti-prefix}-live-photo-filled:before { + content: $ti-icon-live-photo-filled; +} +.#{$ti-prefix}-live-photo-off:before { + content: $ti-icon-live-photo-off; +} +.#{$ti-prefix}-live-view:before { + content: $ti-icon-live-view; +} +.#{$ti-prefix}-load-balancer:before { + content: $ti-icon-load-balancer; +} +.#{$ti-prefix}-loader:before { + content: $ti-icon-loader; +} +.#{$ti-prefix}-loader-2:before { + content: $ti-icon-loader-2; +} +.#{$ti-prefix}-loader-3:before { + content: $ti-icon-loader-3; +} +.#{$ti-prefix}-loader-quarter:before { + content: $ti-icon-loader-quarter; +} +.#{$ti-prefix}-location:before { + content: $ti-icon-location; +} +.#{$ti-prefix}-location-bolt:before { + content: $ti-icon-location-bolt; +} +.#{$ti-prefix}-location-broken:before { + content: $ti-icon-location-broken; +} +.#{$ti-prefix}-location-cancel:before { + content: $ti-icon-location-cancel; +} +.#{$ti-prefix}-location-check:before { + content: $ti-icon-location-check; +} +.#{$ti-prefix}-location-code:before { + content: $ti-icon-location-code; +} +.#{$ti-prefix}-location-cog:before { + content: $ti-icon-location-cog; +} +.#{$ti-prefix}-location-discount:before { + content: $ti-icon-location-discount; +} +.#{$ti-prefix}-location-dollar:before { + content: $ti-icon-location-dollar; +} +.#{$ti-prefix}-location-down:before { + content: $ti-icon-location-down; +} +.#{$ti-prefix}-location-exclamation:before { + content: $ti-icon-location-exclamation; +} +.#{$ti-prefix}-location-filled:before { + content: $ti-icon-location-filled; +} +.#{$ti-prefix}-location-heart:before { + content: $ti-icon-location-heart; +} +.#{$ti-prefix}-location-minus:before { + content: $ti-icon-location-minus; +} +.#{$ti-prefix}-location-off:before { + content: $ti-icon-location-off; +} +.#{$ti-prefix}-location-pause:before { + content: $ti-icon-location-pause; +} +.#{$ti-prefix}-location-pin:before { + content: $ti-icon-location-pin; +} +.#{$ti-prefix}-location-plus:before { + content: $ti-icon-location-plus; +} +.#{$ti-prefix}-location-question:before { + content: $ti-icon-location-question; +} +.#{$ti-prefix}-location-search:before { + content: $ti-icon-location-search; +} +.#{$ti-prefix}-location-share:before { + content: $ti-icon-location-share; +} +.#{$ti-prefix}-location-star:before { + content: $ti-icon-location-star; +} +.#{$ti-prefix}-location-up:before { + content: $ti-icon-location-up; +} +.#{$ti-prefix}-location-x:before { + content: $ti-icon-location-x; +} +.#{$ti-prefix}-lock:before { + content: $ti-icon-lock; +} +.#{$ti-prefix}-lock-access:before { + content: $ti-icon-lock-access; +} +.#{$ti-prefix}-lock-access-off:before { + content: $ti-icon-lock-access-off; +} +.#{$ti-prefix}-lock-bolt:before { + content: $ti-icon-lock-bolt; +} +.#{$ti-prefix}-lock-cancel:before { + content: $ti-icon-lock-cancel; +} +.#{$ti-prefix}-lock-check:before { + content: $ti-icon-lock-check; +} +.#{$ti-prefix}-lock-code:before { + content: $ti-icon-lock-code; +} +.#{$ti-prefix}-lock-cog:before { + content: $ti-icon-lock-cog; +} +.#{$ti-prefix}-lock-dollar:before { + content: $ti-icon-lock-dollar; +} +.#{$ti-prefix}-lock-down:before { + content: $ti-icon-lock-down; +} +.#{$ti-prefix}-lock-exclamation:before { + content: $ti-icon-lock-exclamation; +} +.#{$ti-prefix}-lock-filled:before { + content: $ti-icon-lock-filled; +} +.#{$ti-prefix}-lock-heart:before { + content: $ti-icon-lock-heart; +} +.#{$ti-prefix}-lock-minus:before { + content: $ti-icon-lock-minus; +} +.#{$ti-prefix}-lock-off:before { + content: $ti-icon-lock-off; +} +.#{$ti-prefix}-lock-open:before { + content: $ti-icon-lock-open; +} +.#{$ti-prefix}-lock-open-2:before { + content: $ti-icon-lock-open-2; +} +.#{$ti-prefix}-lock-open-off:before { + content: $ti-icon-lock-open-off; +} +.#{$ti-prefix}-lock-pause:before { + content: $ti-icon-lock-pause; +} +.#{$ti-prefix}-lock-pin:before { + content: $ti-icon-lock-pin; +} +.#{$ti-prefix}-lock-plus:before { + content: $ti-icon-lock-plus; +} +.#{$ti-prefix}-lock-question:before { + content: $ti-icon-lock-question; +} +.#{$ti-prefix}-lock-search:before { + content: $ti-icon-lock-search; +} +.#{$ti-prefix}-lock-share:before { + content: $ti-icon-lock-share; +} +.#{$ti-prefix}-lock-square:before { + content: $ti-icon-lock-square; +} +.#{$ti-prefix}-lock-square-rounded:before { + content: $ti-icon-lock-square-rounded; +} +.#{$ti-prefix}-lock-square-rounded-filled:before { + content: $ti-icon-lock-square-rounded-filled; +} +.#{$ti-prefix}-lock-star:before { + content: $ti-icon-lock-star; +} +.#{$ti-prefix}-lock-up:before { + content: $ti-icon-lock-up; +} +.#{$ti-prefix}-lock-x:before { + content: $ti-icon-lock-x; +} +.#{$ti-prefix}-logic-and:before { + content: $ti-icon-logic-and; +} +.#{$ti-prefix}-logic-buffer:before { + content: $ti-icon-logic-buffer; +} +.#{$ti-prefix}-logic-nand:before { + content: $ti-icon-logic-nand; +} +.#{$ti-prefix}-logic-nor:before { + content: $ti-icon-logic-nor; +} +.#{$ti-prefix}-logic-not:before { + content: $ti-icon-logic-not; +} +.#{$ti-prefix}-logic-or:before { + content: $ti-icon-logic-or; +} +.#{$ti-prefix}-logic-xnor:before { + content: $ti-icon-logic-xnor; +} +.#{$ti-prefix}-logic-xor:before { + content: $ti-icon-logic-xor; +} +.#{$ti-prefix}-login:before { + content: $ti-icon-login; +} +.#{$ti-prefix}-login-2:before { + content: $ti-icon-login-2; +} +.#{$ti-prefix}-logout:before { + content: $ti-icon-logout; +} +.#{$ti-prefix}-logout-2:before { + content: $ti-icon-logout-2; +} +.#{$ti-prefix}-logs:before { + content: $ti-icon-logs; +} +.#{$ti-prefix}-lollipop:before { + content: $ti-icon-lollipop; +} +.#{$ti-prefix}-lollipop-off:before { + content: $ti-icon-lollipop-off; +} +.#{$ti-prefix}-luggage:before { + content: $ti-icon-luggage; +} +.#{$ti-prefix}-luggage-off:before { + content: $ti-icon-luggage-off; +} +.#{$ti-prefix}-lungs:before { + content: $ti-icon-lungs; +} +.#{$ti-prefix}-lungs-filled:before { + content: $ti-icon-lungs-filled; +} +.#{$ti-prefix}-lungs-off:before { + content: $ti-icon-lungs-off; +} +.#{$ti-prefix}-macro:before { + content: $ti-icon-macro; +} +.#{$ti-prefix}-macro-filled:before { + content: $ti-icon-macro-filled; +} +.#{$ti-prefix}-macro-off:before { + content: $ti-icon-macro-off; +} +.#{$ti-prefix}-magnet:before { + content: $ti-icon-magnet; +} +.#{$ti-prefix}-magnet-filled:before { + content: $ti-icon-magnet-filled; +} +.#{$ti-prefix}-magnet-off:before { + content: $ti-icon-magnet-off; +} +.#{$ti-prefix}-magnetic:before { + content: $ti-icon-magnetic; +} +.#{$ti-prefix}-mail:before { + content: $ti-icon-mail; +} +.#{$ti-prefix}-mail-ai:before { + content: $ti-icon-mail-ai; +} +.#{$ti-prefix}-mail-bolt:before { + content: $ti-icon-mail-bolt; +} +.#{$ti-prefix}-mail-cancel:before { + content: $ti-icon-mail-cancel; +} +.#{$ti-prefix}-mail-check:before { + content: $ti-icon-mail-check; +} +.#{$ti-prefix}-mail-code:before { + content: $ti-icon-mail-code; +} +.#{$ti-prefix}-mail-cog:before { + content: $ti-icon-mail-cog; +} +.#{$ti-prefix}-mail-dollar:before { + content: $ti-icon-mail-dollar; +} +.#{$ti-prefix}-mail-down:before { + content: $ti-icon-mail-down; +} +.#{$ti-prefix}-mail-exclamation:before { + content: $ti-icon-mail-exclamation; +} +.#{$ti-prefix}-mail-fast:before { + content: $ti-icon-mail-fast; +} +.#{$ti-prefix}-mail-filled:before { + content: $ti-icon-mail-filled; +} +.#{$ti-prefix}-mail-forward:before { + content: $ti-icon-mail-forward; +} +.#{$ti-prefix}-mail-heart:before { + content: $ti-icon-mail-heart; +} +.#{$ti-prefix}-mail-minus:before { + content: $ti-icon-mail-minus; +} +.#{$ti-prefix}-mail-off:before { + content: $ti-icon-mail-off; +} +.#{$ti-prefix}-mail-opened:before { + content: $ti-icon-mail-opened; +} +.#{$ti-prefix}-mail-opened-filled:before { + content: $ti-icon-mail-opened-filled; +} +.#{$ti-prefix}-mail-pause:before { + content: $ti-icon-mail-pause; +} +.#{$ti-prefix}-mail-pin:before { + content: $ti-icon-mail-pin; +} +.#{$ti-prefix}-mail-plus:before { + content: $ti-icon-mail-plus; +} +.#{$ti-prefix}-mail-question:before { + content: $ti-icon-mail-question; +} +.#{$ti-prefix}-mail-search:before { + content: $ti-icon-mail-search; +} +.#{$ti-prefix}-mail-share:before { + content: $ti-icon-mail-share; +} +.#{$ti-prefix}-mail-star:before { + content: $ti-icon-mail-star; +} +.#{$ti-prefix}-mail-up:before { + content: $ti-icon-mail-up; +} +.#{$ti-prefix}-mail-x:before { + content: $ti-icon-mail-x; +} +.#{$ti-prefix}-mailbox:before { + content: $ti-icon-mailbox; +} +.#{$ti-prefix}-mailbox-off:before { + content: $ti-icon-mailbox-off; +} +.#{$ti-prefix}-man:before { + content: $ti-icon-man; +} +.#{$ti-prefix}-man-filled:before { + content: $ti-icon-man-filled; +} +.#{$ti-prefix}-manual-gearbox:before { + content: $ti-icon-manual-gearbox; +} +.#{$ti-prefix}-manual-gearbox-filled:before { + content: $ti-icon-manual-gearbox-filled; +} +.#{$ti-prefix}-map:before { + content: $ti-icon-map; +} +.#{$ti-prefix}-map-2:before { + content: $ti-icon-map-2; +} +.#{$ti-prefix}-map-bolt:before { + content: $ti-icon-map-bolt; +} +.#{$ti-prefix}-map-cancel:before { + content: $ti-icon-map-cancel; +} +.#{$ti-prefix}-map-check:before { + content: $ti-icon-map-check; +} +.#{$ti-prefix}-map-code:before { + content: $ti-icon-map-code; +} +.#{$ti-prefix}-map-cog:before { + content: $ti-icon-map-cog; +} +.#{$ti-prefix}-map-discount:before { + content: $ti-icon-map-discount; +} +.#{$ti-prefix}-map-dollar:before { + content: $ti-icon-map-dollar; +} +.#{$ti-prefix}-map-down:before { + content: $ti-icon-map-down; +} +.#{$ti-prefix}-map-east:before { + content: $ti-icon-map-east; +} +.#{$ti-prefix}-map-exclamation:before { + content: $ti-icon-map-exclamation; +} +.#{$ti-prefix}-map-heart:before { + content: $ti-icon-map-heart; +} +.#{$ti-prefix}-map-minus:before { + content: $ti-icon-map-minus; +} +.#{$ti-prefix}-map-north:before { + content: $ti-icon-map-north; +} +.#{$ti-prefix}-map-off:before { + content: $ti-icon-map-off; +} +.#{$ti-prefix}-map-pause:before { + content: $ti-icon-map-pause; +} +.#{$ti-prefix}-map-pin:before { + content: $ti-icon-map-pin; +} +.#{$ti-prefix}-map-pin-2:before { + content: $ti-icon-map-pin-2; +} +.#{$ti-prefix}-map-pin-bolt:before { + content: $ti-icon-map-pin-bolt; +} +.#{$ti-prefix}-map-pin-cancel:before { + content: $ti-icon-map-pin-cancel; +} +.#{$ti-prefix}-map-pin-check:before { + content: $ti-icon-map-pin-check; +} +.#{$ti-prefix}-map-pin-code:before { + content: $ti-icon-map-pin-code; +} +.#{$ti-prefix}-map-pin-cog:before { + content: $ti-icon-map-pin-cog; +} +.#{$ti-prefix}-map-pin-dollar:before { + content: $ti-icon-map-pin-dollar; +} +.#{$ti-prefix}-map-pin-down:before { + content: $ti-icon-map-pin-down; +} +.#{$ti-prefix}-map-pin-exclamation:before { + content: $ti-icon-map-pin-exclamation; +} +.#{$ti-prefix}-map-pin-filled:before { + content: $ti-icon-map-pin-filled; +} +.#{$ti-prefix}-map-pin-heart:before { + content: $ti-icon-map-pin-heart; +} +.#{$ti-prefix}-map-pin-minus:before { + content: $ti-icon-map-pin-minus; +} +.#{$ti-prefix}-map-pin-off:before { + content: $ti-icon-map-pin-off; +} +.#{$ti-prefix}-map-pin-pause:before { + content: $ti-icon-map-pin-pause; +} +.#{$ti-prefix}-map-pin-pin:before { + content: $ti-icon-map-pin-pin; +} +.#{$ti-prefix}-map-pin-plus:before { + content: $ti-icon-map-pin-plus; +} +.#{$ti-prefix}-map-pin-question:before { + content: $ti-icon-map-pin-question; +} +.#{$ti-prefix}-map-pin-search:before { + content: $ti-icon-map-pin-search; +} +.#{$ti-prefix}-map-pin-share:before { + content: $ti-icon-map-pin-share; +} +.#{$ti-prefix}-map-pin-star:before { + content: $ti-icon-map-pin-star; +} +.#{$ti-prefix}-map-pin-up:before { + content: $ti-icon-map-pin-up; +} +.#{$ti-prefix}-map-pin-x:before { + content: $ti-icon-map-pin-x; +} +.#{$ti-prefix}-map-pins:before { + content: $ti-icon-map-pins; +} +.#{$ti-prefix}-map-plus:before { + content: $ti-icon-map-plus; +} +.#{$ti-prefix}-map-question:before { + content: $ti-icon-map-question; +} +.#{$ti-prefix}-map-route:before { + content: $ti-icon-map-route; +} +.#{$ti-prefix}-map-search:before { + content: $ti-icon-map-search; +} +.#{$ti-prefix}-map-share:before { + content: $ti-icon-map-share; +} +.#{$ti-prefix}-map-south:before { + content: $ti-icon-map-south; +} +.#{$ti-prefix}-map-star:before { + content: $ti-icon-map-star; +} +.#{$ti-prefix}-map-up:before { + content: $ti-icon-map-up; +} +.#{$ti-prefix}-map-west:before { + content: $ti-icon-map-west; +} +.#{$ti-prefix}-map-x:before { + content: $ti-icon-map-x; +} +.#{$ti-prefix}-markdown:before { + content: $ti-icon-markdown; +} +.#{$ti-prefix}-markdown-off:before { + content: $ti-icon-markdown-off; +} +.#{$ti-prefix}-marquee:before { + content: $ti-icon-marquee; +} +.#{$ti-prefix}-marquee-2:before { + content: $ti-icon-marquee-2; +} +.#{$ti-prefix}-marquee-off:before { + content: $ti-icon-marquee-off; +} +.#{$ti-prefix}-mars:before { + content: $ti-icon-mars; +} +.#{$ti-prefix}-mask:before { + content: $ti-icon-mask; +} +.#{$ti-prefix}-mask-off:before { + content: $ti-icon-mask-off; +} +.#{$ti-prefix}-masks-theater:before { + content: $ti-icon-masks-theater; +} +.#{$ti-prefix}-masks-theater-off:before { + content: $ti-icon-masks-theater-off; +} +.#{$ti-prefix}-massage:before { + content: $ti-icon-massage; +} +.#{$ti-prefix}-matchstick:before { + content: $ti-icon-matchstick; +} +.#{$ti-prefix}-math:before { + content: $ti-icon-math; +} +.#{$ti-prefix}-math-1-divide-2:before { + content: $ti-icon-math-1-divide-2; +} +.#{$ti-prefix}-math-1-divide-3:before { + content: $ti-icon-math-1-divide-3; +} +.#{$ti-prefix}-math-avg:before { + content: $ti-icon-math-avg; +} +.#{$ti-prefix}-math-equal-greater:before { + content: $ti-icon-math-equal-greater; +} +.#{$ti-prefix}-math-equal-lower:before { + content: $ti-icon-math-equal-lower; +} +.#{$ti-prefix}-math-function:before { + content: $ti-icon-math-function; +} +.#{$ti-prefix}-math-function-off:before { + content: $ti-icon-math-function-off; +} +.#{$ti-prefix}-math-function-y:before { + content: $ti-icon-math-function-y; +} +.#{$ti-prefix}-math-greater:before { + content: $ti-icon-math-greater; +} +.#{$ti-prefix}-math-integral:before { + content: $ti-icon-math-integral; +} +.#{$ti-prefix}-math-integral-x:before { + content: $ti-icon-math-integral-x; +} +.#{$ti-prefix}-math-integrals:before { + content: $ti-icon-math-integrals; +} +.#{$ti-prefix}-math-lower:before { + content: $ti-icon-math-lower; +} +.#{$ti-prefix}-math-max:before { + content: $ti-icon-math-max; +} +.#{$ti-prefix}-math-max-min:before { + content: $ti-icon-math-max-min; +} +.#{$ti-prefix}-math-min:before { + content: $ti-icon-math-min; +} +.#{$ti-prefix}-math-not:before { + content: $ti-icon-math-not; +} +.#{$ti-prefix}-math-off:before { + content: $ti-icon-math-off; +} +.#{$ti-prefix}-math-pi:before { + content: $ti-icon-math-pi; +} +.#{$ti-prefix}-math-pi-divide-2:before { + content: $ti-icon-math-pi-divide-2; +} +.#{$ti-prefix}-math-symbols:before { + content: $ti-icon-math-symbols; +} +.#{$ti-prefix}-math-x-divide-2:before { + content: $ti-icon-math-x-divide-2; +} +.#{$ti-prefix}-math-x-divide-y:before { + content: $ti-icon-math-x-divide-y; +} +.#{$ti-prefix}-math-x-divide-y-2:before { + content: $ti-icon-math-x-divide-y-2; +} +.#{$ti-prefix}-math-x-minus-x:before { + content: $ti-icon-math-x-minus-x; +} +.#{$ti-prefix}-math-x-minus-y:before { + content: $ti-icon-math-x-minus-y; +} +.#{$ti-prefix}-math-x-plus-x:before { + content: $ti-icon-math-x-plus-x; +} +.#{$ti-prefix}-math-x-plus-y:before { + content: $ti-icon-math-x-plus-y; +} +.#{$ti-prefix}-math-xy:before { + content: $ti-icon-math-xy; +} +.#{$ti-prefix}-math-y-minus-y:before { + content: $ti-icon-math-y-minus-y; +} +.#{$ti-prefix}-math-y-plus-y:before { + content: $ti-icon-math-y-plus-y; +} +.#{$ti-prefix}-maximize:before { + content: $ti-icon-maximize; +} +.#{$ti-prefix}-maximize-off:before { + content: $ti-icon-maximize-off; +} +.#{$ti-prefix}-meat:before { + content: $ti-icon-meat; +} +.#{$ti-prefix}-meat-off:before { + content: $ti-icon-meat-off; +} +.#{$ti-prefix}-medal:before { + content: $ti-icon-medal; +} +.#{$ti-prefix}-medal-2:before { + content: $ti-icon-medal-2; +} +.#{$ti-prefix}-medical-cross:before { + content: $ti-icon-medical-cross; +} +.#{$ti-prefix}-medical-cross-circle:before { + content: $ti-icon-medical-cross-circle; +} +.#{$ti-prefix}-medical-cross-filled:before { + content: $ti-icon-medical-cross-filled; +} +.#{$ti-prefix}-medical-cross-off:before { + content: $ti-icon-medical-cross-off; +} +.#{$ti-prefix}-medicine-syrup:before { + content: $ti-icon-medicine-syrup; +} +.#{$ti-prefix}-meeple:before { + content: $ti-icon-meeple; +} +.#{$ti-prefix}-melon:before { + content: $ti-icon-melon; +} +.#{$ti-prefix}-menorah:before { + content: $ti-icon-menorah; +} +.#{$ti-prefix}-menu:before { + content: $ti-icon-menu; +} +.#{$ti-prefix}-menu-2:before { + content: $ti-icon-menu-2; +} +.#{$ti-prefix}-menu-deep:before { + content: $ti-icon-menu-deep; +} +.#{$ti-prefix}-menu-order:before { + content: $ti-icon-menu-order; +} +.#{$ti-prefix}-message:before { + content: $ti-icon-message; +} +.#{$ti-prefix}-message-2:before { + content: $ti-icon-message-2; +} +.#{$ti-prefix}-message-2-bolt:before { + content: $ti-icon-message-2-bolt; +} +.#{$ti-prefix}-message-2-cancel:before { + content: $ti-icon-message-2-cancel; +} +.#{$ti-prefix}-message-2-check:before { + content: $ti-icon-message-2-check; +} +.#{$ti-prefix}-message-2-code:before { + content: $ti-icon-message-2-code; +} +.#{$ti-prefix}-message-2-cog:before { + content: $ti-icon-message-2-cog; +} +.#{$ti-prefix}-message-2-dollar:before { + content: $ti-icon-message-2-dollar; +} +.#{$ti-prefix}-message-2-down:before { + content: $ti-icon-message-2-down; +} +.#{$ti-prefix}-message-2-exclamation:before { + content: $ti-icon-message-2-exclamation; +} +.#{$ti-prefix}-message-2-heart:before { + content: $ti-icon-message-2-heart; +} +.#{$ti-prefix}-message-2-minus:before { + content: $ti-icon-message-2-minus; +} +.#{$ti-prefix}-message-2-off:before { + content: $ti-icon-message-2-off; +} +.#{$ti-prefix}-message-2-pause:before { + content: $ti-icon-message-2-pause; +} +.#{$ti-prefix}-message-2-pin:before { + content: $ti-icon-message-2-pin; +} +.#{$ti-prefix}-message-2-plus:before { + content: $ti-icon-message-2-plus; +} +.#{$ti-prefix}-message-2-question:before { + content: $ti-icon-message-2-question; +} +.#{$ti-prefix}-message-2-search:before { + content: $ti-icon-message-2-search; +} +.#{$ti-prefix}-message-2-share:before { + content: $ti-icon-message-2-share; +} +.#{$ti-prefix}-message-2-star:before { + content: $ti-icon-message-2-star; +} +.#{$ti-prefix}-message-2-up:before { + content: $ti-icon-message-2-up; +} +.#{$ti-prefix}-message-2-x:before { + content: $ti-icon-message-2-x; +} +.#{$ti-prefix}-message-bolt:before { + content: $ti-icon-message-bolt; +} +.#{$ti-prefix}-message-cancel:before { + content: $ti-icon-message-cancel; +} +.#{$ti-prefix}-message-chatbot:before { + content: $ti-icon-message-chatbot; +} +.#{$ti-prefix}-message-chatbot-filled:before { + content: $ti-icon-message-chatbot-filled; +} +.#{$ti-prefix}-message-check:before { + content: $ti-icon-message-check; +} +.#{$ti-prefix}-message-circle:before { + content: $ti-icon-message-circle; +} +.#{$ti-prefix}-message-circle-bolt:before { + content: $ti-icon-message-circle-bolt; +} +.#{$ti-prefix}-message-circle-cancel:before { + content: $ti-icon-message-circle-cancel; +} +.#{$ti-prefix}-message-circle-check:before { + content: $ti-icon-message-circle-check; +} +.#{$ti-prefix}-message-circle-code:before { + content: $ti-icon-message-circle-code; +} +.#{$ti-prefix}-message-circle-cog:before { + content: $ti-icon-message-circle-cog; +} +.#{$ti-prefix}-message-circle-dollar:before { + content: $ti-icon-message-circle-dollar; +} +.#{$ti-prefix}-message-circle-down:before { + content: $ti-icon-message-circle-down; +} +.#{$ti-prefix}-message-circle-exclamation:before { + content: $ti-icon-message-circle-exclamation; +} +.#{$ti-prefix}-message-circle-filled:before { + content: $ti-icon-message-circle-filled; +} +.#{$ti-prefix}-message-circle-heart:before { + content: $ti-icon-message-circle-heart; +} +.#{$ti-prefix}-message-circle-minus:before { + content: $ti-icon-message-circle-minus; +} +.#{$ti-prefix}-message-circle-off:before { + content: $ti-icon-message-circle-off; +} +.#{$ti-prefix}-message-circle-pause:before { + content: $ti-icon-message-circle-pause; +} +.#{$ti-prefix}-message-circle-pin:before { + content: $ti-icon-message-circle-pin; +} +.#{$ti-prefix}-message-circle-plus:before { + content: $ti-icon-message-circle-plus; +} +.#{$ti-prefix}-message-circle-question:before { + content: $ti-icon-message-circle-question; +} +.#{$ti-prefix}-message-circle-search:before { + content: $ti-icon-message-circle-search; +} +.#{$ti-prefix}-message-circle-share:before { + content: $ti-icon-message-circle-share; +} +.#{$ti-prefix}-message-circle-star:before { + content: $ti-icon-message-circle-star; +} +.#{$ti-prefix}-message-circle-up:before { + content: $ti-icon-message-circle-up; +} +.#{$ti-prefix}-message-circle-user:before { + content: $ti-icon-message-circle-user; +} +.#{$ti-prefix}-message-circle-x:before { + content: $ti-icon-message-circle-x; +} +.#{$ti-prefix}-message-code:before { + content: $ti-icon-message-code; +} +.#{$ti-prefix}-message-cog:before { + content: $ti-icon-message-cog; +} +.#{$ti-prefix}-message-dollar:before { + content: $ti-icon-message-dollar; +} +.#{$ti-prefix}-message-dots:before { + content: $ti-icon-message-dots; +} +.#{$ti-prefix}-message-down:before { + content: $ti-icon-message-down; +} +.#{$ti-prefix}-message-exclamation:before { + content: $ti-icon-message-exclamation; +} +.#{$ti-prefix}-message-filled:before { + content: $ti-icon-message-filled; +} +.#{$ti-prefix}-message-forward:before { + content: $ti-icon-message-forward; +} +.#{$ti-prefix}-message-heart:before { + content: $ti-icon-message-heart; +} +.#{$ti-prefix}-message-language:before { + content: $ti-icon-message-language; +} +.#{$ti-prefix}-message-minus:before { + content: $ti-icon-message-minus; +} +.#{$ti-prefix}-message-off:before { + content: $ti-icon-message-off; +} +.#{$ti-prefix}-message-pause:before { + content: $ti-icon-message-pause; +} +.#{$ti-prefix}-message-pin:before { + content: $ti-icon-message-pin; +} +.#{$ti-prefix}-message-plus:before { + content: $ti-icon-message-plus; +} +.#{$ti-prefix}-message-question:before { + content: $ti-icon-message-question; +} +.#{$ti-prefix}-message-reply:before { + content: $ti-icon-message-reply; +} +.#{$ti-prefix}-message-report:before { + content: $ti-icon-message-report; +} +.#{$ti-prefix}-message-report-filled:before { + content: $ti-icon-message-report-filled; +} +.#{$ti-prefix}-message-search:before { + content: $ti-icon-message-search; +} +.#{$ti-prefix}-message-share:before { + content: $ti-icon-message-share; +} +.#{$ti-prefix}-message-star:before { + content: $ti-icon-message-star; +} +.#{$ti-prefix}-message-up:before { + content: $ti-icon-message-up; +} +.#{$ti-prefix}-message-user:before { + content: $ti-icon-message-user; +} +.#{$ti-prefix}-message-x:before { + content: $ti-icon-message-x; +} +.#{$ti-prefix}-messages:before { + content: $ti-icon-messages; +} +.#{$ti-prefix}-messages-off:before { + content: $ti-icon-messages-off; +} +.#{$ti-prefix}-meteor:before { + content: $ti-icon-meteor; +} +.#{$ti-prefix}-meteor-off:before { + content: $ti-icon-meteor-off; +} +.#{$ti-prefix}-meter-cube:before { + content: $ti-icon-meter-cube; +} +.#{$ti-prefix}-meter-square:before { + content: $ti-icon-meter-square; +} +.#{$ti-prefix}-metronome:before { + content: $ti-icon-metronome; +} +.#{$ti-prefix}-michelin-bib-gourmand:before { + content: $ti-icon-michelin-bib-gourmand; +} +.#{$ti-prefix}-michelin-star:before { + content: $ti-icon-michelin-star; +} +.#{$ti-prefix}-michelin-star-green:before { + content: $ti-icon-michelin-star-green; +} +.#{$ti-prefix}-mickey:before { + content: $ti-icon-mickey; +} +.#{$ti-prefix}-mickey-filled:before { + content: $ti-icon-mickey-filled; +} +.#{$ti-prefix}-microphone:before { + content: $ti-icon-microphone; +} +.#{$ti-prefix}-microphone-2:before { + content: $ti-icon-microphone-2; +} +.#{$ti-prefix}-microphone-2-off:before { + content: $ti-icon-microphone-2-off; +} +.#{$ti-prefix}-microphone-filled:before { + content: $ti-icon-microphone-filled; +} +.#{$ti-prefix}-microphone-off:before { + content: $ti-icon-microphone-off; +} +.#{$ti-prefix}-microscope:before { + content: $ti-icon-microscope; +} +.#{$ti-prefix}-microscope-off:before { + content: $ti-icon-microscope-off; +} +.#{$ti-prefix}-microwave:before { + content: $ti-icon-microwave; +} +.#{$ti-prefix}-microwave-filled:before { + content: $ti-icon-microwave-filled; +} +.#{$ti-prefix}-microwave-off:before { + content: $ti-icon-microwave-off; +} +.#{$ti-prefix}-military-award:before { + content: $ti-icon-military-award; +} +.#{$ti-prefix}-military-rank:before { + content: $ti-icon-military-rank; +} +.#{$ti-prefix}-milk:before { + content: $ti-icon-milk; +} +.#{$ti-prefix}-milk-off:before { + content: $ti-icon-milk-off; +} +.#{$ti-prefix}-milkshake:before { + content: $ti-icon-milkshake; +} +.#{$ti-prefix}-minimize:before { + content: $ti-icon-minimize; +} +.#{$ti-prefix}-minus:before { + content: $ti-icon-minus; +} +.#{$ti-prefix}-minus-vertical:before { + content: $ti-icon-minus-vertical; +} +.#{$ti-prefix}-mist:before { + content: $ti-icon-mist; +} +.#{$ti-prefix}-mist-off:before { + content: $ti-icon-mist-off; +} +.#{$ti-prefix}-mobiledata:before { + content: $ti-icon-mobiledata; +} +.#{$ti-prefix}-mobiledata-off:before { + content: $ti-icon-mobiledata-off; +} +.#{$ti-prefix}-moneybag:before { + content: $ti-icon-moneybag; +} +.#{$ti-prefix}-monkeybar:before { + content: $ti-icon-monkeybar; +} +.#{$ti-prefix}-mood-angry:before { + content: $ti-icon-mood-angry; +} +.#{$ti-prefix}-mood-annoyed:before { + content: $ti-icon-mood-annoyed; +} +.#{$ti-prefix}-mood-annoyed-2:before { + content: $ti-icon-mood-annoyed-2; +} +.#{$ti-prefix}-mood-boy:before { + content: $ti-icon-mood-boy; +} +.#{$ti-prefix}-mood-check:before { + content: $ti-icon-mood-check; +} +.#{$ti-prefix}-mood-cog:before { + content: $ti-icon-mood-cog; +} +.#{$ti-prefix}-mood-confuzed:before { + content: $ti-icon-mood-confuzed; +} +.#{$ti-prefix}-mood-confuzed-filled:before { + content: $ti-icon-mood-confuzed-filled; +} +.#{$ti-prefix}-mood-crazy-happy:before { + content: $ti-icon-mood-crazy-happy; +} +.#{$ti-prefix}-mood-cry:before { + content: $ti-icon-mood-cry; +} +.#{$ti-prefix}-mood-dollar:before { + content: $ti-icon-mood-dollar; +} +.#{$ti-prefix}-mood-edit:before { + content: $ti-icon-mood-edit; +} +.#{$ti-prefix}-mood-empty:before { + content: $ti-icon-mood-empty; +} +.#{$ti-prefix}-mood-empty-filled:before { + content: $ti-icon-mood-empty-filled; +} +.#{$ti-prefix}-mood-happy:before { + content: $ti-icon-mood-happy; +} +.#{$ti-prefix}-mood-happy-filled:before { + content: $ti-icon-mood-happy-filled; +} +.#{$ti-prefix}-mood-heart:before { + content: $ti-icon-mood-heart; +} +.#{$ti-prefix}-mood-kid:before { + content: $ti-icon-mood-kid; +} +.#{$ti-prefix}-mood-kid-filled:before { + content: $ti-icon-mood-kid-filled; +} +.#{$ti-prefix}-mood-look-down:before { + content: $ti-icon-mood-look-down; +} +.#{$ti-prefix}-mood-look-left:before { + content: $ti-icon-mood-look-left; +} +.#{$ti-prefix}-mood-look-right:before { + content: $ti-icon-mood-look-right; +} +.#{$ti-prefix}-mood-look-up:before { + content: $ti-icon-mood-look-up; +} +.#{$ti-prefix}-mood-minus:before { + content: $ti-icon-mood-minus; +} +.#{$ti-prefix}-mood-nerd:before { + content: $ti-icon-mood-nerd; +} +.#{$ti-prefix}-mood-nervous:before { + content: $ti-icon-mood-nervous; +} +.#{$ti-prefix}-mood-neutral:before { + content: $ti-icon-mood-neutral; +} +.#{$ti-prefix}-mood-neutral-filled:before { + content: $ti-icon-mood-neutral-filled; +} +.#{$ti-prefix}-mood-off:before { + content: $ti-icon-mood-off; +} +.#{$ti-prefix}-mood-pin:before { + content: $ti-icon-mood-pin; +} +.#{$ti-prefix}-mood-plus:before { + content: $ti-icon-mood-plus; +} +.#{$ti-prefix}-mood-puzzled:before { + content: $ti-icon-mood-puzzled; +} +.#{$ti-prefix}-mood-sad:before { + content: $ti-icon-mood-sad; +} +.#{$ti-prefix}-mood-sad-2:before { + content: $ti-icon-mood-sad-2; +} +.#{$ti-prefix}-mood-sad-dizzy:before { + content: $ti-icon-mood-sad-dizzy; +} +.#{$ti-prefix}-mood-sad-filled:before { + content: $ti-icon-mood-sad-filled; +} +.#{$ti-prefix}-mood-sad-squint:before { + content: $ti-icon-mood-sad-squint; +} +.#{$ti-prefix}-mood-search:before { + content: $ti-icon-mood-search; +} +.#{$ti-prefix}-mood-share:before { + content: $ti-icon-mood-share; +} +.#{$ti-prefix}-mood-sick:before { + content: $ti-icon-mood-sick; +} +.#{$ti-prefix}-mood-silence:before { + content: $ti-icon-mood-silence; +} +.#{$ti-prefix}-mood-sing:before { + content: $ti-icon-mood-sing; +} +.#{$ti-prefix}-mood-smile:before { + content: $ti-icon-mood-smile; +} +.#{$ti-prefix}-mood-smile-beam:before { + content: $ti-icon-mood-smile-beam; +} +.#{$ti-prefix}-mood-smile-dizzy:before { + content: $ti-icon-mood-smile-dizzy; +} +.#{$ti-prefix}-mood-smile-filled:before { + content: $ti-icon-mood-smile-filled; +} +.#{$ti-prefix}-mood-suprised:before { + content: $ti-icon-mood-suprised; +} +.#{$ti-prefix}-mood-tongue:before { + content: $ti-icon-mood-tongue; +} +.#{$ti-prefix}-mood-tongue-wink:before { + content: $ti-icon-mood-tongue-wink; +} +.#{$ti-prefix}-mood-tongue-wink-2:before { + content: $ti-icon-mood-tongue-wink-2; +} +.#{$ti-prefix}-mood-unamused:before { + content: $ti-icon-mood-unamused; +} +.#{$ti-prefix}-mood-up:before { + content: $ti-icon-mood-up; +} +.#{$ti-prefix}-mood-wink:before { + content: $ti-icon-mood-wink; +} +.#{$ti-prefix}-mood-wink-2:before { + content: $ti-icon-mood-wink-2; +} +.#{$ti-prefix}-mood-wrrr:before { + content: $ti-icon-mood-wrrr; +} +.#{$ti-prefix}-mood-x:before { + content: $ti-icon-mood-x; +} +.#{$ti-prefix}-mood-xd:before { + content: $ti-icon-mood-xd; +} +.#{$ti-prefix}-moon:before { + content: $ti-icon-moon; +} +.#{$ti-prefix}-moon-2:before { + content: $ti-icon-moon-2; +} +.#{$ti-prefix}-moon-filled:before { + content: $ti-icon-moon-filled; +} +.#{$ti-prefix}-moon-off:before { + content: $ti-icon-moon-off; +} +.#{$ti-prefix}-moon-stars:before { + content: $ti-icon-moon-stars; +} +.#{$ti-prefix}-moped:before { + content: $ti-icon-moped; +} +.#{$ti-prefix}-motorbike:before { + content: $ti-icon-motorbike; +} +.#{$ti-prefix}-mountain:before { + content: $ti-icon-mountain; +} +.#{$ti-prefix}-mountain-off:before { + content: $ti-icon-mountain-off; +} +.#{$ti-prefix}-mouse:before { + content: $ti-icon-mouse; +} +.#{$ti-prefix}-mouse-2:before { + content: $ti-icon-mouse-2; +} +.#{$ti-prefix}-mouse-filled:before { + content: $ti-icon-mouse-filled; +} +.#{$ti-prefix}-mouse-off:before { + content: $ti-icon-mouse-off; +} +.#{$ti-prefix}-moustache:before { + content: $ti-icon-moustache; +} +.#{$ti-prefix}-movie:before { + content: $ti-icon-movie; +} +.#{$ti-prefix}-movie-off:before { + content: $ti-icon-movie-off; +} +.#{$ti-prefix}-mug:before { + content: $ti-icon-mug; +} +.#{$ti-prefix}-mug-off:before { + content: $ti-icon-mug-off; +} +.#{$ti-prefix}-multiplier-0-5x:before { + content: $ti-icon-multiplier-0-5x; +} +.#{$ti-prefix}-multiplier-1-5x:before { + content: $ti-icon-multiplier-1-5x; +} +.#{$ti-prefix}-multiplier-1x:before { + content: $ti-icon-multiplier-1x; +} +.#{$ti-prefix}-multiplier-2x:before { + content: $ti-icon-multiplier-2x; +} +.#{$ti-prefix}-mushroom:before { + content: $ti-icon-mushroom; +} +.#{$ti-prefix}-mushroom-filled:before { + content: $ti-icon-mushroom-filled; +} +.#{$ti-prefix}-mushroom-off:before { + content: $ti-icon-mushroom-off; +} +.#{$ti-prefix}-music:before { + content: $ti-icon-music; +} +.#{$ti-prefix}-music-bolt:before { + content: $ti-icon-music-bolt; +} +.#{$ti-prefix}-music-cancel:before { + content: $ti-icon-music-cancel; +} +.#{$ti-prefix}-music-check:before { + content: $ti-icon-music-check; +} +.#{$ti-prefix}-music-code:before { + content: $ti-icon-music-code; +} +.#{$ti-prefix}-music-cog:before { + content: $ti-icon-music-cog; +} +.#{$ti-prefix}-music-discount:before { + content: $ti-icon-music-discount; +} +.#{$ti-prefix}-music-dollar:before { + content: $ti-icon-music-dollar; +} +.#{$ti-prefix}-music-down:before { + content: $ti-icon-music-down; +} +.#{$ti-prefix}-music-exclamation:before { + content: $ti-icon-music-exclamation; +} +.#{$ti-prefix}-music-heart:before { + content: $ti-icon-music-heart; +} +.#{$ti-prefix}-music-minus:before { + content: $ti-icon-music-minus; +} +.#{$ti-prefix}-music-off:before { + content: $ti-icon-music-off; +} +.#{$ti-prefix}-music-pause:before { + content: $ti-icon-music-pause; +} +.#{$ti-prefix}-music-pin:before { + content: $ti-icon-music-pin; +} +.#{$ti-prefix}-music-plus:before { + content: $ti-icon-music-plus; +} +.#{$ti-prefix}-music-question:before { + content: $ti-icon-music-question; +} +.#{$ti-prefix}-music-search:before { + content: $ti-icon-music-search; +} +.#{$ti-prefix}-music-share:before { + content: $ti-icon-music-share; +} +.#{$ti-prefix}-music-star:before { + content: $ti-icon-music-star; +} +.#{$ti-prefix}-music-up:before { + content: $ti-icon-music-up; +} +.#{$ti-prefix}-music-x:before { + content: $ti-icon-music-x; +} +.#{$ti-prefix}-navigation:before { + content: $ti-icon-navigation; +} +.#{$ti-prefix}-navigation-bolt:before { + content: $ti-icon-navigation-bolt; +} +.#{$ti-prefix}-navigation-cancel:before { + content: $ti-icon-navigation-cancel; +} +.#{$ti-prefix}-navigation-check:before { + content: $ti-icon-navigation-check; +} +.#{$ti-prefix}-navigation-code:before { + content: $ti-icon-navigation-code; +} +.#{$ti-prefix}-navigation-cog:before { + content: $ti-icon-navigation-cog; +} +.#{$ti-prefix}-navigation-discount:before { + content: $ti-icon-navigation-discount; +} +.#{$ti-prefix}-navigation-dollar:before { + content: $ti-icon-navigation-dollar; +} +.#{$ti-prefix}-navigation-down:before { + content: $ti-icon-navigation-down; +} +.#{$ti-prefix}-navigation-east:before { + content: $ti-icon-navigation-east; +} +.#{$ti-prefix}-navigation-exclamation:before { + content: $ti-icon-navigation-exclamation; +} +.#{$ti-prefix}-navigation-filled:before { + content: $ti-icon-navigation-filled; +} +.#{$ti-prefix}-navigation-heart:before { + content: $ti-icon-navigation-heart; +} +.#{$ti-prefix}-navigation-minus:before { + content: $ti-icon-navigation-minus; +} +.#{$ti-prefix}-navigation-north:before { + content: $ti-icon-navigation-north; +} +.#{$ti-prefix}-navigation-off:before { + content: $ti-icon-navigation-off; +} +.#{$ti-prefix}-navigation-pause:before { + content: $ti-icon-navigation-pause; +} +.#{$ti-prefix}-navigation-pin:before { + content: $ti-icon-navigation-pin; +} +.#{$ti-prefix}-navigation-plus:before { + content: $ti-icon-navigation-plus; +} +.#{$ti-prefix}-navigation-question:before { + content: $ti-icon-navigation-question; +} +.#{$ti-prefix}-navigation-search:before { + content: $ti-icon-navigation-search; +} +.#{$ti-prefix}-navigation-share:before { + content: $ti-icon-navigation-share; +} +.#{$ti-prefix}-navigation-south:before { + content: $ti-icon-navigation-south; +} +.#{$ti-prefix}-navigation-star:before { + content: $ti-icon-navigation-star; +} +.#{$ti-prefix}-navigation-top:before { + content: $ti-icon-navigation-top; +} +.#{$ti-prefix}-navigation-up:before { + content: $ti-icon-navigation-up; +} +.#{$ti-prefix}-navigation-west:before { + content: $ti-icon-navigation-west; +} +.#{$ti-prefix}-navigation-x:before { + content: $ti-icon-navigation-x; +} +.#{$ti-prefix}-needle:before { + content: $ti-icon-needle; +} +.#{$ti-prefix}-needle-thread:before { + content: $ti-icon-needle-thread; +} +.#{$ti-prefix}-network:before { + content: $ti-icon-network; +} +.#{$ti-prefix}-network-off:before { + content: $ti-icon-network-off; +} +.#{$ti-prefix}-new-section:before { + content: $ti-icon-new-section; +} +.#{$ti-prefix}-news:before { + content: $ti-icon-news; +} +.#{$ti-prefix}-news-off:before { + content: $ti-icon-news-off; +} +.#{$ti-prefix}-nfc:before { + content: $ti-icon-nfc; +} +.#{$ti-prefix}-nfc-off:before { + content: $ti-icon-nfc-off; +} +.#{$ti-prefix}-no-copyright:before { + content: $ti-icon-no-copyright; +} +.#{$ti-prefix}-no-creative-commons:before { + content: $ti-icon-no-creative-commons; +} +.#{$ti-prefix}-no-derivatives:before { + content: $ti-icon-no-derivatives; +} +.#{$ti-prefix}-north-star:before { + content: $ti-icon-north-star; +} +.#{$ti-prefix}-note:before { + content: $ti-icon-note; +} +.#{$ti-prefix}-note-off:before { + content: $ti-icon-note-off; +} +.#{$ti-prefix}-notebook:before { + content: $ti-icon-notebook; +} +.#{$ti-prefix}-notebook-off:before { + content: $ti-icon-notebook-off; +} +.#{$ti-prefix}-notes:before { + content: $ti-icon-notes; +} +.#{$ti-prefix}-notes-off:before { + content: $ti-icon-notes-off; +} +.#{$ti-prefix}-notification:before { + content: $ti-icon-notification; +} +.#{$ti-prefix}-notification-off:before { + content: $ti-icon-notification-off; +} +.#{$ti-prefix}-number:before { + content: $ti-icon-number; +} +.#{$ti-prefix}-number-0:before { + content: $ti-icon-number-0; +} +.#{$ti-prefix}-number-0-small:before { + content: $ti-icon-number-0-small; +} +.#{$ti-prefix}-number-1:before { + content: $ti-icon-number-1; +} +.#{$ti-prefix}-number-1-small:before { + content: $ti-icon-number-1-small; +} +.#{$ti-prefix}-number-10-small:before { + content: $ti-icon-number-10-small; +} +.#{$ti-prefix}-number-11-small:before { + content: $ti-icon-number-11-small; +} +.#{$ti-prefix}-number-12-small:before { + content: $ti-icon-number-12-small; +} +.#{$ti-prefix}-number-123:before { + content: $ti-icon-number-123; +} +.#{$ti-prefix}-number-13-small:before { + content: $ti-icon-number-13-small; +} +.#{$ti-prefix}-number-14-small:before { + content: $ti-icon-number-14-small; +} +.#{$ti-prefix}-number-15-small:before { + content: $ti-icon-number-15-small; +} +.#{$ti-prefix}-number-16-small:before { + content: $ti-icon-number-16-small; +} +.#{$ti-prefix}-number-17-small:before { + content: $ti-icon-number-17-small; +} +.#{$ti-prefix}-number-18-small:before { + content: $ti-icon-number-18-small; +} +.#{$ti-prefix}-number-19-small:before { + content: $ti-icon-number-19-small; +} +.#{$ti-prefix}-number-2:before { + content: $ti-icon-number-2; +} +.#{$ti-prefix}-number-2-small:before { + content: $ti-icon-number-2-small; +} +.#{$ti-prefix}-number-20-small:before { + content: $ti-icon-number-20-small; +} +.#{$ti-prefix}-number-21-small:before { + content: $ti-icon-number-21-small; +} +.#{$ti-prefix}-number-22-small:before { + content: $ti-icon-number-22-small; +} +.#{$ti-prefix}-number-23-small:before { + content: $ti-icon-number-23-small; +} +.#{$ti-prefix}-number-24-small:before { + content: $ti-icon-number-24-small; +} +.#{$ti-prefix}-number-25-small:before { + content: $ti-icon-number-25-small; +} +.#{$ti-prefix}-number-26-small:before { + content: $ti-icon-number-26-small; +} +.#{$ti-prefix}-number-27-small:before { + content: $ti-icon-number-27-small; +} +.#{$ti-prefix}-number-28-small:before { + content: $ti-icon-number-28-small; +} +.#{$ti-prefix}-number-29-small:before { + content: $ti-icon-number-29-small; +} +.#{$ti-prefix}-number-3:before { + content: $ti-icon-number-3; +} +.#{$ti-prefix}-number-3-small:before { + content: $ti-icon-number-3-small; +} +.#{$ti-prefix}-number-4:before { + content: $ti-icon-number-4; +} +.#{$ti-prefix}-number-4-small:before { + content: $ti-icon-number-4-small; +} +.#{$ti-prefix}-number-5:before { + content: $ti-icon-number-5; +} +.#{$ti-prefix}-number-5-small:before { + content: $ti-icon-number-5-small; +} +.#{$ti-prefix}-number-6:before { + content: $ti-icon-number-6; +} +.#{$ti-prefix}-number-6-small:before { + content: $ti-icon-number-6-small; +} +.#{$ti-prefix}-number-7:before { + content: $ti-icon-number-7; +} +.#{$ti-prefix}-number-7-small:before { + content: $ti-icon-number-7-small; +} +.#{$ti-prefix}-number-8:before { + content: $ti-icon-number-8; +} +.#{$ti-prefix}-number-8-small:before { + content: $ti-icon-number-8-small; +} +.#{$ti-prefix}-number-9:before { + content: $ti-icon-number-9; +} +.#{$ti-prefix}-number-9-small:before { + content: $ti-icon-number-9-small; +} +.#{$ti-prefix}-numbers:before { + content: $ti-icon-numbers; +} +.#{$ti-prefix}-nurse:before { + content: $ti-icon-nurse; +} +.#{$ti-prefix}-nut:before { + content: $ti-icon-nut; +} +.#{$ti-prefix}-octagon:before { + content: $ti-icon-octagon; +} +.#{$ti-prefix}-octagon-filled:before { + content: $ti-icon-octagon-filled; +} +.#{$ti-prefix}-octagon-minus:before { + content: $ti-icon-octagon-minus; +} +.#{$ti-prefix}-octagon-minus-2:before { + content: $ti-icon-octagon-minus-2; +} +.#{$ti-prefix}-octagon-off:before { + content: $ti-icon-octagon-off; +} +.#{$ti-prefix}-octagon-plus:before { + content: $ti-icon-octagon-plus; +} +.#{$ti-prefix}-octagon-plus-2:before { + content: $ti-icon-octagon-plus-2; +} +.#{$ti-prefix}-octahedron:before { + content: $ti-icon-octahedron; +} +.#{$ti-prefix}-octahedron-off:before { + content: $ti-icon-octahedron-off; +} +.#{$ti-prefix}-octahedron-plus:before { + content: $ti-icon-octahedron-plus; +} +.#{$ti-prefix}-old:before { + content: $ti-icon-old; +} +.#{$ti-prefix}-olympics:before { + content: $ti-icon-olympics; +} +.#{$ti-prefix}-olympics-off:before { + content: $ti-icon-olympics-off; +} +.#{$ti-prefix}-om:before { + content: $ti-icon-om; +} +.#{$ti-prefix}-omega:before { + content: $ti-icon-omega; +} +.#{$ti-prefix}-outbound:before { + content: $ti-icon-outbound; +} +.#{$ti-prefix}-outlet:before { + content: $ti-icon-outlet; +} +.#{$ti-prefix}-oval:before { + content: $ti-icon-oval; +} +.#{$ti-prefix}-oval-filled:before { + content: $ti-icon-oval-filled; +} +.#{$ti-prefix}-oval-vertical:before { + content: $ti-icon-oval-vertical; +} +.#{$ti-prefix}-oval-vertical-filled:before { + content: $ti-icon-oval-vertical-filled; +} +.#{$ti-prefix}-overline:before { + content: $ti-icon-overline; +} +.#{$ti-prefix}-package:before { + content: $ti-icon-package; +} +.#{$ti-prefix}-package-export:before { + content: $ti-icon-package-export; +} +.#{$ti-prefix}-package-import:before { + content: $ti-icon-package-import; +} +.#{$ti-prefix}-package-off:before { + content: $ti-icon-package-off; +} +.#{$ti-prefix}-packages:before { + content: $ti-icon-packages; +} +.#{$ti-prefix}-pacman:before { + content: $ti-icon-pacman; +} +.#{$ti-prefix}-page-break:before { + content: $ti-icon-page-break; +} +.#{$ti-prefix}-paint:before { + content: $ti-icon-paint; +} +.#{$ti-prefix}-paint-filled:before { + content: $ti-icon-paint-filled; +} +.#{$ti-prefix}-paint-off:before { + content: $ti-icon-paint-off; +} +.#{$ti-prefix}-palette:before { + content: $ti-icon-palette; +} +.#{$ti-prefix}-palette-off:before { + content: $ti-icon-palette-off; +} +.#{$ti-prefix}-panorama-horizontal:before { + content: $ti-icon-panorama-horizontal; +} +.#{$ti-prefix}-panorama-horizontal-filled:before { + content: $ti-icon-panorama-horizontal-filled; +} +.#{$ti-prefix}-panorama-horizontal-off:before { + content: $ti-icon-panorama-horizontal-off; +} +.#{$ti-prefix}-panorama-vertical:before { + content: $ti-icon-panorama-vertical; +} +.#{$ti-prefix}-panorama-vertical-filled:before { + content: $ti-icon-panorama-vertical-filled; +} +.#{$ti-prefix}-panorama-vertical-off:before { + content: $ti-icon-panorama-vertical-off; +} +.#{$ti-prefix}-paper-bag:before { + content: $ti-icon-paper-bag; +} +.#{$ti-prefix}-paper-bag-off:before { + content: $ti-icon-paper-bag-off; +} +.#{$ti-prefix}-paperclip:before { + content: $ti-icon-paperclip; +} +.#{$ti-prefix}-parachute:before { + content: $ti-icon-parachute; +} +.#{$ti-prefix}-parachute-off:before { + content: $ti-icon-parachute-off; +} +.#{$ti-prefix}-parentheses:before { + content: $ti-icon-parentheses; +} +.#{$ti-prefix}-parentheses-off:before { + content: $ti-icon-parentheses-off; +} +.#{$ti-prefix}-parking:before { + content: $ti-icon-parking; +} +.#{$ti-prefix}-parking-circle:before { + content: $ti-icon-parking-circle; +} +.#{$ti-prefix}-parking-circle-filled:before { + content: $ti-icon-parking-circle-filled; +} +.#{$ti-prefix}-parking-off:before { + content: $ti-icon-parking-off; +} +.#{$ti-prefix}-password:before { + content: $ti-icon-password; +} +.#{$ti-prefix}-password-fingerprint:before { + content: $ti-icon-password-fingerprint; +} +.#{$ti-prefix}-password-mobile-phone:before { + content: $ti-icon-password-mobile-phone; +} +.#{$ti-prefix}-password-user:before { + content: $ti-icon-password-user; +} +.#{$ti-prefix}-paw:before { + content: $ti-icon-paw; +} +.#{$ti-prefix}-paw-filled:before { + content: $ti-icon-paw-filled; +} +.#{$ti-prefix}-paw-off:before { + content: $ti-icon-paw-off; +} +.#{$ti-prefix}-paywall:before { + content: $ti-icon-paywall; +} +.#{$ti-prefix}-pdf:before { + content: $ti-icon-pdf; +} +.#{$ti-prefix}-peace:before { + content: $ti-icon-peace; +} +.#{$ti-prefix}-pencil:before { + content: $ti-icon-pencil; +} +.#{$ti-prefix}-pencil-bolt:before { + content: $ti-icon-pencil-bolt; +} +.#{$ti-prefix}-pencil-cancel:before { + content: $ti-icon-pencil-cancel; +} +.#{$ti-prefix}-pencil-check:before { + content: $ti-icon-pencil-check; +} +.#{$ti-prefix}-pencil-code:before { + content: $ti-icon-pencil-code; +} +.#{$ti-prefix}-pencil-cog:before { + content: $ti-icon-pencil-cog; +} +.#{$ti-prefix}-pencil-discount:before { + content: $ti-icon-pencil-discount; +} +.#{$ti-prefix}-pencil-dollar:before { + content: $ti-icon-pencil-dollar; +} +.#{$ti-prefix}-pencil-down:before { + content: $ti-icon-pencil-down; +} +.#{$ti-prefix}-pencil-exclamation:before { + content: $ti-icon-pencil-exclamation; +} +.#{$ti-prefix}-pencil-heart:before { + content: $ti-icon-pencil-heart; +} +.#{$ti-prefix}-pencil-minus:before { + content: $ti-icon-pencil-minus; +} +.#{$ti-prefix}-pencil-off:before { + content: $ti-icon-pencil-off; +} +.#{$ti-prefix}-pencil-pause:before { + content: $ti-icon-pencil-pause; +} +.#{$ti-prefix}-pencil-pin:before { + content: $ti-icon-pencil-pin; +} +.#{$ti-prefix}-pencil-plus:before { + content: $ti-icon-pencil-plus; +} +.#{$ti-prefix}-pencil-question:before { + content: $ti-icon-pencil-question; +} +.#{$ti-prefix}-pencil-search:before { + content: $ti-icon-pencil-search; +} +.#{$ti-prefix}-pencil-share:before { + content: $ti-icon-pencil-share; +} +.#{$ti-prefix}-pencil-star:before { + content: $ti-icon-pencil-star; +} +.#{$ti-prefix}-pencil-up:before { + content: $ti-icon-pencil-up; +} +.#{$ti-prefix}-pencil-x:before { + content: $ti-icon-pencil-x; +} +.#{$ti-prefix}-pennant:before { + content: $ti-icon-pennant; +} +.#{$ti-prefix}-pennant-2:before { + content: $ti-icon-pennant-2; +} +.#{$ti-prefix}-pennant-2-filled:before { + content: $ti-icon-pennant-2-filled; +} +.#{$ti-prefix}-pennant-filled:before { + content: $ti-icon-pennant-filled; +} +.#{$ti-prefix}-pennant-off:before { + content: $ti-icon-pennant-off; +} +.#{$ti-prefix}-pentagon:before { + content: $ti-icon-pentagon; +} +.#{$ti-prefix}-pentagon-filled:before { + content: $ti-icon-pentagon-filled; +} +.#{$ti-prefix}-pentagon-minus:before { + content: $ti-icon-pentagon-minus; +} +.#{$ti-prefix}-pentagon-number-0:before { + content: $ti-icon-pentagon-number-0; +} +.#{$ti-prefix}-pentagon-number-1:before { + content: $ti-icon-pentagon-number-1; +} +.#{$ti-prefix}-pentagon-number-2:before { + content: $ti-icon-pentagon-number-2; +} +.#{$ti-prefix}-pentagon-number-3:before { + content: $ti-icon-pentagon-number-3; +} +.#{$ti-prefix}-pentagon-number-4:before { + content: $ti-icon-pentagon-number-4; +} +.#{$ti-prefix}-pentagon-number-5:before { + content: $ti-icon-pentagon-number-5; +} +.#{$ti-prefix}-pentagon-number-6:before { + content: $ti-icon-pentagon-number-6; +} +.#{$ti-prefix}-pentagon-number-7:before { + content: $ti-icon-pentagon-number-7; +} +.#{$ti-prefix}-pentagon-number-8:before { + content: $ti-icon-pentagon-number-8; +} +.#{$ti-prefix}-pentagon-number-9:before { + content: $ti-icon-pentagon-number-9; +} +.#{$ti-prefix}-pentagon-off:before { + content: $ti-icon-pentagon-off; +} +.#{$ti-prefix}-pentagon-plus:before { + content: $ti-icon-pentagon-plus; +} +.#{$ti-prefix}-pentagon-x:before { + content: $ti-icon-pentagon-x; +} +.#{$ti-prefix}-pentagram:before { + content: $ti-icon-pentagram; +} +.#{$ti-prefix}-pepper:before { + content: $ti-icon-pepper; +} +.#{$ti-prefix}-pepper-off:before { + content: $ti-icon-pepper-off; +} +.#{$ti-prefix}-percentage:before { + content: $ti-icon-percentage; +} +.#{$ti-prefix}-percentage-0:before { + content: $ti-icon-percentage-0; +} +.#{$ti-prefix}-percentage-10:before { + content: $ti-icon-percentage-10; +} +.#{$ti-prefix}-percentage-100:before { + content: $ti-icon-percentage-100; +} +.#{$ti-prefix}-percentage-20:before { + content: $ti-icon-percentage-20; +} +.#{$ti-prefix}-percentage-25:before { + content: $ti-icon-percentage-25; +} +.#{$ti-prefix}-percentage-30:before { + content: $ti-icon-percentage-30; +} +.#{$ti-prefix}-percentage-33:before { + content: $ti-icon-percentage-33; +} +.#{$ti-prefix}-percentage-40:before { + content: $ti-icon-percentage-40; +} +.#{$ti-prefix}-percentage-50:before { + content: $ti-icon-percentage-50; +} +.#{$ti-prefix}-percentage-60:before { + content: $ti-icon-percentage-60; +} +.#{$ti-prefix}-percentage-66:before { + content: $ti-icon-percentage-66; +} +.#{$ti-prefix}-percentage-70:before { + content: $ti-icon-percentage-70; +} +.#{$ti-prefix}-percentage-75:before { + content: $ti-icon-percentage-75; +} +.#{$ti-prefix}-percentage-80:before { + content: $ti-icon-percentage-80; +} +.#{$ti-prefix}-percentage-90:before { + content: $ti-icon-percentage-90; +} +.#{$ti-prefix}-perfume:before { + content: $ti-icon-perfume; +} +.#{$ti-prefix}-perspective:before { + content: $ti-icon-perspective; +} +.#{$ti-prefix}-perspective-off:before { + content: $ti-icon-perspective-off; +} +.#{$ti-prefix}-phone:before { + content: $ti-icon-phone; +} +.#{$ti-prefix}-phone-call:before { + content: $ti-icon-phone-call; +} +.#{$ti-prefix}-phone-calling:before { + content: $ti-icon-phone-calling; +} +.#{$ti-prefix}-phone-check:before { + content: $ti-icon-phone-check; +} +.#{$ti-prefix}-phone-filled:before { + content: $ti-icon-phone-filled; +} +.#{$ti-prefix}-phone-incoming:before { + content: $ti-icon-phone-incoming; +} +.#{$ti-prefix}-phone-off:before { + content: $ti-icon-phone-off; +} +.#{$ti-prefix}-phone-outgoing:before { + content: $ti-icon-phone-outgoing; +} +.#{$ti-prefix}-phone-pause:before { + content: $ti-icon-phone-pause; +} +.#{$ti-prefix}-phone-plus:before { + content: $ti-icon-phone-plus; +} +.#{$ti-prefix}-phone-x:before { + content: $ti-icon-phone-x; +} +.#{$ti-prefix}-photo:before { + content: $ti-icon-photo; +} +.#{$ti-prefix}-photo-ai:before { + content: $ti-icon-photo-ai; +} +.#{$ti-prefix}-photo-bolt:before { + content: $ti-icon-photo-bolt; +} +.#{$ti-prefix}-photo-cancel:before { + content: $ti-icon-photo-cancel; +} +.#{$ti-prefix}-photo-check:before { + content: $ti-icon-photo-check; +} +.#{$ti-prefix}-photo-circle:before { + content: $ti-icon-photo-circle; +} +.#{$ti-prefix}-photo-circle-minus:before { + content: $ti-icon-photo-circle-minus; +} +.#{$ti-prefix}-photo-circle-plus:before { + content: $ti-icon-photo-circle-plus; +} +.#{$ti-prefix}-photo-code:before { + content: $ti-icon-photo-code; +} +.#{$ti-prefix}-photo-cog:before { + content: $ti-icon-photo-cog; +} +.#{$ti-prefix}-photo-dollar:before { + content: $ti-icon-photo-dollar; +} +.#{$ti-prefix}-photo-down:before { + content: $ti-icon-photo-down; +} +.#{$ti-prefix}-photo-edit:before { + content: $ti-icon-photo-edit; +} +.#{$ti-prefix}-photo-exclamation:before { + content: $ti-icon-photo-exclamation; +} +.#{$ti-prefix}-photo-filled:before { + content: $ti-icon-photo-filled; +} +.#{$ti-prefix}-photo-heart:before { + content: $ti-icon-photo-heart; +} +.#{$ti-prefix}-photo-hexagon:before { + content: $ti-icon-photo-hexagon; +} +.#{$ti-prefix}-photo-minus:before { + content: $ti-icon-photo-minus; +} +.#{$ti-prefix}-photo-off:before { + content: $ti-icon-photo-off; +} +.#{$ti-prefix}-photo-pause:before { + content: $ti-icon-photo-pause; +} +.#{$ti-prefix}-photo-pentagon:before { + content: $ti-icon-photo-pentagon; +} +.#{$ti-prefix}-photo-pin:before { + content: $ti-icon-photo-pin; +} +.#{$ti-prefix}-photo-plus:before { + content: $ti-icon-photo-plus; +} +.#{$ti-prefix}-photo-question:before { + content: $ti-icon-photo-question; +} +.#{$ti-prefix}-photo-scan:before { + content: $ti-icon-photo-scan; +} +.#{$ti-prefix}-photo-search:before { + content: $ti-icon-photo-search; +} +.#{$ti-prefix}-photo-sensor:before { + content: $ti-icon-photo-sensor; +} +.#{$ti-prefix}-photo-sensor-2:before { + content: $ti-icon-photo-sensor-2; +} +.#{$ti-prefix}-photo-sensor-3:before { + content: $ti-icon-photo-sensor-3; +} +.#{$ti-prefix}-photo-share:before { + content: $ti-icon-photo-share; +} +.#{$ti-prefix}-photo-shield:before { + content: $ti-icon-photo-shield; +} +.#{$ti-prefix}-photo-square-rounded:before { + content: $ti-icon-photo-square-rounded; +} +.#{$ti-prefix}-photo-star:before { + content: $ti-icon-photo-star; +} +.#{$ti-prefix}-photo-up:before { + content: $ti-icon-photo-up; +} +.#{$ti-prefix}-photo-video:before { + content: $ti-icon-photo-video; +} +.#{$ti-prefix}-photo-x:before { + content: $ti-icon-photo-x; +} +.#{$ti-prefix}-physotherapist:before { + content: $ti-icon-physotherapist; +} +.#{$ti-prefix}-piano:before { + content: $ti-icon-piano; +} +.#{$ti-prefix}-pick:before { + content: $ti-icon-pick; +} +.#{$ti-prefix}-picnic-table:before { + content: $ti-icon-picnic-table; +} +.#{$ti-prefix}-picture-in-picture:before { + content: $ti-icon-picture-in-picture; +} +.#{$ti-prefix}-picture-in-picture-filled:before { + content: $ti-icon-picture-in-picture-filled; +} +.#{$ti-prefix}-picture-in-picture-off:before { + content: $ti-icon-picture-in-picture-off; +} +.#{$ti-prefix}-picture-in-picture-on:before { + content: $ti-icon-picture-in-picture-on; +} +.#{$ti-prefix}-picture-in-picture-top:before { + content: $ti-icon-picture-in-picture-top; +} +.#{$ti-prefix}-picture-in-picture-top-filled:before { + content: $ti-icon-picture-in-picture-top-filled; +} +.#{$ti-prefix}-pig:before { + content: $ti-icon-pig; +} +.#{$ti-prefix}-pig-money:before { + content: $ti-icon-pig-money; +} +.#{$ti-prefix}-pig-off:before { + content: $ti-icon-pig-off; +} +.#{$ti-prefix}-pilcrow:before { + content: $ti-icon-pilcrow; +} +.#{$ti-prefix}-pilcrow-left:before { + content: $ti-icon-pilcrow-left; +} +.#{$ti-prefix}-pilcrow-right:before { + content: $ti-icon-pilcrow-right; +} +.#{$ti-prefix}-pill:before { + content: $ti-icon-pill; +} +.#{$ti-prefix}-pill-off:before { + content: $ti-icon-pill-off; +} +.#{$ti-prefix}-pills:before { + content: $ti-icon-pills; +} +.#{$ti-prefix}-pin:before { + content: $ti-icon-pin; +} +.#{$ti-prefix}-pin-end:before { + content: $ti-icon-pin-end; +} +.#{$ti-prefix}-pin-filled:before { + content: $ti-icon-pin-filled; +} +.#{$ti-prefix}-pin-invoke:before { + content: $ti-icon-pin-invoke; +} +.#{$ti-prefix}-ping-pong:before { + content: $ti-icon-ping-pong; +} +.#{$ti-prefix}-pinned:before { + content: $ti-icon-pinned; +} +.#{$ti-prefix}-pinned-filled:before { + content: $ti-icon-pinned-filled; +} +.#{$ti-prefix}-pinned-off:before { + content: $ti-icon-pinned-off; +} +.#{$ti-prefix}-pizza:before { + content: $ti-icon-pizza; +} +.#{$ti-prefix}-pizza-off:before { + content: $ti-icon-pizza-off; +} +.#{$ti-prefix}-placeholder:before { + content: $ti-icon-placeholder; +} +.#{$ti-prefix}-plane:before { + content: $ti-icon-plane; +} +.#{$ti-prefix}-plane-arrival:before { + content: $ti-icon-plane-arrival; +} +.#{$ti-prefix}-plane-departure:before { + content: $ti-icon-plane-departure; +} +.#{$ti-prefix}-plane-inflight:before { + content: $ti-icon-plane-inflight; +} +.#{$ti-prefix}-plane-off:before { + content: $ti-icon-plane-off; +} +.#{$ti-prefix}-plane-tilt:before { + content: $ti-icon-plane-tilt; +} +.#{$ti-prefix}-planet:before { + content: $ti-icon-planet; +} +.#{$ti-prefix}-planet-off:before { + content: $ti-icon-planet-off; +} +.#{$ti-prefix}-plant:before { + content: $ti-icon-plant; +} +.#{$ti-prefix}-plant-2:before { + content: $ti-icon-plant-2; +} +.#{$ti-prefix}-plant-2-off:before { + content: $ti-icon-plant-2-off; +} +.#{$ti-prefix}-plant-off:before { + content: $ti-icon-plant-off; +} +.#{$ti-prefix}-play-basketball:before { + content: $ti-icon-play-basketball; +} +.#{$ti-prefix}-play-card:before { + content: $ti-icon-play-card; +} +.#{$ti-prefix}-play-card-off:before { + content: $ti-icon-play-card-off; +} +.#{$ti-prefix}-play-football:before { + content: $ti-icon-play-football; +} +.#{$ti-prefix}-play-handball:before { + content: $ti-icon-play-handball; +} +.#{$ti-prefix}-play-volleyball:before { + content: $ti-icon-play-volleyball; +} +.#{$ti-prefix}-player-eject:before { + content: $ti-icon-player-eject; +} +.#{$ti-prefix}-player-eject-filled:before { + content: $ti-icon-player-eject-filled; +} +.#{$ti-prefix}-player-pause:before { + content: $ti-icon-player-pause; +} +.#{$ti-prefix}-player-pause-filled:before { + content: $ti-icon-player-pause-filled; +} +.#{$ti-prefix}-player-play:before { + content: $ti-icon-player-play; +} +.#{$ti-prefix}-player-play-filled:before { + content: $ti-icon-player-play-filled; +} +.#{$ti-prefix}-player-record:before { + content: $ti-icon-player-record; +} +.#{$ti-prefix}-player-record-filled:before { + content: $ti-icon-player-record-filled; +} +.#{$ti-prefix}-player-skip-back:before { + content: $ti-icon-player-skip-back; +} +.#{$ti-prefix}-player-skip-back-filled:before { + content: $ti-icon-player-skip-back-filled; +} +.#{$ti-prefix}-player-skip-forward:before { + content: $ti-icon-player-skip-forward; +} +.#{$ti-prefix}-player-skip-forward-filled:before { + content: $ti-icon-player-skip-forward-filled; +} +.#{$ti-prefix}-player-stop:before { + content: $ti-icon-player-stop; +} +.#{$ti-prefix}-player-stop-filled:before { + content: $ti-icon-player-stop-filled; +} +.#{$ti-prefix}-player-track-next:before { + content: $ti-icon-player-track-next; +} +.#{$ti-prefix}-player-track-next-filled:before { + content: $ti-icon-player-track-next-filled; +} +.#{$ti-prefix}-player-track-prev:before { + content: $ti-icon-player-track-prev; +} +.#{$ti-prefix}-player-track-prev-filled:before { + content: $ti-icon-player-track-prev-filled; +} +.#{$ti-prefix}-playlist:before { + content: $ti-icon-playlist; +} +.#{$ti-prefix}-playlist-add:before { + content: $ti-icon-playlist-add; +} +.#{$ti-prefix}-playlist-off:before { + content: $ti-icon-playlist-off; +} +.#{$ti-prefix}-playlist-x:before { + content: $ti-icon-playlist-x; +} +.#{$ti-prefix}-playstation-circle:before { + content: $ti-icon-playstation-circle; +} +.#{$ti-prefix}-playstation-square:before { + content: $ti-icon-playstation-square; +} +.#{$ti-prefix}-playstation-triangle:before { + content: $ti-icon-playstation-triangle; +} +.#{$ti-prefix}-playstation-x:before { + content: $ti-icon-playstation-x; +} +.#{$ti-prefix}-plug:before { + content: $ti-icon-plug; +} +.#{$ti-prefix}-plug-connected:before { + content: $ti-icon-plug-connected; +} +.#{$ti-prefix}-plug-connected-x:before { + content: $ti-icon-plug-connected-x; +} +.#{$ti-prefix}-plug-off:before { + content: $ti-icon-plug-off; +} +.#{$ti-prefix}-plug-x:before { + content: $ti-icon-plug-x; +} +.#{$ti-prefix}-plus:before { + content: $ti-icon-plus; +} +.#{$ti-prefix}-plus-equal:before { + content: $ti-icon-plus-equal; +} +.#{$ti-prefix}-plus-minus:before { + content: $ti-icon-plus-minus; +} +.#{$ti-prefix}-png:before { + content: $ti-icon-png; +} +.#{$ti-prefix}-podium:before { + content: $ti-icon-podium; +} +.#{$ti-prefix}-podium-off:before { + content: $ti-icon-podium-off; +} +.#{$ti-prefix}-point:before { + content: $ti-icon-point; +} +.#{$ti-prefix}-point-filled:before { + content: $ti-icon-point-filled; +} +.#{$ti-prefix}-point-off:before { + content: $ti-icon-point-off; +} +.#{$ti-prefix}-pointer:before { + content: $ti-icon-pointer; +} +.#{$ti-prefix}-pointer-bolt:before { + content: $ti-icon-pointer-bolt; +} +.#{$ti-prefix}-pointer-cancel:before { + content: $ti-icon-pointer-cancel; +} +.#{$ti-prefix}-pointer-check:before { + content: $ti-icon-pointer-check; +} +.#{$ti-prefix}-pointer-code:before { + content: $ti-icon-pointer-code; +} +.#{$ti-prefix}-pointer-cog:before { + content: $ti-icon-pointer-cog; +} +.#{$ti-prefix}-pointer-dollar:before { + content: $ti-icon-pointer-dollar; +} +.#{$ti-prefix}-pointer-down:before { + content: $ti-icon-pointer-down; +} +.#{$ti-prefix}-pointer-exclamation:before { + content: $ti-icon-pointer-exclamation; +} +.#{$ti-prefix}-pointer-filled:before { + content: $ti-icon-pointer-filled; +} +.#{$ti-prefix}-pointer-heart:before { + content: $ti-icon-pointer-heart; +} +.#{$ti-prefix}-pointer-minus:before { + content: $ti-icon-pointer-minus; +} +.#{$ti-prefix}-pointer-off:before { + content: $ti-icon-pointer-off; +} +.#{$ti-prefix}-pointer-pause:before { + content: $ti-icon-pointer-pause; +} +.#{$ti-prefix}-pointer-pin:before { + content: $ti-icon-pointer-pin; +} +.#{$ti-prefix}-pointer-plus:before { + content: $ti-icon-pointer-plus; +} +.#{$ti-prefix}-pointer-question:before { + content: $ti-icon-pointer-question; +} +.#{$ti-prefix}-pointer-search:before { + content: $ti-icon-pointer-search; +} +.#{$ti-prefix}-pointer-share:before { + content: $ti-icon-pointer-share; +} +.#{$ti-prefix}-pointer-star:before { + content: $ti-icon-pointer-star; +} +.#{$ti-prefix}-pointer-up:before { + content: $ti-icon-pointer-up; +} +.#{$ti-prefix}-pointer-x:before { + content: $ti-icon-pointer-x; +} +.#{$ti-prefix}-pokeball:before { + content: $ti-icon-pokeball; +} +.#{$ti-prefix}-pokeball-off:before { + content: $ti-icon-pokeball-off; +} +.#{$ti-prefix}-poker-chip:before { + content: $ti-icon-poker-chip; +} +.#{$ti-prefix}-polaroid:before { + content: $ti-icon-polaroid; +} +.#{$ti-prefix}-polaroid-filled:before { + content: $ti-icon-polaroid-filled; +} +.#{$ti-prefix}-polygon:before { + content: $ti-icon-polygon; +} +.#{$ti-prefix}-polygon-off:before { + content: $ti-icon-polygon-off; +} +.#{$ti-prefix}-poo:before { + content: $ti-icon-poo; +} +.#{$ti-prefix}-poo-filled:before { + content: $ti-icon-poo-filled; +} +.#{$ti-prefix}-pool:before { + content: $ti-icon-pool; +} +.#{$ti-prefix}-pool-off:before { + content: $ti-icon-pool-off; +} +.#{$ti-prefix}-power:before { + content: $ti-icon-power; +} +.#{$ti-prefix}-pray:before { + content: $ti-icon-pray; +} +.#{$ti-prefix}-premium-rights:before { + content: $ti-icon-premium-rights; +} +.#{$ti-prefix}-prescription:before { + content: $ti-icon-prescription; +} +.#{$ti-prefix}-presentation:before { + content: $ti-icon-presentation; +} +.#{$ti-prefix}-presentation-analytics:before { + content: $ti-icon-presentation-analytics; +} +.#{$ti-prefix}-presentation-off:before { + content: $ti-icon-presentation-off; +} +.#{$ti-prefix}-printer:before { + content: $ti-icon-printer; +} +.#{$ti-prefix}-printer-off:before { + content: $ti-icon-printer-off; +} +.#{$ti-prefix}-prism:before { + content: $ti-icon-prism; +} +.#{$ti-prefix}-prism-light:before { + content: $ti-icon-prism-light; +} +.#{$ti-prefix}-prism-off:before { + content: $ti-icon-prism-off; +} +.#{$ti-prefix}-prism-plus:before { + content: $ti-icon-prism-plus; +} +.#{$ti-prefix}-prison:before { + content: $ti-icon-prison; +} +.#{$ti-prefix}-progress:before { + content: $ti-icon-progress; +} +.#{$ti-prefix}-progress-alert:before { + content: $ti-icon-progress-alert; +} +.#{$ti-prefix}-progress-bolt:before { + content: $ti-icon-progress-bolt; +} +.#{$ti-prefix}-progress-check:before { + content: $ti-icon-progress-check; +} +.#{$ti-prefix}-progress-down:before { + content: $ti-icon-progress-down; +} +.#{$ti-prefix}-progress-help:before { + content: $ti-icon-progress-help; +} +.#{$ti-prefix}-progress-x:before { + content: $ti-icon-progress-x; +} +.#{$ti-prefix}-prompt:before { + content: $ti-icon-prompt; +} +.#{$ti-prefix}-prong:before { + content: $ti-icon-prong; +} +.#{$ti-prefix}-propeller:before { + content: $ti-icon-propeller; +} +.#{$ti-prefix}-propeller-off:before { + content: $ti-icon-propeller-off; +} +.#{$ti-prefix}-protocol:before { + content: $ti-icon-protocol; +} +.#{$ti-prefix}-pumpkin-scary:before { + content: $ti-icon-pumpkin-scary; +} +.#{$ti-prefix}-puzzle:before { + content: $ti-icon-puzzle; +} +.#{$ti-prefix}-puzzle-2:before { + content: $ti-icon-puzzle-2; +} +.#{$ti-prefix}-puzzle-filled:before { + content: $ti-icon-puzzle-filled; +} +.#{$ti-prefix}-puzzle-off:before { + content: $ti-icon-puzzle-off; +} +.#{$ti-prefix}-pyramid:before { + content: $ti-icon-pyramid; +} +.#{$ti-prefix}-pyramid-off:before { + content: $ti-icon-pyramid-off; +} +.#{$ti-prefix}-pyramid-plus:before { + content: $ti-icon-pyramid-plus; +} +.#{$ti-prefix}-qrcode:before { + content: $ti-icon-qrcode; +} +.#{$ti-prefix}-qrcode-off:before { + content: $ti-icon-qrcode-off; +} +.#{$ti-prefix}-question-mark:before { + content: $ti-icon-question-mark; +} +.#{$ti-prefix}-quote:before { + content: $ti-icon-quote; +} +.#{$ti-prefix}-quote-off:before { + content: $ti-icon-quote-off; +} +.#{$ti-prefix}-quotes:before { + content: $ti-icon-quotes; +} +.#{$ti-prefix}-radar:before { + content: $ti-icon-radar; +} +.#{$ti-prefix}-radar-2:before { + content: $ti-icon-radar-2; +} +.#{$ti-prefix}-radar-filled:before { + content: $ti-icon-radar-filled; +} +.#{$ti-prefix}-radar-off:before { + content: $ti-icon-radar-off; +} +.#{$ti-prefix}-radio:before { + content: $ti-icon-radio; +} +.#{$ti-prefix}-radio-off:before { + content: $ti-icon-radio-off; +} +.#{$ti-prefix}-radioactive:before { + content: $ti-icon-radioactive; +} +.#{$ti-prefix}-radioactive-filled:before { + content: $ti-icon-radioactive-filled; +} +.#{$ti-prefix}-radioactive-off:before { + content: $ti-icon-radioactive-off; +} +.#{$ti-prefix}-radius-bottom-left:before { + content: $ti-icon-radius-bottom-left; +} +.#{$ti-prefix}-radius-bottom-right:before { + content: $ti-icon-radius-bottom-right; +} +.#{$ti-prefix}-radius-top-left:before { + content: $ti-icon-radius-top-left; +} +.#{$ti-prefix}-radius-top-right:before { + content: $ti-icon-radius-top-right; +} +.#{$ti-prefix}-rainbow:before { + content: $ti-icon-rainbow; +} +.#{$ti-prefix}-rainbow-off:before { + content: $ti-icon-rainbow-off; +} +.#{$ti-prefix}-rating-12-plus:before { + content: $ti-icon-rating-12-plus; +} +.#{$ti-prefix}-rating-14-plus:before { + content: $ti-icon-rating-14-plus; +} +.#{$ti-prefix}-rating-16-plus:before { + content: $ti-icon-rating-16-plus; +} +.#{$ti-prefix}-rating-18-plus:before { + content: $ti-icon-rating-18-plus; +} +.#{$ti-prefix}-rating-21-plus:before { + content: $ti-icon-rating-21-plus; +} +.#{$ti-prefix}-razor:before { + content: $ti-icon-razor; +} +.#{$ti-prefix}-razor-electric:before { + content: $ti-icon-razor-electric; +} +.#{$ti-prefix}-receipt:before { + content: $ti-icon-receipt; +} +.#{$ti-prefix}-receipt-2:before { + content: $ti-icon-receipt-2; +} +.#{$ti-prefix}-receipt-bitcoin:before { + content: $ti-icon-receipt-bitcoin; +} +.#{$ti-prefix}-receipt-dollar:before { + content: $ti-icon-receipt-dollar; +} +.#{$ti-prefix}-receipt-euro:before { + content: $ti-icon-receipt-euro; +} +.#{$ti-prefix}-receipt-off:before { + content: $ti-icon-receipt-off; +} +.#{$ti-prefix}-receipt-pound:before { + content: $ti-icon-receipt-pound; +} +.#{$ti-prefix}-receipt-refund:before { + content: $ti-icon-receipt-refund; +} +.#{$ti-prefix}-receipt-rupee:before { + content: $ti-icon-receipt-rupee; +} +.#{$ti-prefix}-receipt-tax:before { + content: $ti-icon-receipt-tax; +} +.#{$ti-prefix}-receipt-yen:before { + content: $ti-icon-receipt-yen; +} +.#{$ti-prefix}-receipt-yuan:before { + content: $ti-icon-receipt-yuan; +} +.#{$ti-prefix}-recharging:before { + content: $ti-icon-recharging; +} +.#{$ti-prefix}-record-mail:before { + content: $ti-icon-record-mail; +} +.#{$ti-prefix}-record-mail-off:before { + content: $ti-icon-record-mail-off; +} +.#{$ti-prefix}-rectangle:before { + content: $ti-icon-rectangle; +} +.#{$ti-prefix}-rectangle-filled:before { + content: $ti-icon-rectangle-filled; +} +.#{$ti-prefix}-rectangle-rounded-bottom:before { + content: $ti-icon-rectangle-rounded-bottom; +} +.#{$ti-prefix}-rectangle-rounded-top:before { + content: $ti-icon-rectangle-rounded-top; +} +.#{$ti-prefix}-rectangle-vertical:before { + content: $ti-icon-rectangle-vertical; +} +.#{$ti-prefix}-rectangle-vertical-filled:before { + content: $ti-icon-rectangle-vertical-filled; +} +.#{$ti-prefix}-rectangular-prism:before { + content: $ti-icon-rectangular-prism; +} +.#{$ti-prefix}-rectangular-prism-off:before { + content: $ti-icon-rectangular-prism-off; +} +.#{$ti-prefix}-rectangular-prism-plus:before { + content: $ti-icon-rectangular-prism-plus; +} +.#{$ti-prefix}-recycle:before { + content: $ti-icon-recycle; +} +.#{$ti-prefix}-recycle-off:before { + content: $ti-icon-recycle-off; +} +.#{$ti-prefix}-refresh:before { + content: $ti-icon-refresh; +} +.#{$ti-prefix}-refresh-alert:before { + content: $ti-icon-refresh-alert; +} +.#{$ti-prefix}-refresh-dot:before { + content: $ti-icon-refresh-dot; +} +.#{$ti-prefix}-refresh-off:before { + content: $ti-icon-refresh-off; +} +.#{$ti-prefix}-regex:before { + content: $ti-icon-regex; +} +.#{$ti-prefix}-regex-off:before { + content: $ti-icon-regex-off; +} +.#{$ti-prefix}-registered:before { + content: $ti-icon-registered; +} +.#{$ti-prefix}-relation-many-to-many:before { + content: $ti-icon-relation-many-to-many; +} +.#{$ti-prefix}-relation-many-to-many-filled:before { + content: $ti-icon-relation-many-to-many-filled; +} +.#{$ti-prefix}-relation-one-to-many:before { + content: $ti-icon-relation-one-to-many; +} +.#{$ti-prefix}-relation-one-to-many-filled:before { + content: $ti-icon-relation-one-to-many-filled; +} +.#{$ti-prefix}-relation-one-to-one:before { + content: $ti-icon-relation-one-to-one; +} +.#{$ti-prefix}-relation-one-to-one-filled:before { + content: $ti-icon-relation-one-to-one-filled; +} +.#{$ti-prefix}-reload:before { + content: $ti-icon-reload; +} +.#{$ti-prefix}-reorder:before { + content: $ti-icon-reorder; +} +.#{$ti-prefix}-repeat:before { + content: $ti-icon-repeat; +} +.#{$ti-prefix}-repeat-off:before { + content: $ti-icon-repeat-off; +} +.#{$ti-prefix}-repeat-once:before { + content: $ti-icon-repeat-once; +} +.#{$ti-prefix}-replace:before { + content: $ti-icon-replace; +} +.#{$ti-prefix}-replace-filled:before { + content: $ti-icon-replace-filled; +} +.#{$ti-prefix}-replace-off:before { + content: $ti-icon-replace-off; +} +.#{$ti-prefix}-report:before { + content: $ti-icon-report; +} +.#{$ti-prefix}-report-analytics:before { + content: $ti-icon-report-analytics; +} +.#{$ti-prefix}-report-medical:before { + content: $ti-icon-report-medical; +} +.#{$ti-prefix}-report-money:before { + content: $ti-icon-report-money; +} +.#{$ti-prefix}-report-off:before { + content: $ti-icon-report-off; +} +.#{$ti-prefix}-report-search:before { + content: $ti-icon-report-search; +} +.#{$ti-prefix}-reserved-line:before { + content: $ti-icon-reserved-line; +} +.#{$ti-prefix}-resize:before { + content: $ti-icon-resize; +} +.#{$ti-prefix}-restore:before { + content: $ti-icon-restore; +} +.#{$ti-prefix}-rewind-backward-10:before { + content: $ti-icon-rewind-backward-10; +} +.#{$ti-prefix}-rewind-backward-15:before { + content: $ti-icon-rewind-backward-15; +} +.#{$ti-prefix}-rewind-backward-20:before { + content: $ti-icon-rewind-backward-20; +} +.#{$ti-prefix}-rewind-backward-30:before { + content: $ti-icon-rewind-backward-30; +} +.#{$ti-prefix}-rewind-backward-40:before { + content: $ti-icon-rewind-backward-40; +} +.#{$ti-prefix}-rewind-backward-5:before { + content: $ti-icon-rewind-backward-5; +} +.#{$ti-prefix}-rewind-backward-50:before { + content: $ti-icon-rewind-backward-50; +} +.#{$ti-prefix}-rewind-backward-60:before { + content: $ti-icon-rewind-backward-60; +} +.#{$ti-prefix}-rewind-forward-10:before { + content: $ti-icon-rewind-forward-10; +} +.#{$ti-prefix}-rewind-forward-15:before { + content: $ti-icon-rewind-forward-15; +} +.#{$ti-prefix}-rewind-forward-20:before { + content: $ti-icon-rewind-forward-20; +} +.#{$ti-prefix}-rewind-forward-30:before { + content: $ti-icon-rewind-forward-30; +} +.#{$ti-prefix}-rewind-forward-40:before { + content: $ti-icon-rewind-forward-40; +} +.#{$ti-prefix}-rewind-forward-5:before { + content: $ti-icon-rewind-forward-5; +} +.#{$ti-prefix}-rewind-forward-50:before { + content: $ti-icon-rewind-forward-50; +} +.#{$ti-prefix}-rewind-forward-60:before { + content: $ti-icon-rewind-forward-60; +} +.#{$ti-prefix}-ribbon-health:before { + content: $ti-icon-ribbon-health; +} +.#{$ti-prefix}-rings:before { + content: $ti-icon-rings; +} +.#{$ti-prefix}-ripple:before { + content: $ti-icon-ripple; +} +.#{$ti-prefix}-ripple-off:before { + content: $ti-icon-ripple-off; +} +.#{$ti-prefix}-road:before { + content: $ti-icon-road; +} +.#{$ti-prefix}-road-off:before { + content: $ti-icon-road-off; +} +.#{$ti-prefix}-road-sign:before { + content: $ti-icon-road-sign; +} +.#{$ti-prefix}-robot:before { + content: $ti-icon-robot; +} +.#{$ti-prefix}-robot-face:before { + content: $ti-icon-robot-face; +} +.#{$ti-prefix}-robot-off:before { + content: $ti-icon-robot-off; +} +.#{$ti-prefix}-rocket:before { + content: $ti-icon-rocket; +} +.#{$ti-prefix}-rocket-off:before { + content: $ti-icon-rocket-off; +} +.#{$ti-prefix}-roller-skating:before { + content: $ti-icon-roller-skating; +} +.#{$ti-prefix}-rollercoaster:before { + content: $ti-icon-rollercoaster; +} +.#{$ti-prefix}-rollercoaster-off:before { + content: $ti-icon-rollercoaster-off; +} +.#{$ti-prefix}-rosette:before { + content: $ti-icon-rosette; +} +.#{$ti-prefix}-rosette-discount:before { + content: $ti-icon-rosette-discount; +} +.#{$ti-prefix}-rosette-discount-check:before { + content: $ti-icon-rosette-discount-check; +} +.#{$ti-prefix}-rosette-discount-check-filled:before { + content: $ti-icon-rosette-discount-check-filled; +} +.#{$ti-prefix}-rosette-discount-off:before { + content: $ti-icon-rosette-discount-off; +} +.#{$ti-prefix}-rosette-filled:before { + content: $ti-icon-rosette-filled; +} +.#{$ti-prefix}-rosette-number-0:before { + content: $ti-icon-rosette-number-0; +} +.#{$ti-prefix}-rosette-number-1:before { + content: $ti-icon-rosette-number-1; +} +.#{$ti-prefix}-rosette-number-2:before { + content: $ti-icon-rosette-number-2; +} +.#{$ti-prefix}-rosette-number-3:before { + content: $ti-icon-rosette-number-3; +} +.#{$ti-prefix}-rosette-number-4:before { + content: $ti-icon-rosette-number-4; +} +.#{$ti-prefix}-rosette-number-5:before { + content: $ti-icon-rosette-number-5; +} +.#{$ti-prefix}-rosette-number-6:before { + content: $ti-icon-rosette-number-6; +} +.#{$ti-prefix}-rosette-number-7:before { + content: $ti-icon-rosette-number-7; +} +.#{$ti-prefix}-rosette-number-8:before { + content: $ti-icon-rosette-number-8; +} +.#{$ti-prefix}-rosette-number-9:before { + content: $ti-icon-rosette-number-9; +} +.#{$ti-prefix}-rotate:before { + content: $ti-icon-rotate; +} +.#{$ti-prefix}-rotate-2:before { + content: $ti-icon-rotate-2; +} +.#{$ti-prefix}-rotate-360:before { + content: $ti-icon-rotate-360; +} +.#{$ti-prefix}-rotate-3d:before { + content: $ti-icon-rotate-3d; +} +.#{$ti-prefix}-rotate-clockwise:before { + content: $ti-icon-rotate-clockwise; +} +.#{$ti-prefix}-rotate-clockwise-2:before { + content: $ti-icon-rotate-clockwise-2; +} +.#{$ti-prefix}-rotate-dot:before { + content: $ti-icon-rotate-dot; +} +.#{$ti-prefix}-rotate-rectangle:before { + content: $ti-icon-rotate-rectangle; +} +.#{$ti-prefix}-route:before { + content: $ti-icon-route; +} +.#{$ti-prefix}-route-2:before { + content: $ti-icon-route-2; +} +.#{$ti-prefix}-route-alt-left:before { + content: $ti-icon-route-alt-left; +} +.#{$ti-prefix}-route-alt-right:before { + content: $ti-icon-route-alt-right; +} +.#{$ti-prefix}-route-off:before { + content: $ti-icon-route-off; +} +.#{$ti-prefix}-route-scan:before { + content: $ti-icon-route-scan; +} +.#{$ti-prefix}-route-square:before { + content: $ti-icon-route-square; +} +.#{$ti-prefix}-route-square-2:before { + content: $ti-icon-route-square-2; +} +.#{$ti-prefix}-route-x:before { + content: $ti-icon-route-x; +} +.#{$ti-prefix}-route-x-2:before { + content: $ti-icon-route-x-2; +} +.#{$ti-prefix}-router:before { + content: $ti-icon-router; +} +.#{$ti-prefix}-router-off:before { + content: $ti-icon-router-off; +} +.#{$ti-prefix}-row-insert-bottom:before { + content: $ti-icon-row-insert-bottom; +} +.#{$ti-prefix}-row-insert-top:before { + content: $ti-icon-row-insert-top; +} +.#{$ti-prefix}-row-remove:before { + content: $ti-icon-row-remove; +} +.#{$ti-prefix}-rss:before { + content: $ti-icon-rss; +} +.#{$ti-prefix}-rubber-stamp:before { + content: $ti-icon-rubber-stamp; +} +.#{$ti-prefix}-rubber-stamp-off:before { + content: $ti-icon-rubber-stamp-off; +} +.#{$ti-prefix}-ruler:before { + content: $ti-icon-ruler; +} +.#{$ti-prefix}-ruler-2:before { + content: $ti-icon-ruler-2; +} +.#{$ti-prefix}-ruler-2-off:before { + content: $ti-icon-ruler-2-off; +} +.#{$ti-prefix}-ruler-3:before { + content: $ti-icon-ruler-3; +} +.#{$ti-prefix}-ruler-measure:before { + content: $ti-icon-ruler-measure; +} +.#{$ti-prefix}-ruler-off:before { + content: $ti-icon-ruler-off; +} +.#{$ti-prefix}-run:before { + content: $ti-icon-run; +} +.#{$ti-prefix}-rv-truck:before { + content: $ti-icon-rv-truck; +} +.#{$ti-prefix}-s-turn-down:before { + content: $ti-icon-s-turn-down; +} +.#{$ti-prefix}-s-turn-left:before { + content: $ti-icon-s-turn-left; +} +.#{$ti-prefix}-s-turn-right:before { + content: $ti-icon-s-turn-right; +} +.#{$ti-prefix}-s-turn-up:before { + content: $ti-icon-s-turn-up; +} +.#{$ti-prefix}-sailboat:before { + content: $ti-icon-sailboat; +} +.#{$ti-prefix}-sailboat-2:before { + content: $ti-icon-sailboat-2; +} +.#{$ti-prefix}-sailboat-off:before { + content: $ti-icon-sailboat-off; +} +.#{$ti-prefix}-salad:before { + content: $ti-icon-salad; +} +.#{$ti-prefix}-salt:before { + content: $ti-icon-salt; +} +.#{$ti-prefix}-sandbox:before { + content: $ti-icon-sandbox; +} +.#{$ti-prefix}-satellite:before { + content: $ti-icon-satellite; +} +.#{$ti-prefix}-satellite-off:before { + content: $ti-icon-satellite-off; +} +.#{$ti-prefix}-sausage:before { + content: $ti-icon-sausage; +} +.#{$ti-prefix}-scale:before { + content: $ti-icon-scale; +} +.#{$ti-prefix}-scale-off:before { + content: $ti-icon-scale-off; +} +.#{$ti-prefix}-scale-outline:before { + content: $ti-icon-scale-outline; +} +.#{$ti-prefix}-scale-outline-off:before { + content: $ti-icon-scale-outline-off; +} +.#{$ti-prefix}-scan:before { + content: $ti-icon-scan; +} +.#{$ti-prefix}-scan-eye:before { + content: $ti-icon-scan-eye; +} +.#{$ti-prefix}-scan-position:before { + content: $ti-icon-scan-position; +} +.#{$ti-prefix}-schema:before { + content: $ti-icon-schema; +} +.#{$ti-prefix}-schema-off:before { + content: $ti-icon-schema-off; +} +.#{$ti-prefix}-school:before { + content: $ti-icon-school; +} +.#{$ti-prefix}-school-bell:before { + content: $ti-icon-school-bell; +} +.#{$ti-prefix}-school-off:before { + content: $ti-icon-school-off; +} +.#{$ti-prefix}-scissors:before { + content: $ti-icon-scissors; +} +.#{$ti-prefix}-scissors-off:before { + content: $ti-icon-scissors-off; +} +.#{$ti-prefix}-scooter:before { + content: $ti-icon-scooter; +} +.#{$ti-prefix}-scooter-electric:before { + content: $ti-icon-scooter-electric; +} +.#{$ti-prefix}-scoreboard:before { + content: $ti-icon-scoreboard; +} +.#{$ti-prefix}-screen-share:before { + content: $ti-icon-screen-share; +} +.#{$ti-prefix}-screen-share-off:before { + content: $ti-icon-screen-share-off; +} +.#{$ti-prefix}-screenshot:before { + content: $ti-icon-screenshot; +} +.#{$ti-prefix}-scribble:before { + content: $ti-icon-scribble; +} +.#{$ti-prefix}-scribble-off:before { + content: $ti-icon-scribble-off; +} +.#{$ti-prefix}-script:before { + content: $ti-icon-script; +} +.#{$ti-prefix}-script-minus:before { + content: $ti-icon-script-minus; +} +.#{$ti-prefix}-script-plus:before { + content: $ti-icon-script-plus; +} +.#{$ti-prefix}-script-x:before { + content: $ti-icon-script-x; +} +.#{$ti-prefix}-scuba-diving:before { + content: $ti-icon-scuba-diving; +} +.#{$ti-prefix}-scuba-mask:before { + content: $ti-icon-scuba-mask; +} +.#{$ti-prefix}-scuba-mask-off:before { + content: $ti-icon-scuba-mask-off; +} +.#{$ti-prefix}-sdk:before { + content: $ti-icon-sdk; +} +.#{$ti-prefix}-search:before { + content: $ti-icon-search; +} +.#{$ti-prefix}-search-off:before { + content: $ti-icon-search-off; +} +.#{$ti-prefix}-section:before { + content: $ti-icon-section; +} +.#{$ti-prefix}-section-filled:before { + content: $ti-icon-section-filled; +} +.#{$ti-prefix}-section-sign:before { + content: $ti-icon-section-sign; +} +.#{$ti-prefix}-seeding:before { + content: $ti-icon-seeding; +} +.#{$ti-prefix}-seeding-off:before { + content: $ti-icon-seeding-off; +} +.#{$ti-prefix}-select:before { + content: $ti-icon-select; +} +.#{$ti-prefix}-select-all:before { + content: $ti-icon-select-all; +} +.#{$ti-prefix}-selector:before { + content: $ti-icon-selector; +} +.#{$ti-prefix}-send:before { + content: $ti-icon-send; +} +.#{$ti-prefix}-send-2:before { + content: $ti-icon-send-2; +} +.#{$ti-prefix}-send-off:before { + content: $ti-icon-send-off; +} +.#{$ti-prefix}-seo:before { + content: $ti-icon-seo; +} +.#{$ti-prefix}-separator:before { + content: $ti-icon-separator; +} +.#{$ti-prefix}-separator-horizontal:before { + content: $ti-icon-separator-horizontal; +} +.#{$ti-prefix}-separator-vertical:before { + content: $ti-icon-separator-vertical; +} +.#{$ti-prefix}-server:before { + content: $ti-icon-server; +} +.#{$ti-prefix}-server-2:before { + content: $ti-icon-server-2; +} +.#{$ti-prefix}-server-bolt:before { + content: $ti-icon-server-bolt; +} +.#{$ti-prefix}-server-cog:before { + content: $ti-icon-server-cog; +} +.#{$ti-prefix}-server-off:before { + content: $ti-icon-server-off; +} +.#{$ti-prefix}-servicemark:before { + content: $ti-icon-servicemark; +} +.#{$ti-prefix}-settings:before { + content: $ti-icon-settings; +} +.#{$ti-prefix}-settings-2:before { + content: $ti-icon-settings-2; +} +.#{$ti-prefix}-settings-automation:before { + content: $ti-icon-settings-automation; +} +.#{$ti-prefix}-settings-bolt:before { + content: $ti-icon-settings-bolt; +} +.#{$ti-prefix}-settings-cancel:before { + content: $ti-icon-settings-cancel; +} +.#{$ti-prefix}-settings-check:before { + content: $ti-icon-settings-check; +} +.#{$ti-prefix}-settings-code:before { + content: $ti-icon-settings-code; +} +.#{$ti-prefix}-settings-cog:before { + content: $ti-icon-settings-cog; +} +.#{$ti-prefix}-settings-dollar:before { + content: $ti-icon-settings-dollar; +} +.#{$ti-prefix}-settings-down:before { + content: $ti-icon-settings-down; +} +.#{$ti-prefix}-settings-exclamation:before { + content: $ti-icon-settings-exclamation; +} +.#{$ti-prefix}-settings-filled:before { + content: $ti-icon-settings-filled; +} +.#{$ti-prefix}-settings-heart:before { + content: $ti-icon-settings-heart; +} +.#{$ti-prefix}-settings-minus:before { + content: $ti-icon-settings-minus; +} +.#{$ti-prefix}-settings-off:before { + content: $ti-icon-settings-off; +} +.#{$ti-prefix}-settings-pause:before { + content: $ti-icon-settings-pause; +} +.#{$ti-prefix}-settings-pin:before { + content: $ti-icon-settings-pin; +} +.#{$ti-prefix}-settings-plus:before { + content: $ti-icon-settings-plus; +} +.#{$ti-prefix}-settings-question:before { + content: $ti-icon-settings-question; +} +.#{$ti-prefix}-settings-search:before { + content: $ti-icon-settings-search; +} +.#{$ti-prefix}-settings-share:before { + content: $ti-icon-settings-share; +} +.#{$ti-prefix}-settings-star:before { + content: $ti-icon-settings-star; +} +.#{$ti-prefix}-settings-up:before { + content: $ti-icon-settings-up; +} +.#{$ti-prefix}-settings-x:before { + content: $ti-icon-settings-x; +} +.#{$ti-prefix}-shadow:before { + content: $ti-icon-shadow; +} +.#{$ti-prefix}-shadow-off:before { + content: $ti-icon-shadow-off; +} +.#{$ti-prefix}-shape:before { + content: $ti-icon-shape; +} +.#{$ti-prefix}-shape-2:before { + content: $ti-icon-shape-2; +} +.#{$ti-prefix}-shape-3:before { + content: $ti-icon-shape-3; +} +.#{$ti-prefix}-shape-off:before { + content: $ti-icon-shape-off; +} +.#{$ti-prefix}-share:before { + content: $ti-icon-share; +} +.#{$ti-prefix}-share-2:before { + content: $ti-icon-share-2; +} +.#{$ti-prefix}-share-3:before { + content: $ti-icon-share-3; +} +.#{$ti-prefix}-share-off:before { + content: $ti-icon-share-off; +} +.#{$ti-prefix}-shareplay:before { + content: $ti-icon-shareplay; +} +.#{$ti-prefix}-shield:before { + content: $ti-icon-shield; +} +.#{$ti-prefix}-shield-bolt:before { + content: $ti-icon-shield-bolt; +} +.#{$ti-prefix}-shield-cancel:before { + content: $ti-icon-shield-cancel; +} +.#{$ti-prefix}-shield-check:before { + content: $ti-icon-shield-check; +} +.#{$ti-prefix}-shield-check-filled:before { + content: $ti-icon-shield-check-filled; +} +.#{$ti-prefix}-shield-checkered:before { + content: $ti-icon-shield-checkered; +} +.#{$ti-prefix}-shield-checkered-filled:before { + content: $ti-icon-shield-checkered-filled; +} +.#{$ti-prefix}-shield-chevron:before { + content: $ti-icon-shield-chevron; +} +.#{$ti-prefix}-shield-code:before { + content: $ti-icon-shield-code; +} +.#{$ti-prefix}-shield-cog:before { + content: $ti-icon-shield-cog; +} +.#{$ti-prefix}-shield-dollar:before { + content: $ti-icon-shield-dollar; +} +.#{$ti-prefix}-shield-down:before { + content: $ti-icon-shield-down; +} +.#{$ti-prefix}-shield-exclamation:before { + content: $ti-icon-shield-exclamation; +} +.#{$ti-prefix}-shield-filled:before { + content: $ti-icon-shield-filled; +} +.#{$ti-prefix}-shield-half:before { + content: $ti-icon-shield-half; +} +.#{$ti-prefix}-shield-half-filled:before { + content: $ti-icon-shield-half-filled; +} +.#{$ti-prefix}-shield-heart:before { + content: $ti-icon-shield-heart; +} +.#{$ti-prefix}-shield-lock:before { + content: $ti-icon-shield-lock; +} +.#{$ti-prefix}-shield-lock-filled:before { + content: $ti-icon-shield-lock-filled; +} +.#{$ti-prefix}-shield-minus:before { + content: $ti-icon-shield-minus; +} +.#{$ti-prefix}-shield-off:before { + content: $ti-icon-shield-off; +} +.#{$ti-prefix}-shield-pause:before { + content: $ti-icon-shield-pause; +} +.#{$ti-prefix}-shield-pin:before { + content: $ti-icon-shield-pin; +} +.#{$ti-prefix}-shield-plus:before { + content: $ti-icon-shield-plus; +} +.#{$ti-prefix}-shield-question:before { + content: $ti-icon-shield-question; +} +.#{$ti-prefix}-shield-search:before { + content: $ti-icon-shield-search; +} +.#{$ti-prefix}-shield-share:before { + content: $ti-icon-shield-share; +} +.#{$ti-prefix}-shield-star:before { + content: $ti-icon-shield-star; +} +.#{$ti-prefix}-shield-up:before { + content: $ti-icon-shield-up; +} +.#{$ti-prefix}-shield-x:before { + content: $ti-icon-shield-x; +} +.#{$ti-prefix}-ship:before { + content: $ti-icon-ship; +} +.#{$ti-prefix}-ship-off:before { + content: $ti-icon-ship-off; +} +.#{$ti-prefix}-shirt:before { + content: $ti-icon-shirt; +} +.#{$ti-prefix}-shirt-filled:before { + content: $ti-icon-shirt-filled; +} +.#{$ti-prefix}-shirt-off:before { + content: $ti-icon-shirt-off; +} +.#{$ti-prefix}-shirt-sport:before { + content: $ti-icon-shirt-sport; +} +.#{$ti-prefix}-shoe:before { + content: $ti-icon-shoe; +} +.#{$ti-prefix}-shoe-off:before { + content: $ti-icon-shoe-off; +} +.#{$ti-prefix}-shopping-bag:before { + content: $ti-icon-shopping-bag; +} +.#{$ti-prefix}-shopping-bag-check:before { + content: $ti-icon-shopping-bag-check; +} +.#{$ti-prefix}-shopping-bag-discount:before { + content: $ti-icon-shopping-bag-discount; +} +.#{$ti-prefix}-shopping-bag-edit:before { + content: $ti-icon-shopping-bag-edit; +} +.#{$ti-prefix}-shopping-bag-exclamation:before { + content: $ti-icon-shopping-bag-exclamation; +} +.#{$ti-prefix}-shopping-bag-heart:before { + content: $ti-icon-shopping-bag-heart; +} +.#{$ti-prefix}-shopping-bag-minus:before { + content: $ti-icon-shopping-bag-minus; +} +.#{$ti-prefix}-shopping-bag-plus:before { + content: $ti-icon-shopping-bag-plus; +} +.#{$ti-prefix}-shopping-bag-search:before { + content: $ti-icon-shopping-bag-search; +} +.#{$ti-prefix}-shopping-bag-x:before { + content: $ti-icon-shopping-bag-x; +} +.#{$ti-prefix}-shopping-cart:before { + content: $ti-icon-shopping-cart; +} +.#{$ti-prefix}-shopping-cart-bolt:before { + content: $ti-icon-shopping-cart-bolt; +} +.#{$ti-prefix}-shopping-cart-cancel:before { + content: $ti-icon-shopping-cart-cancel; +} +.#{$ti-prefix}-shopping-cart-check:before { + content: $ti-icon-shopping-cart-check; +} +.#{$ti-prefix}-shopping-cart-code:before { + content: $ti-icon-shopping-cart-code; +} +.#{$ti-prefix}-shopping-cart-cog:before { + content: $ti-icon-shopping-cart-cog; +} +.#{$ti-prefix}-shopping-cart-copy:before { + content: $ti-icon-shopping-cart-copy; +} +.#{$ti-prefix}-shopping-cart-discount:before { + content: $ti-icon-shopping-cart-discount; +} +.#{$ti-prefix}-shopping-cart-dollar:before { + content: $ti-icon-shopping-cart-dollar; +} +.#{$ti-prefix}-shopping-cart-down:before { + content: $ti-icon-shopping-cart-down; +} +.#{$ti-prefix}-shopping-cart-exclamation:before { + content: $ti-icon-shopping-cart-exclamation; +} +.#{$ti-prefix}-shopping-cart-filled:before { + content: $ti-icon-shopping-cart-filled; +} +.#{$ti-prefix}-shopping-cart-heart:before { + content: $ti-icon-shopping-cart-heart; +} +.#{$ti-prefix}-shopping-cart-minus:before { + content: $ti-icon-shopping-cart-minus; +} +.#{$ti-prefix}-shopping-cart-off:before { + content: $ti-icon-shopping-cart-off; +} +.#{$ti-prefix}-shopping-cart-pause:before { + content: $ti-icon-shopping-cart-pause; +} +.#{$ti-prefix}-shopping-cart-pin:before { + content: $ti-icon-shopping-cart-pin; +} +.#{$ti-prefix}-shopping-cart-plus:before { + content: $ti-icon-shopping-cart-plus; +} +.#{$ti-prefix}-shopping-cart-question:before { + content: $ti-icon-shopping-cart-question; +} +.#{$ti-prefix}-shopping-cart-search:before { + content: $ti-icon-shopping-cart-search; +} +.#{$ti-prefix}-shopping-cart-share:before { + content: $ti-icon-shopping-cart-share; +} +.#{$ti-prefix}-shopping-cart-star:before { + content: $ti-icon-shopping-cart-star; +} +.#{$ti-prefix}-shopping-cart-up:before { + content: $ti-icon-shopping-cart-up; +} +.#{$ti-prefix}-shopping-cart-x:before { + content: $ti-icon-shopping-cart-x; +} +.#{$ti-prefix}-shovel:before { + content: $ti-icon-shovel; +} +.#{$ti-prefix}-shovel-pitchforks:before { + content: $ti-icon-shovel-pitchforks; +} +.#{$ti-prefix}-shredder:before { + content: $ti-icon-shredder; +} +.#{$ti-prefix}-sign-left:before { + content: $ti-icon-sign-left; +} +.#{$ti-prefix}-sign-left-filled:before { + content: $ti-icon-sign-left-filled; +} +.#{$ti-prefix}-sign-right:before { + content: $ti-icon-sign-right; +} +.#{$ti-prefix}-sign-right-filled:before { + content: $ti-icon-sign-right-filled; +} +.#{$ti-prefix}-signal-2g:before { + content: $ti-icon-signal-2g; +} +.#{$ti-prefix}-signal-3g:before { + content: $ti-icon-signal-3g; +} +.#{$ti-prefix}-signal-4g:before { + content: $ti-icon-signal-4g; +} +.#{$ti-prefix}-signal-4g-plus:before { + content: $ti-icon-signal-4g-plus; +} +.#{$ti-prefix}-signal-5g:before { + content: $ti-icon-signal-5g; +} +.#{$ti-prefix}-signal-6g:before { + content: $ti-icon-signal-6g; +} +.#{$ti-prefix}-signal-e:before { + content: $ti-icon-signal-e; +} +.#{$ti-prefix}-signal-g:before { + content: $ti-icon-signal-g; +} +.#{$ti-prefix}-signal-h:before { + content: $ti-icon-signal-h; +} +.#{$ti-prefix}-signal-h-plus:before { + content: $ti-icon-signal-h-plus; +} +.#{$ti-prefix}-signal-lte:before { + content: $ti-icon-signal-lte; +} +.#{$ti-prefix}-signature:before { + content: $ti-icon-signature; +} +.#{$ti-prefix}-signature-off:before { + content: $ti-icon-signature-off; +} +.#{$ti-prefix}-sitemap:before { + content: $ti-icon-sitemap; +} +.#{$ti-prefix}-sitemap-off:before { + content: $ti-icon-sitemap-off; +} +.#{$ti-prefix}-skateboard:before { + content: $ti-icon-skateboard; +} +.#{$ti-prefix}-skateboard-off:before { + content: $ti-icon-skateboard-off; +} +.#{$ti-prefix}-skateboarding:before { + content: $ti-icon-skateboarding; +} +.#{$ti-prefix}-skew-x:before { + content: $ti-icon-skew-x; +} +.#{$ti-prefix}-skew-y:before { + content: $ti-icon-skew-y; +} +.#{$ti-prefix}-ski-jumping:before { + content: $ti-icon-ski-jumping; +} +.#{$ti-prefix}-skull:before { + content: $ti-icon-skull; +} +.#{$ti-prefix}-slash:before { + content: $ti-icon-slash; +} +.#{$ti-prefix}-slashes:before { + content: $ti-icon-slashes; +} +.#{$ti-prefix}-sleigh:before { + content: $ti-icon-sleigh; +} +.#{$ti-prefix}-slice:before { + content: $ti-icon-slice; +} +.#{$ti-prefix}-slideshow:before { + content: $ti-icon-slideshow; +} +.#{$ti-prefix}-smart-home:before { + content: $ti-icon-smart-home; +} +.#{$ti-prefix}-smart-home-off:before { + content: $ti-icon-smart-home-off; +} +.#{$ti-prefix}-smoking:before { + content: $ti-icon-smoking; +} +.#{$ti-prefix}-smoking-no:before { + content: $ti-icon-smoking-no; +} +.#{$ti-prefix}-snowboarding:before { + content: $ti-icon-snowboarding; +} +.#{$ti-prefix}-snowflake:before { + content: $ti-icon-snowflake; +} +.#{$ti-prefix}-snowflake-off:before { + content: $ti-icon-snowflake-off; +} +.#{$ti-prefix}-snowman:before { + content: $ti-icon-snowman; +} +.#{$ti-prefix}-soccer-field:before { + content: $ti-icon-soccer-field; +} +.#{$ti-prefix}-social:before { + content: $ti-icon-social; +} +.#{$ti-prefix}-social-off:before { + content: $ti-icon-social-off; +} +.#{$ti-prefix}-sock:before { + content: $ti-icon-sock; +} +.#{$ti-prefix}-sofa:before { + content: $ti-icon-sofa; +} +.#{$ti-prefix}-sofa-off:before { + content: $ti-icon-sofa-off; +} +.#{$ti-prefix}-solar-electricity:before { + content: $ti-icon-solar-electricity; +} +.#{$ti-prefix}-solar-panel:before { + content: $ti-icon-solar-panel; +} +.#{$ti-prefix}-solar-panel-2:before { + content: $ti-icon-solar-panel-2; +} +.#{$ti-prefix}-sort-0-9:before { + content: $ti-icon-sort-0-9; +} +.#{$ti-prefix}-sort-9-0:before { + content: $ti-icon-sort-9-0; +} +.#{$ti-prefix}-sort-a-z:before { + content: $ti-icon-sort-a-z; +} +.#{$ti-prefix}-sort-ascending:before { + content: $ti-icon-sort-ascending; +} +.#{$ti-prefix}-sort-ascending-2:before { + content: $ti-icon-sort-ascending-2; +} +.#{$ti-prefix}-sort-ascending-letters:before { + content: $ti-icon-sort-ascending-letters; +} +.#{$ti-prefix}-sort-ascending-numbers:before { + content: $ti-icon-sort-ascending-numbers; +} +.#{$ti-prefix}-sort-ascending-shapes:before { + content: $ti-icon-sort-ascending-shapes; +} +.#{$ti-prefix}-sort-ascending-small-big:before { + content: $ti-icon-sort-ascending-small-big; +} +.#{$ti-prefix}-sort-descending:before { + content: $ti-icon-sort-descending; +} +.#{$ti-prefix}-sort-descending-2:before { + content: $ti-icon-sort-descending-2; +} +.#{$ti-prefix}-sort-descending-letters:before { + content: $ti-icon-sort-descending-letters; +} +.#{$ti-prefix}-sort-descending-numbers:before { + content: $ti-icon-sort-descending-numbers; +} +.#{$ti-prefix}-sort-descending-shapes:before { + content: $ti-icon-sort-descending-shapes; +} +.#{$ti-prefix}-sort-descending-small-big:before { + content: $ti-icon-sort-descending-small-big; +} +.#{$ti-prefix}-sort-z-a:before { + content: $ti-icon-sort-z-a; +} +.#{$ti-prefix}-sos:before { + content: $ti-icon-sos; +} +.#{$ti-prefix}-soup:before { + content: $ti-icon-soup; +} +.#{$ti-prefix}-soup-filled:before { + content: $ti-icon-soup-filled; +} +.#{$ti-prefix}-soup-off:before { + content: $ti-icon-soup-off; +} +.#{$ti-prefix}-source-code:before { + content: $ti-icon-source-code; +} +.#{$ti-prefix}-space:before { + content: $ti-icon-space; +} +.#{$ti-prefix}-space-off:before { + content: $ti-icon-space-off; +} +.#{$ti-prefix}-spaces:before { + content: $ti-icon-spaces; +} +.#{$ti-prefix}-spacing-horizontal:before { + content: $ti-icon-spacing-horizontal; +} +.#{$ti-prefix}-spacing-vertical:before { + content: $ti-icon-spacing-vertical; +} +.#{$ti-prefix}-spade:before { + content: $ti-icon-spade; +} +.#{$ti-prefix}-spade-filled:before { + content: $ti-icon-spade-filled; +} +.#{$ti-prefix}-sparkles:before { + content: $ti-icon-sparkles; +} +.#{$ti-prefix}-speakerphone:before { + content: $ti-icon-speakerphone; +} +.#{$ti-prefix}-speedboat:before { + content: $ti-icon-speedboat; +} +.#{$ti-prefix}-sphere:before { + content: $ti-icon-sphere; +} +.#{$ti-prefix}-sphere-off:before { + content: $ti-icon-sphere-off; +} +.#{$ti-prefix}-sphere-plus:before { + content: $ti-icon-sphere-plus; +} +.#{$ti-prefix}-spider:before { + content: $ti-icon-spider; +} +.#{$ti-prefix}-spiral:before { + content: $ti-icon-spiral; +} +.#{$ti-prefix}-spiral-off:before { + content: $ti-icon-spiral-off; +} +.#{$ti-prefix}-sport-billard:before { + content: $ti-icon-sport-billard; +} +.#{$ti-prefix}-spray:before { + content: $ti-icon-spray; +} +.#{$ti-prefix}-spy:before { + content: $ti-icon-spy; +} +.#{$ti-prefix}-spy-off:before { + content: $ti-icon-spy-off; +} +.#{$ti-prefix}-sql:before { + content: $ti-icon-sql; +} +.#{$ti-prefix}-square:before { + content: $ti-icon-square; +} +.#{$ti-prefix}-square-arrow-down:before { + content: $ti-icon-square-arrow-down; +} +.#{$ti-prefix}-square-arrow-down-filled:before { + content: $ti-icon-square-arrow-down-filled; +} +.#{$ti-prefix}-square-arrow-left:before { + content: $ti-icon-square-arrow-left; +} +.#{$ti-prefix}-square-arrow-left-filled:before { + content: $ti-icon-square-arrow-left-filled; +} +.#{$ti-prefix}-square-arrow-right:before { + content: $ti-icon-square-arrow-right; +} +.#{$ti-prefix}-square-arrow-right-filled:before { + content: $ti-icon-square-arrow-right-filled; +} +.#{$ti-prefix}-square-arrow-up:before { + content: $ti-icon-square-arrow-up; +} +.#{$ti-prefix}-square-arrow-up-filled:before { + content: $ti-icon-square-arrow-up-filled; +} +.#{$ti-prefix}-square-asterisk:before { + content: $ti-icon-square-asterisk; +} +.#{$ti-prefix}-square-asterisk-filled:before { + content: $ti-icon-square-asterisk-filled; +} +.#{$ti-prefix}-square-check:before { + content: $ti-icon-square-check; +} +.#{$ti-prefix}-square-check-filled:before { + content: $ti-icon-square-check-filled; +} +.#{$ti-prefix}-square-chevron-down:before { + content: $ti-icon-square-chevron-down; +} +.#{$ti-prefix}-square-chevron-down-filled:before { + content: $ti-icon-square-chevron-down-filled; +} +.#{$ti-prefix}-square-chevron-left:before { + content: $ti-icon-square-chevron-left; +} +.#{$ti-prefix}-square-chevron-left-filled:before { + content: $ti-icon-square-chevron-left-filled; +} +.#{$ti-prefix}-square-chevron-right:before { + content: $ti-icon-square-chevron-right; +} +.#{$ti-prefix}-square-chevron-right-filled:before { + content: $ti-icon-square-chevron-right-filled; +} +.#{$ti-prefix}-square-chevron-up:before { + content: $ti-icon-square-chevron-up; +} +.#{$ti-prefix}-square-chevron-up-filled:before { + content: $ti-icon-square-chevron-up-filled; +} +.#{$ti-prefix}-square-chevrons-down:before { + content: $ti-icon-square-chevrons-down; +} +.#{$ti-prefix}-square-chevrons-down-filled:before { + content: $ti-icon-square-chevrons-down-filled; +} +.#{$ti-prefix}-square-chevrons-left:before { + content: $ti-icon-square-chevrons-left; +} +.#{$ti-prefix}-square-chevrons-left-filled:before { + content: $ti-icon-square-chevrons-left-filled; +} +.#{$ti-prefix}-square-chevrons-right:before { + content: $ti-icon-square-chevrons-right; +} +.#{$ti-prefix}-square-chevrons-right-filled:before { + content: $ti-icon-square-chevrons-right-filled; +} +.#{$ti-prefix}-square-chevrons-up:before { + content: $ti-icon-square-chevrons-up; +} +.#{$ti-prefix}-square-chevrons-up-filled:before { + content: $ti-icon-square-chevrons-up-filled; +} +.#{$ti-prefix}-square-dot:before { + content: $ti-icon-square-dot; +} +.#{$ti-prefix}-square-dot-filled:before { + content: $ti-icon-square-dot-filled; +} +.#{$ti-prefix}-square-f0:before { + content: $ti-icon-square-f0; +} +.#{$ti-prefix}-square-f0-filled:before { + content: $ti-icon-square-f0-filled; +} +.#{$ti-prefix}-square-f1:before { + content: $ti-icon-square-f1; +} +.#{$ti-prefix}-square-f1-filled:before { + content: $ti-icon-square-f1-filled; +} +.#{$ti-prefix}-square-f2:before { + content: $ti-icon-square-f2; +} +.#{$ti-prefix}-square-f2-filled:before { + content: $ti-icon-square-f2-filled; +} +.#{$ti-prefix}-square-f3:before { + content: $ti-icon-square-f3; +} +.#{$ti-prefix}-square-f3-filled:before { + content: $ti-icon-square-f3-filled; +} +.#{$ti-prefix}-square-f4:before { + content: $ti-icon-square-f4; +} +.#{$ti-prefix}-square-f4-filled:before { + content: $ti-icon-square-f4-filled; +} +.#{$ti-prefix}-square-f5:before { + content: $ti-icon-square-f5; +} +.#{$ti-prefix}-square-f5-filled:before { + content: $ti-icon-square-f5-filled; +} +.#{$ti-prefix}-square-f6:before { + content: $ti-icon-square-f6; +} +.#{$ti-prefix}-square-f6-filled:before { + content: $ti-icon-square-f6-filled; +} +.#{$ti-prefix}-square-f7:before { + content: $ti-icon-square-f7; +} +.#{$ti-prefix}-square-f7-filled:before { + content: $ti-icon-square-f7-filled; +} +.#{$ti-prefix}-square-f8:before { + content: $ti-icon-square-f8; +} +.#{$ti-prefix}-square-f8-filled:before { + content: $ti-icon-square-f8-filled; +} +.#{$ti-prefix}-square-f9:before { + content: $ti-icon-square-f9; +} +.#{$ti-prefix}-square-f9-filled:before { + content: $ti-icon-square-f9-filled; +} +.#{$ti-prefix}-square-filled:before { + content: $ti-icon-square-filled; +} +.#{$ti-prefix}-square-forbid:before { + content: $ti-icon-square-forbid; +} +.#{$ti-prefix}-square-forbid-2:before { + content: $ti-icon-square-forbid-2; +} +.#{$ti-prefix}-square-half:before { + content: $ti-icon-square-half; +} +.#{$ti-prefix}-square-key:before { + content: $ti-icon-square-key; +} +.#{$ti-prefix}-square-letter-a:before { + content: $ti-icon-square-letter-a; +} +.#{$ti-prefix}-square-letter-a-filled:before { + content: $ti-icon-square-letter-a-filled; +} +.#{$ti-prefix}-square-letter-b:before { + content: $ti-icon-square-letter-b; +} +.#{$ti-prefix}-square-letter-b-filled:before { + content: $ti-icon-square-letter-b-filled; +} +.#{$ti-prefix}-square-letter-c:before { + content: $ti-icon-square-letter-c; +} +.#{$ti-prefix}-square-letter-c-filled:before { + content: $ti-icon-square-letter-c-filled; +} +.#{$ti-prefix}-square-letter-d:before { + content: $ti-icon-square-letter-d; +} +.#{$ti-prefix}-square-letter-d-filled:before { + content: $ti-icon-square-letter-d-filled; +} +.#{$ti-prefix}-square-letter-e:before { + content: $ti-icon-square-letter-e; +} +.#{$ti-prefix}-square-letter-e-filled:before { + content: $ti-icon-square-letter-e-filled; +} +.#{$ti-prefix}-square-letter-f:before { + content: $ti-icon-square-letter-f; +} +.#{$ti-prefix}-square-letter-f-filled:before { + content: $ti-icon-square-letter-f-filled; +} +.#{$ti-prefix}-square-letter-g:before { + content: $ti-icon-square-letter-g; +} +.#{$ti-prefix}-square-letter-g-filled:before { + content: $ti-icon-square-letter-g-filled; +} +.#{$ti-prefix}-square-letter-h:before { + content: $ti-icon-square-letter-h; +} +.#{$ti-prefix}-square-letter-h-filled:before { + content: $ti-icon-square-letter-h-filled; +} +.#{$ti-prefix}-square-letter-i:before { + content: $ti-icon-square-letter-i; +} +.#{$ti-prefix}-square-letter-i-filled:before { + content: $ti-icon-square-letter-i-filled; +} +.#{$ti-prefix}-square-letter-j:before { + content: $ti-icon-square-letter-j; +} +.#{$ti-prefix}-square-letter-j-filled:before { + content: $ti-icon-square-letter-j-filled; +} +.#{$ti-prefix}-square-letter-k:before { + content: $ti-icon-square-letter-k; +} +.#{$ti-prefix}-square-letter-k-filled:before { + content: $ti-icon-square-letter-k-filled; +} +.#{$ti-prefix}-square-letter-l:before { + content: $ti-icon-square-letter-l; +} +.#{$ti-prefix}-square-letter-l-filled:before { + content: $ti-icon-square-letter-l-filled; +} +.#{$ti-prefix}-square-letter-m:before { + content: $ti-icon-square-letter-m; +} +.#{$ti-prefix}-square-letter-m-filled:before { + content: $ti-icon-square-letter-m-filled; +} +.#{$ti-prefix}-square-letter-n:before { + content: $ti-icon-square-letter-n; +} +.#{$ti-prefix}-square-letter-n-filled:before { + content: $ti-icon-square-letter-n-filled; +} +.#{$ti-prefix}-square-letter-o:before { + content: $ti-icon-square-letter-o; +} +.#{$ti-prefix}-square-letter-o-filled:before { + content: $ti-icon-square-letter-o-filled; +} +.#{$ti-prefix}-square-letter-p:before { + content: $ti-icon-square-letter-p; +} +.#{$ti-prefix}-square-letter-p-filled:before { + content: $ti-icon-square-letter-p-filled; +} +.#{$ti-prefix}-square-letter-q:before { + content: $ti-icon-square-letter-q; +} +.#{$ti-prefix}-square-letter-q-filled:before { + content: $ti-icon-square-letter-q-filled; +} +.#{$ti-prefix}-square-letter-r:before { + content: $ti-icon-square-letter-r; +} +.#{$ti-prefix}-square-letter-r-filled:before { + content: $ti-icon-square-letter-r-filled; +} +.#{$ti-prefix}-square-letter-s:before { + content: $ti-icon-square-letter-s; +} +.#{$ti-prefix}-square-letter-s-filled:before { + content: $ti-icon-square-letter-s-filled; +} +.#{$ti-prefix}-square-letter-t:before { + content: $ti-icon-square-letter-t; +} +.#{$ti-prefix}-square-letter-t-filled:before { + content: $ti-icon-square-letter-t-filled; +} +.#{$ti-prefix}-square-letter-u:before { + content: $ti-icon-square-letter-u; +} +.#{$ti-prefix}-square-letter-u-filled:before { + content: $ti-icon-square-letter-u-filled; +} +.#{$ti-prefix}-square-letter-v:before { + content: $ti-icon-square-letter-v; +} +.#{$ti-prefix}-square-letter-v-filled:before { + content: $ti-icon-square-letter-v-filled; +} +.#{$ti-prefix}-square-letter-w:before { + content: $ti-icon-square-letter-w; +} +.#{$ti-prefix}-square-letter-w-filled:before { + content: $ti-icon-square-letter-w-filled; +} +.#{$ti-prefix}-square-letter-x:before { + content: $ti-icon-square-letter-x; +} +.#{$ti-prefix}-square-letter-x-filled:before { + content: $ti-icon-square-letter-x-filled; +} +.#{$ti-prefix}-square-letter-y:before { + content: $ti-icon-square-letter-y; +} +.#{$ti-prefix}-square-letter-y-filled:before { + content: $ti-icon-square-letter-y-filled; +} +.#{$ti-prefix}-square-letter-z:before { + content: $ti-icon-square-letter-z; +} +.#{$ti-prefix}-square-letter-z-filled:before { + content: $ti-icon-square-letter-z-filled; +} +.#{$ti-prefix}-square-minus:before { + content: $ti-icon-square-minus; +} +.#{$ti-prefix}-square-minus-filled:before { + content: $ti-icon-square-minus-filled; +} +.#{$ti-prefix}-square-number-0:before { + content: $ti-icon-square-number-0; +} +.#{$ti-prefix}-square-number-0-filled:before { + content: $ti-icon-square-number-0-filled; +} +.#{$ti-prefix}-square-number-1:before { + content: $ti-icon-square-number-1; +} +.#{$ti-prefix}-square-number-1-filled:before { + content: $ti-icon-square-number-1-filled; +} +.#{$ti-prefix}-square-number-2:before { + content: $ti-icon-square-number-2; +} +.#{$ti-prefix}-square-number-2-filled:before { + content: $ti-icon-square-number-2-filled; +} +.#{$ti-prefix}-square-number-3:before { + content: $ti-icon-square-number-3; +} +.#{$ti-prefix}-square-number-3-filled:before { + content: $ti-icon-square-number-3-filled; +} +.#{$ti-prefix}-square-number-4:before { + content: $ti-icon-square-number-4; +} +.#{$ti-prefix}-square-number-4-filled:before { + content: $ti-icon-square-number-4-filled; +} +.#{$ti-prefix}-square-number-5:before { + content: $ti-icon-square-number-5; +} +.#{$ti-prefix}-square-number-5-filled:before { + content: $ti-icon-square-number-5-filled; +} +.#{$ti-prefix}-square-number-6:before { + content: $ti-icon-square-number-6; +} +.#{$ti-prefix}-square-number-6-filled:before { + content: $ti-icon-square-number-6-filled; +} +.#{$ti-prefix}-square-number-7:before { + content: $ti-icon-square-number-7; +} +.#{$ti-prefix}-square-number-7-filled:before { + content: $ti-icon-square-number-7-filled; +} +.#{$ti-prefix}-square-number-8:before { + content: $ti-icon-square-number-8; +} +.#{$ti-prefix}-square-number-8-filled:before { + content: $ti-icon-square-number-8-filled; +} +.#{$ti-prefix}-square-number-9:before { + content: $ti-icon-square-number-9; +} +.#{$ti-prefix}-square-number-9-filled:before { + content: $ti-icon-square-number-9-filled; +} +.#{$ti-prefix}-square-off:before { + content: $ti-icon-square-off; +} +.#{$ti-prefix}-square-percentage:before { + content: $ti-icon-square-percentage; +} +.#{$ti-prefix}-square-plus:before { + content: $ti-icon-square-plus; +} +.#{$ti-prefix}-square-plus-2:before { + content: $ti-icon-square-plus-2; +} +.#{$ti-prefix}-square-root:before { + content: $ti-icon-square-root; +} +.#{$ti-prefix}-square-root-2:before { + content: $ti-icon-square-root-2; +} +.#{$ti-prefix}-square-rotated:before { + content: $ti-icon-square-rotated; +} +.#{$ti-prefix}-square-rotated-filled:before { + content: $ti-icon-square-rotated-filled; +} +.#{$ti-prefix}-square-rotated-forbid:before { + content: $ti-icon-square-rotated-forbid; +} +.#{$ti-prefix}-square-rotated-forbid-2:before { + content: $ti-icon-square-rotated-forbid-2; +} +.#{$ti-prefix}-square-rotated-off:before { + content: $ti-icon-square-rotated-off; +} +.#{$ti-prefix}-square-rounded:before { + content: $ti-icon-square-rounded; +} +.#{$ti-prefix}-square-rounded-arrow-down:before { + content: $ti-icon-square-rounded-arrow-down; +} +.#{$ti-prefix}-square-rounded-arrow-down-filled:before { + content: $ti-icon-square-rounded-arrow-down-filled; +} +.#{$ti-prefix}-square-rounded-arrow-left:before { + content: $ti-icon-square-rounded-arrow-left; +} +.#{$ti-prefix}-square-rounded-arrow-left-filled:before { + content: $ti-icon-square-rounded-arrow-left-filled; +} +.#{$ti-prefix}-square-rounded-arrow-right:before { + content: $ti-icon-square-rounded-arrow-right; +} +.#{$ti-prefix}-square-rounded-arrow-right-filled:before { + content: $ti-icon-square-rounded-arrow-right-filled; +} +.#{$ti-prefix}-square-rounded-arrow-up:before { + content: $ti-icon-square-rounded-arrow-up; +} +.#{$ti-prefix}-square-rounded-arrow-up-filled:before { + content: $ti-icon-square-rounded-arrow-up-filled; +} +.#{$ti-prefix}-square-rounded-check:before { + content: $ti-icon-square-rounded-check; +} +.#{$ti-prefix}-square-rounded-check-filled:before { + content: $ti-icon-square-rounded-check-filled; +} +.#{$ti-prefix}-square-rounded-chevron-down:before { + content: $ti-icon-square-rounded-chevron-down; +} +.#{$ti-prefix}-square-rounded-chevron-down-filled:before { + content: $ti-icon-square-rounded-chevron-down-filled; +} +.#{$ti-prefix}-square-rounded-chevron-left:before { + content: $ti-icon-square-rounded-chevron-left; +} +.#{$ti-prefix}-square-rounded-chevron-left-filled:before { + content: $ti-icon-square-rounded-chevron-left-filled; +} +.#{$ti-prefix}-square-rounded-chevron-right:before { + content: $ti-icon-square-rounded-chevron-right; +} +.#{$ti-prefix}-square-rounded-chevron-right-filled:before { + content: $ti-icon-square-rounded-chevron-right-filled; +} +.#{$ti-prefix}-square-rounded-chevron-up:before { + content: $ti-icon-square-rounded-chevron-up; +} +.#{$ti-prefix}-square-rounded-chevron-up-filled:before { + content: $ti-icon-square-rounded-chevron-up-filled; +} +.#{$ti-prefix}-square-rounded-chevrons-down:before { + content: $ti-icon-square-rounded-chevrons-down; +} +.#{$ti-prefix}-square-rounded-chevrons-down-filled:before { + content: $ti-icon-square-rounded-chevrons-down-filled; +} +.#{$ti-prefix}-square-rounded-chevrons-left:before { + content: $ti-icon-square-rounded-chevrons-left; +} +.#{$ti-prefix}-square-rounded-chevrons-left-filled:before { + content: $ti-icon-square-rounded-chevrons-left-filled; +} +.#{$ti-prefix}-square-rounded-chevrons-right:before { + content: $ti-icon-square-rounded-chevrons-right; +} +.#{$ti-prefix}-square-rounded-chevrons-right-filled:before { + content: $ti-icon-square-rounded-chevrons-right-filled; +} +.#{$ti-prefix}-square-rounded-chevrons-up:before { + content: $ti-icon-square-rounded-chevrons-up; +} +.#{$ti-prefix}-square-rounded-chevrons-up-filled:before { + content: $ti-icon-square-rounded-chevrons-up-filled; +} +.#{$ti-prefix}-square-rounded-filled:before { + content: $ti-icon-square-rounded-filled; +} +.#{$ti-prefix}-square-rounded-letter-a:before { + content: $ti-icon-square-rounded-letter-a; +} +.#{$ti-prefix}-square-rounded-letter-a-filled:before { + content: $ti-icon-square-rounded-letter-a-filled; +} +.#{$ti-prefix}-square-rounded-letter-b:before { + content: $ti-icon-square-rounded-letter-b; +} +.#{$ti-prefix}-square-rounded-letter-b-filled:before { + content: $ti-icon-square-rounded-letter-b-filled; +} +.#{$ti-prefix}-square-rounded-letter-c:before { + content: $ti-icon-square-rounded-letter-c; +} +.#{$ti-prefix}-square-rounded-letter-c-filled:before { + content: $ti-icon-square-rounded-letter-c-filled; +} +.#{$ti-prefix}-square-rounded-letter-d:before { + content: $ti-icon-square-rounded-letter-d; +} +.#{$ti-prefix}-square-rounded-letter-d-filled:before { + content: $ti-icon-square-rounded-letter-d-filled; +} +.#{$ti-prefix}-square-rounded-letter-e:before { + content: $ti-icon-square-rounded-letter-e; +} +.#{$ti-prefix}-square-rounded-letter-e-filled:before { + content: $ti-icon-square-rounded-letter-e-filled; +} +.#{$ti-prefix}-square-rounded-letter-f:before { + content: $ti-icon-square-rounded-letter-f; +} +.#{$ti-prefix}-square-rounded-letter-f-filled:before { + content: $ti-icon-square-rounded-letter-f-filled; +} +.#{$ti-prefix}-square-rounded-letter-g:before { + content: $ti-icon-square-rounded-letter-g; +} +.#{$ti-prefix}-square-rounded-letter-g-filled:before { + content: $ti-icon-square-rounded-letter-g-filled; +} +.#{$ti-prefix}-square-rounded-letter-h:before { + content: $ti-icon-square-rounded-letter-h; +} +.#{$ti-prefix}-square-rounded-letter-h-filled:before { + content: $ti-icon-square-rounded-letter-h-filled; +} +.#{$ti-prefix}-square-rounded-letter-i:before { + content: $ti-icon-square-rounded-letter-i; +} +.#{$ti-prefix}-square-rounded-letter-i-filled:before { + content: $ti-icon-square-rounded-letter-i-filled; +} +.#{$ti-prefix}-square-rounded-letter-j:before { + content: $ti-icon-square-rounded-letter-j; +} +.#{$ti-prefix}-square-rounded-letter-j-filled:before { + content: $ti-icon-square-rounded-letter-j-filled; +} +.#{$ti-prefix}-square-rounded-letter-k:before { + content: $ti-icon-square-rounded-letter-k; +} +.#{$ti-prefix}-square-rounded-letter-k-filled:before { + content: $ti-icon-square-rounded-letter-k-filled; +} +.#{$ti-prefix}-square-rounded-letter-l:before { + content: $ti-icon-square-rounded-letter-l; +} +.#{$ti-prefix}-square-rounded-letter-l-filled:before { + content: $ti-icon-square-rounded-letter-l-filled; +} +.#{$ti-prefix}-square-rounded-letter-m:before { + content: $ti-icon-square-rounded-letter-m; +} +.#{$ti-prefix}-square-rounded-letter-m-filled:before { + content: $ti-icon-square-rounded-letter-m-filled; +} +.#{$ti-prefix}-square-rounded-letter-n:before { + content: $ti-icon-square-rounded-letter-n; +} +.#{$ti-prefix}-square-rounded-letter-n-filled:before { + content: $ti-icon-square-rounded-letter-n-filled; +} +.#{$ti-prefix}-square-rounded-letter-o:before { + content: $ti-icon-square-rounded-letter-o; +} +.#{$ti-prefix}-square-rounded-letter-o-filled:before { + content: $ti-icon-square-rounded-letter-o-filled; +} +.#{$ti-prefix}-square-rounded-letter-p:before { + content: $ti-icon-square-rounded-letter-p; +} +.#{$ti-prefix}-square-rounded-letter-p-filled:before { + content: $ti-icon-square-rounded-letter-p-filled; +} +.#{$ti-prefix}-square-rounded-letter-q:before { + content: $ti-icon-square-rounded-letter-q; +} +.#{$ti-prefix}-square-rounded-letter-q-filled:before { + content: $ti-icon-square-rounded-letter-q-filled; +} +.#{$ti-prefix}-square-rounded-letter-r:before { + content: $ti-icon-square-rounded-letter-r; +} +.#{$ti-prefix}-square-rounded-letter-r-filled:before { + content: $ti-icon-square-rounded-letter-r-filled; +} +.#{$ti-prefix}-square-rounded-letter-s:before { + content: $ti-icon-square-rounded-letter-s; +} +.#{$ti-prefix}-square-rounded-letter-s-filled:before { + content: $ti-icon-square-rounded-letter-s-filled; +} +.#{$ti-prefix}-square-rounded-letter-t:before { + content: $ti-icon-square-rounded-letter-t; +} +.#{$ti-prefix}-square-rounded-letter-t-filled:before { + content: $ti-icon-square-rounded-letter-t-filled; +} +.#{$ti-prefix}-square-rounded-letter-u:before { + content: $ti-icon-square-rounded-letter-u; +} +.#{$ti-prefix}-square-rounded-letter-u-filled:before { + content: $ti-icon-square-rounded-letter-u-filled; +} +.#{$ti-prefix}-square-rounded-letter-v:before { + content: $ti-icon-square-rounded-letter-v; +} +.#{$ti-prefix}-square-rounded-letter-v-filled:before { + content: $ti-icon-square-rounded-letter-v-filled; +} +.#{$ti-prefix}-square-rounded-letter-w:before { + content: $ti-icon-square-rounded-letter-w; +} +.#{$ti-prefix}-square-rounded-letter-w-filled:before { + content: $ti-icon-square-rounded-letter-w-filled; +} +.#{$ti-prefix}-square-rounded-letter-x:before { + content: $ti-icon-square-rounded-letter-x; +} +.#{$ti-prefix}-square-rounded-letter-x-filled:before { + content: $ti-icon-square-rounded-letter-x-filled; +} +.#{$ti-prefix}-square-rounded-letter-y:before { + content: $ti-icon-square-rounded-letter-y; +} +.#{$ti-prefix}-square-rounded-letter-y-filled:before { + content: $ti-icon-square-rounded-letter-y-filled; +} +.#{$ti-prefix}-square-rounded-letter-z:before { + content: $ti-icon-square-rounded-letter-z; +} +.#{$ti-prefix}-square-rounded-letter-z-filled:before { + content: $ti-icon-square-rounded-letter-z-filled; +} +.#{$ti-prefix}-square-rounded-minus:before { + content: $ti-icon-square-rounded-minus; +} +.#{$ti-prefix}-square-rounded-minus-2:before { + content: $ti-icon-square-rounded-minus-2; +} +.#{$ti-prefix}-square-rounded-minus-filled:before { + content: $ti-icon-square-rounded-minus-filled; +} +.#{$ti-prefix}-square-rounded-number-0:before { + content: $ti-icon-square-rounded-number-0; +} +.#{$ti-prefix}-square-rounded-number-0-filled:before { + content: $ti-icon-square-rounded-number-0-filled; +} +.#{$ti-prefix}-square-rounded-number-1:before { + content: $ti-icon-square-rounded-number-1; +} +.#{$ti-prefix}-square-rounded-number-1-filled:before { + content: $ti-icon-square-rounded-number-1-filled; +} +.#{$ti-prefix}-square-rounded-number-2:before { + content: $ti-icon-square-rounded-number-2; +} +.#{$ti-prefix}-square-rounded-number-2-filled:before { + content: $ti-icon-square-rounded-number-2-filled; +} +.#{$ti-prefix}-square-rounded-number-3:before { + content: $ti-icon-square-rounded-number-3; +} +.#{$ti-prefix}-square-rounded-number-3-filled:before { + content: $ti-icon-square-rounded-number-3-filled; +} +.#{$ti-prefix}-square-rounded-number-4:before { + content: $ti-icon-square-rounded-number-4; +} +.#{$ti-prefix}-square-rounded-number-4-filled:before { + content: $ti-icon-square-rounded-number-4-filled; +} +.#{$ti-prefix}-square-rounded-number-5:before { + content: $ti-icon-square-rounded-number-5; +} +.#{$ti-prefix}-square-rounded-number-5-filled:before { + content: $ti-icon-square-rounded-number-5-filled; +} +.#{$ti-prefix}-square-rounded-number-6:before { + content: $ti-icon-square-rounded-number-6; +} +.#{$ti-prefix}-square-rounded-number-6-filled:before { + content: $ti-icon-square-rounded-number-6-filled; +} +.#{$ti-prefix}-square-rounded-number-7:before { + content: $ti-icon-square-rounded-number-7; +} +.#{$ti-prefix}-square-rounded-number-7-filled:before { + content: $ti-icon-square-rounded-number-7-filled; +} +.#{$ti-prefix}-square-rounded-number-8:before { + content: $ti-icon-square-rounded-number-8; +} +.#{$ti-prefix}-square-rounded-number-8-filled:before { + content: $ti-icon-square-rounded-number-8-filled; +} +.#{$ti-prefix}-square-rounded-number-9:before { + content: $ti-icon-square-rounded-number-9; +} +.#{$ti-prefix}-square-rounded-number-9-filled:before { + content: $ti-icon-square-rounded-number-9-filled; +} +.#{$ti-prefix}-square-rounded-percentage:before { + content: $ti-icon-square-rounded-percentage; +} +.#{$ti-prefix}-square-rounded-plus:before { + content: $ti-icon-square-rounded-plus; +} +.#{$ti-prefix}-square-rounded-plus-2:before { + content: $ti-icon-square-rounded-plus-2; +} +.#{$ti-prefix}-square-rounded-plus-filled:before { + content: $ti-icon-square-rounded-plus-filled; +} +.#{$ti-prefix}-square-rounded-x:before { + content: $ti-icon-square-rounded-x; +} +.#{$ti-prefix}-square-rounded-x-filled:before { + content: $ti-icon-square-rounded-x-filled; +} +.#{$ti-prefix}-square-toggle:before { + content: $ti-icon-square-toggle; +} +.#{$ti-prefix}-square-toggle-horizontal:before { + content: $ti-icon-square-toggle-horizontal; +} +.#{$ti-prefix}-square-x:before { + content: $ti-icon-square-x; +} +.#{$ti-prefix}-square-x-filled:before { + content: $ti-icon-square-x-filled; +} +.#{$ti-prefix}-squares:before { + content: $ti-icon-squares; +} +.#{$ti-prefix}-squares-diagonal:before { + content: $ti-icon-squares-diagonal; +} +.#{$ti-prefix}-squares-filled:before { + content: $ti-icon-squares-filled; +} +.#{$ti-prefix}-squares-selected:before { + content: $ti-icon-squares-selected; +} +.#{$ti-prefix}-stack:before { + content: $ti-icon-stack; +} +.#{$ti-prefix}-stack-2:before { + content: $ti-icon-stack-2; +} +.#{$ti-prefix}-stack-2-filled:before { + content: $ti-icon-stack-2-filled; +} +.#{$ti-prefix}-stack-3:before { + content: $ti-icon-stack-3; +} +.#{$ti-prefix}-stack-3-filled:before { + content: $ti-icon-stack-3-filled; +} +.#{$ti-prefix}-stack-back:before { + content: $ti-icon-stack-back; +} +.#{$ti-prefix}-stack-backward:before { + content: $ti-icon-stack-backward; +} +.#{$ti-prefix}-stack-filled:before { + content: $ti-icon-stack-filled; +} +.#{$ti-prefix}-stack-forward:before { + content: $ti-icon-stack-forward; +} +.#{$ti-prefix}-stack-front:before { + content: $ti-icon-stack-front; +} +.#{$ti-prefix}-stack-middle:before { + content: $ti-icon-stack-middle; +} +.#{$ti-prefix}-stack-pop:before { + content: $ti-icon-stack-pop; +} +.#{$ti-prefix}-stack-push:before { + content: $ti-icon-stack-push; +} +.#{$ti-prefix}-stairs:before { + content: $ti-icon-stairs; +} +.#{$ti-prefix}-stairs-down:before { + content: $ti-icon-stairs-down; +} +.#{$ti-prefix}-stairs-up:before { + content: $ti-icon-stairs-up; +} +.#{$ti-prefix}-star:before { + content: $ti-icon-star; +} +.#{$ti-prefix}-star-filled:before { + content: $ti-icon-star-filled; +} +.#{$ti-prefix}-star-half:before { + content: $ti-icon-star-half; +} +.#{$ti-prefix}-star-half-filled:before { + content: $ti-icon-star-half-filled; +} +.#{$ti-prefix}-star-off:before { + content: $ti-icon-star-off; +} +.#{$ti-prefix}-stars:before { + content: $ti-icon-stars; +} +.#{$ti-prefix}-stars-filled:before { + content: $ti-icon-stars-filled; +} +.#{$ti-prefix}-stars-off:before { + content: $ti-icon-stars-off; +} +.#{$ti-prefix}-status-change:before { + content: $ti-icon-status-change; +} +.#{$ti-prefix}-steam:before { + content: $ti-icon-steam; +} +.#{$ti-prefix}-steering-wheel:before { + content: $ti-icon-steering-wheel; +} +.#{$ti-prefix}-steering-wheel-off:before { + content: $ti-icon-steering-wheel-off; +} +.#{$ti-prefix}-step-into:before { + content: $ti-icon-step-into; +} +.#{$ti-prefix}-step-out:before { + content: $ti-icon-step-out; +} +.#{$ti-prefix}-stereo-glasses:before { + content: $ti-icon-stereo-glasses; +} +.#{$ti-prefix}-stethoscope:before { + content: $ti-icon-stethoscope; +} +.#{$ti-prefix}-stethoscope-off:before { + content: $ti-icon-stethoscope-off; +} +.#{$ti-prefix}-sticker:before { + content: $ti-icon-sticker; +} +.#{$ti-prefix}-sticker-2:before { + content: $ti-icon-sticker-2; +} +.#{$ti-prefix}-storm:before { + content: $ti-icon-storm; +} +.#{$ti-prefix}-storm-off:before { + content: $ti-icon-storm-off; +} +.#{$ti-prefix}-stretching:before { + content: $ti-icon-stretching; +} +.#{$ti-prefix}-stretching-2:before { + content: $ti-icon-stretching-2; +} +.#{$ti-prefix}-strikethrough:before { + content: $ti-icon-strikethrough; +} +.#{$ti-prefix}-submarine:before { + content: $ti-icon-submarine; +} +.#{$ti-prefix}-subscript:before { + content: $ti-icon-subscript; +} +.#{$ti-prefix}-subtask:before { + content: $ti-icon-subtask; +} +.#{$ti-prefix}-sum:before { + content: $ti-icon-sum; +} +.#{$ti-prefix}-sum-off:before { + content: $ti-icon-sum-off; +} +.#{$ti-prefix}-sun:before { + content: $ti-icon-sun; +} +.#{$ti-prefix}-sun-electricity:before { + content: $ti-icon-sun-electricity; +} +.#{$ti-prefix}-sun-filled:before { + content: $ti-icon-sun-filled; +} +.#{$ti-prefix}-sun-high:before { + content: $ti-icon-sun-high; +} +.#{$ti-prefix}-sun-low:before { + content: $ti-icon-sun-low; +} +.#{$ti-prefix}-sun-moon:before { + content: $ti-icon-sun-moon; +} +.#{$ti-prefix}-sun-off:before { + content: $ti-icon-sun-off; +} +.#{$ti-prefix}-sun-wind:before { + content: $ti-icon-sun-wind; +} +.#{$ti-prefix}-sunglasses:before { + content: $ti-icon-sunglasses; +} +.#{$ti-prefix}-sunglasses-filled:before { + content: $ti-icon-sunglasses-filled; +} +.#{$ti-prefix}-sunrise:before { + content: $ti-icon-sunrise; +} +.#{$ti-prefix}-sunset:before { + content: $ti-icon-sunset; +} +.#{$ti-prefix}-sunset-2:before { + content: $ti-icon-sunset-2; +} +.#{$ti-prefix}-superscript:before { + content: $ti-icon-superscript; +} +.#{$ti-prefix}-svg:before { + content: $ti-icon-svg; +} +.#{$ti-prefix}-swimming:before { + content: $ti-icon-swimming; +} +.#{$ti-prefix}-swipe:before { + content: $ti-icon-swipe; +} +.#{$ti-prefix}-swipe-down:before { + content: $ti-icon-swipe-down; +} +.#{$ti-prefix}-swipe-left:before { + content: $ti-icon-swipe-left; +} +.#{$ti-prefix}-swipe-right:before { + content: $ti-icon-swipe-right; +} +.#{$ti-prefix}-swipe-up:before { + content: $ti-icon-swipe-up; +} +.#{$ti-prefix}-switch:before { + content: $ti-icon-switch; +} +.#{$ti-prefix}-switch-2:before { + content: $ti-icon-switch-2; +} +.#{$ti-prefix}-switch-3:before { + content: $ti-icon-switch-3; +} +.#{$ti-prefix}-switch-horizontal:before { + content: $ti-icon-switch-horizontal; +} +.#{$ti-prefix}-switch-vertical:before { + content: $ti-icon-switch-vertical; +} +.#{$ti-prefix}-sword:before { + content: $ti-icon-sword; +} +.#{$ti-prefix}-sword-off:before { + content: $ti-icon-sword-off; +} +.#{$ti-prefix}-swords:before { + content: $ti-icon-swords; +} +.#{$ti-prefix}-table:before { + content: $ti-icon-table; +} +.#{$ti-prefix}-table-alias:before { + content: $ti-icon-table-alias; +} +.#{$ti-prefix}-table-column:before { + content: $ti-icon-table-column; +} +.#{$ti-prefix}-table-down:before { + content: $ti-icon-table-down; +} +.#{$ti-prefix}-table-export:before { + content: $ti-icon-table-export; +} +.#{$ti-prefix}-table-filled:before { + content: $ti-icon-table-filled; +} +.#{$ti-prefix}-table-heart:before { + content: $ti-icon-table-heart; +} +.#{$ti-prefix}-table-import:before { + content: $ti-icon-table-import; +} +.#{$ti-prefix}-table-minus:before { + content: $ti-icon-table-minus; +} +.#{$ti-prefix}-table-off:before { + content: $ti-icon-table-off; +} +.#{$ti-prefix}-table-options:before { + content: $ti-icon-table-options; +} +.#{$ti-prefix}-table-plus:before { + content: $ti-icon-table-plus; +} +.#{$ti-prefix}-table-row:before { + content: $ti-icon-table-row; +} +.#{$ti-prefix}-table-share:before { + content: $ti-icon-table-share; +} +.#{$ti-prefix}-table-shortcut:before { + content: $ti-icon-table-shortcut; +} +.#{$ti-prefix}-tag:before { + content: $ti-icon-tag; +} +.#{$ti-prefix}-tag-off:before { + content: $ti-icon-tag-off; +} +.#{$ti-prefix}-tag-starred:before { + content: $ti-icon-tag-starred; +} +.#{$ti-prefix}-tags:before { + content: $ti-icon-tags; +} +.#{$ti-prefix}-tags-off:before { + content: $ti-icon-tags-off; +} +.#{$ti-prefix}-tallymark-1:before { + content: $ti-icon-tallymark-1; +} +.#{$ti-prefix}-tallymark-2:before { + content: $ti-icon-tallymark-2; +} +.#{$ti-prefix}-tallymark-3:before { + content: $ti-icon-tallymark-3; +} +.#{$ti-prefix}-tallymark-4:before { + content: $ti-icon-tallymark-4; +} +.#{$ti-prefix}-tallymarks:before { + content: $ti-icon-tallymarks; +} +.#{$ti-prefix}-tank:before { + content: $ti-icon-tank; +} +.#{$ti-prefix}-target:before { + content: $ti-icon-target; +} +.#{$ti-prefix}-target-arrow:before { + content: $ti-icon-target-arrow; +} +.#{$ti-prefix}-target-off:before { + content: $ti-icon-target-off; +} +.#{$ti-prefix}-teapot:before { + content: $ti-icon-teapot; +} +.#{$ti-prefix}-telescope:before { + content: $ti-icon-telescope; +} +.#{$ti-prefix}-telescope-off:before { + content: $ti-icon-telescope-off; +} +.#{$ti-prefix}-temperature:before { + content: $ti-icon-temperature; +} +.#{$ti-prefix}-temperature-celsius:before { + content: $ti-icon-temperature-celsius; +} +.#{$ti-prefix}-temperature-fahrenheit:before { + content: $ti-icon-temperature-fahrenheit; +} +.#{$ti-prefix}-temperature-minus:before { + content: $ti-icon-temperature-minus; +} +.#{$ti-prefix}-temperature-off:before { + content: $ti-icon-temperature-off; +} +.#{$ti-prefix}-temperature-plus:before { + content: $ti-icon-temperature-plus; +} +.#{$ti-prefix}-temperature-snow:before { + content: $ti-icon-temperature-snow; +} +.#{$ti-prefix}-temperature-sun:before { + content: $ti-icon-temperature-sun; +} +.#{$ti-prefix}-template:before { + content: $ti-icon-template; +} +.#{$ti-prefix}-template-off:before { + content: $ti-icon-template-off; +} +.#{$ti-prefix}-tent:before { + content: $ti-icon-tent; +} +.#{$ti-prefix}-tent-off:before { + content: $ti-icon-tent-off; +} +.#{$ti-prefix}-terminal:before { + content: $ti-icon-terminal; +} +.#{$ti-prefix}-terminal-2:before { + content: $ti-icon-terminal-2; +} +.#{$ti-prefix}-test-pipe:before { + content: $ti-icon-test-pipe; +} +.#{$ti-prefix}-test-pipe-2:before { + content: $ti-icon-test-pipe-2; +} +.#{$ti-prefix}-test-pipe-off:before { + content: $ti-icon-test-pipe-off; +} +.#{$ti-prefix}-tex:before { + content: $ti-icon-tex; +} +.#{$ti-prefix}-text-caption:before { + content: $ti-icon-text-caption; +} +.#{$ti-prefix}-text-color:before { + content: $ti-icon-text-color; +} +.#{$ti-prefix}-text-decrease:before { + content: $ti-icon-text-decrease; +} +.#{$ti-prefix}-text-direction-ltr:before { + content: $ti-icon-text-direction-ltr; +} +.#{$ti-prefix}-text-direction-rtl:before { + content: $ti-icon-text-direction-rtl; +} +.#{$ti-prefix}-text-grammar:before { + content: $ti-icon-text-grammar; +} +.#{$ti-prefix}-text-increase:before { + content: $ti-icon-text-increase; +} +.#{$ti-prefix}-text-orientation:before { + content: $ti-icon-text-orientation; +} +.#{$ti-prefix}-text-plus:before { + content: $ti-icon-text-plus; +} +.#{$ti-prefix}-text-recognition:before { + content: $ti-icon-text-recognition; +} +.#{$ti-prefix}-text-resize:before { + content: $ti-icon-text-resize; +} +.#{$ti-prefix}-text-scan-2:before { + content: $ti-icon-text-scan-2; +} +.#{$ti-prefix}-text-size:before { + content: $ti-icon-text-size; +} +.#{$ti-prefix}-text-spellcheck:before { + content: $ti-icon-text-spellcheck; +} +.#{$ti-prefix}-text-wrap:before { + content: $ti-icon-text-wrap; +} +.#{$ti-prefix}-text-wrap-column:before { + content: $ti-icon-text-wrap-column; +} +.#{$ti-prefix}-text-wrap-disabled:before { + content: $ti-icon-text-wrap-disabled; +} +.#{$ti-prefix}-texture:before { + content: $ti-icon-texture; +} +.#{$ti-prefix}-theater:before { + content: $ti-icon-theater; +} +.#{$ti-prefix}-thermometer:before { + content: $ti-icon-thermometer; +} +.#{$ti-prefix}-thumb-down:before { + content: $ti-icon-thumb-down; +} +.#{$ti-prefix}-thumb-down-filled:before { + content: $ti-icon-thumb-down-filled; +} +.#{$ti-prefix}-thumb-down-off:before { + content: $ti-icon-thumb-down-off; +} +.#{$ti-prefix}-thumb-up:before { + content: $ti-icon-thumb-up; +} +.#{$ti-prefix}-thumb-up-filled:before { + content: $ti-icon-thumb-up-filled; +} +.#{$ti-prefix}-thumb-up-off:before { + content: $ti-icon-thumb-up-off; +} +.#{$ti-prefix}-tic-tac:before { + content: $ti-icon-tic-tac; +} +.#{$ti-prefix}-ticket:before { + content: $ti-icon-ticket; +} +.#{$ti-prefix}-ticket-off:before { + content: $ti-icon-ticket-off; +} +.#{$ti-prefix}-tie:before { + content: $ti-icon-tie; +} +.#{$ti-prefix}-tilde:before { + content: $ti-icon-tilde; +} +.#{$ti-prefix}-tilt-shift:before { + content: $ti-icon-tilt-shift; +} +.#{$ti-prefix}-tilt-shift-filled:before { + content: $ti-icon-tilt-shift-filled; +} +.#{$ti-prefix}-tilt-shift-off:before { + content: $ti-icon-tilt-shift-off; +} +.#{$ti-prefix}-time-duration-0:before { + content: $ti-icon-time-duration-0; +} +.#{$ti-prefix}-time-duration-10:before { + content: $ti-icon-time-duration-10; +} +.#{$ti-prefix}-time-duration-15:before { + content: $ti-icon-time-duration-15; +} +.#{$ti-prefix}-time-duration-30:before { + content: $ti-icon-time-duration-30; +} +.#{$ti-prefix}-time-duration-45:before { + content: $ti-icon-time-duration-45; +} +.#{$ti-prefix}-time-duration-5:before { + content: $ti-icon-time-duration-5; +} +.#{$ti-prefix}-time-duration-60:before { + content: $ti-icon-time-duration-60; +} +.#{$ti-prefix}-time-duration-90:before { + content: $ti-icon-time-duration-90; +} +.#{$ti-prefix}-time-duration-off:before { + content: $ti-icon-time-duration-off; +} +.#{$ti-prefix}-timeline:before { + content: $ti-icon-timeline; +} +.#{$ti-prefix}-timeline-event:before { + content: $ti-icon-timeline-event; +} +.#{$ti-prefix}-timeline-event-exclamation:before { + content: $ti-icon-timeline-event-exclamation; +} +.#{$ti-prefix}-timeline-event-filled:before { + content: $ti-icon-timeline-event-filled; +} +.#{$ti-prefix}-timeline-event-minus:before { + content: $ti-icon-timeline-event-minus; +} +.#{$ti-prefix}-timeline-event-plus:before { + content: $ti-icon-timeline-event-plus; +} +.#{$ti-prefix}-timeline-event-text:before { + content: $ti-icon-timeline-event-text; +} +.#{$ti-prefix}-timeline-event-x:before { + content: $ti-icon-timeline-event-x; +} +.#{$ti-prefix}-tir:before { + content: $ti-icon-tir; +} +.#{$ti-prefix}-toggle-left:before { + content: $ti-icon-toggle-left; +} +.#{$ti-prefix}-toggle-left-filled:before { + content: $ti-icon-toggle-left-filled; +} +.#{$ti-prefix}-toggle-right:before { + content: $ti-icon-toggle-right; +} +.#{$ti-prefix}-toggle-right-filled:before { + content: $ti-icon-toggle-right-filled; +} +.#{$ti-prefix}-toilet-paper:before { + content: $ti-icon-toilet-paper; +} +.#{$ti-prefix}-toilet-paper-off:before { + content: $ti-icon-toilet-paper-off; +} +.#{$ti-prefix}-toml:before { + content: $ti-icon-toml; +} +.#{$ti-prefix}-tool:before { + content: $ti-icon-tool; +} +.#{$ti-prefix}-tools:before { + content: $ti-icon-tools; +} +.#{$ti-prefix}-tools-kitchen:before { + content: $ti-icon-tools-kitchen; +} +.#{$ti-prefix}-tools-kitchen-2:before { + content: $ti-icon-tools-kitchen-2; +} +.#{$ti-prefix}-tools-kitchen-2-off:before { + content: $ti-icon-tools-kitchen-2-off; +} +.#{$ti-prefix}-tools-kitchen-3:before { + content: $ti-icon-tools-kitchen-3; +} +.#{$ti-prefix}-tools-kitchen-off:before { + content: $ti-icon-tools-kitchen-off; +} +.#{$ti-prefix}-tools-off:before { + content: $ti-icon-tools-off; +} +.#{$ti-prefix}-tooltip:before { + content: $ti-icon-tooltip; +} +.#{$ti-prefix}-topology-bus:before { + content: $ti-icon-topology-bus; +} +.#{$ti-prefix}-topology-complex:before { + content: $ti-icon-topology-complex; +} +.#{$ti-prefix}-topology-full:before { + content: $ti-icon-topology-full; +} +.#{$ti-prefix}-topology-full-hierarchy:before { + content: $ti-icon-topology-full-hierarchy; +} +.#{$ti-prefix}-topology-ring:before { + content: $ti-icon-topology-ring; +} +.#{$ti-prefix}-topology-ring-2:before { + content: $ti-icon-topology-ring-2; +} +.#{$ti-prefix}-topology-ring-3:before { + content: $ti-icon-topology-ring-3; +} +.#{$ti-prefix}-topology-star:before { + content: $ti-icon-topology-star; +} +.#{$ti-prefix}-topology-star-2:before { + content: $ti-icon-topology-star-2; +} +.#{$ti-prefix}-topology-star-3:before { + content: $ti-icon-topology-star-3; +} +.#{$ti-prefix}-topology-star-ring:before { + content: $ti-icon-topology-star-ring; +} +.#{$ti-prefix}-topology-star-ring-2:before { + content: $ti-icon-topology-star-ring-2; +} +.#{$ti-prefix}-topology-star-ring-3:before { + content: $ti-icon-topology-star-ring-3; +} +.#{$ti-prefix}-torii:before { + content: $ti-icon-torii; +} +.#{$ti-prefix}-tornado:before { + content: $ti-icon-tornado; +} +.#{$ti-prefix}-tournament:before { + content: $ti-icon-tournament; +} +.#{$ti-prefix}-tower:before { + content: $ti-icon-tower; +} +.#{$ti-prefix}-tower-off:before { + content: $ti-icon-tower-off; +} +.#{$ti-prefix}-track:before { + content: $ti-icon-track; +} +.#{$ti-prefix}-tractor:before { + content: $ti-icon-tractor; +} +.#{$ti-prefix}-trademark:before { + content: $ti-icon-trademark; +} +.#{$ti-prefix}-traffic-cone:before { + content: $ti-icon-traffic-cone; +} +.#{$ti-prefix}-traffic-cone-off:before { + content: $ti-icon-traffic-cone-off; +} +.#{$ti-prefix}-traffic-lights:before { + content: $ti-icon-traffic-lights; +} +.#{$ti-prefix}-traffic-lights-off:before { + content: $ti-icon-traffic-lights-off; +} +.#{$ti-prefix}-train:before { + content: $ti-icon-train; +} +.#{$ti-prefix}-transaction-bitcoin:before { + content: $ti-icon-transaction-bitcoin; +} +.#{$ti-prefix}-transaction-dollar:before { + content: $ti-icon-transaction-dollar; +} +.#{$ti-prefix}-transaction-euro:before { + content: $ti-icon-transaction-euro; +} +.#{$ti-prefix}-transaction-pound:before { + content: $ti-icon-transaction-pound; +} +.#{$ti-prefix}-transaction-rupee:before { + content: $ti-icon-transaction-rupee; +} +.#{$ti-prefix}-transaction-yen:before { + content: $ti-icon-transaction-yen; +} +.#{$ti-prefix}-transaction-yuan:before { + content: $ti-icon-transaction-yuan; +} +.#{$ti-prefix}-transfer:before { + content: $ti-icon-transfer; +} +.#{$ti-prefix}-transfer-in:before { + content: $ti-icon-transfer-in; +} +.#{$ti-prefix}-transfer-out:before { + content: $ti-icon-transfer-out; +} +.#{$ti-prefix}-transfer-vertical:before { + content: $ti-icon-transfer-vertical; +} +.#{$ti-prefix}-transform:before { + content: $ti-icon-transform; +} +.#{$ti-prefix}-transform-filled:before { + content: $ti-icon-transform-filled; +} +.#{$ti-prefix}-transform-point:before { + content: $ti-icon-transform-point; +} +.#{$ti-prefix}-transform-point-bottom-left:before { + content: $ti-icon-transform-point-bottom-left; +} +.#{$ti-prefix}-transform-point-bottom-right:before { + content: $ti-icon-transform-point-bottom-right; +} +.#{$ti-prefix}-transform-point-top-left:before { + content: $ti-icon-transform-point-top-left; +} +.#{$ti-prefix}-transform-point-top-right:before { + content: $ti-icon-transform-point-top-right; +} +.#{$ti-prefix}-transition-bottom:before { + content: $ti-icon-transition-bottom; +} +.#{$ti-prefix}-transition-bottom-filled:before { + content: $ti-icon-transition-bottom-filled; +} +.#{$ti-prefix}-transition-left:before { + content: $ti-icon-transition-left; +} +.#{$ti-prefix}-transition-left-filled:before { + content: $ti-icon-transition-left-filled; +} +.#{$ti-prefix}-transition-right:before { + content: $ti-icon-transition-right; +} +.#{$ti-prefix}-transition-right-filled:before { + content: $ti-icon-transition-right-filled; +} +.#{$ti-prefix}-transition-top:before { + content: $ti-icon-transition-top; +} +.#{$ti-prefix}-transition-top-filled:before { + content: $ti-icon-transition-top-filled; +} +.#{$ti-prefix}-trash:before { + content: $ti-icon-trash; +} +.#{$ti-prefix}-trash-filled:before { + content: $ti-icon-trash-filled; +} +.#{$ti-prefix}-trash-off:before { + content: $ti-icon-trash-off; +} +.#{$ti-prefix}-trash-x:before { + content: $ti-icon-trash-x; +} +.#{$ti-prefix}-trash-x-filled:before { + content: $ti-icon-trash-x-filled; +} +.#{$ti-prefix}-treadmill:before { + content: $ti-icon-treadmill; +} +.#{$ti-prefix}-tree:before { + content: $ti-icon-tree; +} +.#{$ti-prefix}-trees:before { + content: $ti-icon-trees; +} +.#{$ti-prefix}-trekking:before { + content: $ti-icon-trekking; +} +.#{$ti-prefix}-trending-down:before { + content: $ti-icon-trending-down; +} +.#{$ti-prefix}-trending-down-2:before { + content: $ti-icon-trending-down-2; +} +.#{$ti-prefix}-trending-down-3:before { + content: $ti-icon-trending-down-3; +} +.#{$ti-prefix}-trending-up:before { + content: $ti-icon-trending-up; +} +.#{$ti-prefix}-trending-up-2:before { + content: $ti-icon-trending-up-2; +} +.#{$ti-prefix}-trending-up-3:before { + content: $ti-icon-trending-up-3; +} +.#{$ti-prefix}-triangle:before { + content: $ti-icon-triangle; +} +.#{$ti-prefix}-triangle-filled:before { + content: $ti-icon-triangle-filled; +} +.#{$ti-prefix}-triangle-inverted:before { + content: $ti-icon-triangle-inverted; +} +.#{$ti-prefix}-triangle-inverted-filled:before { + content: $ti-icon-triangle-inverted-filled; +} +.#{$ti-prefix}-triangle-minus:before { + content: $ti-icon-triangle-minus; +} +.#{$ti-prefix}-triangle-minus-2:before { + content: $ti-icon-triangle-minus-2; +} +.#{$ti-prefix}-triangle-off:before { + content: $ti-icon-triangle-off; +} +.#{$ti-prefix}-triangle-plus:before { + content: $ti-icon-triangle-plus; +} +.#{$ti-prefix}-triangle-plus-2:before { + content: $ti-icon-triangle-plus-2; +} +.#{$ti-prefix}-triangle-square-circle:before { + content: $ti-icon-triangle-square-circle; +} +.#{$ti-prefix}-triangle-square-circle-filled:before { + content: $ti-icon-triangle-square-circle-filled; +} +.#{$ti-prefix}-triangles:before { + content: $ti-icon-triangles; +} +.#{$ti-prefix}-trident:before { + content: $ti-icon-trident; +} +.#{$ti-prefix}-trolley:before { + content: $ti-icon-trolley; +} +.#{$ti-prefix}-trophy:before { + content: $ti-icon-trophy; +} +.#{$ti-prefix}-trophy-filled:before { + content: $ti-icon-trophy-filled; +} +.#{$ti-prefix}-trophy-off:before { + content: $ti-icon-trophy-off; +} +.#{$ti-prefix}-trowel:before { + content: $ti-icon-trowel; +} +.#{$ti-prefix}-truck:before { + content: $ti-icon-truck; +} +.#{$ti-prefix}-truck-delivery:before { + content: $ti-icon-truck-delivery; +} +.#{$ti-prefix}-truck-loading:before { + content: $ti-icon-truck-loading; +} +.#{$ti-prefix}-truck-off:before { + content: $ti-icon-truck-off; +} +.#{$ti-prefix}-truck-return:before { + content: $ti-icon-truck-return; +} +.#{$ti-prefix}-txt:before { + content: $ti-icon-txt; +} +.#{$ti-prefix}-typeface:before { + content: $ti-icon-typeface; +} +.#{$ti-prefix}-typography:before { + content: $ti-icon-typography; +} +.#{$ti-prefix}-typography-off:before { + content: $ti-icon-typography-off; +} +.#{$ti-prefix}-u-turn-left:before { + content: $ti-icon-u-turn-left; +} +.#{$ti-prefix}-u-turn-right:before { + content: $ti-icon-u-turn-right; +} +.#{$ti-prefix}-ufo:before { + content: $ti-icon-ufo; +} +.#{$ti-prefix}-ufo-off:before { + content: $ti-icon-ufo-off; +} +.#{$ti-prefix}-umbrella:before { + content: $ti-icon-umbrella; +} +.#{$ti-prefix}-umbrella-filled:before { + content: $ti-icon-umbrella-filled; +} +.#{$ti-prefix}-umbrella-off:before { + content: $ti-icon-umbrella-off; +} +.#{$ti-prefix}-underline:before { + content: $ti-icon-underline; +} +.#{$ti-prefix}-universe:before { + content: $ti-icon-universe; +} +.#{$ti-prefix}-unlink:before { + content: $ti-icon-unlink; +} +.#{$ti-prefix}-upload:before { + content: $ti-icon-upload; +} +.#{$ti-prefix}-urgent:before { + content: $ti-icon-urgent; +} +.#{$ti-prefix}-usb:before { + content: $ti-icon-usb; +} +.#{$ti-prefix}-user:before { + content: $ti-icon-user; +} +.#{$ti-prefix}-user-bolt:before { + content: $ti-icon-user-bolt; +} +.#{$ti-prefix}-user-cancel:before { + content: $ti-icon-user-cancel; +} +.#{$ti-prefix}-user-check:before { + content: $ti-icon-user-check; +} +.#{$ti-prefix}-user-circle:before { + content: $ti-icon-user-circle; +} +.#{$ti-prefix}-user-code:before { + content: $ti-icon-user-code; +} +.#{$ti-prefix}-user-cog:before { + content: $ti-icon-user-cog; +} +.#{$ti-prefix}-user-dollar:before { + content: $ti-icon-user-dollar; +} +.#{$ti-prefix}-user-down:before { + content: $ti-icon-user-down; +} +.#{$ti-prefix}-user-edit:before { + content: $ti-icon-user-edit; +} +.#{$ti-prefix}-user-exclamation:before { + content: $ti-icon-user-exclamation; +} +.#{$ti-prefix}-user-filled:before { + content: $ti-icon-user-filled; +} +.#{$ti-prefix}-user-heart:before { + content: $ti-icon-user-heart; +} +.#{$ti-prefix}-user-hexagon:before { + content: $ti-icon-user-hexagon; +} +.#{$ti-prefix}-user-minus:before { + content: $ti-icon-user-minus; +} +.#{$ti-prefix}-user-off:before { + content: $ti-icon-user-off; +} +.#{$ti-prefix}-user-pause:before { + content: $ti-icon-user-pause; +} +.#{$ti-prefix}-user-pentagon:before { + content: $ti-icon-user-pentagon; +} +.#{$ti-prefix}-user-pin:before { + content: $ti-icon-user-pin; +} +.#{$ti-prefix}-user-plus:before { + content: $ti-icon-user-plus; +} +.#{$ti-prefix}-user-question:before { + content: $ti-icon-user-question; +} +.#{$ti-prefix}-user-scan:before { + content: $ti-icon-user-scan; +} +.#{$ti-prefix}-user-screen:before { + content: $ti-icon-user-screen; +} +.#{$ti-prefix}-user-search:before { + content: $ti-icon-user-search; +} +.#{$ti-prefix}-user-share:before { + content: $ti-icon-user-share; +} +.#{$ti-prefix}-user-shield:before { + content: $ti-icon-user-shield; +} +.#{$ti-prefix}-user-square:before { + content: $ti-icon-user-square; +} +.#{$ti-prefix}-user-square-rounded:before { + content: $ti-icon-user-square-rounded; +} +.#{$ti-prefix}-user-star:before { + content: $ti-icon-user-star; +} +.#{$ti-prefix}-user-up:before { + content: $ti-icon-user-up; +} +.#{$ti-prefix}-user-x:before { + content: $ti-icon-user-x; +} +.#{$ti-prefix}-users:before { + content: $ti-icon-users; +} +.#{$ti-prefix}-users-group:before { + content: $ti-icon-users-group; +} +.#{$ti-prefix}-users-minus:before { + content: $ti-icon-users-minus; +} +.#{$ti-prefix}-users-plus:before { + content: $ti-icon-users-plus; +} +.#{$ti-prefix}-uv-index:before { + content: $ti-icon-uv-index; +} +.#{$ti-prefix}-ux-circle:before { + content: $ti-icon-ux-circle; +} +.#{$ti-prefix}-vaccine:before { + content: $ti-icon-vaccine; +} +.#{$ti-prefix}-vaccine-bottle:before { + content: $ti-icon-vaccine-bottle; +} +.#{$ti-prefix}-vaccine-bottle-off:before { + content: $ti-icon-vaccine-bottle-off; +} +.#{$ti-prefix}-vaccine-off:before { + content: $ti-icon-vaccine-off; +} +.#{$ti-prefix}-vacuum-cleaner:before { + content: $ti-icon-vacuum-cleaner; +} +.#{$ti-prefix}-variable:before { + content: $ti-icon-variable; +} +.#{$ti-prefix}-variable-minus:before { + content: $ti-icon-variable-minus; +} +.#{$ti-prefix}-variable-off:before { + content: $ti-icon-variable-off; +} +.#{$ti-prefix}-variable-plus:before { + content: $ti-icon-variable-plus; +} +.#{$ti-prefix}-vector:before { + content: $ti-icon-vector; +} +.#{$ti-prefix}-vector-bezier:before { + content: $ti-icon-vector-bezier; +} +.#{$ti-prefix}-vector-bezier-2:before { + content: $ti-icon-vector-bezier-2; +} +.#{$ti-prefix}-vector-bezier-arc:before { + content: $ti-icon-vector-bezier-arc; +} +.#{$ti-prefix}-vector-bezier-circle:before { + content: $ti-icon-vector-bezier-circle; +} +.#{$ti-prefix}-vector-off:before { + content: $ti-icon-vector-off; +} +.#{$ti-prefix}-vector-spline:before { + content: $ti-icon-vector-spline; +} +.#{$ti-prefix}-vector-triangle:before { + content: $ti-icon-vector-triangle; +} +.#{$ti-prefix}-vector-triangle-off:before { + content: $ti-icon-vector-triangle-off; +} +.#{$ti-prefix}-venus:before { + content: $ti-icon-venus; +} +.#{$ti-prefix}-versions:before { + content: $ti-icon-versions; +} +.#{$ti-prefix}-versions-filled:before { + content: $ti-icon-versions-filled; +} +.#{$ti-prefix}-versions-off:before { + content: $ti-icon-versions-off; +} +.#{$ti-prefix}-video:before { + content: $ti-icon-video; +} +.#{$ti-prefix}-video-minus:before { + content: $ti-icon-video-minus; +} +.#{$ti-prefix}-video-off:before { + content: $ti-icon-video-off; +} +.#{$ti-prefix}-video-plus:before { + content: $ti-icon-video-plus; +} +.#{$ti-prefix}-view-360:before { + content: $ti-icon-view-360; +} +.#{$ti-prefix}-view-360-arrow:before { + content: $ti-icon-view-360-arrow; +} +.#{$ti-prefix}-view-360-number:before { + content: $ti-icon-view-360-number; +} +.#{$ti-prefix}-view-360-off:before { + content: $ti-icon-view-360-off; +} +.#{$ti-prefix}-viewfinder:before { + content: $ti-icon-viewfinder; +} +.#{$ti-prefix}-viewfinder-off:before { + content: $ti-icon-viewfinder-off; +} +.#{$ti-prefix}-viewport-narrow:before { + content: $ti-icon-viewport-narrow; +} +.#{$ti-prefix}-viewport-wide:before { + content: $ti-icon-viewport-wide; +} +.#{$ti-prefix}-vinyl:before { + content: $ti-icon-vinyl; +} +.#{$ti-prefix}-vip:before { + content: $ti-icon-vip; +} +.#{$ti-prefix}-vip-off:before { + content: $ti-icon-vip-off; +} +.#{$ti-prefix}-virus:before { + content: $ti-icon-virus; +} +.#{$ti-prefix}-virus-off:before { + content: $ti-icon-virus-off; +} +.#{$ti-prefix}-virus-search:before { + content: $ti-icon-virus-search; +} +.#{$ti-prefix}-vocabulary:before { + content: $ti-icon-vocabulary; +} +.#{$ti-prefix}-vocabulary-off:before { + content: $ti-icon-vocabulary-off; +} +.#{$ti-prefix}-volcano:before { + content: $ti-icon-volcano; +} +.#{$ti-prefix}-volume:before { + content: $ti-icon-volume; +} +.#{$ti-prefix}-volume-2:before { + content: $ti-icon-volume-2; +} +.#{$ti-prefix}-volume-3:before { + content: $ti-icon-volume-3; +} +.#{$ti-prefix}-volume-off:before { + content: $ti-icon-volume-off; +} +.#{$ti-prefix}-vs:before { + content: $ti-icon-vs; +} +.#{$ti-prefix}-walk:before { + content: $ti-icon-walk; +} +.#{$ti-prefix}-wall:before { + content: $ti-icon-wall; +} +.#{$ti-prefix}-wall-off:before { + content: $ti-icon-wall-off; +} +.#{$ti-prefix}-wallet:before { + content: $ti-icon-wallet; +} +.#{$ti-prefix}-wallet-off:before { + content: $ti-icon-wallet-off; +} +.#{$ti-prefix}-wallpaper:before { + content: $ti-icon-wallpaper; +} +.#{$ti-prefix}-wallpaper-off:before { + content: $ti-icon-wallpaper-off; +} +.#{$ti-prefix}-wand:before { + content: $ti-icon-wand; +} +.#{$ti-prefix}-wand-off:before { + content: $ti-icon-wand-off; +} +.#{$ti-prefix}-wash:before { + content: $ti-icon-wash; +} +.#{$ti-prefix}-wash-dry:before { + content: $ti-icon-wash-dry; +} +.#{$ti-prefix}-wash-dry-1:before { + content: $ti-icon-wash-dry-1; +} +.#{$ti-prefix}-wash-dry-2:before { + content: $ti-icon-wash-dry-2; +} +.#{$ti-prefix}-wash-dry-3:before { + content: $ti-icon-wash-dry-3; +} +.#{$ti-prefix}-wash-dry-a:before { + content: $ti-icon-wash-dry-a; +} +.#{$ti-prefix}-wash-dry-dip:before { + content: $ti-icon-wash-dry-dip; +} +.#{$ti-prefix}-wash-dry-f:before { + content: $ti-icon-wash-dry-f; +} +.#{$ti-prefix}-wash-dry-flat:before { + content: $ti-icon-wash-dry-flat; +} +.#{$ti-prefix}-wash-dry-hang:before { + content: $ti-icon-wash-dry-hang; +} +.#{$ti-prefix}-wash-dry-off:before { + content: $ti-icon-wash-dry-off; +} +.#{$ti-prefix}-wash-dry-p:before { + content: $ti-icon-wash-dry-p; +} +.#{$ti-prefix}-wash-dry-shade:before { + content: $ti-icon-wash-dry-shade; +} +.#{$ti-prefix}-wash-dry-w:before { + content: $ti-icon-wash-dry-w; +} +.#{$ti-prefix}-wash-dryclean:before { + content: $ti-icon-wash-dryclean; +} +.#{$ti-prefix}-wash-dryclean-off:before { + content: $ti-icon-wash-dryclean-off; +} +.#{$ti-prefix}-wash-eco:before { + content: $ti-icon-wash-eco; +} +.#{$ti-prefix}-wash-gentle:before { + content: $ti-icon-wash-gentle; +} +.#{$ti-prefix}-wash-hand:before { + content: $ti-icon-wash-hand; +} +.#{$ti-prefix}-wash-machine:before { + content: $ti-icon-wash-machine; +} +.#{$ti-prefix}-wash-off:before { + content: $ti-icon-wash-off; +} +.#{$ti-prefix}-wash-press:before { + content: $ti-icon-wash-press; +} +.#{$ti-prefix}-wash-temperature-1:before { + content: $ti-icon-wash-temperature-1; +} +.#{$ti-prefix}-wash-temperature-2:before { + content: $ti-icon-wash-temperature-2; +} +.#{$ti-prefix}-wash-temperature-3:before { + content: $ti-icon-wash-temperature-3; +} +.#{$ti-prefix}-wash-temperature-4:before { + content: $ti-icon-wash-temperature-4; +} +.#{$ti-prefix}-wash-temperature-5:before { + content: $ti-icon-wash-temperature-5; +} +.#{$ti-prefix}-wash-temperature-6:before { + content: $ti-icon-wash-temperature-6; +} +.#{$ti-prefix}-wash-tumble-dry:before { + content: $ti-icon-wash-tumble-dry; +} +.#{$ti-prefix}-wash-tumble-off:before { + content: $ti-icon-wash-tumble-off; +} +.#{$ti-prefix}-waterpolo:before { + content: $ti-icon-waterpolo; +} +.#{$ti-prefix}-wave-saw-tool:before { + content: $ti-icon-wave-saw-tool; +} +.#{$ti-prefix}-wave-sine:before { + content: $ti-icon-wave-sine; +} +.#{$ti-prefix}-wave-square:before { + content: $ti-icon-wave-square; +} +.#{$ti-prefix}-waves-electricity:before { + content: $ti-icon-waves-electricity; +} +.#{$ti-prefix}-webhook:before { + content: $ti-icon-webhook; +} +.#{$ti-prefix}-webhook-off:before { + content: $ti-icon-webhook-off; +} +.#{$ti-prefix}-weight:before { + content: $ti-icon-weight; +} +.#{$ti-prefix}-wheel:before { + content: $ti-icon-wheel; +} +.#{$ti-prefix}-wheelchair:before { + content: $ti-icon-wheelchair; +} +.#{$ti-prefix}-wheelchair-off:before { + content: $ti-icon-wheelchair-off; +} +.#{$ti-prefix}-whirl:before { + content: $ti-icon-whirl; +} +.#{$ti-prefix}-wifi:before { + content: $ti-icon-wifi; +} +.#{$ti-prefix}-wifi-0:before { + content: $ti-icon-wifi-0; +} +.#{$ti-prefix}-wifi-1:before { + content: $ti-icon-wifi-1; +} +.#{$ti-prefix}-wifi-2:before { + content: $ti-icon-wifi-2; +} +.#{$ti-prefix}-wifi-off:before { + content: $ti-icon-wifi-off; +} +.#{$ti-prefix}-wind:before { + content: $ti-icon-wind; +} +.#{$ti-prefix}-wind-electricity:before { + content: $ti-icon-wind-electricity; +} +.#{$ti-prefix}-wind-off:before { + content: $ti-icon-wind-off; +} +.#{$ti-prefix}-windmill:before { + content: $ti-icon-windmill; +} +.#{$ti-prefix}-windmill-filled:before { + content: $ti-icon-windmill-filled; +} +.#{$ti-prefix}-windmill-off:before { + content: $ti-icon-windmill-off; +} +.#{$ti-prefix}-window:before { + content: $ti-icon-window; +} +.#{$ti-prefix}-window-maximize:before { + content: $ti-icon-window-maximize; +} +.#{$ti-prefix}-window-minimize:before { + content: $ti-icon-window-minimize; +} +.#{$ti-prefix}-window-off:before { + content: $ti-icon-window-off; +} +.#{$ti-prefix}-windsock:before { + content: $ti-icon-windsock; +} +.#{$ti-prefix}-wiper:before { + content: $ti-icon-wiper; +} +.#{$ti-prefix}-wiper-wash:before { + content: $ti-icon-wiper-wash; +} +.#{$ti-prefix}-woman:before { + content: $ti-icon-woman; +} +.#{$ti-prefix}-woman-filled:before { + content: $ti-icon-woman-filled; +} +.#{$ti-prefix}-wood:before { + content: $ti-icon-wood; +} +.#{$ti-prefix}-world:before { + content: $ti-icon-world; +} +.#{$ti-prefix}-world-bolt:before { + content: $ti-icon-world-bolt; +} +.#{$ti-prefix}-world-cancel:before { + content: $ti-icon-world-cancel; +} +.#{$ti-prefix}-world-check:before { + content: $ti-icon-world-check; +} +.#{$ti-prefix}-world-code:before { + content: $ti-icon-world-code; +} +.#{$ti-prefix}-world-cog:before { + content: $ti-icon-world-cog; +} +.#{$ti-prefix}-world-dollar:before { + content: $ti-icon-world-dollar; +} +.#{$ti-prefix}-world-down:before { + content: $ti-icon-world-down; +} +.#{$ti-prefix}-world-download:before { + content: $ti-icon-world-download; +} +.#{$ti-prefix}-world-exclamation:before { + content: $ti-icon-world-exclamation; +} +.#{$ti-prefix}-world-heart:before { + content: $ti-icon-world-heart; +} +.#{$ti-prefix}-world-latitude:before { + content: $ti-icon-world-latitude; +} +.#{$ti-prefix}-world-longitude:before { + content: $ti-icon-world-longitude; +} +.#{$ti-prefix}-world-minus:before { + content: $ti-icon-world-minus; +} +.#{$ti-prefix}-world-off:before { + content: $ti-icon-world-off; +} +.#{$ti-prefix}-world-pause:before { + content: $ti-icon-world-pause; +} +.#{$ti-prefix}-world-pin:before { + content: $ti-icon-world-pin; +} +.#{$ti-prefix}-world-plus:before { + content: $ti-icon-world-plus; +} +.#{$ti-prefix}-world-question:before { + content: $ti-icon-world-question; +} +.#{$ti-prefix}-world-search:before { + content: $ti-icon-world-search; +} +.#{$ti-prefix}-world-share:before { + content: $ti-icon-world-share; +} +.#{$ti-prefix}-world-star:before { + content: $ti-icon-world-star; +} +.#{$ti-prefix}-world-up:before { + content: $ti-icon-world-up; +} +.#{$ti-prefix}-world-upload:before { + content: $ti-icon-world-upload; +} +.#{$ti-prefix}-world-www:before { + content: $ti-icon-world-www; +} +.#{$ti-prefix}-world-x:before { + content: $ti-icon-world-x; +} +.#{$ti-prefix}-wrecking-ball:before { + content: $ti-icon-wrecking-ball; +} +.#{$ti-prefix}-writing:before { + content: $ti-icon-writing; +} +.#{$ti-prefix}-writing-off:before { + content: $ti-icon-writing-off; +} +.#{$ti-prefix}-writing-sign:before { + content: $ti-icon-writing-sign; +} +.#{$ti-prefix}-writing-sign-off:before { + content: $ti-icon-writing-sign-off; +} +.#{$ti-prefix}-x:before { + content: $ti-icon-x; +} +.#{$ti-prefix}-xbox-a:before { + content: $ti-icon-xbox-a; +} +.#{$ti-prefix}-xbox-a-filled:before { + content: $ti-icon-xbox-a-filled; +} +.#{$ti-prefix}-xbox-b:before { + content: $ti-icon-xbox-b; +} +.#{$ti-prefix}-xbox-b-filled:before { + content: $ti-icon-xbox-b-filled; +} +.#{$ti-prefix}-xbox-x:before { + content: $ti-icon-xbox-x; +} +.#{$ti-prefix}-xbox-x-filled:before { + content: $ti-icon-xbox-x-filled; +} +.#{$ti-prefix}-xbox-y:before { + content: $ti-icon-xbox-y; +} +.#{$ti-prefix}-xbox-y-filled:before { + content: $ti-icon-xbox-y-filled; +} +.#{$ti-prefix}-xd:before { + content: $ti-icon-xd; +} +.#{$ti-prefix}-xxx:before { + content: $ti-icon-xxx; +} +.#{$ti-prefix}-yin-yang:before { + content: $ti-icon-yin-yang; +} +.#{$ti-prefix}-yin-yang-filled:before { + content: $ti-icon-yin-yang-filled; +} +.#{$ti-prefix}-yoga:before { + content: $ti-icon-yoga; +} +.#{$ti-prefix}-zeppelin:before { + content: $ti-icon-zeppelin; +} +.#{$ti-prefix}-zeppelin-filled:before { + content: $ti-icon-zeppelin-filled; +} +.#{$ti-prefix}-zeppelin-off:before { + content: $ti-icon-zeppelin-off; +} +.#{$ti-prefix}-zip:before { + content: $ti-icon-zip; +} +.#{$ti-prefix}-zodiac-aquarius:before { + content: $ti-icon-zodiac-aquarius; +} +.#{$ti-prefix}-zodiac-aries:before { + content: $ti-icon-zodiac-aries; +} +.#{$ti-prefix}-zodiac-cancer:before { + content: $ti-icon-zodiac-cancer; +} +.#{$ti-prefix}-zodiac-capricorn:before { + content: $ti-icon-zodiac-capricorn; +} +.#{$ti-prefix}-zodiac-gemini:before { + content: $ti-icon-zodiac-gemini; +} +.#{$ti-prefix}-zodiac-leo:before { + content: $ti-icon-zodiac-leo; +} +.#{$ti-prefix}-zodiac-libra:before { + content: $ti-icon-zodiac-libra; +} +.#{$ti-prefix}-zodiac-pisces:before { + content: $ti-icon-zodiac-pisces; +} +.#{$ti-prefix}-zodiac-sagittarius:before { + content: $ti-icon-zodiac-sagittarius; +} +.#{$ti-prefix}-zodiac-scorpio:before { + content: $ti-icon-zodiac-scorpio; +} +.#{$ti-prefix}-zodiac-taurus:before { + content: $ti-icon-zodiac-taurus; +} +.#{$ti-prefix}-zodiac-virgo:before { + content: $ti-icon-zodiac-virgo; +} +.#{$ti-prefix}-zoom:before { + content: $ti-icon-zoom; +} +.#{$ti-prefix}-zoom-cancel:before { + content: $ti-icon-zoom-cancel; +} +.#{$ti-prefix}-zoom-cancel-filled:before { + content: $ti-icon-zoom-cancel-filled; +} +.#{$ti-prefix}-zoom-check:before { + content: $ti-icon-zoom-check; +} +.#{$ti-prefix}-zoom-check-filled:before { + content: $ti-icon-zoom-check-filled; +} +.#{$ti-prefix}-zoom-code:before { + content: $ti-icon-zoom-code; +} +.#{$ti-prefix}-zoom-code-filled:before { + content: $ti-icon-zoom-code-filled; +} +.#{$ti-prefix}-zoom-exclamation:before { + content: $ti-icon-zoom-exclamation; +} +.#{$ti-prefix}-zoom-exclamation-filled:before { + content: $ti-icon-zoom-exclamation-filled; +} +.#{$ti-prefix}-zoom-filled:before { + content: $ti-icon-zoom-filled; +} +.#{$ti-prefix}-zoom-in:before { + content: $ti-icon-zoom-in; +} +.#{$ti-prefix}-zoom-in-area:before { + content: $ti-icon-zoom-in-area; +} +.#{$ti-prefix}-zoom-in-area-filled:before { + content: $ti-icon-zoom-in-area-filled; +} +.#{$ti-prefix}-zoom-in-filled:before { + content: $ti-icon-zoom-in-filled; +} +.#{$ti-prefix}-zoom-money:before { + content: $ti-icon-zoom-money; +} +.#{$ti-prefix}-zoom-money-filled:before { + content: $ti-icon-zoom-money-filled; +} +.#{$ti-prefix}-zoom-out:before { + content: $ti-icon-zoom-out; +} +.#{$ti-prefix}-zoom-out-area:before { + content: $ti-icon-zoom-out-area; +} +.#{$ti-prefix}-zoom-out-area-filled:before { + content: $ti-icon-zoom-out-area-filled; +} +.#{$ti-prefix}-zoom-out-filled:before { + content: $ti-icon-zoom-out-filled; +} +.#{$ti-prefix}-zoom-pan:before { + content: $ti-icon-zoom-pan; +} +.#{$ti-prefix}-zoom-pan-filled:before { + content: $ti-icon-zoom-pan-filled; +} +.#{$ti-prefix}-zoom-question:before { + content: $ti-icon-zoom-question; +} +.#{$ti-prefix}-zoom-question-filled:before { + content: $ti-icon-zoom-question-filled; +} +.#{$ti-prefix}-zoom-replace:before { + content: $ti-icon-zoom-replace; +} +.#{$ti-prefix}-zoom-reset:before { + content: $ti-icon-zoom-reset; +} +.#{$ti-prefix}-zoom-scan:before { + content: $ti-icon-zoom-scan; +} +.#{$ti-prefix}-zoom-scan-filled:before { + content: $ti-icon-zoom-scan-filled; +} +.#{$ti-prefix}-zzz:before { + content: $ti-icon-zzz; +} +.#{$ti-prefix}-zzz-off:before { + content: $ti-icon-zzz-off; +} + +// Aliases +.#{$ti-prefix}-123:before { + content: $ti-icon-number-123; +} +.#{$ti-prefix}-360:before { + content: $ti-icon-view-360-arrow; +} +.#{$ti-prefix}-code-asterix:before { + content: $ti-icon-code-asterisk; +} +.#{$ti-prefix}-discount-2:before { + content: $ti-icon-rosette-discount; +} +.#{$ti-prefix}-discount-2-off:before { + content: $ti-icon-rosette-discount-off; +} +.#{$ti-prefix}-discount-check:before { + content: $ti-icon-rosette-discount-check; +} +.#{$ti-prefix}-hand-rock:before { + content: $ti-icon-hand-love-you; +} +.#{$ti-prefix}-sort-deacending-small-big:before { + content: $ti-icon-sort-descending-small-big; +} +.#{$ti-prefix}-shi-jumping:before { + content: $ti-icon-ski-jumping; +} +.#{$ti-prefix}-box-seam:before { + content: $ti-icon-package; +} +.#{$ti-prefix}-kering:before { + content: $ti-icon-kerning; +} +.#{$ti-prefix}-2fa:before { + content: $ti-icon-auth-2fa; +} +.#{$ti-prefix}-3d-cube-sphere:before { + content: $ti-icon-cube-3d-sphere; +} +.#{$ti-prefix}-3d-cube-sphere-off:before { + content: $ti-icon-cube-3d-sphere-off; +} +.#{$ti-prefix}-3d-rotate:before { + content: $ti-icon-rotate-3d; +} +.#{$ti-prefix}-12-hours:before { + content: $ti-icon-hours-12; +} +.#{$ti-prefix}-24-hours:before { + content: $ti-icon-hours-24; +} +.#{$ti-prefix}-360-view:before { + content: $ti-icon-view-360-number; +} +.#{$ti-prefix}-circle-0:before { + content: $ti-icon-circle-number-0; +} +.#{$ti-prefix}-circle-1:before { + content: $ti-icon-circle-number-1; +} +.#{$ti-prefix}-circle-2:before { + content: $ti-icon-circle-number-2; +} +.#{$ti-prefix}-circle-3:before { + content: $ti-icon-circle-number-3; +} +.#{$ti-prefix}-circle-4:before { + content: $ti-icon-circle-number-4; +} +.#{$ti-prefix}-circle-5:before { + content: $ti-icon-circle-number-5; +} +.#{$ti-prefix}-circle-6:before { + content: $ti-icon-circle-number-6; +} +.#{$ti-prefix}-circle-7:before { + content: $ti-icon-circle-number-7; +} +.#{$ti-prefix}-circle-8:before { + content: $ti-icon-circle-number-8; +} +.#{$ti-prefix}-circle-9:before { + content: $ti-icon-circle-number-9; +} +.#{$ti-prefix}-hexagon-0:before { + content: $ti-icon-hexagon-number-0; +} +.#{$ti-prefix}-hexagon-1:before { + content: $ti-icon-hexagon-number-1; +} +.#{$ti-prefix}-hexagon-2:before { + content: $ti-icon-hexagon-number-2; +} +.#{$ti-prefix}-hexagon-3:before { + content: $ti-icon-hexagon-number-3; +} +.#{$ti-prefix}-hexagon-4:before { + content: $ti-icon-hexagon-number-4; +} +.#{$ti-prefix}-hexagon-5:before { + content: $ti-icon-hexagon-number-5; +} +.#{$ti-prefix}-hexagon-6:before { + content: $ti-icon-hexagon-number-6; +} +.#{$ti-prefix}-hexagon-7:before { + content: $ti-icon-hexagon-number-7; +} +.#{$ti-prefix}-hexagon-8:before { + content: $ti-icon-hexagon-number-8; +} +.#{$ti-prefix}-hexagon-9:before { + content: $ti-icon-hexagon-number-9; +} +.#{$ti-prefix}-square-0:before { + content: $ti-icon-square-number-0; +} +.#{$ti-prefix}-square-1:before { + content: $ti-icon-square-number-1; +} +.#{$ti-prefix}-square-2:before { + content: $ti-icon-square-number-2; +} +.#{$ti-prefix}-square-3:before { + content: $ti-icon-square-number-3; +} +.#{$ti-prefix}-square-4:before { + content: $ti-icon-square-number-4; +} +.#{$ti-prefix}-square-5:before { + content: $ti-icon-square-number-5; +} +.#{$ti-prefix}-square-6:before { + content: $ti-icon-square-number-6; +} +.#{$ti-prefix}-square-7:before { + content: $ti-icon-square-number-7; +} +.#{$ti-prefix}-square-8:before { + content: $ti-icon-square-number-8; +} +.#{$ti-prefix}-square-9:before { + content: $ti-icon-square-number-9; +} +.#{$ti-prefix}-message-circle-2:before { + content: $ti-icon-message-circle; +} +.#{$ti-prefix}-discount-check-filled:before { + content: $ti-icon-rosette-discount-check-filled; +} +.#{$ti-prefix}-message-circle-2-filled:before { + content: $ti-icon-message-circle-filled; +} diff --git a/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.eot b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.eot new file mode 100644 index 0000000..9eb3d27 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.eot differ diff --git a/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.svg b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.svg new file mode 100644 index 0000000..d641624 --- /dev/null +++ b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.svg @@ -0,0 +1,6384 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.ttf b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.ttf new file mode 100644 index 0000000..7e2d1ef Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.ttf differ diff --git a/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.woff b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.woff new file mode 100644 index 0000000..c4e7e10 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.woff differ diff --git a/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.woff2 b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.woff2 new file mode 100644 index 0000000..6fdb616 Binary files /dev/null and b/src/modules/Resources/assets/vendor/fonts/tabler/tabler-icons.woff2 differ diff --git a/src/modules/Resources/assets/vendor/js/_template-customizer/_template-customizer.html b/src/modules/Resources/assets/vendor/js/_template-customizer/_template-customizer.html new file mode 100644 index 0000000..d3d0cf1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/_template-customizer/_template-customizer.html @@ -0,0 +1,101 @@ +
+ + +
+
+

+
+ + + + +
+
+ +
+ +
+
+ +
+ + +
+ +
+
+ + +
+ +
+
+
+ + + +
+
+
+ +
+ + +
+ +
+ + + +
+
+ + +
+ +
+
+ + +
+ +
+
+ + +
+ +
+
+ + +
+ +
+
+
+ +
+
diff --git a/src/modules/Resources/assets/vendor/js/_template-customizer/_template-customizer.scss b/src/modules/Resources/assets/vendor/js/_template-customizer/_template-customizer.scss new file mode 100644 index 0000000..facd41b --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/_template-customizer/_template-customizer.scss @@ -0,0 +1,342 @@ +/* +* Template Customizer Style +**/ + +$customizer-width: 400px; +$customizer-width-sm: 300px; +$customizer-hide-width: 1200px; +$customizer-spacer: 20px; +$customizer-font-size: inherit; + +$open-btn-size: 38px; +$open-btn-spacer: 0; +$open-btn-font-size: 18px; +$open-btn-top: 180px; +$open-btn-top-md: 145px; + +$open-btn-bg: var(--bs-primary); +$open-btn-bg-dark: var(--bs-primary); +$open-btn-color: #fff; +$open-btn-border-radius: 0.375rem; +$open-customizer-primary-color: var(--bs-primary); + +#template-customizer { + font-family: 'Public Sans', BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol' !important; + font-size: $customizer-font-size !important; + position: fixed; + top: 0; + right: 0; + height: 100%; + z-index: 99999999; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -ms-flex-direction: column; + flex-direction: column; + width: $customizer-width; + -webkit-box-shadow: 0px 5px 30px 0px rgba(47, 43, 61, 0.18); + box-shadow: 0px 5px 30px 0px rgba(47, 43, 61, 0.18); + -webkit-transition: all 0.2s ease-in; + -o-transition: all 0.2s ease-in; + transition: all 0.2s ease-in; + -webkit-transform: translateX($customizer-width + $customizer-spacer); + -ms-transform: translateX($customizer-width + $customizer-spacer); + transform: translateX($customizer-width + $customizer-spacer); + + .dark-style & { + -webkit-box-shadow: 0px 5px 30px 0px rgba(19, 17, 32, 0.24); + box-shadow: 0px 5px 30px 0px rgba(19, 17, 32, 0.24); + } + + h5 { + position: relative; + font-size: 11px; + } + + > h5 { + flex: 0 0 auto; + } + + .disabled { + color: #d1d2d3 !important; + } + .form-label { + font-size: 0.9375rem; + } + .form-check-label { + font-size: 0.8125rem; + } + &.template-customizer-open { + -webkit-transition-delay: 0.1s; + -o-transition-delay: 0.1s; + transition-delay: 0.1s; + -webkit-transform: none !important; + -ms-transform: none !important; + transform: none !important; + + .custom-option.checked { + color: $open-customizer-primary-color; + border-width: 2px; + margin: 0; + } + } + + .template-customizer-header { + a:hover { + color: inherit !important; + } + } + // Customizer button + + .template-customizer-open-btn { + position: absolute; + top: $open-btn-top; + + @media (max-width: 991.98px) { + top: $open-btn-top-md; + } + left: 0; + z-index: -1; + display: block; + width: $open-btn-size; + height: $open-btn-size; + border-top-left-radius: $open-btn-border-radius; + border-bottom-left-radius: $open-btn-border-radius; + background: $open-btn-bg; + box-shadow: 0px 2px 6px 0px rgba(115, 103, 240, 0.3); + color: $open-btn-color !important; + text-align: center; + font-size: $open-btn-font-size !important; + line-height: $open-btn-size; + opacity: 1; + -webkit-transition: all 0.1s linear 0.2s; + -o-transition: all 0.1s linear 0.2s; + transition: all 0.1s linear 0.2s; + -webkit-transform: translateX(-($open-btn-size + $customizer-spacer + $open-btn-spacer)); + -ms-transform: translateX(-($open-btn-size + $customizer-spacer + $open-btn-spacer)); + transform: translateX(-($open-btn-size + $customizer-spacer + $open-btn-spacer)); + + .dark-style & { + background: $open-btn-bg-dark; + } + &::before { + content: ''; + width: 22px; + height: 22px; + display: block; + background-size: 100% 100%; + position: absolute; + background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABClJREFUaEPtmY1RFEEQhbsjUCIQIhAiUCNQIxAiECIQIxAiECIAIpAMhAiECIQI2vquZqnZvp6fhb3SK5mqq6Ju92b69bzXf6is+dI1t1+eAfztG5z1BsxsU0S+ici2iPB3vm5E5EpEDlSVv2dZswFIxv8UkZcNy+5EZGcuEHMCOBeR951uvVDVD53vVl+bE8DvDu8Pxtyo6ta/BsByg1R15Bwzqz5/LJgn34CZwfnPInI4BUB6/1hV0cSjVxcAM4PbcBZjL0XklIPN7Is3fLCkdQPpPYw/VNXj5IhPIvJWRIhSl6p60ULWBGBm30Vk123EwRxCuIzWkkjNrCZywith10ewE1Xdq4GoAjCz/RTXW44Ynt+LyBEfT43kYfbj86J3w5Q32DNcRQDpwF+dkQXDMey8xem0L3TEqB4g3PZWad8agBMRgZPeu96D1/C2Zbh3X0p80Op1xxloztN48bMQQNoc7+eLEuAoPSPiIDY4Ooo+E6ixeNXM+D3GERz2U3CIqMstLJUgJQDe+7eq6mub0NYEkLAKwEHkiBQDCZtddZCZ8d6r7JDwFkoARklHRPZUFVDVZWbwGuNrC4EfdOzFrRABh3Wnqhv+d70AEBLGFROPmeHlnM81G69UdSd6IUuM0GgUVn1uqWmg5EmMfBeEyB7Pe3txBkY+rGT8j0J+WXq/BgDkUCaqLgEAnwcRog0veMIqFAAwCy2wnw+bI2GaGboBgF9k5N0o0rUSGUb4eO0BeO9j/GYhkSHMHMTIqwGARX6p6a+nlPBl8kZuXMD9j6pKfF9aZuaFOdJCEL5D4eYb9wCYVCanrBmGyii/tIq+SLj/HQBCaM5bLzwfPqdQ6FpVHyra4IbuVbXaY7dETC2ESPNNWiIOi69CcdgSMXsh4tNSUiklMgwmC0aNd08Y5WAES6HHehM4gu97wyhBgWpgqXsrASglprDy7CwhehMZOSbK6JMSma+Fio1KltCmlBIj7gfZOGx8ppQSXrhzFnOhJ/31BDkjFHRvOd09x0mRBA9SFgxUgHpQg0q0t5ymPMlL+EnldFTfDA0NAmf+OTQ0X0sRouf7NNkYGhrOYNrxtIaGg83MNzVDSe3LXLhP7O/yrCsCz1zlWTpjWkuZAOBpX3yVnLqI1yLCOKU6qMrmP7SSrUEw54XF4WBIK5FxCMOr3lVsfGqNSmPzBXUnJTIX1jyVBq9wO6UObOpgC5GjO98vFKnTdQMZXxEsWZlDiCZMIxAbNxQOqlpVZtobejBaZNoBnRDzMFpkxvTQOD36BlrcySZuI6p1ACB6LU3wWuf5581+oHfD1vi89bz3nFUC8Nm7ZlP3nKkFbM4bWPt/MSFwklprYItwt6cmvpWJ2IVcQBCz6bLysSCv3SaANCiTsnaNRrNRqMXVVT1/BrAqz/buu/Y38Ad3KC5PARej0QAAAABJRU5ErkJggg=='); + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } + + // Customizer Hidden + .customizer-hide & { + display: none; + } + + [dir='rtl'] & { + border-radius: 0; + border-top-right-radius: $open-btn-border-radius; + border-bottom-right-radius: $open-btn-border-radius; + + &::before { + margin-left: -2px; + } + } + } + + &.template-customizer-open .template-customizer-open-btn { + opacity: 0; + -webkit-transition-delay: 0s; + -o-transition-delay: 0s; + transition-delay: 0s; + -webkit-transform: none !important; + -ms-transform: none !important; + transform: none !important; + } + + // Customizer inner + .template-customizer-inner { + position: relative; + overflow: auto; + -webkit-box-flex: 0; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + opacity: 1; + -webkit-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + transition: opacity 0.2s; + + > div:first-child { + > hr:first-of-type { + display: none !important; + } + > h5:first-of-type { + padding-top: 0 !important; + } + } + } + + // Theme + .template-customizer-themes-inner { + position: relative; + opacity: 1; + -webkit-transition: opacity 0.2s; + -o-transition: opacity 0.2s; + transition: opacity 0.2s; + } + + .template-customizer-theme-item { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-align: center; + align-items: center; + -ms-flex-align: center; + -webkit-box-flex: 1; + -ms-flex: 1 1 100%; + flex: 1 1 100%; + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; + margin-bottom: 10px; + padding: 0 24px; + width: 100%; + cursor: pointer; + + input { + position: absolute; + z-index: -1; // Put the input behind the label so it doesn't overlay text + opacity: 0; + } + + input ~ span { + opacity: 0.25; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + } + + .template-customizer-theme-checkmark { + display: inline-block; + width: 6px; + height: 12px; + border-right: 1px solid; + border-bottom: 1px solid; + opacity: 0; + -webkit-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + + [dir='rtl'] & { + border-right: none; + border-left: 1px solid; + -webkit-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + transform: rotate(-45deg); + } + } + + input:checked:not([disabled]) ~ span, + &:hover input:not([disabled]) ~ span { + opacity: 1; + } + + input:checked:not([disabled]) ~ span .template-customizer-theme-checkmark { + opacity: 1; + } + } + + .template-customizer-theme-colors { + span { + display: block; + margin: 0 1px; + width: 10px; + height: 10px; + border-radius: 50%; + -webkit-box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset; + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.1) inset; + } + } + + &.template-customizer-loading .template-customizer-inner, + &.template-customizer-loading-theme .template-customizer-themes-inner { + opacity: 0.2; + + &::after { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 999; + display: block; + } + } +} +@media (max-width: $customizer-hide-width) { + #template-customizer { + display: none; + visibility: hidden !important; + } +} +@media (max-width: 575.98px) { + #template-customizer { + width: $customizer-width-sm; + -webkit-transform: translateX($customizer-width-sm + $customizer-spacer); + -ms-transform: translateX($customizer-width-sm + $customizer-spacer); + transform: translateX($customizer-width-sm + $customizer-spacer); + } +} + +.layout-menu-100vh #template-customizer { + height: 100vh; +} + +// RTL +// + +[dir='rtl'] { + #template-customizer { + right: auto; + left: 0; + -webkit-transform: translateX(-($customizer-width + $customizer-spacer)); + -ms-transform: translateX(-($customizer-width + $customizer-spacer)); + transform: translateX(-($customizer-width + $customizer-spacer)); + } + + #template-customizer .template-customizer-open-btn { + right: 0; + left: auto; + -webkit-transform: translateX($open-btn-size + $customizer-spacer + $open-btn-spacer); + -ms-transform: translateX($open-btn-size + $customizer-spacer + $open-btn-spacer); + transform: translateX($open-btn-size + $customizer-spacer + $open-btn-spacer); + } + + #template-customizer .template-customizer-close-btn { + right: auto; + left: 0; + } +} + +#template-customizer .template-customizer-layouts-options[disabled] { + opacity: 0.5; + pointer-events: none; +} + +// ! FIX: mode switch position in RTL +[dir='rtl'] { + .template-customizer-t-style_switch_light { + padding-right: 0 !important; + } +} diff --git a/src/modules/Resources/assets/vendor/js/bootstrap.js b/src/modules/Resources/assets/vendor/js/bootstrap.js new file mode 100644 index 0000000..16cd75a --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/bootstrap.js @@ -0,0 +1,7 @@ +import * as bootstrap from 'bootstrap' + +try { + window.bootstrap = bootstrap +} catch (e) {} + +export { bootstrap } diff --git a/src/modules/Resources/assets/vendor/js/dropdown-hover.js b/src/modules/Resources/assets/vendor/js/dropdown-hover.js new file mode 100644 index 0000000..a986336 --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/dropdown-hover.js @@ -0,0 +1,73 @@ +// Add onHover event for dropdowns + +;(function ($) { + if (!$ || !$.fn) return + + const SELECTOR = '[data-bs-toggle=dropdown][data-trigger=hover]' + const TIMEOUT = 150 + + function openDropdown($i) { + let t = $i.data('dd-timeout') + + if (t) { + clearTimeout(t) + t = null + $i.data('dd-timeout', t) + } + + if ($i.attr('aria-expanded') !== 'true') $i.dropdown('toggle') + } + + function closeDropdown($i) { + let t = $i.data('dd-timeout') + + if (t) clearTimeout(t) + + t = setTimeout(() => { + let t2 = $i.data('dd-timeout') + + if (t2) { + clearTimeout(t2) + t2 = null + $i.data('dd-timeout', t2) + } + + if ($i.attr('aria-expanded') === 'true') $i.dropdown('toggle') + }, TIMEOUT) + + $i.data('dd-timeout', t) + } + + $(function () { + $('body') + .on('mouseenter', `${SELECTOR}, ${SELECTOR} ~ .dropdown-menu`, function () { + const $toggle = $(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle') + const $dropdown = $(this).hasClass('dropdown-menu') ? $(this) : $(this).next('.dropdown-menu') + + if (window.getComputedStyle($dropdown[0], null).getPropertyValue('position') === 'static') return + + // Set hovered flag + if ($(this).is(SELECTOR)) { + $(this).data('hovered', true) + } + + openDropdown($(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle')) + }) + .on('mouseleave', `${SELECTOR}, ${SELECTOR} ~ .dropdown-menu`, function () { + const $toggle = $(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle') + const $dropdown = $(this).hasClass('dropdown-menu') ? $(this) : $(this).next('.dropdown-menu') + + if (window.getComputedStyle($dropdown[0], null).getPropertyValue('position') === 'static') return + + // Remove hovered flag + if ($(this).is(SELECTOR)) { + $(this).data('hovered', false) + } + + closeDropdown($(this).hasClass('dropdown-toggle') ? $(this) : $(this).prev('.dropdown-toggle')) + }) + .on('hide.bs.dropdown', function (e) { + if ($(this).find(SELECTOR).data('hovered')) e.preventDefault() + }) + }) +})(window.jQuery) diff --git a/src/modules/Resources/assets/vendor/js/helpers.js b/src/modules/Resources/assets/vendor/js/helpers.js new file mode 100644 index 0000000..9ca5341 --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/helpers.js @@ -0,0 +1,1151 @@ +// Constants +const TRANS_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'] +const TRANS_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'] +const INLINE_STYLES = ` +.layout-menu-fixed .layout-navbar-full .layout-menu, +.layout-menu-fixed-offcanvas .layout-navbar-full .layout-menu { + top: {navbarHeight}px !important; +} +.layout-page { + padding-top: {navbarHeight}px !important; +} +.content-wrapper { + padding-bottom: {footerHeight}px !important; +}` + +// Guard +function requiredParam(name) { + throw new Error(`Parameter required${name ? `: \`${name}\`` : ''}`) +} + +const Helpers = { + // Root Element + ROOT_EL: typeof window !== 'undefined' ? document.documentElement : null, + + // Large screens breakpoint + LAYOUT_BREAKPOINT: 1200, + + // Resize delay in milliseconds + RESIZE_DELAY: 200, + + menuPsScroll: null, + + mainMenu: null, + + // Internal variables + _curStyle: null, + _styleEl: null, + _resizeTimeout: null, + _resizeCallback: null, + _transitionCallback: null, + _transitionCallbackTimeout: null, + _listeners: [], + _initialized: false, + _autoUpdate: false, + _lastWindowHeight: 0, + + // ******************************************************************************* + // * Utilities + + // --- + // Scroll To Active Menu Item + _scrollToActive(animate = false, duration = 500) { + const layoutMenu = this.getLayoutMenu() + + if (!layoutMenu) return + + let activeEl = layoutMenu.querySelector('li.menu-item.active:not(.open)') + + if (activeEl) { + // t = current time + // b = start value + // c = change in value + // d = duration + const easeInOutQuad = (t, b, c, d) => { + t /= d / 2 + if (t < 1) return (c / 2) * t * t + b + t -= 1 + return (-c / 2) * (t * (t - 2) - 1) + b + } + + const element = this.getLayoutMenu().querySelector('.menu-inner') + + if (typeof activeEl === 'string') { + activeEl = document.querySelector(activeEl) + } + if (typeof activeEl !== 'number') { + activeEl = activeEl.getBoundingClientRect().top + element.scrollTop + } + + // If active element's top position is less than 2/3 (66%) of menu height than do not scroll + if (activeEl < parseInt((element.clientHeight * 2) / 3, 10)) return + + const start = element.scrollTop + const change = activeEl - start - parseInt(element.clientHeight / 2, 10) + const startDate = +new Date() + + if (animate === true) { + const animateScroll = () => { + const currentDate = +new Date() + const currentTime = currentDate - startDate + const val = easeInOutQuad(currentTime, start, change, duration) + element.scrollTop = val + if (currentTime < duration) { + requestAnimationFrame(animateScroll) + } else { + element.scrollTop = change + } + } + animateScroll() + } else { + element.scrollTop = change + } + } + }, + + // --- + // Swipe In Gesture + _swipeIn(targetEl, callback) { + const { Hammer } = window + if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') { + // Swipe menu gesture + const swipeInElement = document.querySelector(targetEl) + + if (swipeInElement) { + const hammerInstance = new Hammer(swipeInElement) + + hammerInstance.on('panright', callback) + } + } + }, + + // --- + // Swipe Out Gesture + _swipeOut(targetEl, callback) { + const { Hammer } = window + if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') { + setTimeout(() => { + // Swipe menu gesture + const swipeOutElement = document.querySelector(targetEl) + + if (swipeOutElement) { + const hammerInstance = new Hammer(swipeOutElement) + + hammerInstance.get('pan').set({ direction: Hammer.DIRECTION_ALL, threshold: 250 }) + hammerInstance.on('panleft', callback) + } + }, 500) + } + }, + + // --- + // Swipe Out On Overlay Tap + _overlayTap(targetEl, callback) { + const { Hammer } = window + + if (typeof Hammer !== 'undefined' && typeof targetEl === 'string') { + // Swipe out overlay element + const swipeOutOverlayElement = document.querySelector(targetEl) + + if (swipeOutOverlayElement) { + const hammerInstance = new Hammer(swipeOutOverlayElement) + + hammerInstance.on('tap', callback) + } + } + }, + + // --- + // Add classes + _addClass(cls, el = this.ROOT_EL) { + if (el && el.length !== undefined) { + // Add classes to multiple elements + el.forEach(e => { + if (e) { + cls.split(' ').forEach(c => e.classList.add(c)) + } + }) + } else if (el) { + // Add classes to single element + cls.split(' ').forEach(c => el.classList.add(c)) + } + }, + + // --- + // Remove classes + _removeClass(cls, el = this.ROOT_EL) { + if (el && el.length !== undefined) { + // Remove classes to multiple elements + el.forEach(e => { + if (e) { + cls.split(' ').forEach(c => e.classList.remove(c)) + } + }) + } else if (el) { + // Remove classes to single element + cls.split(' ').forEach(c => el.classList.remove(c)) + } + }, + + // Toggle classes + _toggleClass(el = this.ROOT_EL, cls1, cls2) { + if (el.classList.contains(cls1)) { + el.classList.replace(cls1, cls2) + } else { + el.classList.replace(cls2, cls1) + } + }, + + // --- + // Has class + _hasClass(cls, el = this.ROOT_EL) { + let result = false + + cls.split(' ').forEach(c => { + if (el.classList.contains(c)) result = true + }) + + return result + }, + + _findParent(el, cls) { + if ((el && el.tagName.toUpperCase() === 'BODY') || el.tagName.toUpperCase() === 'HTML') return null + el = el.parentNode + while (el && el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) { + el = el.parentNode + } + el = el && el.tagName.toUpperCase() !== 'BODY' ? el : null + return el + }, + + // --- + // Trigger window event + _triggerWindowEvent(name) { + if (typeof window === 'undefined') return + + if (document.createEvent) { + let event + + if (typeof Event === 'function') { + event = new Event(name) + } else { + event = document.createEvent('Event') + event.initEvent(name, false, true) + } + + window.dispatchEvent(event) + } else { + window.fireEvent(`on${name}`, document.createEventObject()) + } + }, + + // --- + // Trigger event + _triggerEvent(name) { + this._triggerWindowEvent(`layout${name}`) + + this._listeners.filter(listener => listener.event === name).forEach(listener => listener.callback.call(null)) + }, + + // --- + // Update style + _updateInlineStyle(navbarHeight = 0, footerHeight = 0) { + if (!this._styleEl) { + this._styleEl = document.createElement('style') + this._styleEl.type = 'text/css' + document.head.appendChild(this._styleEl) + } + + const newStyle = INLINE_STYLES.replace(/\{navbarHeight\}/gi, navbarHeight).replace( + /\{footerHeight\}/gi, + footerHeight + ) + + if (this._curStyle !== newStyle) { + this._curStyle = newStyle + this._styleEl.textContent = newStyle + } + }, + + // --- + // Remove style + _removeInlineStyle() { + if (this._styleEl) document.head.removeChild(this._styleEl) + this._styleEl = null + this._curStyle = null + }, + + // --- + // Redraw layout menu (Safari bugfix) + _redrawLayoutMenu() { + const layoutMenu = this.getLayoutMenu() + + if (layoutMenu && layoutMenu.querySelector('.menu')) { + const inner = layoutMenu.querySelector('.menu-inner') + const { scrollTop } = inner + const pageScrollTop = document.documentElement.scrollTop + + layoutMenu.style.display = 'none' + // layoutMenu.offsetHeight + layoutMenu.style.display = '' + inner.scrollTop = scrollTop + document.documentElement.scrollTop = pageScrollTop + + return true + } + + return false + }, + + // --- + // Check for transition support + _supportsTransitionEnd() { + if (window.QUnit) return false + + const el = document.body || document.documentElement + + if (!el) return false + + let result = false + TRANS_PROPERTIES.forEach(evnt => { + if (typeof el.style[evnt] !== 'undefined') result = true + }) + + return result + }, + + // --- + // Calculate current navbar height + _getNavbarHeight() { + const layoutNavbar = this.getLayoutNavbar() + + if (!layoutNavbar) return 0 + if (!this.isSmallScreen()) return layoutNavbar.getBoundingClientRect().height + + // Needs some logic to get navbar height on small screens + + const clonedEl = layoutNavbar.cloneNode(true) + clonedEl.id = null + clonedEl.style.visibility = 'hidden' + clonedEl.style.position = 'absolute' + + Array.prototype.slice.call(clonedEl.querySelectorAll('.collapse.show')).forEach(el => this._removeClass('show', el)) + + layoutNavbar.parentNode.insertBefore(clonedEl, layoutNavbar) + + const navbarHeight = clonedEl.getBoundingClientRect().height + + clonedEl.parentNode.removeChild(clonedEl) + + return navbarHeight + }, + + // --- + // Get current footer height + _getFooterHeight() { + const layoutFooter = this.getLayoutFooter() + + if (!layoutFooter) return 0 + + return layoutFooter.getBoundingClientRect().height + }, + + // --- + // Get animation duration of element + _getAnimationDuration(el) { + const duration = window.getComputedStyle(el).transitionDuration + + return parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000) + }, + + // --- + // Set menu hover state + _setMenuHoverState(hovered) { + this[hovered ? '_addClass' : '_removeClass']('layout-menu-hover') + }, + + // --- + // Toggle collapsed + _setCollapsed(collapsed) { + if (this.isSmallScreen()) { + if (collapsed) { + this._removeClass('layout-menu-expanded') + } else { + setTimeout( + () => { + this._addClass('layout-menu-expanded') + }, + this._redrawLayoutMenu() ? 5 : 0 + ) + } + } else { + this[collapsed ? '_addClass' : '_removeClass']('layout-menu-collapsed') + } + }, + + // --- + // Add layout sivenav toggle animationEnd event + _bindLayoutAnimationEndEvent(modifier, cb) { + const menu = this.getMenu() + const duration = menu ? this._getAnimationDuration(menu) + 50 : 0 + + if (!duration) { + modifier.call(this) + cb.call(this) + return + } + + this._transitionCallback = e => { + if (e.target !== menu) return + this._unbindLayoutAnimationEndEvent() + cb.call(this) + } + + TRANS_EVENTS.forEach(e => { + menu.addEventListener(e, this._transitionCallback, false) + }) + + modifier.call(this) + + this._transitionCallbackTimeout = setTimeout(() => { + this._transitionCallback.call(this, { target: menu }) + }, duration) + }, + + // --- + // Remove layout sivenav toggle animationEnd event + _unbindLayoutAnimationEndEvent() { + const menu = this.getMenu() + + if (this._transitionCallbackTimeout) { + clearTimeout(this._transitionCallbackTimeout) + this._transitionCallbackTimeout = null + } + + if (menu && this._transitionCallback) { + TRANS_EVENTS.forEach(e => { + menu.removeEventListener(e, this._transitionCallback, false) + }) + } + + if (this._transitionCallback) { + this._transitionCallback = null + } + }, + + // --- + // Bind delayed window resize event + _bindWindowResizeEvent() { + this._unbindWindowResizeEvent() + + const cb = () => { + if (this._resizeTimeout) { + clearTimeout(this._resizeTimeout) + this._resizeTimeout = null + } + this._triggerEvent('resize') + } + + this._resizeCallback = () => { + if (this._resizeTimeout) clearTimeout(this._resizeTimeout) + this._resizeTimeout = setTimeout(cb, this.RESIZE_DELAY) + } + + window.addEventListener('resize', this._resizeCallback, false) + }, + + // --- + // Unbind delayed window resize event + _unbindWindowResizeEvent() { + if (this._resizeTimeout) { + clearTimeout(this._resizeTimeout) + this._resizeTimeout = null + } + + if (this._resizeCallback) { + window.removeEventListener('resize', this._resizeCallback, false) + this._resizeCallback = null + } + }, + + _bindMenuMouseEvents() { + if (this._menuMouseEnter && this._menuMouseLeave && this._windowTouchStart) return + + const layoutMenu = this.getLayoutMenu() + if (!layoutMenu) return this._unbindMenuMouseEvents() + + if (!this._menuMouseEnter) { + this._menuMouseEnter = () => { + if ( + this.isSmallScreen() || + !this._hasClass('layout-menu-collapsed') || + this.isOffcanvas() || + this._hasClass('layout-transitioning') + ) { + return this._setMenuHoverState(false) + } + + return this._setMenuHoverState(true) + } + layoutMenu.addEventListener('mouseenter', this._menuMouseEnter, false) + layoutMenu.addEventListener('touchstart', this._menuMouseEnter, false) + } + + if (!this._menuMouseLeave) { + this._menuMouseLeave = () => { + this._setMenuHoverState(false) + } + layoutMenu.addEventListener('mouseleave', this._menuMouseLeave, false) + } + + if (!this._windowTouchStart) { + this._windowTouchStart = e => { + if (!e || !e.target || !this._findParent(e.target, '.layout-menu')) { + this._setMenuHoverState(false) + } + } + window.addEventListener('touchstart', this._windowTouchStart, true) + } + }, + + _unbindMenuMouseEvents() { + if (!this._menuMouseEnter && !this._menuMouseLeave && !this._windowTouchStart) return + + const layoutMenu = this.getLayoutMenu() + + if (this._menuMouseEnter) { + if (layoutMenu) { + layoutMenu.removeEventListener('mouseenter', this._menuMouseEnter, false) + layoutMenu.removeEventListener('touchstart', this._menuMouseEnter, false) + } + this._menuMouseEnter = null + } + + if (this._menuMouseLeave) { + if (layoutMenu) { + layoutMenu.removeEventListener('mouseleave', this._menuMouseLeave, false) + } + this._menuMouseLeave = null + } + + if (this._windowTouchStart) { + if (layoutMenu) { + window.addEventListener('touchstart', this._windowTouchStart, true) + } + this._windowTouchStart = null + } + + this._setMenuHoverState(false) + }, + + // ******************************************************************************* + // * Methods + + scrollToActive(animate = false) { + this._scrollToActive(animate) + }, + + swipeIn(el, callback) { + this._swipeIn(el, callback) + }, + + swipeOut(el, callback) { + this._swipeOut(el, callback) + }, + + overlayTap(el, callback) { + this._overlayTap(el, callback) + }, + + scrollPageTo(to, duration = 500) { + // t = current time + // b = start value + // c = change in value + // d = duration + const easeInOutQuad = (t, b, c, d) => { + t /= d / 2 + if (t < 1) return (c / 2) * t * t + b + t -= 1 + return (-c / 2) * (t * (t - 2) - 1) + b + } + + const element = document.scrollingElement + + if (typeof to === 'string') { + to = document.querySelector(to) + } + if (typeof to !== 'number') { + to = to.getBoundingClientRect().top + element.scrollTop + } + + const start = element.scrollTop + const change = to - start + const startDate = +new Date() + // const increment = 20 + + const animateScroll = () => { + const currentDate = +new Date() + const currentTime = currentDate - startDate + const val = easeInOutQuad(currentTime, start, change, duration) + element.scrollTop = val + if (currentTime < duration) { + requestAnimationFrame(animateScroll) + } else { + element.scrollTop = to + } + } + animateScroll() + }, + + // --- + // Collapse / expand layout + setCollapsed(collapsed = requiredParam('collapsed'), animate = true) { + const layoutMenu = this.getLayoutMenu() + + if (!layoutMenu) return + + this._unbindLayoutAnimationEndEvent() + + if (animate && this._supportsTransitionEnd()) { + this._addClass('layout-transitioning') + if (collapsed) this._setMenuHoverState(false) + + this._bindLayoutAnimationEndEvent( + () => { + // Collapse / Expand + this._setCollapsed(collapsed) + }, + () => { + this._removeClass('layout-transitioning') + this._triggerWindowEvent('resize') + this._triggerEvent('toggle') + this._setMenuHoverState(false) + } + ) + } else { + this._addClass('layout-no-transition') + if (collapsed) this._setMenuHoverState(false) + + // Collapse / Expand + this._setCollapsed(collapsed) + + setTimeout(() => { + this._removeClass('layout-no-transition') + this._triggerWindowEvent('resize') + this._triggerEvent('toggle') + this._setMenuHoverState(false) + }, 1) + } + }, + + // --- + // Toggle layout + toggleCollapsed(animate = true) { + this.setCollapsed(!this.isCollapsed(), animate) + }, + + // --- + // Set layout positioning + setPosition(fixed = requiredParam('fixed'), offcanvas = requiredParam('offcanvas')) { + this._removeClass('layout-menu-offcanvas layout-menu-fixed layout-menu-fixed-offcanvas') + + if (!fixed && offcanvas) { + this._addClass('layout-menu-offcanvas') + } else if (fixed && !offcanvas) { + this._addClass('layout-menu-fixed') + this._redrawLayoutMenu() + } else if (fixed && offcanvas) { + this._addClass('layout-menu-fixed-offcanvas') + this._redrawLayoutMenu() + } + + this.update() + }, + + // ******************************************************************************* + // * Getters + + getLayoutMenu() { + return document.querySelector('.layout-menu') + }, + + getMenu() { + const layoutMenu = this.getLayoutMenu() + + if (!layoutMenu) return null + + return !this._hasClass('menu', layoutMenu) ? layoutMenu.querySelector('.menu') : layoutMenu + }, + + getLayoutNavbar() { + return document.querySelector('.layout-navbar') + }, + + getLayoutFooter() { + return document.querySelector('.content-footer') + }, + + getLayoutContainer() { + return document.querySelector('.layout-page') + }, + + // ******************************************************************************* + // * Setters + + setNavbarFixed(fixed = requiredParam('fixed')) { + this[fixed ? '_addClass' : '_removeClass']('layout-navbar-fixed') + this.update() + }, + + setNavbar(type) { + if (type === 'sticky') { + this._addClass('layout-navbar-fixed') + this._removeClass('layout-navbar-hidden') + } else if (type === 'hidden') { + this._addClass('layout-navbar-hidden') + this._removeClass('layout-navbar-fixed') + } else { + this._removeClass('layout-navbar-hidden') + this._removeClass('layout-navbar-fixed') + } + this.update() + }, + + setFooterFixed(fixed = requiredParam('fixed')) { + this[fixed ? '_addClass' : '_removeClass']('layout-footer-fixed') + this.update() + }, + + setContentLayout(contentLayout = requiredParam('contentLayout')) { + setTimeout(() => { + const contentArea = document.querySelector('.content-wrapper > div') // For content area + const navbarArea = document.querySelector('.layout-navbar') // For navbar area for vertical menu + const navbarAreaHorizontal = document.querySelector('.layout-navbar > div') // For navbar area for horizontal menu + const navbarSearchInputWrapper = document.querySelector('.layout-navbar .search-input-wrapper') // For navbar search input wrapper + const navbarSearchInput = document.querySelector('.layout-navbar .search-input-wrapper .search-input') // For navbar search input + const footerArea = document.querySelector('.content-footer > div') // For footer area + const containerFluid = [].slice.call(document.querySelectorAll('.container-fluid')) // To get container-fluid + const containerXxl = [].slice.call(document.querySelectorAll('.container-xxl')) // To get container-xxl + const verticalMenu = document.querySelector('.menu-vertical') + let horizontalMenu = false // For horizontal menu + let horizontalMenuArea // For horizontal menu area + // Condition to check if layout is horizontal menu + if (document.querySelector('.content-wrapper > .menu-horizontal > div')) { + horizontalMenu = true + horizontalMenuArea = document.querySelector('.content-wrapper > .menu-horizontal > div') + } + // If compact mode layout + if (contentLayout === 'compact') { + // Remove container fluid class from content area and footer area + if (containerFluid.some(el => [contentArea, footerArea].includes(el))) { + this._removeClass('container-fluid', [contentArea, footerArea]) + this._addClass('container-xxl', [contentArea, footerArea]) + } + // Navbar search input container condition is separated because it is not in starter kit + if (navbarSearchInput) { + this._removeClass('container-fluid', [navbarSearchInput]) + this._addClass('container-xxl', [navbarSearchInput]) + } + // Remove container fluid class from navbar area in vertical menu + if (verticalMenu) { + if (containerFluid.some(el => [navbarArea].includes(el))) { + this._removeClass('container-fluid', [navbarArea]) + this._addClass('container-xxl', [navbarArea]) + } + } + // For horizontal menu only + if (horizontalMenu) { + this._removeClass('container-fluid', horizontalMenuArea) + this._addClass('container-xxl', horizontalMenuArea) + // For horizontal navbar only + if (navbarAreaHorizontal) { + this._removeClass('container-fluid', navbarAreaHorizontal) + this._addClass('container-xxl', navbarAreaHorizontal) + } + // Navbar search input container condition is separated because it is not in starter kit + if (navbarSearchInputWrapper) { + this._removeClass('container-fluid', navbarSearchInputWrapper) + this._addClass('container-xxl', navbarSearchInputWrapper) + } + } + } else { + // If wide mode layout + + // Remove container xxl class from content area and footer area + if (containerXxl.some(el => [contentArea, footerArea].includes(el))) { + this._removeClass('container-xxl', [contentArea, footerArea]) + this._addClass('container-fluid', [contentArea, footerArea]) + } + // Navbar search input container condition is separated because it is not in starter kit + if (navbarSearchInput) { + this._removeClass('container-xxl', [navbarSearchInput]) + this._addClass('container-fluid', [navbarSearchInput]) + } + // Remove container xxl class from navbar area in vertical menu + if (verticalMenu) { + if (containerXxl.some(el => [navbarArea].includes(el))) { + this._removeClass('container-xxl', [navbarArea]) + this._addClass('container-fluid', [navbarArea]) + } + } + // For horizontal menu only + if (horizontalMenu) { + this._removeClass('container-xxl', horizontalMenuArea) + this._addClass('container-fluid', horizontalMenuArea) + // For horizontal navbar only + if (navbarAreaHorizontal) { + this._removeClass('container-xxl', navbarAreaHorizontal) + this._addClass('container-fluid', navbarAreaHorizontal) + } + // Navbar search input container condition is separated because it is not in starter kit + if (navbarSearchInputWrapper) { + this._removeClass('container-xxl', navbarSearchInputWrapper) + this._addClass('container-fluid', navbarSearchInputWrapper) + } + } + } + }, 100) + }, + + // ******************************************************************************* + // * Update + + update() { + if ( + (this.getLayoutNavbar() && + ((!this.isSmallScreen() && this.isLayoutNavbarFull() && this.isFixed()) || this.isNavbarFixed())) || + (this.getLayoutFooter() && this.isFooterFixed()) + ) { + this._updateInlineStyle(this._getNavbarHeight(), this._getFooterHeight()) + } + + this._bindMenuMouseEvents() + }, + + setAutoUpdate(enable = requiredParam('enable')) { + if (enable && !this._autoUpdate) { + this.on('resize.Helpers:autoUpdate', () => this.update()) + this._autoUpdate = true + } else if (!enable && this._autoUpdate) { + this.off('resize.Helpers:autoUpdate') + this._autoUpdate = false + } + }, + + // Update custom option based on element + updateCustomOptionCheck(el) { + if (el.checked) { + // If custom option element is radio, remove checked from the siblings (closest `.row`) + if (el.type === 'radio') { + const customRadioOptionList = [].slice.call(el.closest('.row').querySelectorAll('.custom-option')) + customRadioOptionList.map(function (customRadioOptionEL) { + customRadioOptionEL.closest('.custom-option').classList.remove('checked') + }) + } + el.closest('.custom-option').classList.add('checked') + } else { + el.closest('.custom-option').classList.remove('checked') + } + }, + + // ******************************************************************************* + // * Tests + + isRtl() { + return ( + document.querySelector('body').getAttribute('dir') === 'rtl' || + document.querySelector('html').getAttribute('dir') === 'rtl' + ) + }, + + isMobileDevice() { + return typeof window.orientation !== 'undefined' || navigator.userAgent.indexOf('IEMobile') !== -1 + }, + + isSmallScreen() { + return ( + (window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth) < this.LAYOUT_BREAKPOINT + ) + }, + + isLayoutNavbarFull() { + return !!document.querySelector('.layout-wrapper.layout-navbar-full') + }, + + isCollapsed() { + if (this.isSmallScreen()) { + return !this._hasClass('layout-menu-expanded') + } + return this._hasClass('layout-menu-collapsed') + }, + + isFixed() { + return this._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas') + }, + + isOffcanvas() { + return this._hasClass('layout-menu-offcanvas layout-menu-fixed-offcanvas') + }, + + isNavbarFixed() { + return ( + this._hasClass('layout-navbar-fixed') || (!this.isSmallScreen() && this.isFixed() && this.isLayoutNavbarFull()) + ) + }, + + isFooterFixed() { + return this._hasClass('layout-footer-fixed') + }, + + isLightStyle() { + return document.documentElement.classList.contains('light-style') + }, + + isDarkStyle() { + return document.documentElement.classList.contains('dark-style') + }, + + // ******************************************************************************* + // * Events + + on(event = requiredParam('event'), callback = requiredParam('callback')) { + const [_event] = event.split('.') + let [, ...namespace] = event.split('.') + // let [_event, ...namespace] = event.split('.') + namespace = namespace.join('.') || null + + this._listeners.push({ event: _event, namespace, callback }) + }, + + off(event = requiredParam('event')) { + const [_event] = event.split('.') + let [, ...namespace] = event.split('.') + namespace = namespace.join('.') || null + + this._listeners + .filter(listener => listener.event === _event && listener.namespace === namespace) + .forEach(listener => this._listeners.splice(this._listeners.indexOf(listener), 1)) + }, + + // ******************************************************************************* + // * Life cycle + + init() { + if (this._initialized) return + this._initialized = true + + // Initialize `style` element + this._updateInlineStyle(0) + + // Bind window resize event + this._bindWindowResizeEvent() + + // Bind init event + this.off('init._Helpers') + this.on('init._Helpers', () => { + this.off('resize._Helpers:redrawMenu') + this.on('resize._Helpers:redrawMenu', () => { + // eslint-disable-next-line no-unused-expressions + this.isSmallScreen() && !this.isCollapsed() && this._redrawLayoutMenu() + }) + + // Force repaint in IE 10 + if (typeof document.documentMode === 'number' && document.documentMode < 11) { + this.off('resize._Helpers:ie10RepaintBody') + this.on('resize._Helpers:ie10RepaintBody', () => { + if (this.isFixed()) return + const { scrollTop } = document.documentElement + document.body.style.display = 'none' + // document.body.offsetHeight + document.body.style.display = 'block' + document.documentElement.scrollTop = scrollTop + }) + } + }) + + this._triggerEvent('init') + }, + + destroy() { + if (!this._initialized) return + this._initialized = false + + this._removeClass('layout-transitioning') + this._removeInlineStyle() + this._unbindLayoutAnimationEndEvent() + this._unbindWindowResizeEvent() + this._unbindMenuMouseEvents() + this.setAutoUpdate(false) + + this.off('init._Helpers') + + // Remove all listeners except `init` + this._listeners + .filter(listener => listener.event !== 'init') + .forEach(listener => this._listeners.splice(this._listeners.indexOf(listener), 1)) + }, + + // --- + // Init Password Toggle + initPasswordToggle() { + const toggler = document.querySelectorAll('.form-password-toggle i') + if (typeof toggler !== 'undefined' && toggler !== null) { + toggler.forEach(el => { + el.addEventListener('click', e => { + e.preventDefault() + const formPasswordToggle = el.closest('.form-password-toggle') + const formPasswordToggleIcon = formPasswordToggle.querySelector('i') + const formPasswordToggleInput = formPasswordToggle.querySelector('input') + + if (formPasswordToggleInput.getAttribute('type') === 'text') { + formPasswordToggleInput.setAttribute('type', 'password') + formPasswordToggleIcon.classList.replace('ti-eye', 'ti-eye-off') + } else if (formPasswordToggleInput.getAttribute('type') === 'password') { + formPasswordToggleInput.setAttribute('type', 'text') + formPasswordToggleIcon.classList.replace('ti-eye-off', 'ti-eye') + } + }) + }) + } + }, + + //-- + // Init custom option check + initCustomOptionCheck() { + const _this = this + + const custopOptionList = [].slice.call(document.querySelectorAll('.custom-option .form-check-input')) + custopOptionList.map(function (customOptionEL) { + // Update custom options check on page load + _this.updateCustomOptionCheck(customOptionEL) + + // Update custom options check on click + customOptionEL.addEventListener('click', e => { + _this.updateCustomOptionCheck(customOptionEL) + }) + }) + }, + + // --- + // Init Speech To Text + initSpeechToText() { + const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition + const speechToText = document.querySelectorAll('.speech-to-text') + if (SpeechRecognition !== undefined && SpeechRecognition !== null) { + if (typeof speechToText !== 'undefined' && speechToText !== null) { + const recognition = new SpeechRecognition() + const toggler = document.querySelectorAll('.speech-to-text i') + toggler.forEach(el => { + let listening = false + el.addEventListener('click', () => { + el.closest('.input-group').querySelector('.form-control').focus() + recognition.onspeechstart = () => { + listening = true + } + if (listening === false) { + recognition.start() + } + recognition.onerror = () => { + listening = false + } + recognition.onresult = event => { + el.closest('.input-group').querySelector('.form-control').value = event.results[0][0].transcript + } + recognition.onspeechend = () => { + listening = false + recognition.stop() + } + }) + }) + } + } + }, + + // --- + // Init Navbar Dropdown (i.e notification) PerfectScrollbar + initNavbarDropdownScrollbar() { + const scrollbarContainer = document.querySelectorAll('.navbar-dropdown .scrollable-container') + const { PerfectScrollbar } = window + + if (PerfectScrollbar !== undefined) { + if (typeof scrollbarContainer !== 'undefined' && scrollbarContainer !== null) { + scrollbarContainer.forEach(el => { + // eslint-disable-next-line no-new + new PerfectScrollbar(el, { + wheelPropagation: false, + suppressScrollX: true + }) + }) + } + } + }, + + // Ajax Call Promise + ajaxCall(url) { + return new Promise((resolve, reject) => { + const req = new XMLHttpRequest() + req.open('GET', url) + req.onload = () => (req.status === 200 ? resolve(req.response) : reject(Error(req.statusText))) + req.onerror = e => reject(Error(`Network Error: ${e}`)) + req.send() + }) + }, + + // --- + // SidebarToggle (Used in Apps) + initSidebarToggle() { + const sidebarToggler = document.querySelectorAll('[data-bs-toggle="sidebar"]') + + sidebarToggler.forEach(el => { + el.addEventListener('click', () => { + const target = el.getAttribute('data-target') + const overlay = el.getAttribute('data-overlay') + const appOverlay = document.querySelectorAll('.app-overlay') + const targetEl = document.querySelectorAll(target) + + targetEl.forEach(tel => { + tel.classList.toggle('show') + if ( + typeof overlay !== 'undefined' && + overlay !== null && + overlay !== false && + typeof appOverlay !== 'undefined' + ) { + if (tel.classList.contains('show')) { + appOverlay[0].classList.add('show') + } else { + appOverlay[0].classList.remove('show') + } + appOverlay[0].addEventListener('click', e => { + e.currentTarget.classList.remove('show') + tel.classList.remove('show') + }) + } + }) + }) + }) + } +} + +// ******************************************************************************* +// * Initialization + +if (typeof window !== 'undefined') { + Helpers.init() + + if (Helpers.isMobileDevice() && window.chrome) { + document.documentElement.classList.add('layout-menu-100vh') + } + + // Update layout after page load + if (document.readyState === 'complete') Helpers.update() + else + document.addEventListener('DOMContentLoaded', function onContentLoaded() { + Helpers.update() + document.removeEventListener('DOMContentLoaded', onContentLoaded) + }) +} + +// --- +window.Helpers = Helpers +export { Helpers } diff --git a/src/modules/Resources/assets/vendor/js/mega-dropdown.js b/src/modules/Resources/assets/vendor/js/mega-dropdown.js new file mode 100644 index 0000000..2525cd5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/mega-dropdown.js @@ -0,0 +1,206 @@ +const TIMEOUT = 150 + +class MegaDropdown { + constructor(element, options = {}) { + this._onHover = options.trigger === 'hover' || element.getAttribute('data-trigger') === 'hover' + + this._container = MegaDropdown._findParent(element, 'mega-dropdown') + if (!this._container) return + + this._menu = this._container.querySelector('.dropdown-toggle ~ .dropdown-menu') + if (!this._menu) return + + element.setAttribute('aria-expanded', 'false') + + this._el = element + this._bindEvents() + } + + open() { + if (this._timeout) { + clearTimeout(this._timeout) + this._timeout = null + } + if (this._focusTimeout) { + clearTimeout(this._focusTimeout) + this._focusTimeout = null + } + + if (this._el.getAttribute('aria-expanded') !== 'true') { + this._triggerEvent('show') + this._container.classList.add('show') + this._menu.classList.add('show') + this._el.setAttribute('aria-expanded', 'true') + this._el.focus() + this._triggerEvent('shown') + } + } + + close(force) { + if (this._timeout) { + clearTimeout(this._timeout) + this._timeout = null + } + if (this._focusTimeout) { + clearTimeout(this._focusTimeout) + this._focusTimeout = null + } + + if (this._onHover && !force) { + this._timeout = setTimeout(() => { + if (this._timeout) { + clearTimeout(this._timeout) + this._timeout = null + } + this._close() + }, TIMEOUT) + } else { + this._close() + } + } + + toggle() { + // eslint-disable-next-line no-unused-expressions + this._el.getAttribute('aria-expanded') === 'true' ? this.close(true) : this.open() + } + + destroy() { + this._unbindEvents() + this._el = null + + if (this._timeout) { + clearTimeout(this._timeout) + this._timeout = null + } + + if (this._focusTimeout) { + clearTimeout(this._focusTimeout) + this._focusTimeout = null + } + } + + _close() { + if (this._el.getAttribute('aria-expanded') === 'true') { + this._triggerEvent('hide') + this._container.classList.remove('show') + this._menu.classList.remove('show') + this._el.setAttribute('aria-expanded', 'false') + this._triggerEvent('hidden') + } + } + + _bindEvents() { + this._elClickEvnt = e => { + e.preventDefault() + this.toggle() + } + this._el.addEventListener('click', this._elClickEvnt) + + this._bodyClickEvnt = e => { + if (!this._container.contains(e.target) && this._container.classList.contains('show')) { + this.close(true) + } + } + document.body.addEventListener('click', this._bodyClickEvnt, true) + + this._menuClickEvnt = e => { + if (e.target.classList.contains('mega-dropdown-link')) { + this.close(true) + } + } + this._menu.addEventListener('click', this._menuClickEvnt, true) + + this._focusoutEvnt = () => { + if (this._focusTimeout) { + clearTimeout(this._focusTimeout) + this._focusTimeout = null + } + + if (this._el.getAttribute('aria-expanded') !== 'true') return + + this._focusTimeout = setTimeout(() => { + if ( + document.activeElement.tagName.toUpperCase() !== 'BODY' && + MegaDropdown._findParent(document.activeElement, 'mega-dropdown') !== this._container + ) { + this.close(true) + } + }, 100) + } + this._container.addEventListener('focusout', this._focusoutEvnt, true) + + if (this._onHover) { + this._enterEvnt = () => { + if (window.getComputedStyle(this._menu, null).getPropertyValue('position') === 'static') return + this.open() + } + this._leaveEvnt = () => { + if (window.getComputedStyle(this._menu, null).getPropertyValue('position') === 'static') return + this.close() + } + + this._el.addEventListener('mouseenter', this._enterEvnt) + this._menu.addEventListener('mouseenter', this._enterEvnt) + this._el.addEventListener('mouseleave', this._leaveEvnt) + this._menu.addEventListener('mouseleave', this._leaveEvnt) + } + } + + _unbindEvents() { + if (this._elClickEvnt) { + this._el.removeEventListener('click', this._elClickEvnt) + this._elClickEvnt = null + } + if (this._bodyClickEvnt) { + document.body.removeEventListener('click', this._bodyClickEvnt, true) + this._bodyClickEvnt = null + } + if (this._menuClickEvnt) { + this._menu.removeEventListener('click', this._menuClickEvnt, true) + this._menuClickEvnt = null + } + if (this._focusoutEvnt) { + this._container.removeEventListener('focusout', this._focusoutEvnt, true) + this._focusoutEvnt = null + } + if (this._enterEvnt) { + this._el.removeEventListener('mouseenter', this._enterEvnt) + this._menu.removeEventListener('mouseenter', this._enterEvnt) + this._enterEvnt = null + } + if (this._leaveEvnt) { + this._el.removeEventListener('mouseleave', this._leaveEvnt) + this._menu.removeEventListener('mouseleave', this._leaveEvnt) + this._leaveEvnt = null + } + } + + static _findParent(el, cls) { + if (el.tagName.toUpperCase() === 'BODY') return null + el = el.parentNode + while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) { + el = el.parentNode + } + return el.tagName.toUpperCase() !== 'BODY' ? el : null + } + + _triggerEvent(event) { + if (document.createEvent) { + let customEvent + + if (typeof Event === 'function') { + customEvent = new Event(event) + } else { + customEvent = document.createEvent('Event') + customEvent.initEvent(event, false, true) + } + + this._container.dispatchEvent(customEvent) + } else { + this._container.fireEvent(`on${event}`, document.createEventObject()) + } + } +} + +window.MegaDropdown = MegaDropdown +export { MegaDropdown } diff --git a/src/modules/Resources/assets/vendor/js/menu.js b/src/modules/Resources/assets/vendor/js/menu.js new file mode 100644 index 0000000..6bdf909 --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/menu.js @@ -0,0 +1,991 @@ +const TRANSITION_EVENTS = ['transitionend', 'webkitTransitionEnd', 'oTransitionEnd'] +// const TRANSITION_PROPERTIES = ['transition', 'MozTransition', 'webkitTransition', 'WebkitTransition', 'OTransition'] +const DELTA = 5 + +class Menu { + constructor(el, config = {}, _PS = null) { + this._el = el + this._horizontal = config.orientation === 'horizontal' + this._animate = config.animate !== false + this._accordion = config.accordion !== false + this._showDropdownOnHover = Boolean(config.showDropdownOnHover) + this._closeChildren = Boolean(config.closeChildren) + this._rtl = document.documentElement.getAttribute('dir') === 'rtl' || document.body.getAttribute('dir') === 'rtl' + + this._onOpen = config.onOpen || (() => {}) + this._onOpened = config.onOpened || (() => {}) + this._onClose = config.onClose || (() => {}) + this._onClosed = config.onClosed || (() => {}) + + this._psScroll = null + this._topParent = null + this._menuBgClass = null + + el.classList.add('menu') + el.classList[this._animate ? 'remove' : 'add']('menu-no-animation') + + if (!this._horizontal) { + el.classList.add('menu-vertical') + el.classList.remove('menu-horizontal') + + const PerfectScrollbarLib = _PS || window.PerfectScrollbar + + if (PerfectScrollbarLib) { + this._scrollbar = new PerfectScrollbarLib(el.querySelector('.menu-inner'), { + suppressScrollX: true, + wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas') + }) + + window.Helpers.menuPsScroll = this._scrollbar + } else { + el.querySelector('.menu-inner').classList.add('overflow-auto') + } + } else { + el.classList.add('menu-horizontal') + el.classList.remove('menu-vertical') + + this._inner = el.querySelector('.menu-inner') + const container = this._inner.parentNode + + this._prevBtn = el.querySelector('.menu-horizontal-prev') + if (!this._prevBtn) { + this._prevBtn = document.createElement('a') + this._prevBtn.href = '#' + this._prevBtn.className = 'menu-horizontal-prev' + container.appendChild(this._prevBtn) + } + + this._wrapper = el.querySelector('.menu-horizontal-wrapper') + if (!this._wrapper) { + this._wrapper = document.createElement('div') + this._wrapper.className = 'menu-horizontal-wrapper' + this._wrapper.appendChild(this._inner) + container.appendChild(this._wrapper) + } + + this._nextBtn = el.querySelector('.menu-horizontal-next') + if (!this._nextBtn) { + this._nextBtn = document.createElement('a') + this._nextBtn.href = '#' + this._nextBtn.className = 'menu-horizontal-next' + container.appendChild(this._nextBtn) + } + + this._innerPosition = 0 + this.update() + } + + // Add data attribute for bg color class of menu + const menuClassList = el.classList + + for (let i = 0; i < menuClassList.length; i++) { + if (menuClassList[i].startsWith('bg-')) { + this._menuBgClass = menuClassList[i] + } + } + el.setAttribute('data-bg-class', this._menuBgClass) + + // Switch to vertical menu on small screen for horizontal menu layout on page load + if (this._horizontal && window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + this.switchMenu('vertical') + } else { + this._bindEvents() + } + + // Link menu instance to element + el.menuInstance = this + } + + _bindEvents() { + // Click Event + this._evntElClick = e => { + // Find top parent element + if (e.target.closest('ul') && e.target.closest('ul').classList.contains('menu-inner')) { + const menuItem = Menu._findParent(e.target, 'menu-item', false) + + // eslint-disable-next-line prefer-destructuring + if (menuItem) this._topParent = menuItem.childNodes[0] + } + + const toggleLink = e.target.classList.contains('menu-toggle') + ? e.target + : Menu._findParent(e.target, 'menu-toggle', false) + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + } + } + } + if ((!this._showDropdownOnHover && this._horizontal) || !this._horizontal || window.Helpers.isMobileDevice) + this._el.addEventListener('click', this._evntElClick) + + this._evntWindowResize = () => { + this.update() + if (this._lastWidth !== window.innerWidth) { + this._lastWidth = window.innerWidth + this.update() + } + + const horizontalMenuTemplate = document.querySelector("[data-template^='horizontal-menu']") + if (!this._horizontal && !horizontalMenuTemplate) this.manageScroll() + } + window.addEventListener('resize', this._evntWindowResize) + + if (this._horizontal) { + this._evntPrevBtnClick = e => { + e.preventDefault() + if (this._prevBtn.classList.contains('disabled')) return + this._slide('prev') + } + this._prevBtn.addEventListener('click', this._evntPrevBtnClick) + + this._evntNextBtnClick = e => { + e.preventDefault() + if (this._nextBtn.classList.contains('disabled')) return + this._slide('next') + } + this._nextBtn.addEventListener('click', this._evntNextBtnClick) + + this._evntBodyClick = e => { + if (!this._inner.contains(e.target) && this._el.querySelectorAll('.menu-inner > .menu-item.open').length) + this.closeAll() + } + document.body.addEventListener('click', this._evntBodyClick) + + if (this._showDropdownOnHover) { + /** *********************************************** + * Horizontal Menu Mouse Over Event + * ? e.target !== e.currentTarget condition to disable mouseover event on whole menu navbar + * ? !e.target.parentNode.classList.contains('open') to disable mouseover events on icon, text and dropdown arrow + */ + this._evntElMouseOver = e => { + if (e.target !== e.currentTarget && !e.target.parentNode.classList.contains('open')) { + const toggleLink = e.target.classList.contains('menu-toggle') ? e.target : null + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + } + } + } + e.stopPropagation() + } + if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) { + this._el.addEventListener('mouseover', this._evntElMouseOver) + } + + /** *********************************************** + * Horizontal Menu Mouse Out Event + * ? e.target !== e.currentTarget condition to disable mouseout event on whole menu navbar + * ? mouseOutEl.parentNode.classList.contains('open') to check if the mouseout element has open class or not + * ? !mouseOutEl.classList.contains('menu-toggle') to check if mouseout was from single menu item and not from the one which has submenu + * ? !mouseOverEl.parentNode.classList.contains('menu-link') to disable mouseout event for icon, text and dropdown arrow + */ + this._evntElMouseOut = e => { + const mainEl = e.currentTarget + const mouseOutEl = e.target + const mouseOverEl = e.toElement || e.relatedTarget + + // Find absolute parent of any menu item from which mouseout event triggered + if (mouseOutEl.closest('ul') && mouseOutEl.closest('ul').classList.contains('menu-inner')) { + this._topParent = mouseOutEl + } + + if ( + mouseOutEl !== mainEl && + (mouseOutEl.parentNode.classList.contains('open') || !mouseOutEl.classList.contains('menu-toggle')) && + mouseOverEl && + mouseOverEl.parentNode && + !mouseOverEl.parentNode.classList.contains('menu-link') + ) { + // When mouse goes totally out of menu items, check mouse over element to confirm it's not the child of menu, once confirmed close the menu + if (this._topParent && !Menu.childOf(mouseOverEl, this._topParent.parentNode)) { + const toggleLink = this._topParent.classList.contains('menu-toggle') ? this._topParent : null + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + this._topParent = null + } + } + } + + // When mouse enter the sub menu, check if it's child of the initially mouse overed menu item(Actual Parent), + // if it's the parent do not close the sub menu else close the sub menu + if (Menu.childOf(mouseOverEl, mouseOutEl.parentNode)) { + return + } + const toggleLink = mouseOutEl.classList.contains('menu-toggle') ? mouseOutEl : null + + if (toggleLink) { + e.preventDefault() + + if (toggleLink.getAttribute('data-hover') !== 'true') { + this.toggle(toggleLink) + } + } + } + e.stopPropagation() + } + if (this._horizontal && window.screen.width > window.Helpers.LAYOUT_BREAKPOINT) { + this._el.addEventListener('mouseout', this._evntElMouseOut) + } + } + } + } + + static childOf(/* child node */ c, /* parent node */ p) { + // returns boolean + if (c.parentNode) { + while ((c = c.parentNode) && c !== p); + return !!c + } + return false + } + + _unbindEvents() { + if (this._evntElClick) { + this._el.removeEventListener('click', this._evntElClick) + this._evntElClick = null + } + + if (this._evntElMouseOver) { + this._el.removeEventListener('mouseover', this._evntElMouseOver) + this._evntElMouseOver = null + } + + if (this._evntElMouseOut) { + this._el.removeEventListener('mouseout', this._evntElMouseOut) + this._evntElMouseOut = null + } + + if (this._evntWindowResize) { + window.removeEventListener('resize', this._evntWindowResize) + this._evntWindowResize = null + } + + if (this._evntBodyClick) { + document.body.removeEventListener('click', this._evntBodyClick) + this._evntBodyClick = null + } + + if (this._evntInnerMousemove) { + this._inner.removeEventListener('mousemove', this._evntInnerMousemove) + this._evntInnerMousemove = null + } + + if (this._evntInnerMouseleave) { + this._inner.removeEventListener('mouseleave', this._evntInnerMouseleave) + this._evntInnerMouseleave = null + } + } + + static _isRoot(item) { + return !Menu._findParent(item, 'menu-item', false) + } + + static _findParent(el, cls, throwError = true) { + if (el.tagName.toUpperCase() === 'BODY') return null + el = el.parentNode + while (el.tagName.toUpperCase() !== 'BODY' && !el.classList.contains(cls)) { + el = el.parentNode + } + + el = el.tagName.toUpperCase() !== 'BODY' ? el : null + + if (!el && throwError) throw new Error(`Cannot find \`.${cls}\` parent element`) + + return el + } + + static _findChild(el, cls) { + const items = el.childNodes + const found = [] + + for (let i = 0, l = items.length; i < l; i++) { + if (items[i].classList) { + let passed = 0 + + for (let j = 0; j < cls.length; j++) { + if (items[i].classList.contains(cls[j])) passed += 1 + } + + if (cls.length === passed) found.push(items[i]) + } + } + + return found + } + + static _findMenu(item) { + let curEl = item.childNodes[0] + let menu = null + + while (curEl && !menu) { + if (curEl.classList && curEl.classList.contains('menu-sub')) menu = curEl + curEl = curEl.nextSibling + } + + if (!menu) throw new Error('Cannot find `.menu-sub` element for the current `.menu-toggle`') + + return menu + } + + // Has class + static _hasClass(cls, el = window.Helpers.ROOT_EL) { + let result = false + + cls.split(' ').forEach(c => { + if (el.classList.contains(c)) result = true + }) + + return result + } + + open(el, closeChildren = this._closeChildren) { + const item = this._findUnopenedParent(Menu._getItem(el, true), closeChildren) + + if (!item) return + + const toggleLink = Menu._getLink(item, true) + + Menu._promisify(this._onOpen, this, item, toggleLink, Menu._findMenu(item)) + .then(() => { + if (!this._horizontal || !Menu._isRoot(item)) { + if (this._animate && !this._horizontal) { + window.requestAnimationFrame(() => this._toggleAnimation(true, item, false)) + if (this._accordion) this._closeOther(item, closeChildren) + } else if (this._animate) { + this._toggleDropdown(true, item, closeChildren) + // eslint-disable-next-line no-unused-expressions + this._onOpened && this._onOpened(this, item, toggleLink, Menu._findMenu(item)) + } else { + item.classList.add('open') + // eslint-disable-next-line no-unused-expressions + this._onOpened && this._onOpened(this, item, toggleLink, Menu._findMenu(item)) + if (this._accordion) this._closeOther(item, closeChildren) + } + } else { + this._toggleDropdown(true, item, closeChildren) + // eslint-disable-next-line no-unused-expressions + this._onOpened && this._onOpened(this, item, toggleLink, Menu._findMenu(item)) + } + }) + .catch(() => {}) + } + + close(el, closeChildren = this._closeChildren, _autoClose = false) { + const item = Menu._getItem(el, true) + const toggleLink = Menu._getLink(el, true) + + if (!item.classList.contains('open') || item.classList.contains('disabled')) return + + Menu._promisify(this._onClose, this, item, toggleLink, Menu._findMenu(item), _autoClose) + .then(() => { + if (!this._horizontal || !Menu._isRoot(item)) { + if (this._animate && !this._horizontal) { + window.requestAnimationFrame(() => this._toggleAnimation(false, item, closeChildren)) + } else { + item.classList.remove('open') + + if (closeChildren) { + const opened = item.querySelectorAll('.menu-item.open') + for (let i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open') + } + + // eslint-disable-next-line no-unused-expressions + this._onClosed && this._onClosed(this, item, toggleLink, Menu._findMenu(item)) + } + } else { + this._toggleDropdown(false, item, closeChildren) + // eslint-disable-next-line no-unused-expressions + this._onClosed && this._onClosed(this, item, toggleLink, Menu._findMenu(item)) + } + }) + .catch(() => {}) + } + + _closeOther(item, closeChildren) { + const opened = Menu._findChild(item.parentNode, ['menu-item', 'open']) + + for (let i = 0, l = opened.length; i < l; i++) { + if (opened[i] !== item) this.close(opened[i], closeChildren) + } + } + + toggle(el, closeChildren = this._closeChildren) { + const item = Menu._getItem(el, true) + // const toggleLink = Menu._getLink(el, true) + + if (item.classList.contains('open')) this.close(item, closeChildren) + else this.open(item, closeChildren) + } + + _toggleDropdown(show, item, closeChildren) { + const menu = Menu._findMenu(item) + const actualItem = item + let subMenuItem = false + + if (show) { + if (Menu._findParent(item, 'menu-sub', false)) { + subMenuItem = true + item = this._topParent ? this._topParent.parentNode : item + } + + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const position = this._innerPosition + const itemOffset = this._getItemOffset(item) + const itemWidth = Math.round(item.getBoundingClientRect().width) + + if (itemOffset - DELTA <= -1 * position) { + this._innerPosition = -1 * itemOffset + } else if (itemOffset + position + itemWidth + DELTA >= wrapperWidth) { + if (itemWidth > wrapperWidth) { + this._innerPosition = -1 * itemOffset + } else { + this._innerPosition = -1 * (itemOffset + itemWidth - wrapperWidth) + } + } + + actualItem.classList.add('open') + + const menuWidth = Math.round(menu.getBoundingClientRect().width) + + if (subMenuItem) { + if ( + itemOffset + this._innerPosition + menuWidth * 2 > wrapperWidth && + menuWidth < wrapperWidth && + menuWidth >= itemWidth + ) { + menu.style.left = [this._rtl ? '100%' : '-100%'] + } + } else if ( + itemOffset + this._innerPosition + menuWidth > wrapperWidth && + menuWidth < wrapperWidth && + menuWidth > itemWidth + ) { + menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = `-${menuWidth - itemWidth}px` + } + + this._closeOther(actualItem, closeChildren) + this._updateSlider() + } else { + const toggle = Menu._findChild(item, ['menu-toggle']) + + // eslint-disable-next-line no-unused-expressions + toggle.length && toggle[0].removeAttribute('data-hover', 'true') + item.classList.remove('open') + menu.style[this._rtl ? 'marginRight' : 'marginLeft'] = null + + if (closeChildren) { + const opened = menu.querySelectorAll('.menu-item.open') + + for (let i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open') + } + } + } + + _slide(direction) { + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const innerWidth = this._innerWidth + let newPosition + + if (direction === 'next') { + newPosition = this._getSlideNextPos() + + if (innerWidth + newPosition < wrapperWidth) { + newPosition = wrapperWidth - innerWidth + } + } else { + newPosition = this._getSlidePrevPos() + + if (newPosition > 0) newPosition = 0 + } + + this._innerPosition = newPosition + this.update() + } + + _getSlideNextPos() { + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const position = this._innerPosition + let curItem = this._inner.childNodes[0] + let left = 0 + + while (curItem) { + if (curItem.tagName) { + const curItemWidth = Math.round(curItem.getBoundingClientRect().width) + + if (left + position - DELTA <= wrapperWidth && left + position + curItemWidth + DELTA >= wrapperWidth) { + if (curItemWidth > wrapperWidth && left === -1 * position) left += curItemWidth + break + } + + left += curItemWidth + } + + curItem = curItem.nextSibling + } + + return -1 * left + } + + _getSlidePrevPos() { + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const position = this._innerPosition + let curItem = this._inner.childNodes[0] + let left = 0 + + while (curItem) { + if (curItem.tagName) { + const curItemWidth = Math.round(curItem.getBoundingClientRect().width) + + if (left - DELTA <= -1 * position && left + curItemWidth + DELTA >= -1 * position) { + if (curItemWidth <= wrapperWidth) left = left + curItemWidth - wrapperWidth + break + } + + left += curItemWidth + } + + curItem = curItem.nextSibling + } + + return -1 * left + } + + static _getItem(el, toggle) { + let item = null + const selector = toggle ? 'menu-toggle' : 'menu-link' + + if (el.classList.contains('menu-item')) { + if (Menu._findChild(el, [selector]).length) item = el + } else if (el.classList.contains(selector)) { + item = el.parentNode.classList.contains('menu-item') ? el.parentNode : null + } + + if (!item) { + throw new Error(`${toggle ? 'Toggable ' : ''}\`.menu-item\` element not found.`) + } + + return item + } + + static _getLink(el, toggle) { + let found = [] + const selector = toggle ? 'menu-toggle' : 'menu-link' + + if (el.classList.contains(selector)) found = [el] + else if (el.classList.contains('menu-item')) found = Menu._findChild(el, [selector]) + + if (!found.length) throw new Error(`\`${selector}\` element not found.`) + + return found[0] + } + + _findUnopenedParent(item, closeChildren) { + let tree = [] + let parentItem = null + + while (item) { + if (item.classList.contains('disabled')) { + parentItem = null + tree = [] + } else { + if (!item.classList.contains('open')) parentItem = item + tree.push(item) + } + + item = Menu._findParent(item, 'menu-item', false) + } + + if (!parentItem) return null + if (tree.length === 1) return parentItem + + tree = tree.slice(0, tree.indexOf(parentItem)) + + for (let i = 0, l = tree.length; i < l; i++) { + tree[i].classList.add('open') + + if (this._accordion) { + const openedItems = Menu._findChild(tree[i].parentNode, ['menu-item', 'open']) + + for (let j = 0, k = openedItems.length; j < k; j++) { + if (openedItems[j] !== tree[i]) { + openedItems[j].classList.remove('open') + + if (closeChildren) { + const openedChildren = openedItems[j].querySelectorAll('.menu-item.open') + for (let x = 0, z = openedChildren.length; x < z; x++) { + openedChildren[x].classList.remove('open') + } + } + } + } + } + } + + return parentItem + } + + _toggleAnimation(open, item, closeChildren) { + const toggleLink = Menu._getLink(item, true) + const menu = Menu._findMenu(item) + + Menu._unbindAnimationEndEvent(item) + + const linkHeight = Math.round(toggleLink.getBoundingClientRect().height) + + item.style.overflow = 'hidden' + + const clearItemStyle = () => { + item.classList.remove('menu-item-animating') + item.classList.remove('menu-item-closing') + item.style.overflow = null + item.style.height = null + + if (!this._horizontal) this.update() + } + + if (open) { + item.style.height = `${linkHeight}px` + item.classList.add('menu-item-animating') + item.classList.add('open') + + Menu._bindAnimationEndEvent(item, () => { + clearItemStyle() + this._onOpened(this, item, toggleLink, menu) + }) + + setTimeout(() => { + item.style.height = `${linkHeight + Math.round(menu.getBoundingClientRect().height)}px` + }, 50) + } else { + item.style.height = `${linkHeight + Math.round(menu.getBoundingClientRect().height)}px` + item.classList.add('menu-item-animating') + item.classList.add('menu-item-closing') + + Menu._bindAnimationEndEvent(item, () => { + item.classList.remove('open') + clearItemStyle() + + if (closeChildren) { + const opened = item.querySelectorAll('.menu-item.open') + for (let i = 0, l = opened.length; i < l; i++) opened[i].classList.remove('open') + } + + this._onClosed(this, item, toggleLink, menu) + }) + + setTimeout(() => { + item.style.height = `${linkHeight}px` + }, 50) + } + } + + static _bindAnimationEndEvent(el, handler) { + const cb = e => { + if (e.target !== el) return + Menu._unbindAnimationEndEvent(el) + handler(e) + } + + let duration = window.getComputedStyle(el).transitionDuration + duration = parseFloat(duration) * (duration.indexOf('ms') !== -1 ? 1 : 1000) + + el._menuAnimationEndEventCb = cb + TRANSITION_EVENTS.forEach(ev => el.addEventListener(ev, el._menuAnimationEndEventCb, false)) + + el._menuAnimationEndEventTimeout = setTimeout(() => { + cb({ target: el }) + }, duration + 50) + } + + _getItemOffset(item) { + let curItem = this._inner.childNodes[0] + let left = 0 + + while (curItem !== item) { + if (curItem.tagName) { + left += Math.round(curItem.getBoundingClientRect().width) + } + + curItem = curItem.nextSibling + } + + return left + } + + _updateSlider(wrapperWidth = null, innerWidth = null, position = null) { + const _wrapperWidth = wrapperWidth !== null ? wrapperWidth : Math.round(this._wrapper.getBoundingClientRect().width) + const _innerWidth = innerWidth !== null ? innerWidth : this._innerWidth + const _position = position !== null ? position : this._innerPosition + + if (_innerWidth < _wrapperWidth || window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + this._prevBtn.classList.add('d-none') + this._nextBtn.classList.add('d-none') + } else { + this._prevBtn.classList.remove('d-none') + this._nextBtn.classList.remove('d-none') + } + if (_innerWidth > _wrapperWidth && window.innerWidth > window.Helpers.LAYOUT_BREAKPOINT) { + if (_position === 0) this._prevBtn.classList.add('disabled') + else this._prevBtn.classList.remove('disabled') + + if (_innerWidth + _position <= _wrapperWidth) this._nextBtn.classList.add('disabled') + else this._nextBtn.classList.remove('disabled') + } + } + + static _promisify(fn, ...args) { + const result = fn(...args) + if (result instanceof Promise) { + return result + } + if (result === false) { + return Promise.reject() + } + return Promise.resolve() + } + + get _innerWidth() { + const items = this._inner.childNodes + let width = 0 + + for (let i = 0, l = items.length; i < l; i++) { + if (items[i].tagName) { + width += Math.round(items[i].getBoundingClientRect().width) + } + } + + return width + } + + get _innerPosition() { + return parseInt(this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] || '0px', 10) + } + + set _innerPosition(value) { + this._inner.style[this._rtl ? 'marginRight' : 'marginLeft'] = `${value}px` + return value + } + + static _unbindAnimationEndEvent(el) { + const cb = el._menuAnimationEndEventCb + + if (el._menuAnimationEndEventTimeout) { + clearTimeout(el._menuAnimationEndEventTimeout) + el._menuAnimationEndEventTimeout = null + } + + if (!cb) return + + TRANSITION_EVENTS.forEach(ev => el.removeEventListener(ev, cb, false)) + el._menuAnimationEndEventCb = null + } + + closeAll(closeChildren = this._closeChildren) { + const opened = this._el.querySelectorAll('.menu-inner > .menu-item.open') + + for (let i = 0, l = opened.length; i < l; i++) this.close(opened[i], closeChildren) + } + + static setDisabled(el, disabled) { + Menu._getItem(el, false).classList[disabled ? 'add' : 'remove']('disabled') + } + + static isActive(el) { + return Menu._getItem(el, false).classList.contains('active') + } + + static isOpened(el) { + return Menu._getItem(el, false).classList.contains('open') + } + + static isDisabled(el) { + return Menu._getItem(el, false).classList.contains('disabled') + } + + update() { + if (!this._horizontal) { + if (this._scrollbar) { + this._scrollbar.update() + } + } else { + this.closeAll() + + const wrapperWidth = Math.round(this._wrapper.getBoundingClientRect().width) + const innerWidth = this._innerWidth + let position = this._innerPosition + + if (wrapperWidth - position > innerWidth) { + position = wrapperWidth - innerWidth + if (position > 0) position = 0 + this._innerPosition = position + } + + this._updateSlider(wrapperWidth, innerWidth, position) + } + } + + manageScroll() { + const { PerfectScrollbar } = window + const menuInner = document.querySelector('.menu-inner') + + if (window.innerWidth < window.Helpers.LAYOUT_BREAKPOINT) { + if (this._scrollbar !== null) { + // window.Helpers.menuPsScroll.destroy() + this._scrollbar.destroy() + this._scrollbar = null + } + menuInner.classList.add('overflow-auto') + } else { + if (this._scrollbar === null) { + const menuScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), { + suppressScrollX: true, + wheelPropagation: false + }) + // window.Helpers.menuPsScroll = menuScroll + this._scrollbar = menuScroll + } + menuInner.classList.remove('overflow-auto') + } + } + + switchMenu(menu) { + // Unbind Events + this._unbindEvents() + + // const html = document.documentElement + const navbar = document.querySelector('nav.layout-navbar') + const navbarCollapse = document.querySelector('#navbar-collapse') + /* const fullNavbar = document.querySelector('.layout-navbar-full') + const contentNavbar = document.querySelector('.layout-content-navbar') + const contentWrapper = document.querySelector('.content-wrapper') */ + const asideMenuWrapper = document.querySelector('#layout-menu div') + const asideMenu = document.querySelector('#layout-menu') + const horzMenuClasses = ['layout-menu-horizontal', 'menu', 'menu-horizontal', 'container-fluid', 'flex-grow-0'] + const vertMenuClasses = ['layout-menu', 'menu', 'menu-vertical'] + const horzMenuWrapper = document.querySelector('.menu-horizontal-wrapper') + const menuInner = document.querySelector('.menu-inner') + const brand = document.querySelector('.app-brand') + const menuToggler = document.querySelector('.layout-menu-toggle') + const activeMenuItems = document.querySelectorAll('.menu-inner .active') + /* const layoutPage = document.querySelector('.layout-page') + const layoutContainer = document.querySelector('.layout-container') + const content = document.querySelector('.container-fluid') */ + + // const { PerfectScrollbar } = window + + if (menu === 'vertical') { + this._horizontal = false + asideMenuWrapper.insertBefore(brand, horzMenuWrapper) + asideMenuWrapper.insertBefore(menuInner, horzMenuWrapper) + asideMenuWrapper.classList.add('flex-column', 'p-0') + asideMenu.classList.remove(...asideMenu.classList) + asideMenu.classList.add(...vertMenuClasses, this._menuBgClass) + brand.classList.remove('d-none', 'd-lg-flex') + menuToggler.classList.remove('d-none') + // if (PerfectScrollbar !== undefined) { + // this._psScroll = new PerfectScrollbar(document.querySelector('.menu-inner'), { + // suppressScrollX: true, + // wheelPropagation: !Menu._hasClass('layout-menu-fixed layout-menu-fixed-offcanvas') + // }) + // } + + menuInner.classList.add('overflow-auto') + + // Add open class to active items + for (let i = 0; i < activeMenuItems.length - 1; ++i) { + activeMenuItems[i].classList.add('open') + } + } else { + this._horizontal = true + navbar.children[0].insertBefore(brand, navbarCollapse) + brand.classList.add('d-none', 'd-lg-flex') + horzMenuWrapper.appendChild(menuInner) + asideMenuWrapper.classList.remove('flex-column', 'p-0') + asideMenu.classList.remove(...asideMenu.classList) + asideMenu.classList.add(...horzMenuClasses, this._menuBgClass) + menuToggler.classList.add('d-none') + menuInner.classList.remove('overflow-auto') + + // if (PerfectScrollbar !== undefined && this._psScroll !== null) { + // this._psScroll.destroy() + // this._psScroll = null + // } + + // Remove open class from active items + for (let i = 0; i < activeMenuItems.length; ++i) { + activeMenuItems[i].classList.remove('open') + } + } + + this._bindEvents() + } + + destroy() { + if (!this._el) return + + this._unbindEvents() + + const items = this._el.querySelectorAll('.menu-item') + for (let i = 0, l = items.length; i < l; i++) { + Menu._unbindAnimationEndEvent(items[i]) + items[i].classList.remove('menu-item-animating') + items[i].classList.remove('open') + items[i].style.overflow = null + items[i].style.height = null + } + + const menus = this._el.querySelectorAll('.menu-menu') + for (let i2 = 0, l2 = menus.length; i2 < l2; i2++) { + menus[i2].style.marginRight = null + menus[i2].style.marginLeft = null + } + + this._el.classList.remove('menu-no-animation') + + if (this._wrapper) { + this._prevBtn.parentNode.removeChild(this._prevBtn) + this._nextBtn.parentNode.removeChild(this._nextBtn) + this._wrapper.parentNode.insertBefore(this._inner, this._wrapper) + this._wrapper.parentNode.removeChild(this._wrapper) + this._inner.style.marginLeft = null + this._inner.style.marginRight = null + } + + this._el.menuInstance = null + delete this._el.menuInstance + + this._el = null + this._horizontal = null + this._animate = null + this._accordion = null + this._showDropdownOnHover = null + this._closeChildren = null + this._rtl = null + this._onOpen = null + this._onOpened = null + this._onClose = null + this._onClosed = null + if (this._scrollbar) { + this._scrollbar.destroy() + this._scrollbar = null + } + this._inner = null + this._prevBtn = null + this._wrapper = null + this._nextBtn = null + } +} + +window.Menu = Menu +export { Menu } diff --git a/src/modules/Resources/assets/vendor/js/template-customizer.js b/src/modules/Resources/assets/vendor/js/template-customizer.js new file mode 100644 index 0000000..35d9cfe --- /dev/null +++ b/src/modules/Resources/assets/vendor/js/template-customizer.js @@ -0,0 +1,1399 @@ +import './_template-customizer/_template-customizer.scss' +import customizerMarkup from './_template-customizer/_template-customizer.html?raw' + +const CSS_FILENAME_PATTERN = '%name%.scss' +const CONTROLS = [ + 'rtl', + 'style', + 'headerType', + 'contentLayout', + 'layoutCollapsed', + 'showDropdownOnHover', + 'layoutNavbarOptions', + 'layoutFooterFixed', + 'themes' +] +const STYLES = ['light', 'dark', 'system'] +const NAVBAR_OPTIONS = ['sticky', 'static', 'hidden'] +let layoutNavbarVar +const cl = document.documentElement.classList + +if (cl.contains('layout-navbar-fixed')) layoutNavbarVar = 'sticky' +else if (cl.contains('layout-navbar-hidden')) layoutNavbarVar = 'hidden' +else layoutNavbarVar = 'static' + +const DISPLAY_CUSTOMIZER = true +const DEFAULT_THEME = document.getElementsByTagName('HTML')[0].getAttribute('data-theme') || 0 +const DEFAULT_STYLE = cl.contains('dark-style') ? 'dark' : 'light' +const DEFAULT_TEXT_DIR = document.documentElement.getAttribute('dir') === 'rtl' +const DEFAULT_MENU_COLLAPSED = !!cl.contains('layout-menu-collapsed') +const DEFAULT_SHOW_DROPDOWN_ON_HOVER = true +const DEFAULT_NAVBAR_FIXED = layoutNavbarVar +const DEFAULT_CONTENT_LAYOUT = cl.contains('layout-wide') ? 'wide' : 'compact' +const DEFAULT_FOOTER_FIXED = !!cl.contains('layout-footer-fixed') + +let headerType +if (cl.contains('layout-menu-offcanvas')) { + headerType = 'static-offcanvas' +} else if (cl.contains('layout-menu-fixed')) { + headerType = 'fixed' +} else if (cl.contains('layout-menu-fixed-offcanvas')) { + headerType = 'fixed-offcanvas' +} else { + headerType = 'static' +} +const DEFAULT_LAYOUT_TYPE = headerType + +class TemplateCustomizer { + constructor({ + cssPath, + themesPath, + cssFilenamePattern, + displayCustomizer, + controls, + defaultTextDir, + defaultHeaderType, + defaultContentLayout, + defaultMenuCollapsed, + defaultShowDropdownOnHover, + defaultNavbarType, + defaultFooterFixed, + styles, + navbarOptions, + defaultStyle, + availableContentLayouts, + availableDirections, + availableStyles, + availableThemes, + availableLayouts, + availableHeaderTypes, + availableNavbarOptions, + defaultTheme, + pathResolver, + onSettingsChange, + lang + }) { + if (this._ssr) return + if (!window.Helpers) throw new Error('window.Helpers required.') + this.settings = {} + this.settings.cssPath = cssPath + this.settings.themesPath = themesPath + this.settings.cssFilenamePattern = cssFilenamePattern || CSS_FILENAME_PATTERN + this.settings.displayCustomizer = typeof displayCustomizer !== 'undefined' ? displayCustomizer : DISPLAY_CUSTOMIZER + + this.settings.controls = controls || CONTROLS + this.settings.defaultTextDir = defaultTextDir === 'rtl' ? true : false || DEFAULT_TEXT_DIR + this.settings.defaultHeaderType = defaultHeaderType || DEFAULT_LAYOUT_TYPE + this.settings.defaultMenuCollapsed = + typeof defaultMenuCollapsed !== 'undefined' ? defaultMenuCollapsed : DEFAULT_MENU_COLLAPSED + this.settings.defaultContentLayout = + typeof defaultContentLayout !== 'undefined' ? defaultContentLayout : DEFAULT_CONTENT_LAYOUT + this.settings.defaultShowDropdownOnHover = + typeof defaultShowDropdownOnHover !== 'undefined' ? defaultShowDropdownOnHover : DEFAULT_SHOW_DROPDOWN_ON_HOVER + this.settings.defaultNavbarType = + typeof defaultNavbarType !== 'undefined' ? defaultNavbarType : DEFAULT_NAVBAR_FIXED + this.settings.defaultFooterFixed = + typeof defaultFooterFixed !== 'undefined' ? defaultFooterFixed : DEFAULT_FOOTER_FIXED + + this.settings.availableDirections = availableDirections || TemplateCustomizer.DIRECTIONS + this.settings.availableStyles = availableStyles || TemplateCustomizer.STYLES + this.settings.availableThemes = availableThemes || TemplateCustomizer.THEMES + this.settings.availableHeaderTypes = availableHeaderTypes || TemplateCustomizer.HEADER_TYPES + this.settings.availableContentLayouts = availableContentLayouts || TemplateCustomizer.CONTENT + this.settings.availableLayouts = availableLayouts || TemplateCustomizer.LAYOUTS + this.settings.availableNavbarOptions = availableNavbarOptions || TemplateCustomizer.NAVBAR_OPTIONS + this.settings.defaultTheme = this._getDefaultTheme( + typeof defaultTheme !== 'undefined' ? defaultTheme : DEFAULT_THEME + ) + + this.settings.styles = styles || STYLES + this.settings.navbarOptions = navbarOptions || NAVBAR_OPTIONS + this.settings.defaultStyle = defaultStyle || DEFAULT_STYLE + this.settings.lang = lang || 'en' + this.pathResolver = pathResolver || (p => p) + + if (this.settings.styles.length < 2) { + const i = this.settings.controls.indexOf('style') + if (i !== -1) { + this.settings.controls = this.settings.controls.slice(0, i).concat(this.settings.controls.slice(i + 1)) + } + } + this.settings.onSettingsChange = typeof onSettingsChange === 'function' ? onSettingsChange : () => {} + + this._loadSettings() + + this._listeners = [] + this._controls = {} + + this._initDirection() + this._initStyle() + this._initTheme() + this.setLayoutType(this.settings.headerType, false) + this.setContentLayout(this.settings.contentLayout, false) + this.setDropdownOnHover(this.settings.showDropdownOnHover, false) + this.setLayoutNavbarOption(this.settings.layoutNavbarOptions, false) + this.setLayoutFooterFixed(this.settings.layoutFooterFixed, false) + this._setup() + } + + setRtl(rtl) { + if (!this._hasControls('rtl')) return + this._setSetting('Rtl', String(rtl)) + this._setCookie('direction', rtl, 365) + window.location.reload() + } + + setContentLayout(contentLayout, updateStorage = true) { + if (!this._hasControls('contentLayout')) return + this.settings.contentLayout = contentLayout + if (updateStorage) this._setSetting('contentLayout', contentLayout) + + window.Helpers.setContentLayout(contentLayout) + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + } + + setStyle(style) { + const layoutName = this._getLayoutName() + const isAdmin = !layoutName.includes('front') + this._setSetting('Style', style) + + const modeCookieName = isAdmin ? 'admin-mode' : 'front-mode' + const colorPrefCookieName = isAdmin ? 'admin-colorPref' : 'front-colorPref' + + if (style !== '' && this._checkCookie(modeCookieName)) { + if (style === 'system') { + this._setCookie(modeCookieName, 'system', 365) + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + this._setCookie(colorPrefCookieName, 'dark', 365) + } else { + this._setCookie(colorPrefCookieName, 'light', 365) + } + } else { + if (style === 'dark') { + this._setCookie(modeCookieName, 'dark', 365) + this._setCookie(colorPrefCookieName, 'dark', 365) + } else { + this._setCookie(modeCookieName, 'light', 365) + this._setCookie(colorPrefCookieName, 'light', 365) + } + } + } else { + this._setCookie(modeCookieName, style || 'light', 365) + } + + window.location.reload() + } + + setTheme(themeName, updateStorage = true, cb = null) { + if (!this._hasControls('themes')) return + + const theme = this._getThemeByName(themeName) + + if (!theme) return + + this.settings.theme = theme + if (updateStorage) this._setSetting('Theme', themeName) + + this._setCookie('theme', themeName, 365) + const themeUrl = this.pathResolver( + this.settings.themesPath + + this.settings.cssFilenamePattern.replace( + '%name%', + themeName + (this.settings.style !== 'light' ? `-${this.settings.style}` : '') + ) + ) + + this._loadStylesheets({ [themeUrl]: document.querySelector('.template-customizer-theme-css') }, cb || (() => {})) + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + } + + setLayoutType(pos, updateStorage = true) { + if (!this._hasControls('headerType')) return + if (pos !== 'static' && pos !== 'static-offcanvas' && pos !== 'fixed' && pos !== 'fixed-offcanvas') return + + this.settings.headerType = pos + if (updateStorage) this._setSetting('LayoutType', pos) + + window.Helpers.setPosition( + pos === 'fixed' || pos === 'fixed-offcanvas', + pos === 'static-offcanvas' || pos === 'fixed-offcanvas' + ) + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + + // Perfectscrollbar change on Layout change + let menuScroll = window.Helpers.menuPsScroll + const PerfectScrollbarLib = window.PerfectScrollbar + + if (this.settings.headerType === 'fixed' || this.settings.headerType === 'fixed-offcanvas') { + // Set perfectscrollbar wheelPropagation false for fixed layout + if (PerfectScrollbarLib && menuScroll) { + window.Helpers.menuPsScroll.destroy() + menuScroll = new PerfectScrollbarLib(document.querySelector('.menu-inner'), { + suppressScrollX: true, + wheelPropagation: false + }) + window.Helpers.menuPsScroll = menuScroll + } + } else if (menuScroll) { + // Destroy perfectscrollbar for static layout + window.Helpers.menuPsScroll.destroy() + } + } + + setDropdownOnHover(open, updateStorage = true) { + if (!this._hasControls('showDropdownOnHover')) return + this.settings.showDropdownOnHover = open + if (updateStorage) this._setSetting('ShowDropdownOnHover', open) + + if (window.Helpers.mainMenu) { + window.Helpers.mainMenu.destroy() + config.showDropdownOnHover = open + + const { Menu } = window + + window.Helpers.mainMenu = new Menu(document.getElementById('layout-menu'), { + orientation: 'horizontal', + closeChildren: true, + showDropdownOnHover: config.showDropdownOnHover + }) + } + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + } + + setLayoutNavbarOption(navbarType, updateStorage = true) { + if (!this._hasControls('layoutNavbarOptions')) return + this.settings.layoutNavbarOptions = navbarType + if (updateStorage) this._setSetting('FixedNavbarOption', navbarType) + + window.Helpers.setNavbar(navbarType) + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + } + + setLayoutFooterFixed(fixed, updateStorage = true) { + // if (!this._hasControls('layoutFooterFixed')) return + this.settings.layoutFooterFixed = fixed + if (updateStorage) this._setSetting('FixedFooter', fixed) + + window.Helpers.setFooterFixed(fixed) + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + } + + setLang(lang, updateStorage = true, force = false) { + if (lang === this.settings.lang && !force) return + if (!TemplateCustomizer.LANGUAGES[lang]) throw new Error(`Language "${lang}" not found!`) + + const t = TemplateCustomizer.LANGUAGES[lang] + + ;[ + 'panel_header', + 'panel_sub_header', + 'theming_header', + 'style_label', + 'style_switch_light', + 'style_switch_dark', + 'layout_header', + 'layout_label', + 'layout_header_label', + 'content_label', + 'layout_static', + 'layout_offcanvas', + 'layout_fixed', + 'layout_fixed_offcanvas', + 'layout_dd_open_label', + 'layout_navbar_label', + 'layout_footer_label', + 'misc_header', + 'theme_label', + 'direction_label' + ].forEach(key => { + const el = this.container.querySelector(`.template-customizer-t-${key}`) + // eslint-disable-next-line no-unused-expressions + el && (el.textContent = t[key]) + }) + + const tt = t.themes || {} + const themes = this.container.querySelectorAll('.template-customizer-theme-item') || [] + + for (let i = 0, l = themes.length; i < l; i++) { + const themeName = themes[i].querySelector('input[type="radio"]').value + themes[i].querySelector('.template-customizer-theme-name').textContent = + tt[themeName] || this._getThemeByName(themeName).title + } + + this.settings.lang = lang + + if (updateStorage) this._setSetting('Lang', lang) + + if (updateStorage) this.settings.onSettingsChange.call(this, this.settings) + } + + // Update theme settings control + update() { + if (this._ssr) return + + const hasNavbar = !!document.querySelector('.layout-navbar') + const hasMenu = !!document.querySelector('.layout-menu') + const hasHorizontalMenu = !!document.querySelector('.layout-menu-horizontal.menu, .layout-menu-horizontal .menu') + const isLayout1 = !!document.querySelector('.layout-wrapper.layout-navbar-full') + const hasFooter = !!document.querySelector('.content-footer') + + if (this._controls.showDropdownOnHover) { + if (hasMenu) { + this._controls.showDropdownOnHover.setAttribute('disabled', 'disabled') + this._controls.showDropdownOnHover.classList.add('disabled') + } else { + this._controls.showDropdownOnHover.removeAttribute('disabled') + this._controls.showDropdownOnHover.classList.remove('disabled') + } + } + + if (this._controls.layoutNavbarOptions) { + if (!hasNavbar) { + this._controls.layoutNavbarOptions.setAttribute('disabled', 'disabled') + this._controls.layoutNavbarOptionsW.classList.add('disabled') + } else { + this._controls.layoutNavbarOptions.removeAttribute('disabled') + this._controls.layoutNavbarOptionsW.classList.remove('disabled') + } + + // Horizontal menu fixed layout - disabled fixed navbar switch + if (hasHorizontalMenu && hasNavbar && this.settings.headerType === 'fixed') { + this._controls.layoutNavbarOptions.setAttribute('disabled', 'disabled') + this._controls.layoutNavbarOptionsW.classList.add('disabled') + } + } + + if (this._controls.layoutFooterFixed) { + if (!hasFooter) { + this._controls.layoutFooterFixed.setAttribute('disabled', 'disabled') + this._controls.layoutFooterFixedW.classList.add('disabled') + } else { + this._controls.layoutFooterFixed.removeAttribute('disabled') + this._controls.layoutFooterFixedW.classList.remove('disabled') + } + } + + if (this._controls.headerType) { + // ? Uncomment If using offcanvas layout + /* + if (!hasMenu) { + this._controls.headerType.querySelector('[value="static-offcanvas"]').setAttribute('disabled', 'disabled') + this._controls.headerType.querySelector('[value="fixed-offcanvas"]').setAttribute('disabled', 'disabled') + } else { + this._controls.headerType.querySelector('[value="static-offcanvas"]').removeAttribute('disabled') + this._controls.headerType.querySelector('[value="fixed-offcanvas"]').removeAttribute('disabled') + } + */ + + // Disable menu layouts options if menu (vertical or horizontal) is not there + // if ((!hasNavbar && !hasMenu) || (!hasMenu && !isLayout1)) { + if (hasMenu || hasHorizontalMenu) { + // (Updated condition) + this._controls.headerType.removeAttribute('disabled') + } else { + this._controls.headerType.setAttribute('disabled', 'disabled') + } + } + } + + // Clear local storage + clearLocalStorage() { + if (this._ssr) return + const layoutName = this._getLayoutName() + const keysToRemove = [ + 'Theme', + 'Style', + 'LayoutCollapsed', + 'FixedNavbarOption', + 'LayoutType', + 'contentLayout', + 'Rtl', + 'Lang' + ] + + keysToRemove.forEach(key => { + const localStorageKey = `templateCustomizer-${layoutName}--${key}` + localStorage.removeItem(localStorageKey) + }) + + this._showResetBtnNotification(false) + } + + // Clear local storage + destroy() { + if (this._ssr) return + + this._cleanup() + + this.settings = null + this.container.parentNode.removeChild(this.container) + this.container = null + } + + _loadSettings() { + // Get settings + + // const cl = document.documentElement.classList; + const rtl = this._getSetting('Rtl') + const style = this._getSetting('Style') + const theme = this._getSetting('Theme') + const contentLayout = this._getSetting('contentLayout') + const collapsedMenu = this._getSetting('LayoutCollapsed') // Value will be set from main.js + const dropdownOnHover = this._getSetting('ShowDropdownOnHover') // Value will be set from main.js + const navbarOption = this._getSetting('FixedNavbarOption') + const fixedFooter = this._getSetting('FixedFooter') + const lType = this._getSetting('LayoutType') + + const layoutName = this._getLayoutName() + const isAdmin = !layoutName.includes('front') + + const modeCookieName = isAdmin ? 'admin-mode' : 'front-mode' + const colorPrefCookieName = isAdmin ? 'admin-colorPref' : 'front-colorPref' + + if ( + rtl !== '' || + style !== '' || + theme !== '' || + contentLayout !== '' || + collapsedMenu !== '' || + navbarOption !== '' || + lType !== '' + ) { + this._showResetBtnNotification(true) + } else { + this._showResetBtnNotification(false) + } + let type + + if (lType !== '' && ['static', 'static-offcanvas', 'fixed', 'fixed-offcanvas'].indexOf(lType) !== -1) { + type = lType + } else { + type = this.settings.defaultHeaderType + } + this.settings.headerType = type + + // ! Set settings by following priority: Local Storage, Theme Config, HTML Classes + this.settings.rtl = this._checkCookie('direction') + ? this._getCookie('direction') + : rtl !== '' + ? rtl === 'true' + : this.settings.defaultTextDir + this.settings.stylesOpt = this.settings.styles.indexOf(style) !== -1 ? style : this.settings.defaultStyle + + if (this._getCookie(modeCookieName) === 'system') { + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + this._setCookie(colorPrefCookieName, 'dark', 365) + this.settings.style = 'dark' + } else { + this._setCookie(colorPrefCookieName, 'light', 365) + this.settings.style = 'light' + } + } else { + if (this.settings.stylesOpt === 'system') { + if (window.matchMedia('(prefers-color-scheme: dark)').matches) { + this.settings.style = 'dark' + } else { + this.settings.style = 'light' + } + } else { + this.settings.style = this.settings.styles.indexOf(style) !== -1 ? style : this.settings.stylesOpt + } + } + this.settings.contentLayout = contentLayout !== '' ? contentLayout : this.settings.defaultContentLayout + this.settings.layoutCollapsed = collapsedMenu !== '' ? collapsedMenu === 'true' : this.settings.defaultMenuCollapsed + this.settings.showDropdownOnHover = + dropdownOnHover !== '' ? dropdownOnHover === 'true' : this.settings.defaultShowDropdownOnHover + let navType + if (navbarOption !== '' && ['static', 'sticky', 'hidden'].indexOf(navbarOption) !== -1) { + navType = navbarOption + } else { + navType = this.settings.defaultNavbarType + } + + this.settings.layoutNavbarOptions = navType + this.settings.layoutFooterFixed = fixedFooter !== '' ? fixedFooter === 'true' : this.settings.defaultFooterFixed + + if (this._checkCookie('theme')) { + this.settings.theme = this._getThemeByName(this._getCookie('theme'), true) + } else { + this.settings.theme = this._getThemeByName(this._getSetting('Theme'), true) + } + + // Filter options depending on available controls + if (!this._hasControls('rtl')) this.settings.rtl = document.documentElement.getAttribute('dir') === 'rtl' + if (!this._hasControls('style')) this.settings.style = cl.contains('dark-style') ? 'dark' : 'light' + if (!this._hasControls('contentLayout')) this.settings.contentLayout = null + if (!this._hasControls('headerType')) this.settings.headerType = null + if (!this._hasControls('layoutCollapsed')) this.settings.layoutCollapsed = null + if (!this._hasControls('layoutNavbarOptions')) this.settings.layoutNavbarOptions = null + if (!this._hasControls('themes')) this.settings.theme = null + } + + // Setup theme settings controls and events + _setup(_container = document) { + // Function to create customizer elements + const createOptionElement = (nameVal, title, inputName, isDarkStyle, image) => { + image = image || nameVal + + return this._getElementFromString(`
+
+ +
+ +
`) + } + + this._cleanup() + this.container = this._getElementFromString(customizerMarkup) + + // Customizer visibility condition + // + const customizerW = this.container + if (this.settings.displayCustomizer) customizerW.setAttribute('style', 'visibility: visible') + else customizerW.setAttribute('style', 'visibility: hidden') + + // Open btn + // + const openBtn = this.container.querySelector('.template-customizer-open-btn') + const openBtnCb = () => { + this.container.classList.add('template-customizer-open') + this.update() + + if (this._updateInterval) clearInterval(this._updateInterval) + this._updateInterval = setInterval(() => { + this.update() + }, 500) + } + openBtn.addEventListener('click', openBtnCb) + this._listeners.push([openBtn, 'click', openBtnCb]) + + // Reset btn + // + + const resetBtn = this.container.querySelector('.template-customizer-reset-btn') + const resetBtnCb = () => { + const layoutName = this._getLayoutName() + if (layoutName.includes('front')) { + this._deleteCookie('front-mode') + this._deleteCookie('front-colorPref') + } else { + this._deleteCookie('admin-mode') + this._deleteCookie('admin-colorPref') + } + this.clearLocalStorage() + window.location.reload() + this._deleteCookie('colorPref') + this._deleteCookie('theme') + this._deleteCookie('direction') + } + resetBtn.addEventListener('click', resetBtnCb) + this._listeners.push([resetBtn, 'click', resetBtnCb]) + + // Close btn + // + + const closeBtn = this.container.querySelector('.template-customizer-close-btn') + const closeBtnCb = () => { + this.container.classList.remove('template-customizer-open') + + if (this._updateInterval) { + clearInterval(this._updateInterval) + this._updateInterval = null + } + } + closeBtn.addEventListener('click', closeBtnCb) + this._listeners.push([closeBtn, 'click', closeBtnCb]) + + // Style + const styleW = this.container.querySelector('.template-customizer-style') + const styleOpt = styleW.querySelector('.template-customizer-styles-options') + + if (!this._hasControls('style')) { + styleW.parentNode.removeChild(styleW) + } else { + this.settings.availableStyles.forEach(style => { + const styleEl = createOptionElement(style.name, style.title, 'customRadioIcon', cl.contains('dark-style')) + styleOpt.appendChild(styleEl) + }) + styleOpt.querySelector(`input[value="${this.settings.stylesOpt}"]`).setAttribute('checked', 'checked') + + // styleCb + const styleCb = e => { + this._loadingState(true) + this.setStyle(e.target.value, true, () => { + this._loadingState(false) + }) + } + + styleOpt.addEventListener('change', styleCb) + this._listeners.push([styleOpt, 'change', styleCb]) + } + + // Theme + const themesW = this.container.querySelector('.template-customizer-themes') + const themesWInner = themesW.querySelector('.template-customizer-themes-options') + + if (!this._hasControls('themes')) { + themesW.parentNode.removeChild(themesW) + } else { + this.settings.availableThemes.forEach(theme => { + let image = '' + if (theme.name === 'theme-semi-dark') { + image = `semi-dark` + } else if (theme.name === 'theme-bordered') { + image = `border` + } else { + image = `default` + } + const themeEl = createOptionElement(theme.name, theme.title, 'themeRadios', cl.contains('dark-style'), image) + themesWInner.appendChild(themeEl) + }) + + themesWInner.querySelector(`input[value="${this.settings.theme.name}"]`).setAttribute('checked', 'checked') + + const themeCb = e => { + this._loading = true + this._loadingState(true, true) + + this.setTheme(e.target.value, true, () => { + this._loading = false + this._loadingState(false, true) + }) + } + + themesWInner.addEventListener('change', themeCb) + this._listeners.push([themesWInner, 'change', themeCb]) + } + const themingW = this.container.querySelector('.template-customizer-theming') + + if (!this._hasControls('style') && !this._hasControls('themes')) { + themingW.parentNode.removeChild(themingW) + } + + // Layout wrapper + const layoutW = this.container.querySelector('.template-customizer-layout') + + if (!this._hasControls('rtl headerType contentLayout layoutCollapsed layoutNavbarOptions', true)) { + layoutW.parentNode.removeChild(layoutW) + } else { + // RTL + // + + const directionW = this.container.querySelector('.template-customizer-directions') + // ? Hide RTL control in following 2 case + if (!this._hasControls('rtl') || !rtlSupport) { + directionW.parentNode.removeChild(directionW) + } else { + const directionOpt = directionW.querySelector('.template-customizer-directions-options') + this.settings.availableDirections.forEach(dir => { + const dirEl = createOptionElement(dir.name, dir.title, 'directionRadioIcon', cl.contains('dark-style')) + directionOpt.appendChild(dirEl) + }) + directionOpt + .querySelector(`input[value="${this.settings.rtl === 'true' ? 'rtl' : 'ltr'}"]`) + .setAttribute('checked', 'checked') + + const rtlCb = e => { + this._loadingState(true) + // For demo purpose, we will use EN as LTR and AR as RTL Language + this._getSetting('Lang') === 'ar' ? this._setSetting('Lang', 'en') : this._setSetting('Lang', 'ar') + this.setRtl(e.target.value === 'rtl', true, () => { + this._loadingState(false) + }) + if (e.target.value === 'rtl') { + window.location.href = baseUrl + 'lang/ar' + } else { + window.location.href = baseUrl + 'lang/en' + } + } + + directionOpt.addEventListener('change', rtlCb) + this._listeners.push([directionOpt, 'change', rtlCb]) + } + + // Header Layout Type + const headerTypeW = this.container.querySelector('.template-customizer-headerOptions') + const templateName = document.documentElement.getAttribute('data-template').split('-') + if (!this._hasControls('headerType')) { + headerTypeW.parentNode.removeChild(headerTypeW) + } else { + const headerOpt = headerTypeW.querySelector('.template-customizer-header-options') + setTimeout(() => { + if (templateName.includes('vertical')) { + headerTypeW.parentNode.removeChild(headerTypeW) + } + }, 100) + this.settings.availableHeaderTypes.forEach(header => { + const headerEl = createOptionElement( + header.name, + header.title, + 'headerRadioIcon', + cl.contains('dark-style'), + `horizontal-${header.name}` + ) + headerOpt.appendChild(headerEl) + }) + headerOpt.querySelector(`input[value="${this.settings.headerType}"]`).setAttribute('checked', 'checked') + + const headerTypeCb = e => { + this.setLayoutType(e.target.value) + } + + headerOpt.addEventListener('change', headerTypeCb) + this._listeners.push([headerOpt, 'change', headerTypeCb]) + } + + // CONTENT + // + + const contentWrapper = this.container.querySelector('.template-customizer-content') + // ? Hide RTL control in following 2 case + if (!this._hasControls('contentLayout')) { + contentWrapper.parentNode.removeChild(contentWrapper) + } else { + const contentOpt = contentWrapper.querySelector('.template-customizer-content-options') + this.settings.availableContentLayouts.forEach(content => { + const contentEl = createOptionElement( + content.name, + content.title, + 'contentRadioIcon', + cl.contains('dark-style') + ) + contentOpt.appendChild(contentEl) + }) + contentOpt.querySelector(`input[value="${this.settings.contentLayout}"]`).setAttribute('checked', 'checked') + + const contentCb = e => { + this._loading = true + this._loadingState(true, true) + this.setContentLayout(e.target.value, true, () => { + this._loading = false + this._loadingState(false, true) + }) + } + + contentOpt.addEventListener('change', contentCb) + this._listeners.push([contentOpt, 'change', contentCb]) + } + + // Layouts Collapsed: Expanded, Collapsed + const layoutCollapsedW = this.container.querySelector('.template-customizer-layouts') + + if (!this._hasControls('layoutCollapsed')) { + layoutCollapsedW.parentNode.removeChild(layoutCollapsedW) + } else { + setTimeout(() => { + if (document.querySelector('.layout-menu-horizontal')) { + layoutCollapsedW.parentNode.removeChild(layoutCollapsedW) + } + }, 100) + const layoutCollapsedOpt = layoutCollapsedW.querySelector('.template-customizer-layouts-options') + this.settings.availableLayouts.forEach(layoutOpt => { + const layoutsEl = createOptionElement( + layoutOpt.name, + layoutOpt.title, + 'layoutsRadios', + cl.contains('dark-style') + ) + layoutCollapsedOpt.appendChild(layoutsEl) + }) + layoutCollapsedOpt + .querySelector(`input[value="${this.settings.layoutCollapsed ? 'collapsed' : 'expanded'}"]`) + .setAttribute('checked', 'checked') + + const layoutCb = e => { + window.Helpers.setCollapsed(e.target.value === 'collapsed', true) + + this._setSetting('LayoutCollapsed', e.target.value === 'collapsed') + } + + layoutCollapsedOpt.addEventListener('change', layoutCb) + this._listeners.push([layoutCollapsedOpt, 'change', layoutCb]) + } + + // Layout Navbar Options + const navbarOption = this.container.querySelector('.template-customizer-layoutNavbarOptions') + + if (!this._hasControls('layoutNavbarOptions')) { + navbarOption.parentNode.removeChild(navbarOption) + } else { + setTimeout(() => { + if (templateName.includes('horizontal')) { + navbarOption.parentNode.removeChild(navbarOption) + } + }, 100) + const navbarTypeOpt = navbarOption.querySelector('.template-customizer-navbar-options') + this.settings.availableNavbarOptions.forEach(navbarOpt => { + const navbarEl = createOptionElement( + navbarOpt.name, + navbarOpt.title, + 'navbarOptionRadios', + cl.contains('dark-style') + ) + navbarTypeOpt.appendChild(navbarEl) + }) + // check navbar option from settings + navbarTypeOpt + .querySelector(`input[value="${this.settings.layoutNavbarOptions}"]`) + .setAttribute('checked', 'checked') + const navbarCb = e => { + this._loading = true + this._loadingState(true, true) + this.setLayoutNavbarOption(e.target.value, true, () => { + this._loading = false + this._loadingState(false, true) + }) + } + + navbarTypeOpt.addEventListener('change', navbarCb) + this._listeners.push([navbarTypeOpt, 'change', navbarCb]) + } + } + + setTimeout(() => { + const layoutCustom = this.container.querySelector('.template-customizer-layout') + if (document.querySelector('.menu-vertical')) { + if (!this._hasControls('rtl contentLayout layoutCollapsed layoutNavbarOptions', true)) { + if (layoutCustom) { + layoutCustom.parentNode.removeChild(layoutCustom) + } + } + } else if (document.querySelector('.menu-horizontal')) { + if (!this._hasControls('rtl contentLayout headerType', true)) { + if (layoutCustom) { + layoutCustom.parentNode.removeChild(layoutCustom) + } + } + } + }, 100) + + // Set language + this.setLang(this.settings.lang, false, true) + + // Append container + if (_container === document) { + if (_container.body) { + _container.body.appendChild(this.container) + } else { + window.addEventListener('DOMContentLoaded', () => _container.body.appendChild(this.container)) + } + } else { + _container.appendChild(this.container) + } + } + + _initDirection() { + if (this._hasControls('rtl')) { + document.documentElement.setAttribute( + 'dir', + this._checkCookie('direction') + ? this._getCookie('direction') === 'true' + ? 'rtl' + : 'ltr' + : this.settings.rtl + ? 'rtl' + : 'ltr' + ) + } + } + + // Init template styles + _initStyle() { + if (!this._hasControls('style')) return + + const { style } = this.settings + + this._insertStylesheet( + 'template-customizer-core-css', + this.pathResolver( + this.settings.cssPath + + this.settings.cssFilenamePattern.replace('%name%', `core${style !== 'light' ? `-${style}` : ''}`) + ) + ) + // ? Uncomment if needed + /* + this._insertStylesheet( + 'template-customizer-bootstrap-css', + this.pathResolver( + this.settings.cssPath + + this.settings.cssFilenamePattern.replace('%name%', `bootstrap${style !== 'light' ? `-${style}` : ''}`) + ) + ) + this._insertStylesheet( + 'template-customizer-bsextended-css', + this.pathResolver( + this.settings.cssPath + + this.settings.cssFilenamePattern.replace( + '%name%', + `bootstrap-extended${style !== 'light' ? `-${style}` : ''}` + ) + ) + ) + this._insertStylesheet( + 'template-customizer-components-css', + this.pathResolver( + this.settings.cssPath + + this.settings.cssFilenamePattern.replace('%name%', `components${style !== 'light' ? `-${style}` : ''}`) + ) + ) + this._insertStylesheet( + 'template-customizer-colors-css', + this.pathResolver( + this.settings.cssPath + + this.settings.cssFilenamePattern.replace('%name%', `colors${style !== 'light' ? `-${style}` : ''}`) + ) + ) + */ + + const classesToRemove = style === 'light' ? ['dark-style'] : ['light-style'] + classesToRemove.forEach(cls => { + document.documentElement.classList.remove(cls) + }) + + document.documentElement.classList.add(`${style}-style`) + } + + // Init theme style + _initTheme() { + if (this._hasControls('themes')) { + this._insertStylesheet( + 'template-customizer-theme-css', + this.pathResolver( + this.settings.themesPath + + this.settings.cssFilenamePattern.replace( + '%name%', + this.settings.theme.name + (this.settings.style !== 'light' ? `-${this.settings.style}` : '') + ) + ) + ) + } else { + // If theme control is not enabled, get the current theme from localstorage else display default theme + const theme = this._getSetting('Theme') + this._insertStylesheet( + 'template-customizer-theme-css', + this.pathResolver( + this.settings.themesPath + + this.settings.cssFilenamePattern.replace( + '%name%', + theme + ? theme + : this.settings.defaultTheme.name + (this.settings.style !== 'light' ? `-${this.settings.style}` : '') + ) + ) + ) + } + } + + _loadStylesheet(href, className) { + const link = document.createElement('link') + link.rel = 'stylesheet' + link.type = 'text/css' + link.href = href + link.className = className + document.head.appendChild(link) + } + + _insertStylesheet(className, href) { + const curLink = document.querySelector(`.${className}`) + + if (typeof document.documentMode === 'number' && document.documentMode < 11) { + if (!curLink) return + if (href === curLink.getAttribute('href')) return + + const link = document.createElement('link') + + link.setAttribute('rel', 'stylesheet') + link.setAttribute('type', 'text/css') + link.className = className + link.setAttribute('href', href) + + curLink.parentNode.insertBefore(link, curLink.nextSibling) + } else { + this._loadStylesheet(href, className) + } + + if (curLink) { + curLink.parentNode.removeChild(curLink) + } + } + + _loadStylesheets(stylesheets, cb) { + const paths = Object.keys(stylesheets) + const count = paths.length + let loaded = 0 + + function loadStylesheet(path, curLink, _cb = () => {}) { + const link = document.createElement('link') + + link.setAttribute('href', path) + link.setAttribute('rel', 'stylesheet') + link.setAttribute('type', 'text/css') + link.className = curLink.className + + const sheet = 'sheet' in link ? 'sheet' : 'styleSheet' + const cssRules = 'sheet' in link ? 'cssRules' : 'rules' + + let intervalId + + const timeoutId = setTimeout(() => { + clearInterval(intervalId) + clearTimeout(timeoutId) + if (curLink.parentNode.contains(link)) { + curLink.parentNode.removeChild(link) + } + _cb(false, path) + }, 15000) + + intervalId = setInterval(() => { + try { + if (link[sheet] && link[sheet][cssRules].length) { + clearInterval(intervalId) + clearTimeout(timeoutId) + curLink.parentNode.removeChild(curLink) + _cb(true) + } + } catch (e) { + // Catch error + } + }, 10) + curLink.setAttribute('href', link.href) + } + + function stylesheetCallBack() { + if ((loaded += 1) >= count) { + cb() + } + } + for (let i = 0; i < paths.length; i++) { + loadStylesheet(paths[i], stylesheets[paths[i]], stylesheetCallBack()) + } + } + + _loadingState(enable, themes) { + this.container.classList[enable ? 'add' : 'remove'](`template-customizer-loading${themes ? '-theme' : ''}`) + } + + _getElementFromString(str) { + const wrapper = document.createElement('div') + wrapper.innerHTML = str + return wrapper.firstChild + } + + // Set settings in LocalStorage with layout & key + _getSetting(key) { + let result = null + const layoutName = this._getLayoutName() + try { + result = localStorage.getItem(`templateCustomizer-${layoutName}--${key}`) + } catch (e) { + // Catch error + } + return String(result || '') + } + + _showResetBtnNotification(show = true) { + setTimeout(() => { + const resetBtnAttr = this.container.querySelector('.template-customizer-reset-btn .badge') + if (show) { + resetBtnAttr.classList.remove('d-none') + } else { + resetBtnAttr.classList.add('d-none') + } + }, 200) + } + + // Set settings in LocalStorage with layout & key + _setSetting(key, val) { + const layoutName = this._getLayoutName() + try { + localStorage.setItem(`templateCustomizer-${layoutName}--${key}`, String(val)) + this._showResetBtnNotification() + } catch (e) { + // Catch Error + } + } + + // Get layout name to set unique + _getLayoutName() { + return document.getElementsByTagName('HTML')[0].getAttribute('data-template') + } + + _removeListeners() { + for (let i = 0, l = this._listeners.length; i < l; i++) { + this._listeners[i][0].removeEventListener(this._listeners[i][1], this._listeners[i][2]) + } + } + + _cleanup() { + this._removeListeners() + this._listeners = [] + this._controls = {} + + if (this._updateInterval) { + clearInterval(this._updateInterval) + this._updateInterval = null + } + } + + get _ssr() { + return typeof window === 'undefined' + } + + // Check controls availability + _hasControls(controls, oneOf = false) { + return controls.split(' ').reduce((result, control) => { + if (this.settings.controls.indexOf(control) !== -1) { + if (oneOf || result !== false) result = true + } else if (!oneOf || result !== true) result = false + return result + }, null) + } + + // Get the default theme + _getDefaultTheme(themeId) { + let theme + if (typeof themeId === 'string') { + theme = this._getThemeByName(themeId, false) + } else { + theme = this.settings.availableThemes[themeId] + } + + if (!theme) { + throw new Error(`Theme ID "${themeId}" not found!`) + } + + return theme + } + + // Get theme by themeId/themeName + _getThemeByName(themeName, returnDefault = false) { + const themes = this.settings.availableThemes + + for (let i = 0, l = themes.length; i < l; i++) { + if (themes[i].name === themeName) return themes[i] + } + + return returnDefault ? this.settings.defaultTheme : null + } + + _setCookie(name, value, daysToExpire, path = '/', domain = '') { + const cookie = `${encodeURIComponent(name)}=${encodeURIComponent(value)}` + + let expires = '' + if (daysToExpire) { + const expirationDate = new Date() + expirationDate.setTime(expirationDate.getTime() + daysToExpire * 24 * 60 * 60 * 1000) + expires = `; expires=${expirationDate.toUTCString()}` + } + + const pathString = `; path=${path}` + const domainString = domain ? `; domain=${domain}` : '' + + document.cookie = `${cookie}${expires}${pathString}${domainString}` + } + + _getCookie(name) { + const cookies = document.cookie.split('; ') + + for (let i = 0; i < cookies.length; i++) { + const [cookieName, cookieValue] = cookies[i].split('=') + if (decodeURIComponent(cookieName) === name) { + return decodeURIComponent(cookieValue) + } + } + + return null + } + + _checkCookie(name) { + return this._getCookie(name) !== null + } + + _deleteCookie(name) { + document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;' + } +} + +// Styles +TemplateCustomizer.STYLES = [ + { + name: 'light', + title: 'Light' + }, + { + name: 'dark', + title: 'Dark' + }, + { + name: 'system', + title: 'System' + } +] + +// Themes +TemplateCustomizer.THEMES = [ + { + name: 'theme-default', + title: 'Default' + }, + { + name: 'theme-bordered', + title: 'Bordered' + }, + { + name: 'theme-semi-dark', + title: 'Semi Dark' + } +] + +// Layouts +TemplateCustomizer.LAYOUTS = [ + { + name: 'expanded', + title: 'Expanded' + }, + { + name: 'collapsed', + title: 'Collapsed' + } +] + +// Navbar Options +TemplateCustomizer.NAVBAR_OPTIONS = [ + { + name: 'sticky', + title: 'Sticky' + }, + { + name: 'static', + title: 'Static' + }, + { + name: 'hidden', + title: 'Hidden' + } +] + +// Header Types +TemplateCustomizer.HEADER_TYPES = [ + { + name: 'fixed', + title: 'Fixed' + }, + { + name: 'static', + title: 'Static' + } +] + +// Content Types +TemplateCustomizer.CONTENT = [ + { + name: 'compact', + title: 'Compact' + }, + { + name: 'wide', + title: 'Wide' + } +] + +// Directions +TemplateCustomizer.DIRECTIONS = [ + { + name: 'ltr', + title: 'Left to Right (En)' + }, + { + name: 'rtl', + title: 'Right to Left (Ar)' + } +] + +// Theme setting language +TemplateCustomizer.LANGUAGES = { + en: { + panel_header: 'Template Customizer', + panel_sub_header: 'Customize and preview in real time', + theming_header: 'Theming', + style_label: 'Style (Mode)', + theme_label: 'Themes', + layout_header: 'Layout', + layout_label: 'Menu (Navigation)', + layout_header_label: 'Header Types', + content_label: 'Content', + layout_navbar_label: 'Navbar Type', + direction_label: 'Direction' + }, + es: { + panel_header: 'Personalizador de Plantilla', + panel_sub_header: 'Personaliza y previsualiza en tiempo real', + theming_header: 'Tematización', + style_label: 'Estilo (Modo)', + theme_label: 'Temas', + layout_header: 'Diseño', + layout_label: 'Menú (Navegación)', + layout_header_label: 'Tipos de Encabezado', + content_label: 'Contenido', + layout_navbar_label: 'Tipo de Barra de Navegación', + direction_label: 'Dirección' + }, fr: { + panel_header: 'Modèle De Personnalisation', + panel_sub_header: 'Personnalisez et prévisualisez en temps réel', + theming_header: 'Thématisation', + style_label: 'Style (Mode)', + theme_label: 'Thèmes', + layout_header: 'Disposition', + layout_label: 'Menu (Navigation)', + layout_header_label: "Types d'en-tête", + content_label: 'Contenu', + layout_navbar_label: 'Type de barre de navigation', + direction_label: 'Direction' + }, + ar: { + panel_header: 'أداة تخصيص القالب', + panel_sub_header: 'تخصيص ومعاينة في الوقت الحقيقي', + theming_header: 'السمات', + style_label: 'النمط (الوضع)', + theme_label: 'المواضيع', + layout_header: 'تَخطِيط', + layout_label: 'القائمة (الملاحة)', + layout_header_label: 'أنواع الرأس', + content_label: 'محتوى', + layout_navbar_label: 'نوع شريط التنقل', + direction_label: 'اتجاه' + }, + de: { + panel_header: 'Vorlagen-Anpasser', + panel_sub_header: 'Anpassen und Vorschau in Echtzeit', + theming_header: 'Themen', + style_label: 'Stil (Modus)', + theme_label: 'Themen', + layout_header: 'Layout', + layout_label: 'Menü (Navigation)', + layout_header_label: 'Header-Typen', + content_label: 'Inhalt', + layout_navbar_label: 'Art der Navigationsleiste', + direction_label: 'Richtung' + } +} + +window.TemplateCustomizer = TemplateCustomizer diff --git a/src/modules/Resources/assets/vendor/libs/@form-validation/auto-focus.js b/src/modules/Resources/assets/vendor/libs/@form-validation/auto-focus.js new file mode 100644 index 0000000..c2b3bd8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/@form-validation/auto-focus.js @@ -0,0 +1,7 @@ +import { AutoFocus } from '@form-validation/plugin-auto-focus'; + +try { + FormValidation.plugins.AutoFocus = AutoFocus; +} catch (e) {} + +export { AutoFocus }; diff --git a/src/modules/Resources/assets/vendor/libs/@form-validation/bootstrap5.js b/src/modules/Resources/assets/vendor/libs/@form-validation/bootstrap5.js new file mode 100644 index 0000000..d7ad20a --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/@form-validation/bootstrap5.js @@ -0,0 +1,7 @@ +import { Bootstrap5 } from '@form-validation/plugin-bootstrap5'; + +try { + FormValidation.plugins.Bootstrap5 = Bootstrap5; +} catch (e) {} + +export { Bootstrap5 }; diff --git a/src/modules/Resources/assets/vendor/libs/@form-validation/form-validation.scss b/src/modules/Resources/assets/vendor/libs/@form-validation/form-validation.scss new file mode 100644 index 0000000..1ed7751 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/@form-validation/form-validation.scss @@ -0,0 +1,4 @@ +@import '@form-validation/core/lib/styles/index'; +@import '@form-validation/plugin-framework/lib/styles/index'; +@import '@form-validation/plugin-message/lib/styles/index'; +@import '@form-validation/plugin-bootstrap5/lib/styles/index'; diff --git a/src/modules/Resources/assets/vendor/libs/@form-validation/popular.js b/src/modules/Resources/assets/vendor/libs/@form-validation/popular.js new file mode 100644 index 0000000..10c1736 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/@form-validation/popular.js @@ -0,0 +1,7 @@ +import FormValidation from '@form-validation/bundle/popular'; + +try { + window.FormValidation = FormValidation; +} catch (e) {} + +export { FormValidation }; diff --git a/src/modules/Resources/assets/vendor/libs/@form-validation/validationMessages.es.js b/src/modules/Resources/assets/vendor/libs/@form-validation/validationMessages.es.js new file mode 100644 index 0000000..51c83fe --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/@form-validation/validationMessages.es.js @@ -0,0 +1,105 @@ +export const validationMessages = { + default: 'Por favor, introduce un valor válido.', + + // Validación de campo obligatorio + notEmpty: 'Este campo no puede estar vacío.', + + // Validación de direcciones de correo electrónico + emailAddress: 'Por favor, introduce una dirección de correo electrónico válida.', + + // Validación de números + numeric: 'Por favor, introduce un número válido.', + + // Validación de URL + uri: 'Por favor, introduce una URL válida.', + + // Validación de rango de longitud de texto + stringLength: 'Por favor, introduce un valor entre %s y %s caracteres.', + + // Validación de tamaño mínimo + greaterThan: 'Por favor, introduce un valor mayor o igual a %s.', + + // Validación de tamaño máximo + lessThan: 'Por favor, introduce un valor menor o igual a %s.', + + // Validación de rango entre dos valores + between: 'Por favor, introduce un valor entre %s y %s.', + + // Validación de coincidencia de valores + identical: 'Los valores deben coincidir.', + + // Validación de expresiones regulares + regexp: 'El formato del valor no es válido.', + + // Validación de números de tarjeta de crédito + creditCard: 'Por favor, introduce un número de tarjeta de crédito válido.', + + // Validación de direcciones IP + ip: 'Por favor, introduce una dirección IP válida.', + + // Validación de direcciones MAC + mac: 'Por favor, introduce una dirección MAC válida.', + + // Validación de números de teléfono + phone: 'Por favor, introduce un número de teléfono válido.', + + // Validación de códigos postales + zipCode: 'Por favor, introduce un código postal válido.', + + // Validación de datos remotos + remote: 'Por favor, corrige este campo.', + + // Validación de archivo cargado (file upload) + file: { + size: 'Por favor, selecciona un archivo con un tamaño máximo de %s KB.', + type: 'Por favor, selecciona un archivo de tipo válido (%s).' + }, + + // Validación de fecha + date: 'Por favor, introduce una fecha válida en el formato %s.', + + // Validación de valores únicos en una lista + unique: 'Por favor, asegúrate de que este valor sea único.', + + // Validación de campos iguales + equalTo: 'Por favor, introduce el mismo valor que en el campo %s.', + + // Validación de JSON + json: 'Por favor, introduce un JSON válido.', + + // Validación de booleanos + boolean: 'Por favor, introduce un valor booleano válido (true o false).', + + // Validación de IBAN + iban: 'Por favor, introduce un número IBAN válido.', + + // Validación de ISBN + isbn: 'Por favor, introduce un número ISBN válido.', + + // Validación de tarjeta de identidad + id: 'Por favor, introduce un número de identificación válido.', + + // Validación de números enteros + integer: 'Por favor, introduce un número entero válido.', + + // Validación de números decimales + decimal: 'Por favor, introduce un número decimal válido.', + + // Validación de formato de hora + time: 'Por favor, introduce una hora válida en el formato %s.', + + // Validación de rango de archivos cargados + fileCount: 'Por favor, selecciona entre %s y %s archivos.', + + // Validación de valores en una lista + in: 'Por favor, selecciona un valor válido.', + + // Validación de valores fuera de una lista + notIn: 'Por favor, selecciona un valor no restringido.', + + // Validación de valores opcionales + optional: 'Este campo es opcional, pero debe ser válido si está presente.', + + // Validación de UUID + uuid: 'Por favor, introduce un UUID válido.' +}; diff --git a/src/modules/Resources/assets/vendor/libs/_tabler/_tabler.scss b/src/modules/Resources/assets/vendor/libs/_tabler/_tabler.scss new file mode 100644 index 0000000..56eb8b4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/_tabler/_tabler.scss @@ -0,0 +1,414 @@ +@-webkit-keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@keyframes spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} +@-webkit-keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + } + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + opacity: 0; + } +} +@keyframes burst { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + opacity: 1; + } + 90% { + -webkit-transform: scale(1.5); + transform: scale(1.5); + opacity: 0; + } +} +@-webkit-keyframes flashing { + 0% { + opacity: 1; + } + 45% { + opacity: 0; + } + 90% { + opacity: 1; + } +} +@keyframes flashing { + 0% { + opacity: 1; + } + 45% { + opacity: 0; + } + 90% { + opacity: 1; + } +} +@-webkit-keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@keyframes fade-left { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 75% { + -webkit-transform: translateX(-20px); + transform: translateX(-20px); + opacity: 0; + } +} +@-webkit-keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@keyframes fade-right { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + opacity: 1; + } + 75% { + -webkit-transform: translateX(20px); + transform: translateX(20px); + opacity: 0; + } +} +@-webkit-keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@keyframes fade-up { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 75% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + opacity: 0; + } +} +@-webkit-keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@keyframes fade-down { + 0% { + -webkit-transform: translateY(0); + transform: translateY(0); + opacity: 1; + } + 75% { + -webkit-transform: translateY(20px); + transform: translateY(20px); + opacity: 0; + } +} +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 10%, + 20% { + -webkit-transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, -10deg); + } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + 10%, + 20% { + -webkit-transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + transform: scale3d(0.95, 0.95, 0.95) rotate3d(0, 0, 1, -10deg); + } + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + transform: scale3d(1, 1, 1) rotate3d(0, 0, 1, 10deg); + } + 40%, + 60%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} +.ti-spin { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.ti-spin-hover:hover { + -webkit-animation: spin 2s linear infinite; + animation: spin 2s linear infinite; +} + +.ti-tada { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.ti-tada-hover:hover { + -webkit-animation: tada 1.5s ease infinite; + animation: tada 1.5s ease infinite; +} + +.ti-flashing { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.ti-flashing-hover:hover { + -webkit-animation: flashing 1.5s infinite linear; + animation: flashing 1.5s infinite linear; +} + +.ti-burst { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.ti-burst-hover:hover { + -webkit-animation: burst 1.5s infinite linear; + animation: burst 1.5s infinite linear; +} + +.ti-fade-up { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.ti-fade-up-hover:hover { + -webkit-animation: fade-up 1.5s infinite linear; + animation: fade-up 1.5s infinite linear; +} + +.ti-fade-down { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.ti-fade-down-hover:hover { + -webkit-animation: fade-down 1.5s infinite linear; + animation: fade-down 1.5s infinite linear; +} + +.ti-fade-left { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.ti-fade-left-hover:hover { + -webkit-animation: fade-left 1.5s infinite linear; + animation: fade-left 1.5s infinite linear; +} + +.ti-fade-right { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.ti-fade-right-hover:hover { + -webkit-animation: fade-right 1.5s infinite linear; + animation: fade-right 1.5s infinite linear; +} + +.ti-xs { + font-size: 1rem !important; +} + +.ti-sm { + font-size: 1.125rem !important; +} + +.ti-md { + font-size: 1.375rem !important; +} + +.ti-lg { + font-size: 1.5rem !important; +} + +.ti-xl { + font-size: 2.25rem !important; +} + +.ti-10px { + &, + &:before { + font-size: 10px; + } +} +.ti-12px { + &, + &:before { + font-size: 12px; + } +} +.ti-14px { + &, + &:before { + font-size: 14px; + } +} +.ti-16px { + &, + &:before { + font-size: 16px; + } +} +.ti-18px { + &, + &:before { + font-size: 18px; + } +} +.ti-20px { + &, + &:before { + font-size: 20px; + } +} +.ti-22px { + &, + &:before { + font-size: 22px; + } +} +.ti-24px { + &, + &:before { + font-size: 24px; + } +} +.ti-26px { + &, + &:before { + font-size: 26px; + } +} +.ti-28px { + &, + &:before { + font-size: 28px; + } +} +.ti-30px { + &, + &:before { + font-size: 30px; + } +} +.ti-32px { + &, + &:before { + font-size: 32px; + } +} +.ti-36px { + &, + &:before { + font-size: 36px; + } +} +.ti-40px { + &, + &:before { + font-size: 40px; + } +} +.ti-42px { + &, + &:before { + font-size: 42px; + } +} +.ti-48px { + &, + &:before { + font-size: 48px; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/animate-css/animate.scss b/src/modules/Resources/assets/vendor/libs/animate-css/animate.scss new file mode 100644 index 0000000..0c9e900 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/animate-css/animate.scss @@ -0,0 +1 @@ +@import 'animate.css/animate'; diff --git a/src/modules/Resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.js b/src/modules/Resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.js new file mode 100644 index 0000000..4e603b7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.js @@ -0,0 +1,7 @@ +import AOS from 'aos/dist/aos'; + +try { + window.AOS = AOS; +} catch (e) {} + +export { AOS }; diff --git a/src/modules/Resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.scss b/src/modules/Resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.scss new file mode 100644 index 0000000..70f7899 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/animate-on-scroll/animate-on-scroll.scss @@ -0,0 +1 @@ +@import 'aos/dist/aos'; diff --git a/src/modules/Resources/assets/vendor/libs/apex-charts/apex-charts.scss b/src/modules/Resources/assets/vendor/libs/apex-charts/apex-charts.scss new file mode 100644 index 0000000..61762ec --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/apex-charts/apex-charts.scss @@ -0,0 +1,171 @@ +/** +* Apex Charts +*/ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'apexcharts-clevision/dist/apexcharts'; + +// Light style +@if $enable-light-style { + .light-style { + .apexcharts-canvas { + .apexcharts-tooltip { + background: light.$card-bg; + border-color: light.$border-color; + box-shadow: light.$box-shadow; + .apexcharts-tooltip-title { + background: light.$card-bg; + border-color: light.$border-color; + font-family: light.$font-family-base !important; + } + &.apexcharts-theme-light { + color: light.$headings-color; + } + &.apexcharts-theme-dark { + color: light.$white; + } + .apexcharts-tooltip-title { + font-weight: light.$headings-font-weight; + } + } + .apexcharts-xaxistooltip, + .apexcharts-yaxistooltip { + background: light.$body-bg; + border-color: light.$border-color; + color: light.$headings-color; + &.apexcharts-xaxistooltip-bottom, + &.apexcharts-yaxistooltip-bottom { + &:after { + border-bottom-color: light.$body-bg; + } + &:before { + border-bottom-color: light.$border-color; + } + } + &.apexcharts-xaxistooltip-left, + &.apexcharts-yaxistooltip-left { + &:after { + border-left-color: light.$body-bg; + } + &:before { + border-left-color: light.$border-color; + } + } + &.apexcharts-xaxistooltip-right, + &.apexcharts-yaxistooltip-right { + &:after { + border-right-color: light.$body-bg; + } + &:before { + border-right-color: light.$border-color; + } + } + &.apexcharts-xaxistooltip-top, + &.apexcharts-yaxistooltip-top { + &:after { + border-top-color: light.$body-bg; + } + &:before { + border-top-color: light.$border-color; + } + } + } + .apexcharts-tooltip-text { + font-family: light.$font-family-base !important; + filter: none; + } + } + } +} +// Dark Style +@if $enable-dark-style { + .dark-style { + #radarChart { + .apexcharts-canvas { + .apexcharts-grid line { + opacity: 0; + } + } + } + .apexcharts-canvas { + .apexcharts-tooltip { + background: dark.$body-bg; + border-color: dark.$border-color; + box-shadow: dark.$box-shadow; + .apexcharts-tooltip-title { + background: dark.$body-bg; + border-color: dark.$border-color; + font-family: dark.$font-family-base !important; + } + &.apexcharts-theme-light { + color: dark.$headings-color; + } + &.apexcharts-theme-dark { + color: dark.$white; + } + .apexcharts-tooltip-title { + font-weight: dark.$headings-font-weight; + } + } + .apexcharts-xaxistooltip, + .apexcharts-yaxistooltip { + background: dark.$body-bg; + color: dark.$headings-color; + border-color: dark.$border-color; + &.apexcharts-xaxistooltip-bottom, + &.apexcharts-yaxistooltip-bottom { + &:after { + border-bottom-color: dark.$body-bg; + } + &:before { + border-bottom-color: dark.$border-color; + } + } + &.apexcharts-xaxistooltip-left, + &.apexcharts-yaxistooltip-left { + &:after { + border-left-color: dark.$body-bg; + } + &:before { + border-left-color: dark.$border-color; + } + } + &.apexcharts-xaxistooltip-right, + &.apexcharts-yaxistooltip-right { + &:after { + border-right-color: dark.$body-bg; + } + &:before { + border-right-color: dark.$border-color; + } + } + &.apexcharts-xaxistooltip-top, + &.apexcharts-yaxistooltip-top { + &:after { + border-top-color: dark.$body-bg; + } + &:before { + border-top-color: dark.$border-color; + } + } + } + } + } +} + +// RTL +@include app-rtl(false) { + .apexcharts-canvas { + .apexcharts-yaxis { + text { + text-anchor: start; + } + } + .apexcharts-legend-marker, + .apexcharts-tooltip-marker { + margin-right: 0; + margin-left: 0.5rem; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/apex-charts/apexcharts.js b/src/modules/Resources/assets/vendor/libs/apex-charts/apexcharts.js new file mode 100644 index 0000000..ac2500a --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/apex-charts/apexcharts.js @@ -0,0 +1,7 @@ +import ApexCharts from 'apexcharts-clevision'; + +try { + window.ApexCharts = ApexCharts; +} catch (e) {} + +export { ApexCharts }; diff --git a/src/modules/Resources/assets/vendor/libs/autosize/autosize.js b/src/modules/Resources/assets/vendor/libs/autosize/autosize.js new file mode 100644 index 0000000..7e739e4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/autosize/autosize.js @@ -0,0 +1,7 @@ +import autosize from 'autosize'; + +try { + window.autosize = autosize; +} catch (e) {} + +export { autosize }; diff --git a/src/modules/Resources/assets/vendor/libs/block-ui/block-ui.js b/src/modules/Resources/assets/vendor/libs/block-ui/block-ui.js new file mode 100644 index 0000000..61e0068 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/block-ui/block-ui.js @@ -0,0 +1 @@ +import 'block-ui/jquery.blockUI'; diff --git a/src/modules/Resources/assets/vendor/libs/bloodhound/bloodhound.js b/src/modules/Resources/assets/vendor/libs/bloodhound/bloodhound.js new file mode 100644 index 0000000..6909e20 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bloodhound/bloodhound.js @@ -0,0 +1,7 @@ +import Bloodhound from 'typeahead.js/dist/bloodhound'; + +try { + window.Bloodhound = Bloodhound; +} catch (e) {} + +export { Bloodhound }; diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/_mixins.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/_mixins.scss new file mode 100644 index 0000000..ef93725 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/_mixins.scss @@ -0,0 +1,93 @@ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin bs-datepicker-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + $range-bg: rgba-to-hex(rgba($background, 0.16), $card-bg); + $range-color: $background; + + .datepicker { + table { + tr td { + &.active, + &.active.highlighted, + .focused, + span.active, + span.active.disabled, + &.range-start, + &.range-end { + background: $background !important; + color: $color !important; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + + &.range, + &.range.highlighted, + &.range.today { + color: $range-color !important; + background: $range-bg !important; + + &.focused { + background: rgba-to-hex(rgba($background, 0.24), $card-bg) !important; + } + + &.disabled { + background: transparentize($range-bg, 0.5) !important; + color: transparentize($range-color, 0.5) !important; + } + } + + &.today:not(.active), + &.today:not(.active):hover { + color: $background; + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg); + } + } + } + } +} + +@mixin bs-datepicker-dark-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + $range-bg: rgba-to-hex(rgba($background, 0.24), $card-bg); + $range-color: $background; + + .datepicker { + table { + tr td { + &.active, + &.active.highlighted, + .focused, + span.active, + span.active.disabled, + &.range-start, + &.range-end { + color: $color !important; + background: $background !important; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + + &.range, + &.range.highlighted, + &.range.today { + color: $range-color !important; + background: $range-bg !important; + + &.disabled { + color: transparentize($range-color, 0.5) !important; + background: transparentize($range-bg, 0.5) !important; + } + + &.focused { + background: rgba-to-hex(rgba($background, 0.24), $card-bg) !important; + } + } + + &.today:not(.active), + &.today:not(.active):hover { + color: $background; + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg); + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/bootstrap-datepicker.js b/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/bootstrap-datepicker.js new file mode 100644 index 0000000..bcb020b --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/bootstrap-datepicker.js @@ -0,0 +1 @@ +import 'bootstrap-datepicker/dist/js/bootstrap-datepicker'; diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/bootstrap-datepicker.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/bootstrap-datepicker.scss new file mode 100644 index 0000000..933dc74 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-datepicker/bootstrap-datepicker.scss @@ -0,0 +1,482 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +$datepicker-arrow-size: 0.45rem !default; +$datepicker-item-width: 2.25rem !default; +$datepicker-item-height: 2.25rem !default; +$white: #fff; + +.datepicker { + direction: ltr; + + &.dropdown-menu { + padding: 0; + margin: 0; + } + .datepicker-days { + margin: 0.875rem 0.875rem 0.875rem; + } + + // Basic styles for next and prev arrows + .next, + .prev { + color: transparent !important; + position: absolute; + top: 0.65rem; + height: 1.875rem; + width: 1.875rem; + border-radius: light.$border-radius-pill; + display: table-caption; + } + + // LRT & RTL only styles for arrows + table thead tr th { + &.next { + @include app-ltr { + float: right; + right: 0.125rem; + } + @include app-rtl { + float: left; + left: 0.125rem; + } + } + &.prev { + @include app-ltr { + right: 2.75rem; + } + @include app-rtl { + left: 2.75rem; + } + } + } + &.datepicker-inline { + table { + thead tr th { + &.next { + inset-inline-end: 0.5rem !important; + } + } + } + .datepicker-days { + .datepicker-switch { + top: 0; + } + } + } + + // next & prev arrow after style + .next::after, + .prev::after { + content: ''; + display: block; + position: absolute; + left: 46%; + top: 46%; + height: $datepicker-arrow-size; + width: $datepicker-arrow-size; + border-radius: 0; + border-style: solid; + transform: rotate(-45deg); + transform-origin: left; + } + + .next::after { + margin-left: -$datepicker-arrow-size * 0.35; + border-width: 0 1.9px 1.9px 0; + + @include app-rtl { + transform: rotate(-45deg); + border-width: 1.9px 0 0 1.9px; + margin-left: 0; + } + } + + .prev::after { + border-width: 1.9px 0 0 1.9px; + + @include app-rtl { + transform: rotate(-45deg); + border-width: 0 1.9px 1.9px 0; + margin-left: -$datepicker-arrow-size * 0.5; + } + } + + // arrow alignments excluding datepicker-days + .datepicker-months, + .datepicker-years, + .datepicker-decades, + .datepicker-centuries { + .next { + @include app-ltr { + right: 1rem; + } + @include app-rtl { + left: 1rem; + } + } + .prev { + @include app-ltr { + right: 3.4rem; + } + @include app-rtl { + left: 3.4rem; + } + } + } + + // switch default styles + .datepicker-switch { + vertical-align: middle; + position: relative; + @include app-ltr { + text-align: left; + } + @include app-rtl { + text-align: right; + } + } + + // switch alignments datepicker-days + .datepicker-days { + .datepicker-switch { + top: -4px; + @include app-ltr { + left: -1.68rem; + } + @include app-rtl { + right: -1.68rem; + } + } + } + + // switch alignments excluding datepicker-days + .datepicker-months, + .datepicker-years, + .datepicker-decades, + .datepicker-centuries { + .datepicker-switch { + @include app-ltr { + left: 1rem; + } + @include app-rtl { + right: 1rem; + } + } + } + + table thead tr:nth-child(2) { + height: 60px !important; + width: 80px; + position: relative; + } + + &.datepicker-rtl { + direction: rtl; + + table tr td span { + float: right; + } + } + + @include app-rtl { + direction: rtl; + } +} + +.datepicker table { + user-select: none; + margin: 0; + overflow: hidden; + border-radius: light.$dropdown-border-radius; + tbody { + //! FIX: padding or margin top will not work in table + &:before { + content: '@'; + display: block; + line-height: 6px; + text-indent: -99999px; + } + } +} + +.datepicker table tr td, +.datepicker table tr th { + font-weight: 400; + text-align: center; + border: none; + + &.dow { + font-size: light.$font-size-sm; + } +} + +.datepicker table tr td { + border-radius: light.$border-radius-pill; + width: $datepicker-item-width; + height: $datepicker-item-height; + &.day:hover, + &.focused { + cursor: pointer; + } + + &.disabled, + &.disabled:hover { + cursor: default; + background: none; + } + + &.range { + border-radius: 0 !important; + &.today { + box-shadow: none !important; + } + } + + // span.month, + // span.year { + // margin: 0 0.5rem; + // } + + &.range-start:not(.range-end) { + @include app-ltr { + border-bottom-right-radius: 0 !important; + border-top-right-radius: 0 !important; + } + + @include app-rtl { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; + } + } + + &.range-end:not(.range-start) { + @include app-ltr { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; + } + + @include app-rtl { + border-bottom-right-radius: 0 !important; + border-top-right-radius: 0 !important; + } + } + + &.selected, + &.selected:hover, + &.selected.highlighted { + color: $white; + } +} + +// Styles for datepicker months, years, decades etc +.datepicker table tr td span { + display: block; + float: left; + width: 3.625rem; + height: 2rem; + line-height: 2rem; + cursor: pointer; + + &.disabled, + &.disabled:hover { + background: none; + cursor: default; + } + + @include app-rtl { + float: right; + } +} +.datepicker .datepicker-switch, +.datepicker .prev, +.datepicker .next, +.datepicker tfoot tr th { + cursor: pointer; +} + +.datepicker-months table, +.datepicker-years table, +.datepicker-decades table, +.datepicker-centuries table { + width: (3.375rem * 3) + 2.625rem; + + td { + padding: 0 0 0.5rem 0.8125rem; + + @include app-rtl { + padding: 0 0.8125rem 0.5rem 0; + } + } +} + +.datepicker-dropdown { + left: 0; + top: 0; + padding: 0; +} + +.input-daterange input { + text-align: center; +} + +// Light style +@if $enable-light-style { + .light-style { + .datepicker-dropdown { + z-index: light.$zindex-popover !important; + box-shadow: light.$card-box-shadow; + } + + .datepicker { + th { + &.prev, + &.next { + background-color: light.rgba-to-hex(rgba(light.$black, 0.08), light.$card-bg); + &::after { + border-color: light.$body-color; + } + } + } + &.datepicker-inline { + table { + box-shadow: light.$box-shadow; + } + } + + table { + thead { + background-color: light.$card-bg; + tr, + td { + color: light.$headings-color; + } + } + tr td, + tr th { + &.new { + color: light.$text-muted; + } + } + + tr td { + &.old, + &.disabled { + color: light.$text-muted; + } + + &.cw { + background-color: light.$card-bg; + color: light.$body-color; + } + + &.day:hover, + &.focused { + background: light.rgba-to-hex(light.$gray-50, light.$card-bg); + } + } + } + } + + .datepicker table tr td span { + border-radius: light.$border-radius; + + &:hover, + &.focused { + background: light.rgba-to-hex(light.$gray-50, light.$card-bg); + } + + &.disabled, + &.disabled:hover { + color: light.$text-muted; + } + + &.old, + &.new { + color: light.$text-muted; + } + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + .datepicker-dropdown { + z-index: dark.$zindex-popover !important; + box-shadow: dark.$card-box-shadow; + } + + .datepicker { + th { + &.prev, + &.next { + background-color: dark.rgba-to-hex(rgba(dark.$base, 0.08), dark.$card-bg); + &::after { + border-color: dark.$body-color; + } + } + } + &.datepicker-inline { + table { + box-shadow: dark.$card-box-shadow; + } + } + + table { + thead { + background-color: dark.$card-bg; + tr, + td { + color: dark.$headings-color; + } + } + tr td, + tr th { + &.new { + color: dark.$text-muted; + } + } + + tr td { + color: dark.$body-color; + + &.old, + &.disabled { + color: dark.$text-muted; + } + + &.cw { + background-color: dark.$card-bg; + color: dark.$body-color; + } + + &.day:hover, + &.focused { + background: dark.rgba-to-hex(dark.$gray-50, dark.$card-bg); + } + } + } + } + + .datepicker table tr td span { + border-radius: dark.$border-radius; + + &:hover, + &.focused { + background: dark.rgba-to-hex(dark.$gray-50, dark.$card-bg); + } + + &.disabled, + &.disabled:hover { + color: dark.$text-muted; + } + + &.old, + &.new { + color: dark.$text-muted; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/_mixins.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/_mixins.scss new file mode 100644 index 0000000..45f5302 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/_mixins.scss @@ -0,0 +1,81 @@ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin bs-daterangepicker-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + $highlighted-bg: rgba-to-hex(rgba($background, 0.16), $card-bg); + $highlighted-color: $background; + + .daterangepicker td.active:not(.off) { + background: $background !important; + color: $white; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + + .daterangepicker { + .start-date:not(.end-date):not(.off), + .end-date:not(.start-date):not(.off) { + background-color: $background; + color: $white; + border: 0 !important; + + &:hover { + background-color: $background !important; + } + } + } + + .daterangepicker .input-mini.active { + border-color: $background !important; + } + + .daterangepicker td.in-range:not(.start-date):not(.end-date):not(.off) { + color: $highlighted-color !important; + background-color: $highlighted-bg !important; + } + + .ranges li.active { + color: $highlighted-color !important; + background-color: $highlighted-bg !important; + } +} + +@mixin bs-daterangepicker-dark-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + $highlighted-bg: rgba-to-hex(rgba($background, 0.16), $card-bg); + $highlighted-color: $background; + + .daterangepicker td.active:not(.off) { + background: $background !important; + color: $white; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + + .daterangepicker { + .start-date:not(.end-date):not(.off), + .end-date:not(.start-date):not(.off) { + background-color: $background; + color: $white; + border: 0 !important; + + &:hover { + background-color: $background !important; + } + } + } + + .daterangepicker .input-mini.active { + border-color: $background !important; + } + + .daterangepicker td.in-range:not(.start-date):not(.end-date):not(.off) { + color: $highlighted-color !important; + background-color: $highlighted-bg !important; + } + + .ranges li.active { + color: $highlighted-color !important; + background-color: $highlighted-bg !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.js b/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.js new file mode 100644 index 0000000..3950a71 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.js @@ -0,0 +1,18 @@ +import 'bootstrap-daterangepicker/daterangepicker'; + +// Patch detect when weeks are shown + +const fnDaterangepicker = $.fn.daterangepicker; + +$.fn.daterangepicker = function (options, callback) { + fnDaterangepicker.call(this, options, callback); + + if (options && (options.showWeekNumbers || options.showISOWeekNumbers)) { + this.each(function () { + const instance = $(this).data('daterangepicker'); + if (instance && instance.container) instance.container.addClass('with-week-numbers'); + }); + } + + return this; +}; diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.scss new file mode 100644 index 0000000..5eca304 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-daterangepicker/bootstrap-daterangepicker.scss @@ -0,0 +1,744 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +$daterangepicker-arrow-size: 0.45rem !default; +$daterangepicker-select-width: 3.125rem !default; +$daterangepicker-cell-size: 2.25rem !default; +$daterangepicker-padding: 0.8rem !default; + +// Calculate widths +$daterangepicker-width: ($daterangepicker-cell-size * 7)+ ($daterangepicker-padding * 2); +$daterangepicker-width-with-weeks: $daterangepicker-width + $daterangepicker-cell-size; + +.daterangepicker { + position: absolute; + max-width: none; + padding: 0.875rem 0 0.5rem; + display: none; + + tbody { + //! FIX: padding or margin top will not work in table + &:before { + content: '@'; + display: block; + line-height: 6px; + text-indent: -99999px; + } + } + + @include app-rtl { + direction: rtl !important; + } + + // datepicker header styles + table thead tr:first-child { + height: 52px !important; + position: relative; + } + .calendar-table td { + border-radius: 50rem; + } + + // month and year select styles + table thead { + th, + td { + select { + background-color: transparent; + font-weight: light.$font-weight-medium; + } + } + } +} + +// prev arrow styles excluding single daterangepicker +.daterangepicker { + .drp-calendar:not(.single).left { + .prev { + @include app-ltr { + left: 0.25rem; + } + @include app-rtl { + right: 0.25rem; + } + } + } + + // next arrow styles excluding single daterangepicker + .drp-calendar:not(.single).right { + .next { + @include app-ltr { + right: 0.25rem; + } + @include app-rtl { + left: 0.25rem; + } + } + } +} + +.daterangepicker.auto-apply .drp-buttons { + display: none; +} + +.daterangepicker.show-calendar .drp-calendar, +.daterangepicker.show-calendar .drp-buttons { + display: block; +} + +.daterangepicker .drp-calendar { + display: none; + padding: 0 $daterangepicker-padding $daterangepicker-padding; + + &.single .calendar-table { + border: 0; + } +} + +.daterangepicker.single { + .drp-selected { + display: none; + } + .daterangepicker .ranges, + .drp-calendar { + float: none; + } +} + +.daterangepicker .calendar-table { + border: 0; + + // prev & next arrow default styles + .next, + .prev { + position: absolute; + top: 0.65rem; + min-width: unset; + height: 1.875rem; + width: 1.875rem; + border-radius: 50rem; + display: flex; + justify-content: center; + align-items: center; + } + + .next span, + .prev span { + display: inline-block; + border-width: 0 1.9px 1.9px 0; + border-style: solid; + border-radius: 0; + height: $daterangepicker-arrow-size; + width: $daterangepicker-arrow-size; + } + + .prev span { + margin-right: -$daterangepicker-arrow-size * 0.5; + transform: rotate(135deg); + + @include app-rtl { + margin-left: -$daterangepicker-arrow-size * 0.5; + margin-right: 0; + transform: rotate(-45deg); + } + } + + .next span { + margin-left: -$daterangepicker-arrow-size * 0.5; + transform: rotate(-45deg); + + @include app-rtl { + margin-left: 0; + margin-right: -$daterangepicker-arrow-size * 0.5; + transform: rotate(135deg); + } + } + + table { + border: 0; + border-spacing: 0; + border-collapse: collapse; + margin: 0; + width: 100%; + } + + th, + td { + vertical-align: middle; + min-width: $daterangepicker-cell-size; + line-height: calc(#{$daterangepicker-cell-size} - 2px); + white-space: nowrap; + text-align: center; + cursor: pointer; + } + td { + height: $daterangepicker-cell-size; + width: $daterangepicker-cell-size; + } + th { + width: $daterangepicker-cell-size; + height: $daterangepicker-cell-size + 0.5rem; + } + tr:first-child th:not(.prev):not(.next) { + height: $daterangepicker-cell-size; + } + // daterangepicker single + .daterangepicker .single { + // arrow alignments + .next { + float: right; + @include app-ltr { + right: 0.625rem; + } + @include app-rtl { + left: 0.625rem; + } + } + .prev { + @include app-ltr { + right: 3.125rem; + } + @include app-rtl { + left: 3.125rem; + } + } + // month alignments + th.month { + position: absolute; + top: 0.5rem; + @include app-ltr { + text-align: left; + left: 0.562rem; + } + @include app-rtl { + text-align: right; + right: 0.562rem; + } + } + } +} + +.daterangepicker td { + @include app-ltr { + &.start-date:not(.end-date) { + border-bottom-right-radius: 0 !important; + border-top-right-radius: 0 !important; + } + + &.end-date:not(.start-date) { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; + } + } + + &.in-range:not(.start-date):not(.end-date) { + border-radius: 0 !important; + } + + @include app-rtl { + &.start-date:not(.end-date) { + border-bottom-left-radius: 0 !important; + border-top-left-radius: 0 !important; + } + + &.end-date:not(.start-date) { + border-bottom-right-radius: 0 !important; + border-top-right-radius: 0 !important; + } + } +} + +.daterangepicker td.disabled, +.daterangepicker option.disabled { + cursor: not-allowed; + text-decoration: line-through; +} + +.daterangepicker th.month { + width: auto; +} +.daterangepicker select { + &.monthselect, + &.yearselect { + height: auto; + padding: 1px; + margin: 0; + border: 0; + cursor: default; + } + &:focus-visible { + outline: 0; + } + + &.monthselect { + width: 46%; + margin-right: 2%; + + @include app-rtl { + margin-left: 2%; + margin-right: 0; + } + } + + &.yearselect { + width: 40%; + } + + &.hourselect, + &.minuteselect, + &.secondselect, + &.ampmselect { + outline: 0; + width: $daterangepicker-select-width; + padding: 2px; + margin: 0 auto; + border-radius: light.$border-radius-sm; + } +} + +.daterangepicker .calendar-time { + position: relative; + line-height: 30px; + text-align: center; + margin: 0 auto; + + select.disabled { + cursor: not-allowed; + } +} + +.daterangepicker .drp-buttons { + padding: $daterangepicker-padding $daterangepicker-padding * 1.5; + clear: both; + display: none; + text-align: right; + vertical-align: middle; + + .btn { + margin-left: $daterangepicker-padding * 1.2; + } + + @include app-rtl { + text-align: left; + + .btn { + margin-left: 0; + margin-right: $daterangepicker-padding * 1.2; + } + } +} + +.daterangepicker .drp-selected { + width: 100%; + padding-bottom: $daterangepicker-padding; + display: block; +} + +.daterangepicker .ranges { + text-align: left; + float: none; + margin: 0; + + // Daterangepicker Ranges spacing + ul { + padding: 0.5rem; + margin: 0 auto; + list-style: none; + width: 100%; + } + li { + border-radius: light.$border-radius; + padding: light.$dropdown-item-padding-y light.$dropdown-item-padding-x; + &:not(:first-child) { + margin-top: 0.125rem; + } + } + + @include app-rtl { + text-align: right; + } +} + +.daterangepicker.show-calendar .ranges { + border-bottom: 1px solid; + + &:empty { + display: none; + } +} + +.daterangepicker .drp-calendar.right { + @include app-ltr { + padding-left: 1px; + } + @include app-rtl { + padding-right: 1px; + } +} + +// Light style +@if $enable-light-style { + .light-style { + .daterangepicker { + z-index: light.$zindex-popover !important; + border: light.$dropdown-border-width solid light.$dropdown-border-color; + border-radius: light.$border-radius; + width: calc(#{$daterangepicker-width} + calc(#{light.$dropdown-border-width} * 2)); + box-shadow: light.$card-box-shadow; + background-color: light.$dropdown-bg; + + table thead { + background: light.$dropdown-bg; + th, + td { + color: light.$headings-color; + + &.prev, + &.next { + span { + border-color: light.$body-color !important; + } + } + + select { + background-color: transparent; + color: light.$headings-color; + } + } + } + &.drop-up { + margin-top: -(light.$dropdown-spacer); + } + + &.with-week-numbers { + width: calc(#{$daterangepicker-width-with-weeks} + calc(#{light.$dropdown-border-width} * 2)); + } + } + .daterangepicker .calendar-table td { + border-radius: light.$border-radius-pill; + } + + .daterangepicker .drp-selected { + font-size: light.$font-size-sm; + } + + .daterangepicker .calendar-table thead tr:last-child th { + border-radius: 0 !important; + color: light.$headings-color; + font-size: light.$font-size-sm; + font-weight: light.$font-weight-normal; + } + + .daterangepicker th.month { + color: light.$headings-color; + font-weight: light.$font-weight-normal; + } + + .daterangepicker td.week, + .daterangepicker th.week { + color: light.$headings-color; + font-weight: light.$font-weight-normal; + } + + .daterangepicker td.disabled, + .daterangepicker option.disabled { + color: light.$text-muted; + } + + .daterangepicker td.available:not(.active):hover, + .daterangepicker th.available:hover { + background-color: light.$gray-50; + } + + .daterangepicker td.off { + color: light.$text-muted; + } + + .daterangepicker .ranges li { + cursor: pointer; + padding: light.$dropdown-item-padding-y light.$dropdown-item-padding-x; + + &:hover { + background-color: light.$dropdown-link-hover-bg; + } + } + + .daterangepicker .calendar-table .next, + .daterangepicker .calendar-table .prev { + background-color: light.$gray-50; + span { + border-color: light.$body-color; + } + } + + .daterangepicker select { + &.hourselect, + &.minuteselect, + &.secondselect, + &.ampmselect { + background: light.rgba-to-hex(light.$gray-100, light.$rgba-to-hex-bg); + font-size: light.$font-size-sm; + color: light.$body-color; + border: 1px solid transparent; + option { + background: light.$card-bg; + } + } + + // ! FIX: OS Windows and Linux Browsers DD Option color + &.monthselect, + &.yearselect { + option { + color: light.$body-color; + background: light.$input-bg; + &:disabled { + color: light.$text-muted; + } + } + } + } + + .daterangepicker .calendar-time select.disabled { + color: light.$text-light; + } + + @include light.media-breakpoint-up(md) { + .daterangepicker { + width: auto !important; + + &:not(.single) .drp-selected { + width: auto; + padding: 0; + display: inline-block; + } + } + + @include app-ltr-style { + .daterangepicker:not(.single) .drp-calendar { + float: left; + + &.left { + padding-right: 1rem; + } + } + } + + @include app-rtl-style { + .daterangepicker:not(.single) .drp-calendar { + float: right; + &.left { + padding-left: 1rem; + } + } + } + } + + @include light.media-breakpoint-up(lg) { + .daterangepicker .ranges { + border-bottom: 0; + } + + @include app-ltr-style { + .daterangepicker { + .ranges { + float: left; + } + } + } + + @include app-rtl-style { + .daterangepicker { + .ranges { + float: right; + } + } + } + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + .daterangepicker { + box-shadow: dark.$card-box-shadow; + width: calc(#{$daterangepicker-width} + calc(#{dark.$dropdown-border-width} * 2)); + margin-top: dark.$dropdown-spacer; + background-color: dark.$dropdown-bg; + border: dark.$dropdown-border-width solid dark.$dropdown-border-color; + border-radius: dark.$border-radius; + z-index: dark.$zindex-popover !important; + + table thead { + background: dark.$dropdown-bg; + th, + td { + color: dark.$headings-color; + + &.prev, + &.next { + span { + border-color: dark.$headings-color !important; + } + } + + select { + background-color: transparent; + color: dark.$headings-color; + } + } + } + + &.with-week-numbers { + width: calc(#{$daterangepicker-width-with-weeks} + calc(#{dark.$dropdown-border-width} * 2)); + } + + &.drop-up { + margin-top: -(dark.$dropdown-spacer); + } + } + + .daterangepicker .calendar-table td { + border-radius: dark.$border-radius-pill; + } + + .daterangepicker .drp-selected { + font-size: dark.$font-size-sm; + } + + .daterangepicker .calendar-table thead tr:last-child th { + border-radius: 0 !important; + color: dark.$headings-color; + font-size: dark.$font-size-sm; + font-weight: dark.$font-weight-normal; + } + + .daterangepicker th.month { + color: dark.$headings-color; + font-weight: dark.$font-weight-normal; + } + + .daterangepicker td.week, + .daterangepicker th.week { + color: dark.$headings-color; + font-weight: dark.$font-weight-normal; + } + + .daterangepicker td.disabled, + .daterangepicker option.disabled { + color: dark.$text-muted; + } + + .daterangepicker td.available:not(.active):hover, + .daterangepicker th.available:hover { + background-color: dark.$gray-50; + } + + .daterangepicker td.off { + color: dark.$text-muted; + } + + .daterangepicker .ranges li { + cursor: pointer; + padding: dark.$dropdown-item-padding-y dark.$dropdown-item-padding-x; + + &:hover { + background-color: dark.$dropdown-link-hover-bg; + } + } + + .daterangepicker .calendar-table .next, + .daterangepicker .calendar-table .prev { + background-color: dark.$gray-50; + span { + border-color: dark.$body-color; + } + } + + .daterangepicker select { + &.hourselect, + &.minuteselect, + &.secondselect, + &.ampmselect { + background: dark.rgba-to-hex(dark.$gray-100, dark.$rgba-to-hex-bg); + border: 1px solid transparent; + font-size: dark.$font-size-sm; + color: dark.$body-color; + option { + background: dark.$card-bg; + } + } + + // ! FIX: OS Windows and Linux Browsers DD Option color + &.monthselect, + &.yearselect { + option { + color: dark.$body-color; + background: dark.$card-bg; + &:disabled { + color: dark.$text-muted; + } + } + } + } + + .daterangepicker .calendar-time select.disabled { + color: dark.$text-light; + } + + @include dark.media-breakpoint-up(md) { + .daterangepicker { + width: auto !important; + + &:not(.single) .drp-selected { + display: inline-block; + width: auto; + padding: 0; + } + } + + @include app-ltr-style { + .daterangepicker:not(.single) .drp-calendar { + float: left; + + &.left { + padding-right: 1rem; + } + } + } + + @include app-rtl-style { + .daterangepicker:not(.single) .drp-calendar { + float: right; + + &.left { + padding-left: 1rem; + } + } + } + } + + @include dark.media-breakpoint-up(lg) { + .daterangepicker .ranges { + border-bottom: 0; + } + + @include app-ltr-style { + .daterangepicker { + .ranges { + float: left; + } + } + } + + @include app-rtl-style { + .daterangepicker { + .ranges { + float: right; + } + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-maxlength/bootstrap-maxlength.js b/src/modules/Resources/assets/vendor/libs/bootstrap-maxlength/bootstrap-maxlength.js new file mode 100644 index 0000000..8f17377 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-maxlength/bootstrap-maxlength.js @@ -0,0 +1 @@ +import 'bootstrap-maxlength/src/bootstrap-maxlength'; diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-maxlength/bootstrap-maxlength.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-maxlength/bootstrap-maxlength.scss new file mode 100644 index 0000000..b71acb6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-maxlength/bootstrap-maxlength.scss @@ -0,0 +1,46 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +.bootstrap-maxlength { + line-height: 1; + text-align: center; + vertical-align: baseline; +} + +// light layout +@if $enable-light-style { + .light-style { + .bootstrap-maxlength { + background: light.$gray-200; + font-size: light.$badge-font-size; + font-weight: light.$badge-font-weight; + padding: light.$badge-padding-y light.$badge-padding-x; + + @include light.border-bottom-radius(light.$badge-border-radius); + + &.label-danger { + color: light.color-contrast(map-get(light.$theme-colors, danger)); + background: map-get(light.$theme-colors, danger); + } + } + } +} + +// dark layout +@if $enable-dark-style { + .dark-style { + .bootstrap-maxlength { + background: dark.$body-bg; + padding: dark.$badge-padding-y dark.$badge-padding-x; + font-size: dark.$badge-font-size; + font-weight: dark.$badge-font-weight; + + @include light.border-bottom-radius(dark.$badge-border-radius); + + &.label-danger { + color: dark.color-contrast(map-get(dark.$theme-colors, danger)); + background: map-get(dark.$theme-colors, danger); + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-select/_mixins.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-select/_mixins.scss new file mode 100644 index 0000000..ef88b3f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-select/_mixins.scss @@ -0,0 +1,16 @@ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin bs-select-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .bootstrap-select { + .dropdown-menu.inner a[aria-selected='true'] { + background: $background !important; + color: $color !important; + } + // Fix: To add focus border, .bootstrap-select adding border but not able to update as we can not have the focus on div + .dropdown-toggle.show { + border-color: $background; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.js b/src/modules/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.js new file mode 100644 index 0000000..a9eb0f5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.js @@ -0,0 +1 @@ +import 'bootstrap-select/js/bootstrap-select'; diff --git a/src/modules/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.scss b/src/modules/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.scss new file mode 100644 index 0000000..6839d76 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.scss @@ -0,0 +1,259 @@ +// Bootstrap Select +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'bootstrap-select/sass/bootstrap-select.scss'; + +// Common Styles +.bootstrap-select *, +.bootstrap-select .dropdown-toggle:focus { + outline: 0 !important; +} +.bootstrap-select { + .bs-searchbox, + .bs-actionsbox, + .bs-donebutton { + padding: 0 0 8px; + } + .dropdown-toggle { + transition: none; + padding: calc(light.$input-padding-y - light.$input-border-width) light.$input-padding-x; + box-shadow: none !important; + &.show, + &:focus { + padding: calc(light.$input-padding-y - light.$input-focus-border-width) + calc(light.$input-padding-x - light.$input-border-width); + } + &:after { + transform: rotate(45deg) translateY(-100%); + position: absolute; + inset-inline-end: 23px; + top: 50%; + margin: 0 !important; + @include app-rtl { + inset-inline-end: 12px; + } + } + &:active { + transform: none !important; + } + &.show { + &:after { + inset-inline-end: calc(23px - light.$input-border-width); + @include app-rtl { + inset-inline-end: calc(12px - light.$input-border-width); + } + } + } + .filter-option-inner-inner { + line-height: light.$input-line-height; + } + } + .btn { + &:disabled, + &.disabled { + color: light.$btn-color !important; + } + } + + // For header dropdown close btn + .dropdown-menu .popover-header { + display: flex; + align-items: center; + button { + border: none; + font-size: light.$h4-font-size; + background: transparent; + padding-bottom: 0.125rem; + } + } + .is-invalid { + ~ .dropdown-toggle { + &:after { + inset-inline-end: calc(23px - light.$input-border-width); + @include app-rtl { + inset-inline-end: calc(12px - light.$input-border-width); + } + } + } + } +} + +.bootstrap-select.dropup { + .dropdown-toggle { + &:after { + transform: rotate(317deg) translateY(-30%); + inset-inline-end: 14px; + @include app-rtl { + inset-inline-end: calc(18px); + } + } + &.show { + &:after { + inset-inline-end: calc(14px - light.$input-border-width); + @include app-rtl { + inset-inline-end: calc(18px - light.$input-border-width); + } + } + } + } + .is-invalid { + ~ .dropdown-toggle { + &:after { + inset-inline-end: calc(14px - light.$input-border-width); + @include app-rtl { + inset-inline-end: calc(18px - light.$input-border-width); + } + } + } + } +} + +// Menu Position +.bootstrap-select.show-tick .dropdown-menu { + li a { + position: relative; + } + // RTL + @include app-rtl { + li a span.text { + margin-left: 2.125rem; + margin-right: 0; + } + } + + .selected span.check-mark { + display: block; + right: 1rem; + top: 50%; + margin: 0; + transform: translateY(-50%); + line-height: 1; + + @include app-rtl { + left: 1rem; + right: auto; + } + } +} + +// To remove ripple effect +.bootstrap-select .dropdown-menu.inner .selected .waves-ripple { + display: none !important; +} + +.bootstrap-select:not(.input-group-btn), +.bootstrap-select[class*='col-'] { + display: block; +} + +html[class] .bootstrap-select.form-select { + background: none !important; + border: 0 !important; + padding: 0 !important; + margin: 0 !important; +} + +// RTL + +@include app-rtl(false) { + .bootstrap-select .dropdown-toggle .filter-option { + float: right; + right: 0; + left: auto; + text-align: right; + padding-left: inherit; + padding-right: 0; + margin-left: -100%; + margin-right: 0; + } + // Fix: Subtext rtl support + .bootstrap-select .filter-option-inner-inner { + float: right; + } + .bootstrap-select .dropdown-menu li small.text-muted, + .bootstrap-select .filter-option small.text-muted { + position: relative; + top: 2px; + padding-left: 0; + padding-right: 0.5em; + float: left; + } + + .bootstrap-select .dropdown-toggle .filter-option-inner { + padding-left: inherit; + padding-right: 0; + } +} + +// Light style +@if $enable-light-style { + .light-style { + .bootstrap-select { + background-color: light.$input-bg; + .dropdown-toggle { + border-radius: light.$border-radius; + border: light.$input-border-width solid light.$input-border-color; + &.show, + &:focus { + border: light.$input-focus-border-width solid light.$primary; + } + &:not(.show):hover { + border-color: light.$input-border-hover-color; + } + } + .dropdown-menu { + &[data-popper-placement='top-start'], + &[data-popper-placement='top-end'] { + box-shadow: 0 -0.2rem 1.25rem rgba(light.rgba-to-hex(light.$gray-500, light.$rgba-to-hex-bg), 0.4); + } + .notify { + background: light.$popover-bg; + border: light.$input-border-width solid light.$popover-border-color; + } + .popover-header button { + color: light.$body-color; + } + } + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + .bootstrap-select { + background-color: dark.$input-bg; + .dropdown-toggle { + color: dark.$input-color; + &:hover { + color: dark.$input-color; + } + border: dark.$input-border-width solid dark.$input-border-color; + border-radius: dark.$border-radius; + &.show, + &:focus { + border: dark.$input-focus-border-width solid dark.$primary; + } + &:not(.show):hover { + border-color: dark.$input-border-hover-color; + } + } + .dropdown-menu { + &[data-popper-placement='top-start'], + &[data-popper-placement='top-end'] { + box-shadow: 0 -0.2rem 1.25rem rgba(15, 20, 34, 0.55); + } + .notify { + background: dark.$popover-bg; + border: dark.$input-border-width solid dark.$popover-border-color; + } + .popover-header button { + color: dark.$body-color; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bs-stepper/_mixins.scss b/src/modules/Resources/assets/vendor/libs/bs-stepper/_mixins.scss new file mode 100644 index 0000000..8f643c1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bs-stepper/_mixins.scss @@ -0,0 +1,51 @@ +// Stepper Mixin +// ******************************************************************************* +@mixin bs-stepper-theme($background) { + $color: color-contrast($background); + .bs-stepper { + .step { + &.active { + .bs-stepper-circle { + background-color: $background; + color: $color; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + .bs-stepper-icon svg { + fill: $background !important; + } + .bs-stepper-icon i, + .bs-stepper-label { + color: $background !important; + } + } + &.crossed { + .step-trigger { + .bs-stepper-circle { + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg) !important; + color: $background !important; + } + .bs-stepper-icon svg { + fill: $background !important; + } + .bs-stepper-icon i { + color: $background !important; + } + } + } + } + &.wizard-icons { + .step.crossed { + .bs-stepper-label { + color: $background !important; + } + & + { + .line { + i { + color: $background; + } + } + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/bs-stepper/bs-stepper.js b/src/modules/Resources/assets/vendor/libs/bs-stepper/bs-stepper.js new file mode 100644 index 0000000..dad4783 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bs-stepper/bs-stepper.js @@ -0,0 +1,37 @@ +import Stepper from 'bs-stepper/dist/js/bs-stepper'; + +const bsStepper = document.querySelectorAll('.bs-stepper'); + +// Adds crossed class +bsStepper.forEach(el => { + el.addEventListener('show.bs-stepper', function (event) { + var index = event.detail.indexStep; + var numberOfSteps = el.querySelectorAll('.line').length; + var line = el.querySelectorAll('.step'); + + // The first for loop is for increasing the steps, + // the second is for turning them off when going back + // and the third with the if statement because the last line + // can't seem to turn off when I press the first item. ¯\_(ツ)_/¯ + + for (let i = 0; i < index; i++) { + line[i].classList.add('crossed'); + + for (let j = index; j < numberOfSteps; j++) { + line[j].classList.remove('crossed'); + } + } + if (event.detail.to == 0) { + for (let k = index; k < numberOfSteps; k++) { + line[k].classList.remove('crossed'); + } + line[0].classList.remove('crossed'); + } + }); +}); + +try { + window.Stepper = Stepper; +} catch (e) {} + +export { Stepper }; diff --git a/src/modules/Resources/assets/vendor/libs/bs-stepper/bs-stepper.scss b/src/modules/Resources/assets/vendor/libs/bs-stepper/bs-stepper.scss new file mode 100644 index 0000000..1c5dbeb --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/bs-stepper/bs-stepper.scss @@ -0,0 +1,549 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import 'bs-stepper/dist/css/bs-stepper'; +@import '../../scss/_custom-variables/libs'; + +$bs-stepper-header-padding-y: 1.5rem !default; +$bs-stepper-header-padding-x: $bs-stepper-header-padding-y !default; +$bs-stepper-content-padding-x: 1.5rem !default; +$bs-stepper-content-padding-y: $bs-stepper-content-padding-x !default; +$bs-stepper-trigger-padding: 1.25rem !default; +$bs-stepper-trigger-padding-vertical: 0.6rem !default; +$bs-stepper-label-max-width: 224px !default; +$bs-stepper-svg-icon-height: 3.75rem !default; +$bs-stepper-svg-icon-width: 3.75rem !default; +$bs-stepper-icon-font-size: 1.6rem !default; +$bs-stepper-vertical-separator-height: 1.55rem !default; +$bs-stepper-vertical-header-min-width: 18rem !default; + +// Default Styles +.bs-stepper { + border-radius: light.$border-radius; + .line { + flex: 0; + min-width: auto; + min-height: auto; + background-color: transparent; + margin: 0; + } + + .bs-stepper-header { + padding: $bs-stepper-header-padding-y $bs-stepper-header-padding-x; + + .step { + .step-trigger { + padding: 0; + flex-wrap: nowrap; + gap: 0.5rem; + font-weight: light.$font-weight-medium; + .bs-stepper-label { + margin: 0; + max-width: $bs-stepper-label-max-width; + overflow: hidden; + text-overflow: ellipsis; + text-align: start; + display: inline-grid; + font-weight: light.$font-weight-medium; + font-size: light.$font-size-base; + line-height: light.$h6-line-height; + .bs-stepper-title { + font-weight: light.$font-weight-medium; + } + .bs-stepper-subtitle { + font-size: light.$small-font-size; + font-weight: light.$font-weight-base; + } + } + &:hover { + background-color: transparent; + } + @include light.media-breakpoint-down(lg) { + padding: calc($bs-stepper-trigger-padding * 0.5) 0; + } + } + .bs-stepper-circle { + display: flex; + align-items: center; + justify-content: center; + border-radius: light.$border-radius; + width: 2.375rem; + height: 2.375rem; + font-size: light.$h5-font-size; + font-weight: light.$font-weight-medium; + i { + font-size: 1.375rem; + } + } + } + } + + .bs-stepper-content { + padding: $bs-stepper-content-padding-y $bs-stepper-content-padding-x; + } + + &.vertical { + .bs-stepper-header { + min-width: $bs-stepper-vertical-header-min-width; + .step { + .step-trigger { + padding: $bs-stepper-trigger-padding-vertical 0; + } + &:first-child { + .step-trigger { + padding-top: 0; + } + } + &:last-child { + .step-trigger { + padding-bottom: 0; + } + } + } + .line { + position: relative; + min-height: 1px; + } + } + .bs-stepper-content { + width: 100%; + .content { + &:not(.active) { + display: none; + } + } + } + + &.wizard-icons { + .step { + text-align: center; + padding: 0.75rem 0; + } + } + } + + &.wizard-icons { + .bs-stepper-header { + justify-content: center; + .step-trigger { + padding: $bs-stepper-trigger-padding; + flex-direction: column; + gap: 0.5rem; + .bs-stepper-icon { + svg { + height: $bs-stepper-svg-icon-height; + width: $bs-stepper-svg-icon-width; + } + i { + font-size: $bs-stepper-icon-font-size; + } + } + } + @include light.media-breakpoint-up(lg) { + justify-content: space-around; + gap: 1rem; + } + } + } + + // Remove borders from wizard modern + &.wizard-modern { + .bs-stepper-header { + border-bottom: none !important; + } + + .bs-stepper-content { + border-radius: light.$border-radius; + } + + &.vertical { + .bs-stepper-header { + border-right: none !important; + } + } + } + + &:not(.vertical):not(.wizard-icons) .bs-stepper-header { + @include light.media-breakpoint-up(lg) { + gap: 1.25rem; + } + } +} + +@include app-rtl(false) { + .bs-stepper.wizard-icons .bs-stepper-header .step-trigger { + @include light.media-breakpoint-down(lg) { + padding-right: 0; + } + } +} +@include app-ltr(false) { + .bs-stepper.wizard-icons .bs-stepper-header .step-trigger { + @include light.media-breakpoint-down(lg) { + padding-left: 0; + } + } +} +// Styles for Modal example Create App wizard +#wizard-create-app { + &.vertical { + .bs-stepper-header { + min-width: $bs-stepper-vertical-header-min-width - 3; + } + } +} + +// Light style +@if $enable-light-style { + .light-style { + .bs-stepper { + background-color: light.$card-bg; + &:not(.wizard-modern) { + box-shadow: light.$card-box-shadow; + } + .bs-stepper-header { + border-bottom: 1px solid light.$border-color; + + .line { + i { + color: light.$body-color; + } + } + + .bs-stepper-title, + .bs-stepper-label { + color: light.$headings-color; + } + + .bs-stepper-label { + .bs-stepper-subtitle { + color: light.$body-color; + } + } + + .step { + &:not(.active) { + .bs-stepper-circle { + background-color: light.$gray-50; + color: light.$headings-color; + } + } + &.crossed .step-trigger { + .bs-stepper-label .bs-stepper-subtitle, + .bs-stepper-title { + color: light.$text-muted; + } + } + } + } + .step-trigger:focus { + color: light.$headings-color; + } + + &.vertical { + .bs-stepper-header { + border-bottom: none; + @include light.media-breakpoint-down(lg) { + border-right: none !important; + border-left: none !important; + border-bottom: 1px solid light.$border-color; + } + } + } + + &.wizard-modern { + background-color: transparent; + .bs-stepper-content { + background-color: light.$card-bg; + box-shadow: light.$card-box-shadow; + } + } + + &.wizard-icons { + .bs-stepper-header { + .bs-stepper-icon { + svg { + fill: light.$headings-color; + } + i { + fill: light.$headings-color; + } + } + .bs-stepper-label { + color: light.$headings-color; + } + } + } + } + } + + // ! FIX: Vertical border issue in rtl and ltr + @include app-rtl(false) { + .light-style { + .bs-stepper { + &.vertical { + .bs-stepper-header { + border-left: 1px solid light.$border-color; + } + } + } + } + } + @include app-ltr(false) { + .light-style { + .bs-stepper { + &.vertical { + .bs-stepper-header { + border-right: 1px solid light.$border-color; + } + } + } + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + .bs-stepper { + background-color: dark.$card-bg; + .bs-stepper-header { + border-bottom: 1px solid dark.$border-color; + .line { + i { + color: dark.$body-color; + } + } + + .bs-stepper-label, + .bs-stepper-title { + color: dark.$headings-color; + } + + .bs-stepper-label { + .bs-stepper-subtitle { + color: dark.$body-color; + } + } + + .step { + &:not(.active) { + .bs-stepper-circle { + background-color: dark.$gray-50; + color: dark.$headings-color; + } + } + &.crossed .step-trigger { + .bs-stepper-label .bs-stepper-subtitle, + .bs-stepper-title { + color: dark.$text-muted; + } + } + } + } + .step-trigger:focus { + color: dark.$headings-color; + } + + &.vertical { + .bs-stepper-header { + border-bottom: none; + @include light.media-breakpoint-down(lg) { + border-right: none !important; + border-left: none !important; + border-bottom: 1px solid dark.$border-color; + } + } + } + + &.wizard-modern { + background-color: transparent; + .bs-stepper-content { + background-color: dark.$card-bg; + box-shadow: dark.$card-box-shadow; + } + } + + &.wizard-icons { + .bs-stepper-header { + .bs-stepper-icon { + i { + color: dark.$headings-color; + } + + svg { + fill: dark.$headings-color; + } + } + .bs-stepper-label { + color: dark.$headings-color; + } + } + } + } + } + + // ! FIX: Vertical border issue in rtl and ltr + @include app-rtl(false) { + .dark-style { + .bs-stepper { + &.vertical { + .bs-stepper-header { + border-left: 1px solid dark.$border-color; + } + } + } + } + } + @include app-ltr(false) { + .dark-style { + .bs-stepper { + &.vertical { + .bs-stepper-header { + border-right: 1px solid dark.$border-color; + } + } + } + } + } +} + +// RTL +@include app-rtl(false) { + .bs-stepper { + .bs-stepper-content { + .btn-next:not(.btn-submit), + .btn-prev { + i { + transform: rotate(180deg); + } + } + } + + &.vertical { + &.wizard-icons { + .bs-stepper-header { + .line:before { + right: 50%; + } + } + } + } + + // Remove borders from wizard modern + &.wizard-modern { + &.vertical { + .bs-stepper-header { + border-left: none !important; + } + } + } + + @include light.media-breakpoint-up(lg) { + .bs-stepper-header { + .line { + i { + transform: rotate(180deg); + } + } + } + } + + @include light.media-breakpoint-down(lg) { + .bs-stepper-header { + .step { + .step-trigger { + .bs-stepper-label { + margin-left: 0; + margin-right: 1rem; + } + } + } + } + &.wizard-icons { + .bs-stepper-header { + .line { + &:before { + margin-right: 0.75rem; + } + } + } + } + } + } +} + +// Media Queries +@include light.media-breakpoint-down(lg) { + .bs-stepper { + .bs-stepper-header { + flex-direction: column; + align-items: flex-start; + .step { + .step-trigger { + flex-direction: row; + .bs-stepper-label { + margin-left: 0.35rem; + } + } + &:first-child { + .step-trigger { + padding-top: 0; + } + } + &:last-child { + .step-trigger { + padding-bottom: 0; + } + } + } + } + &.vertical { + flex-direction: column; + .bs-stepper-header { + align-items: flex-start; + } + + &.wizard-icons { + .bs-stepper-header { + .line:before { + left: 0.75rem; + margin-left: 0; + } + } + } + } + &:not(.vertical) { + .bs-stepper-header { + .line { + i { + display: none; + } + } + } + } + &.wizard-icons { + .bs-stepper-header .step:not(:first-child) { + .bs-stepper-icon { + svg { + margin-top: 0.5rem; + } + } + } + } + } +} + +@media (max-width: 520px) { + .bs-stepper-header { + margin: 0; + } +} + +// Styles for Create App Modal Wizard +#wizard-create-app { + &.vertical { + .bs-stepper-header { + min-width: $bs-stepper-vertical-header-min-width - 3; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/chartjs/chartjs.js b/src/modules/Resources/assets/vendor/libs/chartjs/chartjs.js new file mode 100644 index 0000000..cba0edd --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/chartjs/chartjs.js @@ -0,0 +1,7 @@ +import Chart from 'chart.js/auto'; + +try { + window.Chart = Chart; +} catch (e) {} + +export { Chart }; diff --git a/src/modules/Resources/assets/vendor/libs/cleavejs/cleave-phone.js b/src/modules/Resources/assets/vendor/libs/cleavejs/cleave-phone.js new file mode 100644 index 0000000..9adf7c6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/cleavejs/cleave-phone.js @@ -0,0 +1 @@ +import 'cleave.js/dist/addons/cleave-phone.us'; diff --git a/src/modules/Resources/assets/vendor/libs/cleavejs/cleave.js b/src/modules/Resources/assets/vendor/libs/cleavejs/cleave.js new file mode 100644 index 0000000..64c1ded --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/cleavejs/cleave.js @@ -0,0 +1 @@ +import 'cleave.js/dist/cleave'; diff --git a/src/modules/Resources/assets/vendor/libs/clipboard/clipboard.js b/src/modules/Resources/assets/vendor/libs/clipboard/clipboard.js new file mode 100644 index 0000000..7e4b990 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/clipboard/clipboard.js @@ -0,0 +1,7 @@ +import ClipboardJS from 'clipboard'; + +try { + window.ClipboardJS = ClipboardJS; +} catch (e) {} + +export { ClipboardJS }; diff --git a/src/modules/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js b/src/modules/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js new file mode 100644 index 0000000..12fd79d --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js @@ -0,0 +1,30 @@ +import JSZip from 'jszip'; +import pdfMake from 'pdfmake'; +import 'pdfmake/build/vfs_fonts'; +import 'datatables.net-bs5'; +import 'datatables.net-fixedcolumns-bs5'; +import 'datatables.net-fixedheader-bs5'; +import 'datatables.net-select-bs5'; +import 'datatables.net-buttons'; +import 'datatables.net-buttons-bs5'; +import 'datatables.net-buttons/js/buttons.html5'; +import 'datatables.net-buttons/js/buttons.print'; +import 'datatables.net-responsive'; +import 'datatables.net-responsive-bs5'; +import 'datatables.net-rowgroup-bs5'; +import Checkbox from 'jquery-datatables-checkboxes'; +import { datatable_spanish_default } from '../datatables-lang/datatable-lang-es'; + +// This solution related to font issues with pdfMake +pdfMake.fonts = { + Roboto: { + normal: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Regular.ttf', + bold: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Medium.ttf', + italics: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Italic.ttf', + bolditalics: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-MediumItalic.ttf' + } +}; +$.fn.dataTable.ext.Checkbox = Checkbox(window, $); +$.fn.dataTable.ext.buttons.pdfMake = pdfMake; +$.fn.dataTable.ext.datatable_spanish_default = datatable_spanish_default; +window.JSZip = JSZip; diff --git a/src/modules/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss new file mode 100644 index 0000000..2e531d0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss @@ -0,0 +1,394 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'datatables.net-bs5/css/dataTables.bootstrap5'; + +// Margin between select, input field and text +div.dataTables_wrapper div.dataTables_length select { + margin-left: 0.5rem; + margin-right: 0.5rem; +} +div.dataTables_wrapper div.dataTables_filter input { + margin-left: 1em; +} + +.dataTable .emp_name { + font-weight: light.$font-weight-medium; +} + +// Shadow none for action buttons +.dataTable td .btn { + box-shadow: none !important; +} + +// Card header inside the datatable +div.dataTables_wrapper .card-header { + display: flex; + align-items: center; + justify-content: space-between; +} +div.dataTables_wrapper div.dataTables_info { + padding-top: light.$spacer * 0.5; +} + +table.table-bordered.dataTable { + // For complex header and column search datatable + &.dt-complex-header, + &.dt-column-search { + thead tr th { + border-width: 1px; + } + tfoot tr th { + border-width: 1px; + } + } + & tfoot tr th { + border-bottom-width: 1px; + } + & > :not(caption) > * { + & > * { + border-width: 0; + } + } +} + +// Remove left and right border from datatable with table-bordered class +table.table-bordered.dataTable { + tr:first-child th, + td { + &:first-child { + @include app-ltr() { + border-left-width: 0; + } + @include app-rtl() { + border-right-width: 0; + } + } + &:last-child { + @include app-ltr() { + border-right-width: 0; + } + @include app-rtl() { + border-left-width: 0; + } + } + } + > tbody:not(caption) tr:first-child { + border-top-width: 0; + } +} + +// Responsive datatable in desktop screen +@media screen and (min-width: 1399.98px) { + table.table-responsive { + display: table; + } +} + +// RTL style +@include app-rtl(false) { + div.dataTables_wrapper .dataTables_filter { + display: flex; + justify-content: flex-end; + input { + margin-left: 0; + margin-right: 1rem; + } + } + + table.table-bordered.dataTable th, + table.table-bordered.dataTable td { + border-right-width: 0; + border-left-width: 1px; + + &:last-child { + border-left-width: 0; + } + } +} + +table.dataTable { + width: 100% !important; + border-collapse: collapse !important; + margin-bottom: light.$spacer !important; + margin-top: 0 !important; + thead th { + &.sorting_disabled { + &::before, + &::after { + display: none !important; + } + } + &.sorting { + &:before, + &:after { + visibility: hidden; + } + &:hover { + &:before, + &:after { + visibility: visible; + } + } + } + } + @include app-rtl { + &.table-sm > thead > tr > th { + padding-left: 1.25rem; + } + + &.table-sm .sorting:before, + &.table-sm .sorting_asc:before, + &.table-sm .sorting_desc:before { + right: auto !important; + left: 0.85em !important; + } + thead th, + thead td, + tfoot th, + tfoot td { + text-align: right; + } + } + // Checkbox height & width for datatables checkboxes + .form-check-input { + width: light.$form-datatables-check-input-size; + height: light.$form-datatables-check-input-size; + } +} + +// to add spacing between table and datatable footer elements like pagination & info +.dataTables_scroll { + margin-bottom: 0.75rem; +} + +// Used while complex headers +table.dataTable thead th { + vertical-align: middle; +} +table.dataTable thead .sorting, +table.dataTable thead .sorting_asc, +table.dataTable thead .sorting_desc, +table.dataTable thead .sorting_asc_disabled, +table.dataTable thead .sorting_desc_disabled { + &::before, + &::after { + line-height: 1.25rem !important; + font-family: tabler-icons !important; + font-size: 1rem !important; + width: 10px; + height: 10px; + right: 0.78rem !important; + } + &::before { + content: '\ea62' !important; + top: 0.58rem !important; + } + &::after { + bottom: 0.72rem !important; + content: '\ea5f' !important; + } + @include app-rtl { + &::before { + right: auto !important; + left: 0.58em !important; + } + + &::after { + right: auto !important; + left: 0.58em !important; + } + } +} + +// DataTable within card +div.card-datatable.dataTable, +div.card-datatable .dataTable { + border-right: 0; + border-left: 0; +} + +// Card header inside the datatable +@media screen and (max-width: 575.98px) { + div.dataTables_wrapper .card-header { + display: block; + } + + .dtr-bs-modal.modal { + // padding-left: 0.75rem; + .modal-body { + padding: 0; + overflow: auto; + } + } + .dataTable_select div.dataTables_wrapper div.dataTables_info { + flex-direction: column; + } +} + +@media screen and (max-width: 767.98px) { + div.dataTables_wrapper div.dataTables_info { + padding-bottom: light.$table-cell-padding-y; + } +} + +div.dataTables_wrapper { + div.dataTables_length, + .dataTables_filter { + margin-top: light.$spacer * 1.5; + margin-bottom: light.$spacer * 1.5; + } +} + +// common style for light / dark + +div.dataTables_wrapper div.dataTables_paginate ul.pagination { + .page-item { + &, + &.next, + &.previous, + &.first, + &.last { + .page-link { + border-radius: light.$border-radius; + } + } + } +} + +div.dataTables_wrapper div.dataTables_paginate ul.pagination .page-link { + div:not(.table-responsive) div.dataTables_wrapper .dataTables_paginate { + margin-right: 0; + } +} + +@include light.media-breakpoint-down(md) { + div.dataTables_wrapper div.dataTables_length label, + div.dataTables_wrapper div.dataTables_filter label, + div.dataTables_wrapper div.dataTables_info, + div.dataTables_wrapper div.dataTables_paginate { + justify-content: center; + } +} +@include light.media-breakpoint-down(sm) { + div.dataTables_wrapper div.dataTables_paginate ul.pagination { + justify-content: start !important; + overflow-x: scroll; + } +} + +// DataTable within card +div.card-datatable { + padding-bottom: light.$card-spacer-x-sm; // Check this in site and update if needed + + [class*='col-md-'] { + padding-right: light.$table-cell-padding-x !important; + padding-left: light.$table-cell-padding-x !important; + } + // length, filter & info, pagination row margin + &:not(.table-responsive) .dataTables_wrapper .row { + &:first-child, + &:last-child { + margin: 0; + } + } +} + +// LTR style +@include app-ltr(false) { + div.card-datatable table.dataTable thead th, + div.card-datatable table.dataTable tfoot th { + &:first-child { + padding-left: light.$card-spacer-x; + padding-right: light.$card-spacer-x; + } + + &:last-child { + padding-right: light.$card-spacer-x-sm; + } + } + div.card-datatable table.dataTable tbody td { + &:first-child { + padding-left: light.$card-spacer-x; + padding-right: light.$card-spacer-x; + } + } +} + +// RTL Style +@include app-rtl(false) { + table.dataTable.table-sm > thead > tr > th { + padding-right: light.$table-cell-padding-x-sm; + } + table.table-bordered.dataTable tr { + td, + th, + th:first-child { + border-left-width: 0 !important; + } + } + + table.dataTable { + thead th, + tbody td, + tfoot th { + padding-right: light.$table-cell-padding-x; + } + + &.table-sm thead th, + &.table-sm tbody td, + &.table-sm tfoot th { + padding-right: light.$table-cell-padding-x-sm; + } + } + + div.card-datatable table.dataTable { + thead th, + tbody td, + tfoot th { + &:first-child { + padding-right: light.$card-spacer-x; + } + + &:last-child { + padding-left: light.$card-spacer-x; + } + } + } +} + +// Light style +@if $enable-light-style { + .light-style { + div.dataTables_wrapper div.dataTables_info { + color: light.$text-muted; + } + + div.dataTables_scrollBody table { + border-top-color: light.$table-border-color; + } + + table.dataTable th, + table.dataTable td { + border-color: light.$table-border-color !important; + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + div.dataTables_wrapper div.dataTables_info { + color: dark.$text-muted; + } + + div.dataTables_scrollBody table { + border-top-color: dark.$table-border-color; + } + + table.dataTable th, + table.dataTable td { + border-color: dark.$table-border-color !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss new file mode 100644 index 0000000..03b1c07 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss @@ -0,0 +1,101 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'datatables.net-buttons-bs5/css/buttons.bootstrap5'; + +// remove 0.5em margin bottom from dt-buttons +@media screen and (max-width: 767px) { + div.dt-buttons { + margin-bottom: 0; + } +} +div.dataTables_wrapper .dt-button-collection { + border: 0; + border-radius: light.$dropdown-border-radius; + padding: light.$dropdown-padding-y light.$dropdown-padding-x; + width: auto; + > div[role='menu'] { + text-align: left; + } +} +// avoid dropdown to overlap the trigger button +.dt-button-collection { + margin-top: 0.2rem; +} +div.dropdown-menu.dt-button-collection, +div.dt-button-collection .dt-button:not(.dt-btn-split-drop) { + min-width: 8rem; +} + +.dt-down-arrow { + display: none; +} + +// override button radius +div.dt-button-collection .dt-button, +div.dt-buttons div.dropdown-menu .dt-button { + border-radius: light.$dropdown-border-radius; +} +// Light style +@if $enable-light-style { + .light-style { + div.dataTables_wrapper .dt-button-collection { + background-color: light.$dropdown-bg; + } + .dataTable a:not([href]):not([tabindex]) { + color: map-get(light.$theme-colors, success); + } + .dt-button-info { + box-shadow: light.$floating-component-shadow; + } + .dt-button-collection { + .dropdown-item { + padding: light.$dropdown-item-padding-y light.$dropdown-item-padding-x; + } + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + div.dataTables_wrapper .dt-button-collection { + background-color: dark.$dropdown-bg; + } + .dataTable a:not([href]):not([tabindex]) { + color: map-get(dark.$theme-colors, success); + } + .dt-button-info { + box-shadow: dark.$floating-component-shadow; + } + .dt-button-collection { + .dropdown-item { + padding: dark.$dropdown-item-padding-y dark.$dropdown-item-padding-x; + } + } + } +} +.dt-button-info { + border-width: 0 !important; + border-radius: light.$border-radius !important; + h2 { + font-size: light.$h4-font-size !important; + } +} +.dt-buttons { + position: relative; + .dt-button-collection .dropdown-item { + @include app-rtl { + text-align: right; + } + } + &.btn-group { + button { + border-color: transparent !important; + border-radius: light.$border-radius !important; + } + } +} +div.dt-buttons .dropdown-menu .dt-button { + border-radius: light.$border-radius; +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-checkboxes-jquery/datatables.checkboxes.scss b/src/modules/Resources/assets/vendor/libs/datatables-checkboxes-jquery/datatables.checkboxes.scss new file mode 100644 index 0000000..2628c5e --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-checkboxes-jquery/datatables.checkboxes.scss @@ -0,0 +1,2 @@ +@import '../../scss/_custom-variables/libs'; +@import 'jquery-datatables-checkboxes/css/dataTables.checkboxes'; diff --git a/src/modules/Resources/assets/vendor/libs/datatables-fixedcolumns-bs5/fixedcolumns.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-fixedcolumns-bs5/fixedcolumns.bootstrap5.scss new file mode 100644 index 0000000..3ef12dd --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-fixedcolumns-bs5/fixedcolumns.bootstrap5.scss @@ -0,0 +1,133 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'datatables.net-fixedcolumns-bs5/css/fixedColumns.bootstrap5'; + +// Fixed column style +div.dataTables_scrollBody thead tr, +div.DTFC_LeftBodyLiner thead tr { + border-top-width: 0; + border-bottom-width: 0; +} +div.dataTables_scrollBody { + border: 0 !important; +} +@include app-ltr(false) { + div.dataTables_scrollFootInner table.table-bordered tr th:first-child, + div.dataTables_scrollHeadInner table.table-bordered tr th:first-child { + border-left: 0 !important; + } +} + +@include app-rtl(false) { + table.dataTable thead th, + table.dataTable thead td, + table.dataTable tfoot th, + table.dataTable tfoot td { + text-align: right !important; + } +} + +// Light style +@if $enable-light-style { + .light-style { + table.DTFC_Cloned tr { + border-color: light.$table-border-color; + } + // fixed header and footer border + div.dataTables_scrollFootInner table.table-bordered tr th:first-child, + div.dataTables_scrollHeadInner table.table-bordered tr th:first-child { + border-left: 1px solid light.$table-border-color; + } + // fixed column background color + table.dataTable thead tr > .dtfc-fixed-left, + table.dataTable thead tr > .dtfc-fixed-right, + table.dataTable tbody tr > .dtfc-fixed-left, + table.dataTable tbody tr > .dtfc-fixed-right, + div.dtfc-right-top-blocker, + div.dtfc-left-top-blocker { + background-color: light.$card-bg; + margin-top: 1px !important; + height: 0px !important; + } + // To override BS5 css + .dt-fixedcolumns thead { + border-top-color: light.$table-border-color; + } + &[dir='rtl'] { + div.dataTables_scrollHead, + div.dataTables_scrollBody { + table { + border-width: 0; + } + } + div.DTFC_LeftBodyLiner { + padding-right: 0 !important; + } + div.DTFC_RightHeadWrapper, + div.DTFC_RightBodyWrapper { + table { + border: 0; + } + } + div.DTFC_RightBodyLiner { + padding-left: 0 !important; + } + } + } +} +// Dark style +@if $enable-dark-style { + .dark-style { + table.DTFC_Cloned tr { + background-color: dark.$card-bg; + border-color: dark.$table-border-color; + } + div.dataTables_scrollHead table, + div.DTFC_RightHeadWrapper table, + table.dataTable.fixedHeader-floating, + table.dataTable.fixedHeader-locked { + background-color: dark.$card-bg; + } + // fixed header and footer border + div.dataTables_scrollFootInner table.table-bordered tr th:first-child, + div.dataTables_scrollHeadInner table.table-bordered tr th:first-child { + border-left: 1px solid dark.$table-border-color !important; + } + // fixed column background color + table.dataTable thead tr > .dtfc-fixed-left, + table.dataTable thead tr > .dtfc-fixed-right, + table.dataTable tbody tr > .dtfc-fixed-left, + table.dataTable tbody tr > .dtfc-fixed-right, + div.dtfc-right-top-blocker, + div.dtfc-left-top-blocker { + background-color: dark.$card-bg; + margin-top: 1px !important; + height: 0px !important; + } + // To override BS5 css + .dt-fixedcolumns thead { + border-top-color: dark.$table-border-color; + } + &[dir='rtl'] { + div.dataTables_scrollHead, + div.dataTables_scrollBody { + table { + border-width: 0; + } + } + div.DTFC_LeftBodyLiner { + padding-right: 0 !important; + } + div.DTFC_RightHeadWrapper, + div.DTFC_RightBodyWrapper { + table { + border: 0; + } + } + div.DTFC_RightBodyLiner { + padding-left: 0 !important; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-fixedheader-bs5/fixedheader.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-fixedheader-bs5/fixedheader.bootstrap5.scss new file mode 100644 index 0000000..599b7e1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-fixedheader-bs5/fixedheader.bootstrap5.scss @@ -0,0 +1,40 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'datatables.net-fixedheader-bs5/css/fixedHeader.bootstrap5'; + +// Fixed header Style +.dt-fixedheader.fixedHeader-floating.table.dataTable { + width: auto !important; +} +.dt-fixedheader.fixedHeader-locked.table.dataTable { + display: none; +} + +// Last style +@if $enable-light-style { + .light-style { + .dtfh-floatingparenthead { + border-bottom: 1px solid light.$table-border-color; + } + .table-bordered.dt-fixedheader.fixedHeader-floating.table.dataTable thead > tr > th, + .table-bordered.dt-fixedheader.fixedHeader-locked.table.dataTable thead > tr > th { + border-bottom-width: 1px; + border-color: light.$table-border-color; + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + .dtfh-floatingparenthead { + border-bottom: 1px solid dark.$table-border-color; + } + .table-bordered.dt-fixedheader.fixedHeader-floating.table.dataTable thead > tr > th, + .table-bordered.dt-fixedheader.fixedHeader-locked.table.dataTable thead > tr > th { + border-bottom-width: 1px; + border-color: dark.$table-border-color; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-lang/datatable-lang-es.js b/src/modules/Resources/assets/vendor/libs/datatables-lang/datatable-lang-es.js new file mode 100644 index 0000000..e37d675 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-lang/datatable-lang-es.js @@ -0,0 +1,195 @@ +export const datatable_spanish_default = { + processing: 'Procesando...', + lengthMenu: 'Mostrar _MENU_ registros', + zeroRecords: 'No se encontraron resultados', + emptyTable: 'Ningún dato disponible en esta tabla', + infoEmpty: 'Mostrando registros del 0 al 0 de un total de 0 registros', + infoFiltered: '(filtrado de un total de _MAX_ registros)', + search: 'Buscar:', + infoThousands: ',', + loadingRecords: 'Cargando...', + paginate: { + first: 'Primero', + last: 'Último', + next: 'Siguiente', + previous: 'Anterior' + }, + aria: { + sortAscending: ': Activar para ordenar la columna de manera ascendente', + sortDescending: ': Activar para ordenar la columna de manera descendente' + }, + buttons: { + copy: 'Copiar', + colvis: 'Visibilidad', + collection: 'Colección', + colvisRestore: 'Restaurar visibilidad', + copyKeys: + 'Presione ctrl o u2318 + C para copiar los datos de la tabla al portapapeles del sistema.

Para cancelar, haga clic en este mensaje o presione escape.', + copySuccess: { + 1: 'Copiada 1 fila al portapapeles', + _: 'Copiadas %d fila al portapapeles' + }, + copyTitle: 'Copiar al portapapeles', + csv: 'CSV', + excel: 'Excel', + pageLength: { + '-1': 'Mostrar todas las filas', + _: 'Mostrar %d filas' + }, + pdf: 'PDF', + print: 'Imprimir' + }, + autoFill: { + cancel: 'Cancelar', + fill: 'Rellene todas las celdas con %d', + fillHorizontal: 'Rellenar celdas horizontalmente', + fillVertical: 'Rellenar celdas verticalmentemente' + }, + decimal: ',', + searchBuilder: { + add: 'Añadir condición', + button: { + 0: 'Constructor de búsqueda', + _: 'Constructor de búsqueda (%d)' + }, + clearAll: 'Borrar todo', + condition: 'Condición', + conditions: { + date: { + after: 'Despues', + before: 'Antes', + between: 'Entre', + empty: 'Vacío', + equals: 'Igual a', + notBetween: 'No entre', + notEmpty: 'No Vacio', + not: 'Diferente de' + }, + number: { + between: 'Entre', + empty: 'Vacio', + equals: 'Igual a', + gt: 'Mayor a', + gte: 'Mayor o igual a', + lt: 'Menor que', + lte: 'Menor o igual que', + notBetween: 'No entre', + notEmpty: 'No vacío', + not: 'Diferente de' + }, + string: { + contains: 'Contiene', + empty: 'Vacío', + endsWith: 'Termina en', + equals: 'Igual a', + notEmpty: 'No Vacio', + startsWith: 'Empieza con', + not: 'Diferente de' + }, + array: { + not: 'Diferente de', + equals: 'Igual', + empty: 'Vacío', + contains: 'Contiene', + notEmpty: 'No Vacío', + without: 'Sin' + } + }, + data: 'Data', + deleteTitle: 'Eliminar regla de filtrado', + leftTitle: 'Criterios anulados', + logicAnd: 'Y', + logicOr: 'O', + rightTitle: 'Criterios de sangría', + title: { + 0: 'Constructor de búsqueda', + _: 'Constructor de búsqueda (%d)' + }, + value: 'Valor' + }, + searchPanes: { + clearMessage: 'Borrar todo', + collapse: { + 0: 'Paneles de búsqueda', + _: 'Paneles de búsqueda (%d)' + }, + count: '{total}', + countFiltered: '{shown} ({total})', + emptyPanes: 'Sin paneles de búsqueda', + loadMessage: 'Cargando paneles de búsqueda', + title: 'Filtros Activos - %d' + }, + select: { + cells: { + 1: '1 celda seleccionada', + _: '%d celdas seleccionadas' + }, + columns: { + 1: '1 columna seleccionada', + _: '%d columnas seleccionadas' + }, + rows: { + 1: '1 fila seleccionada', + _: '%d filas seleccionadas' + } + }, + thousands: '.', + datetime: { + previous: 'Anterior', + next: 'Proximo', + hours: 'Horas', + minutes: 'Minutos', + seconds: 'Segundos', + unknown: '-', + amPm: ['AM', 'PM'], + months: { + 0: 'Enero', + 1: 'Febrero', + 10: 'Noviembre', + 11: 'Diciembre', + 2: 'Marzo', + 3: 'Abril', + 4: 'Mayo', + 5: 'Junio', + 6: 'Julio', + 7: 'Agosto', + 8: 'Septiembre', + 9: 'Octubre' + }, + weekdays: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab'] + }, + editor: { + close: 'Cerrar', + create: { + button: 'Nuevo', + title: 'Crear Nuevo Registro', + submit: 'Crear' + }, + edit: { + button: 'Editar', + title: 'Editar Registro', + submit: 'Actualizar' + }, + remove: { + button: 'Eliminar', + title: 'Eliminar Registro', + submit: 'Eliminar', + confirm: { + _: '¿Está seguro que desea eliminar %d filas?', + 1: '¿Está seguro que desea eliminar 1 fila?' + } + }, + error: { + system: 'Ha ocurrido un error en el sistema (Más información<\\/a>).' + }, + multi: { + title: 'Múltiples Valores', + info: 'Los elementos seleccionados contienen diferentes valores para este registro. Para editar y establecer todos los elementos de este registro con el mismo valor, hacer click o tap aquí, de lo contrario conservarán sus valores individuales.', + restore: 'Deshacer Cambios', + noMulti: 'Este registro puede ser editado individualmente, pero no como parte de un grupo.' + } + }, + info: 'Mostrando _START_ a _END_ de _TOTAL_ registros', + search: '', + searchPlaceholder: 'Buscar' +}; diff --git a/src/modules/Resources/assets/vendor/libs/datatables-responsive-bs5/_mixins.scss b/src/modules/Resources/assets/vendor/libs/datatables-responsive-bs5/_mixins.scss new file mode 100644 index 0000000..4619524 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-responsive-bs5/_mixins.scss @@ -0,0 +1,9 @@ +@mixin bs-datatables-theme($background) { + // Style for responsive icon + table.dataTable.dtr-column > tbody > tr > td.control:before, + table.dataTable.dtr-column > tbody > tr > th.control:before { + background-color: $background; + border: 2px solid $rgba-to-hex-bg; + box-shadow: 0 0 3px $gray-800; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss new file mode 100644 index 0000000..7d97024 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss @@ -0,0 +1,57 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import 'datatables.net-responsive-bs5/css/responsive.bootstrap5'; +@import 'mixins'; + +// Responsive table area '+' icon position +table.dataTable.dtr-column > tbody > tr > td.control, +table.dataTable.dtr-column > tbody > tr > th.control { + position: relative; + &:before, + &:before { + position: absolute; + line-height: 0.9em; + font-weight: light.$font-weight-medium; + height: 0.85em; + width: 0.85em; + color: light.$white; + border-radius: 1em; + box-sizing: content-box; + text-align: center; + font-family: 'Courier New', Courier, monospace; + content: '+'; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + } +} +table.dataTable.dtr-column > tbody > tr.parent td.dtr-control:before, +table.dataTable.dtr-column > tbody > tr.parent th.dtr-control:before, +table.dataTable.dtr-column > tbody > tr.parent td.control:before, +table.dataTable.dtr-column > tbody > tr.parent th.control:before { + content: '+'; +} +// To scroll within datatable area +@media screen and (max-width: 1399.98px) { + table.dataTable.table-responsive { + display: block; + } +} + +// Modal table style +.modal.dtr-bs-modal { + .modal-body { + padding: 0; + } + .table { + tr:last-child > td { + border-bottom: 0; + } + .btn { + box-shadow: none !important; + } + .emp_name { + font-weight: light.$font-weight-medium; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-rowgroup-bs5/rowgroup.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-rowgroup-bs5/rowgroup.bootstrap5.scss new file mode 100644 index 0000000..feea55b --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-rowgroup-bs5/rowgroup.bootstrap5.scss @@ -0,0 +1,25 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +@import 'datatables.net-rowgroup-bs5/css/rowGroup.bootstrap5'; + +// Light style +@if $enable-light-style { + .light-style { + tr.group, + tr.group:hover { + background-color: light.$gray-100 !important; + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + tr.group, + tr.group:hover { + background-color: rgba(dark.$base, 0.1) !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/datatables-select-bs5/select.bootstrap5.scss b/src/modules/Resources/assets/vendor/libs/datatables-select-bs5/select.bootstrap5.scss new file mode 100644 index 0000000..99faa43 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/datatables-select-bs5/select.bootstrap5.scss @@ -0,0 +1,39 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@use '../../scss/_components/include' as comp; + +@import '../../scss/_custom-variables/libs'; +@import 'datatables.net-select-bs5/css/select.bootstrap5'; + +// Background color for select row +table.dataTable tbody > tr.selected td, +table.dataTable tbody > tr > .selected td { + background-color: rgba(light.$primary, 0.08); + box-shadow: none; +} +// Light style +@if $enable-light-style { + .light-style { + table.dataTable tbody tr.selected td, + table.dataTable tbody th.selected td, + table.dataTable tbody td.selected td { + color: light.$body-color !important; + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + table.dataTable tbody > tr.selected > *, + table.dataTable tbody > tr > .selected > * { + box-shadow: inset 0 0 0 dark.$gray-50; + color: dark.$table-active-color; + } + table.dataTable tbody tr.selected td, + table.dataTable tbody th.selected td, + table.dataTable tbody td.selected td { + color: inherit; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/dropzone/_mixins.scss b/src/modules/Resources/assets/vendor/libs/dropzone/_mixins.scss new file mode 100644 index 0000000..75e2c7f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/dropzone/_mixins.scss @@ -0,0 +1,5 @@ +@mixin dropzone-theme($border) { + .dropzone.dz-drag-hover { + border-color: $border !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/dropzone/dropzone.js b/src/modules/Resources/assets/vendor/libs/dropzone/dropzone.js new file mode 100644 index 0000000..6122097 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/dropzone/dropzone.js @@ -0,0 +1,56 @@ +import Dropzone from 'dropzone/dist/dropzone'; + +Dropzone.autoDiscover = false; + +// File upload progress animation +Dropzone.prototype.uploadFiles = function (files) { + const minSteps = 6; + const maxSteps = 60; + const timeBetweenSteps = 100; + const bytesPerStep = 100000; + const isUploadSuccess = true; + + const self = this; + + for (let i = 0; i < files.length; i++) { + const file = files[i]; + const totalSteps = Math.round(Math.min(maxSteps, Math.max(minSteps, file.size / bytesPerStep))); + + for (let step = 0; step < totalSteps; step++) { + const duration = timeBetweenSteps * (step + 1); + + setTimeout( + (function (file, totalSteps, step) { + return function () { + file.upload = { + progress: (100 * (step + 1)) / totalSteps, + total: file.size, + bytesSent: ((step + 1) * file.size) / totalSteps + }; + + self.emit('uploadprogress', file, file.upload.progress, file.upload.bytesSent); + if (file.upload.progress === 100) { + if (isUploadSuccess) { + file.status = Dropzone.SUCCESS; + self.emit('success', file, 'success', null); + } else { + file.status = Dropzone.ERROR; + self.emit('error', file, 'Some upload error', null); + } + + self.emit('complete', file); + self.processQueue(); + } + }; + })(file, totalSteps, step), + duration + ); + } + } +}; + +try { + window.Dropzone = Dropzone; +} catch (e) {} + +export { Dropzone }; diff --git a/src/modules/Resources/assets/vendor/libs/dropzone/dropzone.scss b/src/modules/Resources/assets/vendor/libs/dropzone/dropzone.scss new file mode 100644 index 0000000..d342eef --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/dropzone/dropzone.scss @@ -0,0 +1,460 @@ +// Dropzone + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +$dz-box-padding: 1.25rem !default; +$dz-icon-size: 1.875rem !default; +$dz-thumbnail-width: 10rem !default; +$dz-thumbnail-height: 7.5rem !default; +$dz-preview-padding: 0.625rem !default; +$dz-progress-height: 0.5rem !default; +$dz-icon-block-size: 3.75rem !default; + +// common styles +.dropzone { + width: 100%; + position: relative; + cursor: pointer; + border-radius: light.$border-radius-lg; + + // Disabled + &:not(.dz-clickable) { + opacity: 0.5; + cursor: not-allowed; + } + + // Hover + &.dz-drag-hover { + border-style: solid; + + .dz-message { + opacity: 0.5; + } + } +} + +.dz-message { + font-size: light.$h4-font-size; + &:before { + content: ''; + border-radius: 6px; + position: absolute; + top: 5rem; + left: calc(50% - 23px); + display: inline-block; + height: 40px; + width: 40px; + background-repeat: no-repeat !important; + background-position: center !important; + } + + .note { + font-size: light.$font-size-base; + } +} + +// Fallback +.dz-browser-not-supported { + &.dropzone-box { + min-height: auto !important; + border: none !important; + border-radius: 0 !important; + padding: 0 !important; + width: auto !important; + cursor: default !important; + transition: none; + } + + .dz-message { + display: none !important; + } +} + +// Default message + +.dz-started .dz-message { + display: none; +} + +.dz-message { + margin: 8rem 0 3rem; + font-weight: 500; + text-align: center; + + .note { + display: block; + margin-top: 0.5rem; + } +} + +// styles for dropzone in ecommerce +.app-ecommerce { + .dz-message { + margin-top: 5rem; + &::before { + top: 3rem; + } + } +} + +// Preview +.dz-preview { + position: relative; + vertical-align: top; + background: #fff; + font-size: 0.8125rem; + margin: 1rem; + margin-right: $dz-box-padding - 1; + box-sizing: content-box; + cursor: default; + @include light.media-breakpoint-down(sm) { + margin: $dz-box-padding - 0.5; + } +} + +// File information +.dz-filename { + position: absolute; + width: 100%; + overflow: hidden; + padding: $dz-preview-padding $dz-preview-padding 0 $dz-preview-padding; + background: light.$white; + white-space: nowrap; + text-overflow: ellipsis; + + &:hover { + white-space: normal; + text-overflow: inherit; + } +} + +.dz-size { + padding: 1.875rem $dz-preview-padding $dz-preview-padding $dz-preview-padding; + font-size: 0.6875rem; + font-style: italic; +} + +// Progressbar +.dz-preview .progress, +.dz-preview .progess-bar { + height: $dz-progress-height; +} + +.dz-preview .progress { + position: absolute; + left: 1.25rem; + right: 1.25rem; + top: 50%; + margin-top: -$dz-progress-height * 0.5; + z-index: 30; +} + +.dz-complete .progress { + display: none; +} + +// Thumbnail +.dz-thumbnail { + position: relative; + padding: $dz-preview-padding; + height: $dz-thumbnail-height; + text-align: center; + box-sizing: content-box; + + > img, + .dz-nopreview { + top: 50%; + position: relative; + transform: translateY(-50%) scale(1); + margin: 0 auto; + display: block; + } + + > img { + max-height: 100%; + max-width: 100%; + } +} + +.dz-nopreview { + font-weight: light.$font-weight-medium; + text-transform: uppercase; + font-size: 0.6875rem; +} + +.dz-thumbnail img[src] ~ .dz-nopreview { + display: none; +} + +// Remove link +.dz-remove { + display: block; + text-align: center; + padding: 0.375rem 0; + font-size: 0.75rem; + + &:hover, + &:focus { + text-decoration: none; + border-top-color: transparent; + } +} + +// error/success states +.dz-error-mark, +.dz-success-mark { + position: absolute; + left: 50%; + top: 50%; + display: none; + margin-left: -$dz-icon-block-size * 0.5; + margin-top: -$dz-icon-block-size * 0.5; + height: $dz-icon-block-size; + width: $dz-icon-block-size; + border-radius: 50%; + background-position: center center; + background-size: $dz-icon-size $dz-icon-size; + background-repeat: no-repeat; + box-shadow: 0 0 1.25rem rgba(0, 0, 0, 0.06); +} + +.dz-success-mark { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%235cb85c' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E"); +} + +.dz-error-mark { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23d9534f' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23d9534f' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E"); +} + +.dz-error-message { + position: absolute; + top: -1px; + left: -1px; + bottom: -1px; + right: -1px; + display: none; + color: light.$white; + z-index: 40; + padding: 0.75rem; + text-align: left; + overflow: auto; + font-weight: light.$font-weight-medium; + + @include app-rtl { + text-align: right; + } +} + +// Error state +.dz-error { + .dz-error-message { + display: none; + } + + .dz-error-mark { + display: block; + } + + &:hover { + .dz-error-message { + display: block; + } + + .dz-error-mark { + display: none; + } + } +} + +// Success state +.dz-success .dz-success-mark { + display: block; +} + +// RTL +@include app-rtl(false) { + .dz-hidden-input { + left: auto !important; + right: 0 !important; + } +} + +// Light style +@if $enable-light-style { + .light-style { + $dz-overlay-bg: light.$dark; + $dz-thumbnail-bg: light.$gray-25; + $dz-border-color: light.$card-border-color; + + .dropzone { + border: 2px dashed $dz-border-color; + } + + .dz-preview { + border: light.$card-border-width solid $dz-border-color; + border-radius: light.$border-radius; + box-shadow: light.$card-box-shadow; + } + + .dz-message { + color: light.$headings-color; + &:before { + background-image: light.str-replace( + light.str-replace(light.$upload-icon, 'currentColor', light.$headings-color), + '#', + '%23' + ) !important; + background: #eeedf0; + } + .note { + color: light.$body-color; + font-weight: light.$font-weight-normal; + } + } + + .dz-thumbnail { + border-bottom: 1px solid light.rgba-to-hex($dz-border-color); + background: $dz-thumbnail-bg; + + @include light.border-top-radius(if(light.$border-radius, calc(#{light.$border-radius} - 1px), 0)); + } + + .dz-size { + color: light.$text-muted; + } + + .dz-remove { + color: light.$body-color; + border-top: 1px solid light.rgba-to-hex($dz-border-color); + + @include light.border-bottom-radius(if(light.$border-radius, calc(#{light.$border-radius} - 1px), 0)); + + &:hover, + &:focus { + color: light.$body-color; + background: light.$gray-100; + } + } + + .dz-nopreview { + color: light.$text-muted; + } + + .dz-error-mark, + .dz-success-mark { + background-color: rgba($dz-overlay-bg, 0.5); + } + + .dz-error-message { + background: rgba(map-get(light.$theme-colors, danger), 0.8); + + @include light.border-top-radius(light.$border-radius); + } + + @include light.media-breakpoint-up(sm) { + .dz-preview { + display: inline-block; + width: $dz-thumbnail-width + ($dz-preview-padding * 2); + } + + .dz-thumbnail { + width: $dz-thumbnail-width; + } + } + } +} + +// dark style +@if $enable-dark-style { + .dark-style { + $dz-overlay-bg: dark.$dark; + $dz-thumbnail-bg: dark.$gray-25; + $dz-border-color: dark.$card-border-color; + + .dropzone { + border: 2px dashed $dz-border-color; + } + + .dz-preview { + background: dark.$card-bg; + border: dark.$card-border-width solid $dz-border-color; + border-radius: dark.$border-radius; + box-shadow: dark.$card-box-shadow; + } + + .dz-message { + color: dark.$headings-color; + &:before { + background-image: light.str-replace( + light.str-replace(light.$upload-icon, 'currentColor', dark.$headings-color), + '#', + '%23' + ) !important; + background: #373b50; + } + .note { + color: dark.$body-color; + font-weight: dark.$font-weight-normal; + } + } + + .dz-filename { + background: dark.$card-bg; + padding-top: 0.25rem; + padding-bottom: 0.25rem; + border-bottom: dark.$card-border-width solid $dz-border-color; + } + + .dz-size { + color: dark.$text-muted; + } + + .dz-thumbnail { + border-bottom: 1px solid $dz-border-color; + background: $dz-thumbnail-bg; + + @include dark.border-top-radius(if(dark.$border-radius, calc(#{dark.$border-radius} - 1px), 0)); + } + + .dz-nopreview { + color: dark.$text-muted; + } + + .dz-remove { + color: dark.$body-color; + border-top: 1px solid $dz-border-color; + + @include dark.border-bottom-radius(if(dark.$border-radius, calc(#{dark.$border-radius} - 1px), 0)); + + &:hover, + &:focus { + color: dark.$body-color; + background: dark.$gray-100; + } + } + + .dz-error-mark, + .dz-success-mark { + background-color: rgba($dz-overlay-bg, 0.5); + } + + .dz-error-message { + background: rgba(map-get(dark.$theme-colors, danger), 0.8); + + @include dark.border-top-radius(dark.$border-radius); + } + + @include dark.media-breakpoint-up(sm) { + .dz-preview { + display: inline-block; + width: $dz-thumbnail-width + ($dz-preview-padding * 2); + } + + .dz-thumbnail { + width: $dz-thumbnail-width; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/flatpickr/_mixins.scss b/src/modules/Resources/assets/vendor/libs/flatpickr/_mixins.scss new file mode 100644 index 0000000..8fdfa7c --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/flatpickr/_mixins.scss @@ -0,0 +1,114 @@ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin flatpickr-theme($background, $color: null) { + $in-range-bg: rgba-to-hex(rgba($background, 0.16), $card-bg); + $color: if($color, $color, color-contrast($background)); + $in-range-color: $background; + + .flatpickr-day { + &.today, + &.today:hover { + color: $background !important; + border-color: rgba-to-hex(rgba($background, 0.16), $card-bg); + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg) !important; + } + + &.inRange, + &.nextMonthDay.inRange, + &.prevMonthDay.inRange, + &.today.inRange, + &.prevMonthDay.today.inRange, + &.nextMonthDay.today.inRange { + color: $background !important; + background: $in-range-bg !important; + border-color: $in-range-bg !important; + } + + &.selected, + &.selected.inRange, + &.selected:focus, + &.selected:hover, + &.selected.nextMonthDay, + &.selected.prevMonthDay, + &.startRange, + &.startRange.inRange, + &.startRange:focus, + &.startRange:hover, + &.startRange.nextMonthDay, + &.startRange.prevMonthDay, + &.endRange, + &.endRange.inRange, + &.endRange:focus, + &.endRange:hover, + &.endRange.nextMonthDay, + &.endRange.prevMonthDay, + &.week.selected { + color: $color !important; + background: $background !important; + border-color: $background !important; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + } +} + +@mixin flatpickr-dark-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + $in-range-bg: rgba-to-hex(rgba($background, 0.16), $card-bg); + $in-range-color: $background; + + .flatpickr-calendar .numInputWrapper span { + &.arrowUp:after { + border-bottom-color: $color; + } + + &.arrowDown:after { + border-top-color: $color; + } + } + + .flatpickr-day { + &.today, + &.today:hover, + &.inRange { + color: $background !important; + border-color: rgba-to-hex(rgba($background, 0.16), $card-bg) !important; + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg) !important; + } + + &.inRange, + &.nextMonthDay.inRange, + &.prevMonthDay.inRange, + &.today.inRange, + &.nextMonthDay.today.inRange, + &.prevMonthDay.today.inRange { + border-color: $in-range-bg !important; + background: $in-range-bg !important; + color: $background !important; + } + + &.selected, + &.selected.inRange, + &.selected:focus, + &.selected:hover, + &.selected.prevMonthDay, + &.selected.nextMonthDay, + &.startRange, + &.startRange.inRange, + &.startRange:focus, + &.startRange:hover, + &.startRange.prevMonthDay, + &.startRange.nextMonthDay, + &.endRange, + &.endRange.inRange, + &.endRange:focus, + &.endRange:hover, + &.endRange.nextMonthDay, + &.endRange.prevMonthDay, + &.week.selected { + background: $background !important; + border-color: $background !important; + color: $color !important; + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/flatpickr/flatpickr.js b/src/modules/Resources/assets/vendor/libs/flatpickr/flatpickr.js new file mode 100644 index 0000000..0c13982 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/flatpickr/flatpickr.js @@ -0,0 +1,7 @@ +import flatpickr from 'flatpickr/dist/flatpickr'; + +try { + window.flatpickr = flatpickr; +} catch (e) {} + +export { flatpickr }; diff --git a/src/modules/Resources/assets/vendor/libs/flatpickr/flatpickr.scss b/src/modules/Resources/assets/vendor/libs/flatpickr/flatpickr.scss new file mode 100644 index 0000000..43ef2fc --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/flatpickr/flatpickr.scss @@ -0,0 +1,1172 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +$flatpickr-content-padding-x: 0.5rem !default; +$flatpickr-content-padding-y: 0.25rem !default; +$flatpickr-cell-size: 2.25rem !default; +$flatpickr-animation-duration: 400ms !default; +$flatpickr-time-picker-height: 40px !default; +$flatpickr-week-height: 2.25rem !default; +$flatpickr-month-height: 2.5rem !default; +$flatpickr-year-height: 1.2rem !default; +$flatpickr-width: ($flatpickr-cell-size * 7)+ ($flatpickr-content-padding-x * 2) !default; + +@mixin keyframes($name) { + @-webkit-keyframes #{$name} { + @content; + } + + @-moz-keyframes #{$name} { + @content; + } + + @keyframes #{$name} { + @content; + } +} + +.flatpickr-calendar { + position: absolute; + visibility: hidden; + overflow: hidden; + box-sizing: border-box; + padding: 0; + padding-bottom: 2px; + max-height: 0; + border: 0; + text-align: center; + opacity: 0; + animation: none; + outline: 0; + touch-action: manipulation; + line-height: light.$line-height-base; + font-size: light.$font-size-base; + @include light.border-radius(light.$border-radius !important); + + &.open, + &.inline { + visibility: visible; + overflow: visible; + max-height: 640px; + opacity: 1; + } + + &.open { + display: inline-block; + } + + &.animate.open { + animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1); + } + + &:not(.inline):not(.open) { + display: none !important; + } + + &.inline { + position: relative; + top: 2px; + display: block; + } + + &.static { + position: absolute; + top: calc(100% + 2px); + } + + &.static.open { + z-index: 999; + display: block; + } + + &.hasWeeks { + width: auto; + } + + @include app-ltr { + &.hasWeeks .flatpickr-days { + border-bottom-left-radius: 0 !important; + } + } + + @include app-rtl { + &.hasWeeks .flatpickr-days { + border-bottom-right-radius: 0 !important; + } + } + + &.hasTime { + padding-bottom: 0; + .flatpickr-time { + height: $flatpickr-time-picker-height; + } + } + + &.noCalendar.hasTime { + .flatpickr-time { + height: auto; + } + } + + input[type='number'] { + -moz-appearance: textfield; + } + input[type='number']::-webkit-inner-spin-button, + input[type='number']::-webkit-outer-spin-button { + -webkit-appearance: none; + margin: 0; + } +} + +.flatpickr-wrapper { + position: relative; + display: inline-block; +} + +.flatpickr-month { + position: relative; + overflow: hidden; + height: $flatpickr-month-height + 0.5; + text-align: center; + line-height: 1; + user-select: none; +} + +.flatpickr-prev-month, +.flatpickr-next-month { + position: absolute; + top: 0.75rem; + z-index: 3; + padding: 0 0.41rem; + height: 1.875rem; + width: 1.875rem; + text-decoration: none; + cursor: pointer; + border-radius: 50rem; + display: flex; + align-items: center; + justify-content: center; + + svg { + vertical-align: middle; + } +} + +.flatpickr-prev-month i, +.flatpickr-next-month i { + position: relative; +} + +.flatpickr-prev-month { + &.flatpickr-prev-month { + right: 3.5rem; + } + + @include app-rtl { + left: 3.5rem; + right: auto; + transform: scaleX(-1); + } +} + +.flatpickr-next-month { + &.flatpickr-prev-month { + right: 0; + left: 0; + } + + &.flatpickr-next-month { + right: 1rem; + } + + @include app-rtl { + right: auto; + left: 1rem; + transform: scaleX(-1); + } +} + +.flatpickr-prev-month:hover, +.flatpickr-next-month:hover { + opacity: 1; +} + +.flatpickr-prev-month svg, +.flatpickr-next-month svg { + width: 0.6rem; +} + +.flatpickr-prev-month svg path, +.flatpickr-next-month svg path { + transition: fill 0.1s; + fill: inherit; +} + +.numInputWrapper { + position: relative; + height: auto; + + input, + span { + display: inline-block; + } + + input { + width: 100%; + } + + span { + position: absolute; + right: 0; + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + width: 14px; + height: 50%; + line-height: 1; + opacity: 0; + cursor: pointer; + + @include app-rtl { + right: auto; + left: 0; + } + + &:hover { + background: rgba(0, 0, 0, 0.1); + } + + &:active { + background: rgba(0, 0, 0, 0.2); + } + + &:after { + content: ''; + display: block; + width: 0; + height: 0; + } + + &.arrowUp { + top: 0; + } + + &.arrowUp:after { + border-right: 4px solid transparent; + border-bottom: 4px solid rgba(72, 72, 72, 0.6); + border-left: 4px solid transparent; + } + + &.arrowDown { + top: 50%; + } + + &.arrowDown:after { + border-top: 4px solid rgba(72, 72, 72, 0.6); + border-right: 4px solid transparent; + border-left: 4px solid transparent; + } + + svg { + width: inherit; + height: auto; + } + + svg path { + fill: rgba(255, 255, 255, 0.5); + } + } + + &:hover { + background: rgba(0, 0, 0, 0.05); + } + + &:hover span { + opacity: 1; + } +} + +.flatpickr-current-month { + position: absolute; + inset-inline-start: 4%; + display: flex; + align-items: center; + gap: 0.25rem; + width: 75%; + height: $flatpickr-month-height + 0.5; + text-align: center; + line-height: 1; + padding: 0.5rem 0 0 0; + transform: translate3d(0px, 0px, 0px); + &:has(.cur-month) { + inset-inline-start: 5%; + } + + .flatpickr-monthDropdown-months, + input.cur-year { + outline: none; + vertical-align: middle !important; + font-weight: 400; + font-size: inherit; + font-family: inherit; + line-height: inherit; + color: inherit; + display: inline-block; + box-sizing: border-box; + background: transparent; + border: 0; + border-radius: 0; + &:not(:first-child) { + padding: 0 0 0 0.5ch; + } + } + + .numInputWrapper { + display: inline-block; + width: 6ch; + } + + .flatpickr-monthDropdown-months { + appearance: menulist; + cursor: pointer; + height: $flatpickr-month-height - 0.25rem; + // margin: -1px 0 0 0; + position: relative; + width: auto; + font-size: light.$font-size-base; + } + + input.cur-year { + margin: 0; + height: $flatpickr-year-height; + cursor: default; + + @include app-rtl { + padding-right: 0.5ch; + padding-left: 0; + } + + &:focus { + outline: 0; + } + + &[disabled], + &[disabled]:hover { + background: transparent; + pointer-events: none; + } + + &[disabled] { + opacity: 0.5; + } + } +} + +.flatpickr-weekdaycontainer { + display: flex; + width: 100%; + padding: $flatpickr-content-padding-y $flatpickr-content-padding-x; +} + +.flatpickr-weekdays { + display: flex; + overflow: hidden; + align-items: center; + max-width: 17.5rem; + width: 100%; + height: $flatpickr-week-height; + text-align: center; + margin-bottom: 0.125rem; +} + +span.flatpickr-weekday { + display: block; + flex: 1; + margin: 0; + text-align: center; + line-height: 1; + cursor: default; +} + +.dayContainer, +.flatpickr-weeks { + padding: 1px 0 0 0; +} + +.flatpickr-days { + position: relative; + display: flex; + overflow: hidden; + width: auto !important; + + &:focus { + outline: 0; + } + + .flatpickr-calendar.hasTime & { + border-bottom: 0 !important; + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } +} + +.dayContainer { + display: inline-block; + display: flex; + flex-wrap: wrap; + justify-content: space-around; + box-sizing: border-box; + padding: 0; + min-width: $flatpickr-cell-size * 7; + max-width: $flatpickr-cell-size * 7; + width: $flatpickr-cell-size * 7; + outline: 0; + opacity: 1; + transform: translate3d(0px, 0px, 0px); +} + +.flatpickr-day { + position: relative; + display: inline-block; + flex-basis: 14.2857143%; + justify-content: center; + box-sizing: border-box; + margin: 0; + max-width: $flatpickr-cell-size; + width: 15.2857143%; + height: $flatpickr-cell-size; + border: 1px solid transparent; + background: none; + text-align: center; + font-weight: 400; + line-height: calc(#{$flatpickr-cell-size} - 2px); + cursor: pointer; + + &.inRange, + &.prevMonthDay.inRange, + &.nextMonthDay.inRange, + &.today.inRange, + &.prevMonthDay.today.inRange, + &.nextMonthDay.today.inRange, + &:hover, + &.prevMonthDay:hover, + &.nextMonthDay:hover, + &:focus, + &.prevMonthDay:focus, + &.nextMonthDay:focus { + outline: 0; + cursor: pointer; + } + + &.inRange:not(.startRange):not(.endRange) { + border-radius: 0 !important; + } + + &.disabled, + &.flatpickr-disabled, + &.flatpickr-disabled.today, + &.disabled:hover, + &.flatpickr-disabled:hover, + &.flatpickr-disabled.today:hover { + border-color: transparent; + background: transparent !important; + cursor: default; + pointer-events: none; + } + + &.prevMonthDay, + &.nextMonthDay { + border-color: transparent; + background: transparent; + cursor: default; + } + + &.notAllowed, + &.notAllowed.prevMonthDay, + &.notAllowed.nextMonthDay { + border-color: transparent; + background: transparent; + cursor: default; + } + + &.week.selected { + border-radius: 0; + } + + @include app-ltr { + &.selected.startRange, + &.startRange.startRange, + &.endRange.startRange { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + &.selected.endRange, + &.startRange.endRange, + &.endRange.endRange { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + } + + @include app-rtl { + &.selected.startRange, + &.startRange.startRange, + &.endRange.startRange { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + &.selected.endRange, + &.startRange.endRange, + &.endRange.endRange { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } +} + +.flatpickr-weekwrapper { + display: inline-block; + float: left; + + .flatpickr-weeks { + background-clip: padding-box !important; + + @include app-ltr { + .flatpickr-weeks { + border-bottom-right-radius: 0 !important; + } + } + + @include app-rtl { + .flatpickr-weeks { + border-bottom-left-radius: 0 !important; + } + } + .flatpickr-day { + font-size: light.$font-size-sm; + } + } + + .flatpickr-calendar.hasTime .flatpickr-weeks { + border-bottom: 0 !important; + border-bottom-right-radius: 0 !important; + border-bottom-left-radius: 0 !important; + } + + .flatpickr-weekday { + float: none; + width: 100%; + line-height: $flatpickr-week-height; + position: relative; + top: 1px; + margin-bottom: 0.4rem; + } + + span.flatpickr-day { + display: block; + max-width: none; + width: $flatpickr-cell-size; + background: none !important; + } +} + +.flatpickr-calendar.hasTime .flatpickr-weeks { + border-bottom: 0 !important; + border-bottom-left-radius: 0 !important; + border-bottom-right-radius: 0 !important; +} + +.flatpickr-innerContainer { + display: block; + display: flex; + overflow: hidden; + box-sizing: border-box; + &:has(.flatpickr-weeks) { + .flatpickr-weeks { + @include app-ltr { + padding-left: 0.445rem; + } + @include app-rtl { + padding-left: 0.445rem; + } + } + .flatpickr-weekdaycontainer { + @include app-rtl { + padding-left: $flatpickr-content-padding-x * 1.25; + } + } + .flatpickr-weekwrapper .flatpickr-weekday { + padding-left: 0.445rem; + } + .flatpickr-weekwrapper { + @include app-rtl { + padding-right: 0.5rem; + } + } + } +} + +.flatpickr-rContainer { + display: inline-block; + box-sizing: border-box; + padding: 0; +} + +.flatpickr-time { + display: block; + display: flex; + overflow: hidden; + box-sizing: border-box; + max-height: $flatpickr-time-picker-height; + height: 0; + outline: 0; + background-clip: padding-box !important; + text-align: center; + line-height: $flatpickr-time-picker-height; + + &:after { + content: ''; + display: table; + clear: both; + } + + .numInputWrapper { + float: left; + flex: 1; + width: 40%; + height: $flatpickr-time-picker-height; + } + + &.hasSeconds .numInputWrapper { + width: 26%; + } + + &.time24hr .numInputWrapper { + width: 49%; + } + + input { + position: relative; + box-sizing: border-box; + margin: 0; + padding: 0; + height: inherit; + border: 0; + border-radius: 0; + background: transparent; + box-shadow: none; + text-align: center; + line-height: inherit; + cursor: pointer; + font-size: light.$font-size-base; + + &.flatpickr-hour, + &.flatpickr-minute, + &.flatpickr-second { + font-weight: light.$font-weight-normal; + } + + &:focus { + outline: 0; + border: 0; + } + } + + .flatpickr-time-separator, + .flatpickr-am-pm { + display: inline-block; + float: left; + align-self: center; + width: 2%; + height: inherit; + line-height: inherit; + user-select: none; + } + + .flatpickr-am-pm { + width: 18%; + outline: 0; + text-align: center; + font-weight: normal; + cursor: pointer; + + &:hover { + background: rgba(0, 0, 0, 0.05); + } + } + + .flatpickr-calendar.noCalendar & { + box-shadow: none !important; + } + + .flatpickr-calendar:not(.noCalendar) & { + border-top: 0; + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; + } +} + +.flatpickr-input[readonly] { + cursor: pointer; +} + +// Animations +// + +@include keyframes(fpFadeInDown) { + from { + opacity: 0; + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 1; + transform: translate3d(0, 0, 0); + } +} +// Light layout +@if $enable-light-style { + .light-style { + .flatpickr-calendar { + background: light.$dropdown-bg; + } + .flatpickr-prev-month, + .flatpickr-next-month { + background-color: light.rgba-to-hex(rgba(light.$black, 0.08), light.$card-bg); + svg { + fill: light.$body-color; + stroke: light.$body-color; + } + } + // Dimensions + .flatpickr-calendar, + .flatpickr-days { + width: calc(#{$flatpickr-width} + calc(#{light.$dropdown-border-width} * 2px)) !important; + } + .flatpickr-calendar { + background-color: light.$card-bg; + border-radius: light.$border-radius !important; + } + + @include app-ltr-style { + .flatpickr-calendar.hasWeeks { + width: calc( + #{$flatpickr-width + $flatpickr-cell-size} + calc(#{light.$dropdown-border-width} * 3px) + 0.35rem + ) !important; + } + } + @include app-rtl-style { + .flatpickr-calendar.hasWeeks { + width: calc( + #{$flatpickr-width + $flatpickr-cell-size} + calc(#{light.$dropdown-border-width} * 3px) + 1rem + ) !important; + } + } + + .flatpickr-calendar.open { + z-index: light.$zindex-popover; + } + //! Flatpickr provide default input as readonly, applying default input style to readonly + .flatpickr-input[readonly], + .flatpickr-input ~ .form-control[readonly] { + background: #{light.$input-bg}; + } + + .flatpickr-days { + background: #{light.$dropdown-bg}; + padding: $flatpickr-content-padding-y $flatpickr-content-padding-x $flatpickr-content-padding-x; + border: light.$dropdown-border-width solid opacify(light.$dropdown-border-color, 0.05); + border-top: 0; + background-clip: padding-box; + + @include light.border-bottom-radius(light.$border-radius); + } + + @include app-ltr-style { + .flatpickr-calendar.hasWeeks .flatpickr-days { + border-left: 0; + padding-left: calc(#{$flatpickr-content-padding-x} + #{light.$dropdown-border-width}px); + box-shadow: light.$dropdown-border-width 0 0 opacify(light.$dropdown-border-color, 0.05) inset; + } + } + + @include app-rtl-style { + .flatpickr-calendar.hasWeeks .flatpickr-days { + border-right: 0; + padding-right: calc(#{$flatpickr-content-padding-x} + #{light.$dropdown-border-width}px); + box-shadow: -(light.$dropdown-border-width) 0 0 opacify(light.$dropdown-border-color, 0.05) inset; + } + } + + .flatpickr-calendar { + line-height: light.$line-height-base; + font-size: light.$font-size-base; + box-shadow: light.$card-box-shadow; + + @include light.border-radius(light.$border-radius); + + &.hasTime:not(.noCalendar):not(.hasTime) .flatpickr-time { + display: none !important; + } + + &.hasTime .flatpickr-time { + box-shadow: 0 1px 0 light.$border-color inset; + } + } + .flatpickr-monthDropdown-months { + color: light.$headings-color; + } + .flatpickr-current-month { + font-size: light.$big-font-size; + color: light.$headings-color; + .cur-month, + .cur-year { + font-size: light.$font-size-base; + font-weight: 400; + color: light.$headings-color; + } + } + + .flatpickr-month, + span.flatpickr-weekday, + .flatpickr-weekdays { + background: light.$dropdown-bg; + } + .flatpickr-month { + @include light.border-top-radius(light.$border-radius); + // ! FIX: OS Windows and Linux Browsers DD Option color + option.flatpickr-monthDropdown-month { + color: light.$body-color; + background: #{light.$input-bg}; + } + } + + span.flatpickr-weekday { + color: light.$headings-color; + font-size: light.$font-size-sm; + } + + .flatpickr-day { + color: light.$headings-color; + @include light.border-radius(light.$border-radius-pill); + + &:hover, + &:focus, + &.prevMonthDay:hover, + &.nextMonthDay:hover, + &.today:hover, + &.prevMonthDay:focus, + &.nextMonthDay:focus, + &.today:focus { + color: light.$body-color; + background: light.rgba-to-hex(rgba(light.$black, 0.06), light.$rgba-to-hex-bg); + &:not(.today) { + border-color: transparent; + } + } + + &.prevMonthDay, + &.nextMonthDay, + &.flatpickr-disabled { + color: light.$text-muted !important; + + &.today { + border: none; + } + } + + &.disabled { + color: light.$text-muted !important; + } + + &.selected.startRange.endRange { + border-radius: light.$border-radius-pill !important; + } + } + + .flatpickr-weeks { + border-bottom: light.$dropdown-border-width solid opacify(light.$dropdown-border-color, 0.05); + border-left: light.$dropdown-border-width solid opacify(light.$dropdown-border-color, 0.05); + background: light.$card-bg; + + @include light.border-bottom-radius(light.$border-radius); + border-bottom-right-radius: 0; + .flatpickr-day { + color: light.$headings-color; + } + } + + @include app-rtl-style { + .flatpickr-weeks { + border-right: light.$dropdown-border-width solid opacify(light.$dropdown-border-color, 0.05); + border-left: 0; + + @include light.border-bottom-radius(light.$border-radius); + border-bottom-left-radius: 0; + } + } + + .flatpickr-time { + border: light.$dropdown-border-width solid opacify(light.$dropdown-border-color, 0.05); + background: #{light.$dropdown-bg}; + + @include light.border-radius(light.$border-radius); + + input { + color: light.$body-color; + font-size: light.$font-size-base; + + &.flatpickr-hour { + font-weight: light.$font-weight-medium; + } + + &.flatpickr-minute, + &.flatpickr-second { + font-weight: light.$font-weight-medium; + } + } + + .numInputWrapper span { + &.arrowUp:after { + border-bottom-color: light.$text-muted; + } + + &.arrowDown:after { + border-top-color: light.$text-muted; + } + } + + .flatpickr-am-pm { + color: light.$body-color; + } + + .flatpickr-time-separator { + color: light.$body-color; + font-weight: light.$font-weight-medium; + } + } + } +} + +// Dark layout +@if $enable-dark-style { + .dark-style { + .flatpickr-calendar { + background: dark.$dropdown-bg; + } + .flatpickr-prev-month, + .flatpickr-next-month { + background-color: dark.rgba-to-hex(rgba(dark.$base, 0.08), dark.$card-bg); + svg { + fill: dark.$body-color; + stroke: dark.$body-color; + } + } + .flatpickr-calendar, + .flatpickr-days { + width: calc(#{$flatpickr-width} + calc(#{dark.$dropdown-border-width} * 2px)) !important; + } + @include app-ltr-style { + .flatpickr-calendar.hasWeeks { + width: calc( + #{$flatpickr-width + $flatpickr-cell-size} + calc(#{dark.$dropdown-border-width} * 3px) + 0.355rem + ) !important; + } + } + @include app-rtl-style { + .flatpickr-calendar.hasWeeks { + width: calc( + #{$flatpickr-width + $flatpickr-cell-size} + calc(#{dark.$dropdown-border-width} * 3px) + 1rem + ) !important; + } + } + .flatpickr-calendar.open { + z-index: light.$zindex-popover; + } + + //! Flatpickr provide default input as readonly, applying default input style to readonly + .flatpickr-input:not(.is-invalid):not(.is-valid) ~ .form-control:disabled, + .flatpickr-input:not(.is-invalid):not(.is-valid)[readonly], + .flatpickr-input:not(.is-invalid):not(.is-valid) ~ .form-control[readonly] { + background-color: #{dark.$input-bg}; + } + + .flatpickr-days { + border: dark.$dropdown-border-width solid opacify(dark.$dropdown-border-color, 0.05); + border-top: 0; + padding: $flatpickr-content-padding-y $flatpickr-content-padding-x; + padding-bottom: $flatpickr-content-padding-x; + background: #{dark.$dropdown-bg}; + background-clip: padding-box; + + @include dark.border-bottom-radius(dark.$border-radius); + } + + @include app-ltr-style { + .flatpickr-calendar.hasWeeks .flatpickr-days { + border-left: 0; + padding-left: calc(#{$flatpickr-content-padding-x} + #{dark.$dropdown-border-width}px); + box-shadow: dark.$dropdown-border-width 0 0 opacify(dark.$dropdown-border-color, 0.05) inset; + } + } + + @include app-rtl-style { + .flatpickr-calendar.hasWeeks .flatpickr-days { + border-right: 0; + padding-right: calc(#{$flatpickr-content-padding-x} + #{dark.$dropdown-border-width}px); + box-shadow: -(dark.$dropdown-border-width) 0 0 opacify(dark.$dropdown-border-color, 0.05) inset; + } + } + .flatpickr-calendar { + line-height: dark.$line-height-base; + font-size: dark.$font-size-base; + box-shadow: dark.$card-box-shadow; + background-color: dark.$card-bg; + + @include dark.border-radius(dark.$border-radius-lg); + + &.hasTime:not(.noCalendar):not(.hasTime) .flatpickr-time { + display: none !important; + } + + &.hasTime .flatpickr-time { + box-shadow: 0 1px 0 dark.$border-color inset; + } + } + + .flatpickr-month, + span.flatpickr-weekday, + .flatpickr-weekdays { + background: dark.$dropdown-bg; + } + + .flatpickr-month { + @include dark.border-top-radius(dark.$border-radius); + // ! FIX: OS Windows and Linux Browsers DD Option color + option.flatpickr-monthDropdown-month { + color: dark.$body-color; + background: #{dark.$card-bg}; + } + } + + .flatpickr-monthDropdown-months { + color: dark.$headings-color; + } + .flatpickr-current-month { + font-size: dark.$big-font-size; + color: dark.$headings-color; + .cur-month, + .cur-year { + font-size: dark.$font-size-base; + font-weight: 400; + color: dark.$headings-color; + } + } + + span.flatpickr-weekday { + font-size: dark.$font-size-sm; + color: dark.$headings-color; + } + + .flatpickr-day { + color: dark.$headings-color; + font-weight: dark.$font-weight-medium; + @include dark.border-radius(dark.$border-radius-pill); + + &:hover, + &:focus, + &.nextMonthDay:hover, + &.prevMonthDay:hover, + &.today:hover, + &.nextMonthDay:focus, + &.prevMonthDay:focus, + &.today:focus { + border-color: transparent; + background: dark.rgba-to-hex(rgba(dark.$base, 0.08), dark.$card-bg); + } + + &.nextMonthDay, + &.prevMonthDay, + &.flatpickr-disabled { + color: dark.$text-muted !important; + + &.today { + border: 0; + } + } + + &.selected.startRange.endRange { + border-radius: dark.$border-radius-pill !important; + } + + &.disabled { + color: dark.$text-muted !important; + } + &.selected { + box-shadow: dark.$box-shadow-sm; + } + } + + .flatpickr-weeks { + border-bottom: dark.$dropdown-border-width solid opacify(dark.$dropdown-border-color, 0.05); + border-left: dark.$dropdown-border-width solid opacify(dark.$dropdown-border-color, 0.05); + background: dark.$dropdown-bg; + + @include dark.border-bottom-radius(dark.$border-radius); + border-bottom-right-radius: 0; + .flatpickr-day { + color: dark.$headings-color; + } + } + + @include app-rtl-style { + .flatpickr-weeks { + border-right: dark.$dropdown-border-width solid opacify(dark.$dropdown-border-color, 0.05); + border-left: 0; + } + } + + .flatpickr-time { + border: dark.$dropdown-border-width solid opacify(dark.$dropdown-border-color, 0.05); + background: #{dark.$dropdown-bg}; + + @include dark.border-radius(dark.$border-radius); + + input { + color: dark.$body-color; + + &.flatpickr-hour { + font-weight: dark.$font-weight-medium; + } + + &.flatpickr-minute, + &.flatpickr-second { + font-weight: dark.$font-weight-medium; + } + } + + .numInputWrapper span { + &.arrowUp:after { + border-bottom-color: dark.$text-muted; + } + + &.arrowDown:after { + border-top-color: dark.$text-muted; + } + } + + .flatpickr-am-pm { + color: dark.$body-color; + } + + .flatpickr-time-separator { + color: dark.$body-color; + font-weight: dark.$font-weight-medium; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/fullcalendar/_mixins.scss b/src/modules/Resources/assets/vendor/libs/fullcalendar/_mixins.scss new file mode 100644 index 0000000..4c40892 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/fullcalendar/_mixins.scss @@ -0,0 +1,23 @@ +@mixin fullcalendar-theme($background, $color) { + .fc { + // FC event + @include bg-label-variant('.fc-event-primary:not(.fc-list-event)', $background); + // FC list event + .fc-event-primary.fc-list-event { + .fc-list-event-dot { + border-color: $background !important; + } + } + + .fc-button-primary:not(.fc-prev-button):not(.fc-next-button) { + background-color: rgba($background, 0.16) !important; + border: 0; + color: $background; + &.fc-button-active, + &:hover { + background-color: rgba($background, 0.24) !important; + color: $background; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/fullcalendar/fullcalendar.js b/src/modules/Resources/assets/vendor/libs/fullcalendar/fullcalendar.js new file mode 100644 index 0000000..64caa33 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/fullcalendar/fullcalendar.js @@ -0,0 +1,22 @@ +import { Calendar } from '@fullcalendar/core'; +import dayGridPlugin from '@fullcalendar/daygrid'; +import interactionPlugin from '@fullcalendar/interaction'; +import listPlugin from '@fullcalendar/list'; +import timegridPlugin from '@fullcalendar/timegrid'; + +const calendarPlugins = { + dayGrid: dayGridPlugin, + interaction: interactionPlugin, + list: listPlugin, + timeGrid: timegridPlugin +}; + +try { + window.Calendar = Calendar; + window.dayGridPlugin = dayGridPlugin; + window.interactionPlugin = interactionPlugin; + window.listPlugin = listPlugin; + window.timegridPlugin = timegridPlugin; +} catch (e) {} + +export { Calendar, dayGridPlugin, interactionPlugin, listPlugin, timegridPlugin }; diff --git a/src/modules/Resources/assets/vendor/libs/fullcalendar/fullcalendar.scss b/src/modules/Resources/assets/vendor/libs/fullcalendar/fullcalendar.scss new file mode 100644 index 0000000..3224c44 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/fullcalendar/fullcalendar.scss @@ -0,0 +1,535 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'mixins'; + +$fullcalendar-event-padding-y: 0.25rem !default; +$fullcalendar-event-padding-x: 0.75rem !default; +$fullcalendar-event-margin-top: 0.625rem !default; +$fullcalendar-event-font-size: light.$font-size-base !default; +$fullcalendar-event-font-weight: light.$font-weight-medium !default; +$fullcalendar-toolbar-btn-padding: light.$input-btn-padding-y - 0.115 light.$input-btn-padding-x !default; +$fullcalendar-fc-popover-z-index: 1090 !default; +$fullcalendar-event-border-radius: light.$border-radius-sm !default; +$fullcalendar-today-background-light: light.rgba-to-hex(light.$gray-50, light.$rgba-to-hex-bg) !default; +$fullcalendar-today-background-dark: dark.rgba-to-hex(dark.$gray-50, dark.$rgba-to-hex-bg) !default; + +// Calendar +.fc { + .fc-scrollgrid-section { + height: 0px; + } + a[data-navlink]:hover { + text-decoration: none; + } + .fc-timegrid-slot { + height: 4em !important; + } + .fc-timeGridWeek-view { + .fc-timegrid-slot-minor { + border-top-style: none; + } + } + .fc-timeGridDay-view { + .fc-timegrid-slot-minor { + border-top-style: solid; + } + } + + .fc-col-header-cell-cushion { + padding-top: 8.7px !important; + padding-bottom: 8.7px !important; + } + .fc-toolbar { + flex-wrap: wrap; + .fc-prev-button, + .fc-next-button { + display: inline-block; + background-color: transparent; + border-color: transparent; + + &:hover, + &:active, + &:focus { + background-color: transparent !important; + border-color: transparent !important; + box-shadow: none !important; + } + } + .fc-button { + border-radius: light.$border-radius; + &:not(.fc-next-button):not(.fc-prev-button) { + padding: $fullcalendar-toolbar-btn-padding; + &:active, + &:focus { + box-shadow: none !important ; + } + } + } + > * > :not(:first-child) { + margin-left: 0 !important; + @include app-rtl(true) { + margin-right: 0 !important; + } + } + + .fc-toolbar-chunk { + display: flex; + align-items: center; + } + + .fc-button-group { + .fc-button { + text-transform: capitalize; + } + + & + div { + display: flex; + align-items: center; + flex-wrap: wrap; + } + } + .fc--button:empty, + .fc-toolbar-chunk:empty { + display: none; + } + .fc-sidebarToggle-button + div { + margin-left: 0; + } + } + table.fc-scrollgrid { + .fc-col-header { + .fc-col-header-cell { + border-left: none; + } + } + } + .fc-view-harness { + min-height: 650px; + .fc-col-header-cell-cushion { + padding-bottom: 3px; + padding-top: 3px; + } + + // To remove border on weekday row + .fc-scrollgrid-section-header > * { + @include app-ltr(true) { + border-inline-end-width: 0px; + } + @include app-rtl(true) { + border-inline-start-width: 0px; + } + } + + .fc-timegrid-event .fc-event-time { + font-size: 0.6875rem; + } + + .fc-v-event .fc-event-title { + font-size: $fullcalendar-event-font-size; + padding-top: 0.2rem; + font-weight: $fullcalendar-event-font-weight; + } + + .fc-timegrid-event .fc-event-main { + padding: $fullcalendar-event-padding-y $fullcalendar-event-padding-x 0; + } + } + + .fc-daygrid-day-events { + .fc-event, + .fc-more-link { + margin-inline: 0.5rem !important; + } + } + + // To fix firefox thead border issue + .fc-day-today { + background-clip: padding-box; + } + + //! Fix: white color issue of event text + .fc-h-event .fc-event-main, + .fc-v-event .fc-event-main { + color: inherit !important; + } + + .fc-daygrid-block-event .fc-event-time, + .fc-daygrid-dot-event .fc-event-title { + font-weight: $fullcalendar-event-font-weight; + } + + .fc-daygrid-body-natural { + .fc-daygrid-day-events { + margin-top: 0.94rem !important; + margin-bottom: 0.94rem !important; + } + } + + .fc-view-harness { + margin: 0 -1.5rem; + .fc-daygrid-body { + .fc-daygrid-day { + .fc-daygrid-day-top { + flex-direction: row; + .fc-daygrid-day-number { + float: left; + padding: 0.5rem; + } + } + .fc-daygrid-day-bottom .fc-daygrid-more-link { + margin-top: 0.625rem; + } + } + } + .fc-event { + font-size: $fullcalendar-event-font-size; + font-weight: $fullcalendar-event-font-weight; + padding: $fullcalendar-event-padding-y $fullcalendar-event-padding-x; + border-radius: $fullcalendar-event-border-radius; + border: 0; + .fc-event-title { + font-weight: light.$font-weight-medium; + } + } + .fc-daygrid-event-harness { + // ! week & day events are using this style for all day only, not for other events + .fc-event { + &.private-event { + background-color: transparent !important; + border-color: transparent !important; + } + } + } + .fc-event .fc-daygrid-event-dot { + display: none; + } + } + .fc-daygrid-event-harness + .fc-daygrid-event-harness .fc-daygrid-event { + margin-top: $fullcalendar-event-margin-top !important; + } + .fc-timegrid { + .fc-timegrid-divider { + display: none; + } + .fc-timegrid-event { + border-radius: 0px; + box-shadow: none; + padding-top: $fullcalendar-event-padding-x; + .fc-event-time { + font-size: inherit; + } + } + } + .fc-daygrid-event-harness-abs .fc-event { + margin-bottom: 0.625rem; + } + .fc-timegrid-slot-label-frame { + text-align: center; + } + .fc-timegrid-axis-cushion, + .fc-timegrid-slot-label-cushion { + font-size: light.$font-size-sm; + } + .fc-timegrid-axis-cushion { + text-transform: capitalize; + padding: 0.5rem 0.4375rem; + } + .fc-timegrid-slot-label-cushion { + text-transform: uppercase; + padding: $fullcalendar-event-padding-x !important; + } + .fc-list-day-cushion, + .fc-list-table td { + padding-inline: 1rem; + } + .fc-popover { + z-index: $fullcalendar-fc-popover-z-index !important; + .fc-popover-header { + padding: 0.566rem; + } + } + .fc-list { + .fc-list-table { + border-bottom: 1px solid; + } + } + &.fc-theme-standard { + .fc-list { + border: none; + } + } + .fc-day-other { + .fc-daygrid-day-top { + opacity: 1; + } + } +} + +// Light style +@if $enable-light-style { + .light-style { + .fc { + .fc-toolbar { + .fc-prev-button, + .fc-next-button { + .fc-icon { + color: light.$headings-color; + } + } + } + .fc-col-header-cell-cushion { + color: light.$headings-color; + } + &.fc-theme-standard .fc-list-day-cushion { + background-color: $fullcalendar-today-background-light !important; + } + table.fc-scrollgrid { + border-color: light.$border-color; + .fc-col-header { + tbody { + border: none; + } + .fc-col-header-cell { + border-color: light.$border-color; + } + } + td { + border-color: light.$border-color; + } + } + .fc-timegrid-axis-cushion { + color: light.$text-muted; + } + .fc-timegrid-slot-label-cushion { + color: light.$headings-color; + } + .private-event { + .fc-event-time, + .fc-event-title { + color: light.$danger; + } + } + .fc-day-today:not(.fc-col-header-cell) { + background-color: $fullcalendar-today-background-light !important; + .fc-popover-body { + background-color: light.$card-bg !important; + } + } + + .fc-popover { + .fc-popover-header { + background: light.$body-bg; + } + } + .fc-list { + .fc-list-table { + th { + border: 0; + background: light.$body-bg; + } + .fc-list-event { + cursor: pointer; + &:hover { + td { + background-color: light.$gray-25; + } + } + td { + border-color: light.$border-color; + color: light.$body-color; + } + } + .fc-list-day { + th { + color: light.$headings-color; + } + } + tbody > tr:first-child th { + border-top: 1px solid light.$border-color; + } + } + .fc-list-empty { + background-color: light.$body-bg; + } + } + + // Border color + table, + tbody, + thead, + tbody td { + border-color: light.$border-color; + } + .fc-day-other { + .fc-daygrid-day-top { + color: light.$text-muted; + } + } + } + + // ? Style event here + @each $color, $value in light.$theme-colors { + // FC event + @include light.bg-label-variant('.fc-event-#{$color}:not(.fc-list-event)', $value); + + // FC list event + .fc-event-#{$color}.fc-list-event { + .fc-list-event-dot { + border-color: $value !important; + } + } + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + .fc { + .fc-toolbar { + .fc-prev-button, + .fc-next-button { + .fc-icon { + color: dark.$headings-color; + } + } + .fc-sidebarToggle-button { + color: dark.$white; + } + } + .fc-col-header-cell-cushion { + color: dark.$headings-color; + } + &.fc-theme-standard .fc-list-day-cushion { + background-color: $fullcalendar-today-background-dark !important; + } + .fc-timegrid-axis-cushion { + color: dark.$text-muted; + } + .fc-timegrid-slot-label-cushion { + color: dark.$headings-color; + } + + table.fc-scrollgrid { + border-color: dark.$border-color; + .fc-col-header { + tbody { + border: none; + } + .fc-col-header-cell { + border-color: dark.$border-color; + } + } + td { + border-color: dark.$border-color; + } + } + .private-event { + .fc-event-time, + .fc-event-title { + color: dark.$danger; + } + } + + .fc-day-today:not(.fc-col-header-cell) { + background-color: $fullcalendar-today-background-dark !important; + .fc-popover-body { + background-color: dark.$card-bg !important; + } + } + .fc-divider { + background: dark.$border-color; + border-color: dark.$border-color; + } + .fc-popover { + background-color: dark.$body-bg; + border: 0; + + .fc-popover-header { + background-color: dark.$light; + } + } + + .fc-list { + .fc-list-table { + th { + border: 0; + background: dark.$body-bg; + } + .fc-list-event { + cursor: pointer; + &:hover { + td { + background-color: dark.$gray-50; + } + } + td { + border-color: dark.$border-color; + color: dark.$body-color; + } + } + .fc-list-day { + th { + color: dark.$headings-color; + } + } + tbody > tr:first-child th { + border-top: 1px solid dark.$border-color; + } + } + .fc-list-empty { + background-color: dark.$body-bg; + } + } + table, + .fc-timegrid-axis, + tbody, + thead, + tbody td { + border-color: dark.$border-color; + } + + // FC day + .fc-timegrid-axis-cushion.fc-scrollgrid-shrink-cushion { + color: dark.$text-muted; + } + + // FC table list disabled bg + .fc-day-disabled { + background-color: rgba(dark.$base, 0.16); + } + .fc-day-other { + .fc-daygrid-day-top { + color: dark.$text-muted; + } + } + } + // ? Style event here + @each $color, $value in dark.$theme-colors { + // FC event + @include dark.bg-label-variant('.fc-event-#{$color}:not(.fc-list-event)', $value); + .fc-event-#{$color}:not(.fc-list-event) { + box-shadow: none; + } + + // FC list event + .fc-event-#{$color}.fc-list-event { + .fc-list-event-dot { + border-color: $value !important; + } + } + } + } +} + +// Media Queries +@include light.media-breakpoint-down(sm) { + .fc { + .fc-header-toolbar { + .fc-toolbar-chunk + .fc-toolbar-chunk { + margin-top: 1rem; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/hammer/hammer.js b/src/modules/Resources/assets/vendor/libs/hammer/hammer.js new file mode 100644 index 0000000..b358dd4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/hammer/hammer.js @@ -0,0 +1 @@ +import 'hammerjs/hammer.js'; diff --git a/src/modules/Resources/assets/vendor/libs/highlight/highlight-github.scss b/src/modules/Resources/assets/vendor/libs/highlight/highlight-github.scss new file mode 100644 index 0000000..44bedcb --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/highlight/highlight-github.scss @@ -0,0 +1 @@ +@import 'highlight.js/styles/github.css'; diff --git a/src/modules/Resources/assets/vendor/libs/highlight/highlight.js b/src/modules/Resources/assets/vendor/libs/highlight/highlight.js new file mode 100644 index 0000000..3086bda --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/highlight/highlight.js @@ -0,0 +1,7 @@ +import hljs from 'highlight.js'; + +try { + window.hljs = hljs; +} catch (e) {} + +export { hljs }; diff --git a/src/modules/Resources/assets/vendor/libs/highlight/highlight.scss b/src/modules/Resources/assets/vendor/libs/highlight/highlight.scss new file mode 100644 index 0000000..a3b542f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/highlight/highlight.scss @@ -0,0 +1 @@ +@import 'highlight.js/styles/atom-one-light'; diff --git a/src/modules/Resources/assets/vendor/libs/idletimer/idletimer.js b/src/modules/Resources/assets/vendor/libs/idletimer/idletimer.js new file mode 100644 index 0000000..89af693 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/idletimer/idletimer.js @@ -0,0 +1,339 @@ +/*! Idle Timer - v1.1.1 - 2020-06-25 + * https://github.com/thorst/jquery-idletimer + * Copyright (c) 2020 Paul Irish; Licensed MIT */ +/* + mousewheel (deprecated) -> IE6.0, Chrome, Opera, Safari + DOMMouseScroll (deprecated) -> Firefox 1.0 + wheel (standard) -> Chrome 31, Firefox 17, IE9, Firefox Mobile 17.0 + + //No need to use, use DOMMouseScroll + MozMousePixelScroll -> Firefox 3.5, Firefox Mobile 1.0 + + //Events + WheelEvent -> see wheel + MouseWheelEvent -> see mousewheel + MouseScrollEvent -> Firefox 3.5, Firefox Mobile 1.0 +*/ +(function ($) { + $.idleTimer = function (firstParam, elem) { + var opts; + if (typeof firstParam === 'object') { + opts = firstParam; + firstParam = null; + } else if (typeof firstParam === 'number') { + opts = { timeout: firstParam }; + firstParam = null; + } + + // element to watch + elem = elem || document; + + // defaults that are to be stored as instance props on the elem + opts = $.extend( + { + idle: false, // indicates if the user is idle + timeout: 30000, // the amount of time (ms) before the user is considered idle + events: + 'mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove' // define active events + }, + opts + ); + + var jqElem = $(elem), + obj = jqElem.data('idleTimerObj') || {}, + /* (intentionally not documented) + * Toggles the idle state and fires an appropriate event. + * @return {void} + */ + toggleIdleState = function (e) { + var obj = $.data(elem, 'idleTimerObj') || {}; + + // toggle the state + obj.idle = !obj.idle; + + // store toggle state date time + obj.olddate = +new Date(); + + // create a custom event, with state and name space + var event = $.Event((obj.idle ? 'idle' : 'active') + '.idleTimer'); + + // trigger event on object with elem and copy of obj + $(elem).trigger(event, [elem, $.extend({}, obj), e]); + }, + /** + * Handle event triggers + * @return {void} + * @method event + * @static + */ + handleEvent = function (e) { + var obj = $.data(elem, 'idleTimerObj') || {}; + + // ignore writting to storage unless related to idleTimer + if (e.type === 'storage' && e.originalEvent.key !== obj.timerSyncId) { + return; + } + + // this is already paused, ignore events for now + if (obj.remaining != null) { + return; + } + + /* + mousemove is kinda buggy, it can be triggered when it should be idle. + Typically is happening between 115 - 150 milliseconds after idle triggered. + @psyafter & @kaellis report "always triggered if using modal (jQuery ui, with overlay)" + @thorst has similar issues on ios7 "after $.scrollTop() on text area" + */ + if (e.type === 'mousemove') { + // if coord are same, it didn't move + if (e.pageX === obj.pageX && e.pageY === obj.pageY) { + return; + } + // if coord don't exist how could it move + if (typeof e.pageX === 'undefined' && typeof e.pageY === 'undefined') { + return; + } + // under 200 ms is hard to do, and you would have to stop, as continuous activity will bypass this + var elapsed = +new Date() - obj.olddate; + if (elapsed < 200) { + return; + } + } + + // clear any existing timeout + clearTimeout(obj.tId); + + // if the idle timer is enabled, flip + if (obj.idle) { + toggleIdleState(e); + } + + // store when user was last active + obj.lastActive = +new Date(); + + // update mouse coord + obj.pageX = e.pageX; + obj.pageY = e.pageY; + + // sync lastActive + if (e.type !== 'storage' && obj.timerSyncId) { + if (typeof localStorage !== 'undefined') { + localStorage.setItem(obj.timerSyncId, obj.lastActive); + } + } + + // set a new timeout + obj.tId = setTimeout(toggleIdleState, obj.timeout); + }, + /** + * Restore initial settings and restart timer + * @return {void} + * @method reset + * @static + */ + reset = function () { + var obj = $.data(elem, 'idleTimerObj') || {}; + + // reset settings + obj.idle = obj.idleBackup; + obj.olddate = +new Date(); + obj.lastActive = obj.olddate; + obj.remaining = null; + + // reset Timers + clearTimeout(obj.tId); + if (!obj.idle) { + obj.tId = setTimeout(toggleIdleState, obj.timeout); + } + }, + /** + * Store remaining time, stop timer + * You can pause from an idle OR active state + * @return {void} + * @method pause + * @static + */ + pause = function () { + var obj = $.data(elem, 'idleTimerObj') || {}; + + // this is already paused + if (obj.remaining != null) { + return; + } + + // define how much is left on the timer + obj.remaining = obj.timeout - (+new Date() - obj.olddate); + + // clear any existing timeout + clearTimeout(obj.tId); + }, + /** + * Start timer with remaining value + * @return {void} + * @method resume + * @static + */ + resume = function () { + var obj = $.data(elem, 'idleTimerObj') || {}; + + // this isn't paused yet + if (obj.remaining == null) { + return; + } + + // start timer + if (!obj.idle) { + obj.tId = setTimeout(toggleIdleState, obj.remaining); + } + + // clear remaining + obj.remaining = null; + }, + /** + * Stops the idle timer. This removes appropriate event handlers + * and cancels any pending timeouts. + * @return {void} + * @method destroy + * @static + */ + destroy = function () { + var obj = $.data(elem, 'idleTimerObj') || {}; + + //clear any pending timeouts + clearTimeout(obj.tId); + + //Remove data + jqElem.removeData('idleTimerObj'); + + //detach the event handlers + jqElem.off('._idleTimer'); + }, + /** + * Returns the time until becoming idle + * @return {number} + * @method remainingtime + * @static + */ + remainingtime = function () { + var obj = $.data(elem, 'idleTimerObj') || {}; + + //If idle there is no time remaining + if (obj.idle) { + return 0; + } + + //If its paused just return that + if (obj.remaining != null) { + return obj.remaining; + } + + //Determine remaining, if negative idle didn't finish flipping, just return 0 + var remaining = obj.timeout - (+new Date() - obj.lastActive); + if (remaining < 0) { + remaining = 0; + } + + //If this is paused return that number, else return current remaining + return remaining; + }; + + // determine which function to call + if (firstParam === null && typeof obj.idle !== 'undefined') { + // they think they want to init, but it already is, just reset + reset(); + return jqElem; + } else if (firstParam === null) { + // they want to init + } else if (firstParam !== null && typeof obj.idle === 'undefined') { + // they want to do something, but it isnt init + // not sure the best way to handle this + return false; + } else if (firstParam === 'destroy') { + destroy(); + return jqElem; + } else if (firstParam === 'pause') { + pause(); + return jqElem; + } else if (firstParam === 'resume') { + resume(); + return jqElem; + } else if (firstParam === 'reset') { + reset(); + return jqElem; + } else if (firstParam === 'getRemainingTime') { + return remainingtime(); + } else if (firstParam === 'getElapsedTime') { + return +new Date() - obj.olddate; + } else if (firstParam === 'getLastActiveTime') { + return obj.lastActive; + } else if (firstParam === 'isIdle') { + return obj.idle; + } + + // Test via a getter in the options object to see if the passive property is accessed + // This isnt working in jquery, though is planned for 4.0 + // https://github.com/jquery/jquery/issues/2871 + /*var supportsPassive = false; + try { + var Popts = Object.defineProperty({}, "passive", { + get: function() { + supportsPassive = true; + } + }); + window.addEventListener("test", null, Popts); + } catch (e) {} +*/ + + /* (intentionally not documented) + * Handles a user event indicating that the user isn't idle. namespaced with internal idleTimer + * @param {Event} event A DOM2-normalized event object. + * @return {void} + */ + jqElem.on((opts.events + ' ').split(' ').join('._idleTimer ').trim(), function (e) { + handleEvent(e); + }); + //}, supportsPassive ? { passive: true } : false); + + if (opts.timerSyncId) { + $(window).on('storage', handleEvent); + } + + // Internal Object Properties, This isn't all necessary, but we + // explicitly define all keys here so we know what we are working with + obj = $.extend( + {}, + { + olddate: +new Date(), // the last time state changed + lastActive: +new Date(), // the last time timer was active + idle: opts.idle, // current state + idleBackup: opts.idle, // backup of idle parameter since it gets modified + timeout: opts.timeout, // the interval to change state + remaining: null, // how long until state changes + timerSyncId: opts.timerSyncId, // localStorage key to use for syncing this timer + tId: null, // the idle timer setTimeout + pageX: null, // used to store the mouse coord + pageY: null + } + ); + + // set a timeout to toggle state. May wish to omit this in some situations + if (!obj.idle) { + obj.tId = setTimeout(toggleIdleState, obj.timeout); + } + + // store our instance on the object + $.data(elem, 'idleTimerObj', obj); + + return jqElem; + }; + + // This allows binding to element + $.fn.idleTimer = function (firstParam) { + if (this[0]) { + return $.idleTimer(firstParam, this[0]); + } + + return this; + }; +})(jQuery); diff --git a/src/modules/Resources/assets/vendor/libs/jkanban/jkanban.js b/src/modules/Resources/assets/vendor/libs/jkanban/jkanban.js new file mode 100644 index 0000000..06a987f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jkanban/jkanban.js @@ -0,0 +1 @@ +import 'jkanban/dist/jkanban'; diff --git a/src/modules/Resources/assets/vendor/libs/jkanban/jkanban.scss b/src/modules/Resources/assets/vendor/libs/jkanban/jkanban.scss new file mode 100644 index 0000000..543ad3f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jkanban/jkanban.scss @@ -0,0 +1,28 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'jkanban/dist/jkanban'; + +// Light layout +@if $enable-light-style { + .light-style { + .kanban-board { + background: light.$border-color; + } + .kanban-item { + background: light.$card-bg; + } + } +} + +// Dark layout +@if $enable-dark-style { + .dark-style { + .kanban-board { + background: dark.$border-color; + } + .kanban-item { + background: dark.$card-bg; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/jquery-repeater/jquery-repeater.js b/src/modules/Resources/assets/vendor/libs/jquery-repeater/jquery-repeater.js new file mode 100644 index 0000000..ae51ee7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jquery-repeater/jquery-repeater.js @@ -0,0 +1 @@ +import 'jquery.repeater/jquery.repeater'; diff --git a/src/modules/Resources/assets/vendor/libs/jquery-sticky/jquery-sticky.js b/src/modules/Resources/assets/vendor/libs/jquery-sticky/jquery-sticky.js new file mode 100644 index 0000000..206891e --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jquery-sticky/jquery-sticky.js @@ -0,0 +1 @@ +import 'jquery-sticky/jquery.sticky'; diff --git a/src/modules/Resources/assets/vendor/libs/jquery-timepicker/_mixins.scss b/src/modules/Resources/assets/vendor/libs/jquery-timepicker/_mixins.scss new file mode 100644 index 0000000..19d71bb --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jquery-timepicker/_mixins.scss @@ -0,0 +1,11 @@ +@import '../../scss/_bootstrap-extended/_functions'; + +@mixin timepicker-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + li.ui-timepicker-selected, + .ui-timepicker-list .ui-timepicker-selected:hover { + color: $color !important; + background: $background !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js b/src/modules/Resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js new file mode 100644 index 0000000..3b42569 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.js @@ -0,0 +1 @@ +import 'timepicker/jquery.timepicker'; diff --git a/src/modules/Resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.scss b/src/modules/Resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.scss new file mode 100644 index 0000000..5b8e917 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jquery-timepicker/jquery-timepicker.scss @@ -0,0 +1,116 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +.ui-timepicker-wrapper { + max-height: 10rem; + overflow-y: auto; + margin: 0.125rem 0; + background: light.$white; + background-clip: padding-box; + outline: none; +} + +.ui-timepicker-list { + list-style: none; + padding: 0.125rem 0; + margin: 0; +} + +.ui-timepicker-duration { + margin-left: 0.25rem; + + @include app-rtl { + margin-left: 0; + margin-right: 0.25rem; + } +} + +.ui-timepicker-list li { + padding: 0.25rem 0.75rem; + margin: 0.125rem 0.875rem; + white-space: nowrap; + cursor: pointer; + list-style: none; + border-radius: light.$dropdown-border-radius; + + &.ui-timepicker-disabled, + &.ui-timepicker-selected.ui-timepicker-disabled { + background: light.$white !important; + cursor: default !important; + } +} + +@if $enable-light-style { + .light-style { + .ui-timepicker-wrapper { + padding: light.$dropdown-padding-y; + z-index: light.$zindex-popover; + background: light.$dropdown-bg; + box-shadow: light.$card-box-shadow; + border: light.$dropdown-border-width solid light.$dropdown-border-color; + + @include light.border-radius(light.$border-radius); + } + + .ui-timepicker-list li { + color: light.$dropdown-link-color; + + &:hover { + background: light.$dropdown-link-hover-bg; + } + &:not(.ui-timepicker-selected) { + .ui-timepicker-duration { + color: light.$text-muted; + + .ui-timepicker-list:hover & { + color: light.$text-muted; + } + } + } + } + + .ui-timepicker-list li.ui-timepicker-disabled, + .ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled { + background: light.$dropdown-bg !important; + color: light.$dropdown-link-disabled-color !important; + } + } +} + +@if $enable-dark-style { + .dark-style { + .ui-timepicker-wrapper { + border: dark.$dropdown-border-width solid dark.$dropdown-border-color; + padding: dark.$dropdown-padding-y 0; + z-index: dark.$zindex-popover; + background: dark.$dropdown-bg; + box-shadow: dark.$card-box-shadow; + + @include dark.border-radius(dark.$border-radius); + } + + .ui-timepicker-list li { + color: dark.$dropdown-link-color; + + &:hover { + background: dark.$dropdown-link-hover-bg; + } + &:not(.ui-timepicker-selected) { + .ui-timepicker-duration { + color: dark.$text-muted; + + .ui-timepicker-list:hover & { + color: dark.$text-muted; + } + } + } + } + + .ui-timepicker-list li.ui-timepicker-disabled, + .ui-timepicker-list li.ui-timepicker-selected.ui-timepicker-disabled { + color: dark.$dropdown-link-disabled-color !important; + background: dark.$dropdown-bg !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/jquery/jquery.js b/src/modules/Resources/assets/vendor/libs/jquery/jquery.js new file mode 100644 index 0000000..2df0597 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jquery/jquery.js @@ -0,0 +1,8 @@ +import jQuery from 'jquery/dist/jquery'; + +const $ = jQuery; +try { + window.jQuery = window.$ = jQuery; +} catch (e) {} + +export { jQuery, $ }; diff --git a/src/modules/Resources/assets/vendor/libs/jstree/jstree.js b/src/modules/Resources/assets/vendor/libs/jstree/jstree.js new file mode 100644 index 0000000..9a3a55c --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jstree/jstree.js @@ -0,0 +1 @@ +import 'jstree/dist/jstree'; diff --git a/src/modules/Resources/assets/vendor/libs/jstree/jstree.scss b/src/modules/Resources/assets/vendor/libs/jstree/jstree.scss new file mode 100644 index 0000000..32023ff --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jstree/jstree.scss @@ -0,0 +1,115 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'jstree/dist/themes/default/style'; +@import 'jstree/dist/themes/default-dark/style'; +@import './themes/theme'; + +// Light Style +@if $enable-light-style { + .light-style { + // Folder Icons and text colors + .jstree { + .jstree-container-ul { + .jstree-icon.ti-folder, + .ion-ios-folder { + color: light.$warning; + } + .jstree-icon.ti-file { + color: light.$primary; + } + } + } + // Context Menu Styling + + .vakata-context.jstree-contextmenu { + background: light.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(light.$black, 0.1); + li { + a { + padding: 0 1.5rem; + text-shadow: none; + i { + display: none; + } + } + &.vakata-context-hover { + a { + box-shadow: none; + } + } + &.vakata-context-separator { + a { + margin: 0; + } + } + ul { + background: light.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(light.$black, 0.1); + } + } + .vakata-contextmenu-sep { + display: none; + } + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + // Folder Icons and text colors + .jstree { + .jstree-container-ul { + .jstree-icon.ti-folder, + .ion-ios-folder { + color: dark.$warning; + } + .jstree-icon.ti-file { + color: dark.$primary; + } + } + } + + // Context Menu Styling + + .vakata-context.jstree-contextmenu { + background: dark.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(dark.$black, 0.1); + li { + a { + padding: 0 1.5rem; + text-shadow: none; + i { + display: none; + } + } + &.vakata-context-hover { + a { + box-shadow: none; + } + } + &.vakata-context-separator { + a { + margin: 0; + } + } + ul { + background: dark.$white; + border: 0; + box-shadow: 0px 0px 50px 0px rgba(dark.$black, 0.1); + } + } + .vakata-contextmenu-sep { + display: none; + } + } + } +} +.jstree-default-dark .jstree-anchor { + text-shadow: none !important; + color: dark.$body-color; +} diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/_theme.scss b/src/modules/Resources/assets/vendor/libs/jstree/themes/_theme.scss new file mode 100644 index 0000000..12af432 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/jstree/themes/_theme.scss @@ -0,0 +1,123 @@ +@import '../../../scss/_bootstrap-extended/include'; // imported for media query mixin + +// Light Style +@if $enable-light-style { + $theme-name: 'default'; + $throbber-bg: "url('./themes/default/throbber.gif')"; + $small-bg: "url('./themes/default/32px.png')"; + $big-bg: "url('./themes/default/40px.png')"; + + .jstree-#{$theme-name} { + background: transparent; + } + .jstree-#{$theme-name} > .jstree-container-ul .jstree-loading > .jstree-ocl, + .jstree-#{$theme-name}-small > .jstree-container-ul .jstree-loading > .jstree-ocl, + .jstree-#{$theme-name}-large > .jstree-container-ul .jstree-loading > .jstree-ocl { + background-image: #{$throbber-bg}; + } + + .jstree-#{$theme-name} .jstree-node, + .jstree-#{$theme-name} .jstree-icon, + .jstree-#{$theme-name} .jstree-file, + .jstree-#{$theme-name} .jstree-folder, + #jstree-dnd.jstree-#{$theme-name} .jstree-ok, + #jstree-dnd.jstree-#{$theme-name} .jstree-er, + .jstree-#{$theme-name}-small .jstree-node, + .jstree-#{$theme-name}-small .jstree-icon, + .jstree-#{$theme-name}-small .jstree-file, + .jstree-#{$theme-name}-small .jstree-folder, + #jstree-dnd.jstree-#{$theme-name}-small .jstree-ok, + #jstree-dnd.jstree-#{$theme-name}-small .jstree-er, + .jstree-#{$theme-name}-large .jstree-node, + .jstree-#{$theme-name}-large .jstree-icon, + .jstree-#{$theme-name}-large .jstree-file, + .jstree-#{$theme-name}-large .jstree-folder, + #jstree-dnd.jstree-#{$theme-name}-large .jstree-ok, + #jstree-dnd.jstree-#{$theme-name}-large .jstree-er { + background-image: #{$small-bg}; + } + + @include media-breakpoint-down(md) { + #jstree-dnd.jstree-dnd-responsive > .jstree-ok, + #jstree-dnd.jstree-dnd-responsive > .jstree-er, + .jstree-#{$theme-name}-responsive .jstree-icon, + .jstree-#{$theme-name}-responsive .jstree-node, + .jstree-#{$theme-name}-responsive .jstree-icon, + .jstree-#{$theme-name}-responsive .jstree-node > .jstree-ocl, + .jstree-#{$theme-name}-responsive .jstree-themeicon, + .jstree-#{$theme-name}-responsive .jstree-checkbox, + .jstree-#{$theme-name}-responsive .jstree-file, + .jstree-#{$theme-name}-responsive .jstree-folder { + background-image: #{$big-bg}; + } + } + + .jstree-#{$theme-name} .jstree-last, + .jstree-#{$theme-name} > .jstree-no-dots .jstree-node, + .jstree-#{$theme-name} > .jstree-no-dots .jstree-leaf > .jstree-ocl, + .jstree-#{$theme-name} .jstree-disabled, + .jstree-#{$theme-name} .jstree-themeicon-custom:not(.jstree-file):not(.jstree-folder) { + background: transparent !important; + } +} + +// Dark Style +@if $enable-dark-style { + $theme-name: 'default-dark'; + $throbber-bg: "url('./themes/default-dark/throbber.gif')"; + $small-bg: "url('./themes/default-dark/32px.png')"; + $big-bg: "url('./themes/default-dark/40px.png')"; + + .jstree-#{$theme-name} { + background: transparent; + } + .jstree-#{$theme-name} > .jstree-container-ul .jstree-loading > .jstree-ocl, + .jstree-#{$theme-name}-small > .jstree-container-ul .jstree-loading > .jstree-ocl, + .jstree-#{$theme-name}-large > .jstree-container-ul .jstree-loading > .jstree-ocl { + background-image: #{$throbber-bg}; + } + + .jstree-#{$theme-name} .jstree-node, + .jstree-#{$theme-name} .jstree-icon, + .jstree-#{$theme-name} .jstree-file, + .jstree-#{$theme-name} .jstree-folder, + #jstree-dnd.jstree-#{$theme-name} .jstree-ok, + #jstree-dnd.jstree-#{$theme-name} .jstree-er, + .jstree-#{$theme-name}-small .jstree-node, + .jstree-#{$theme-name}-small .jstree-icon, + .jstree-#{$theme-name}-small .jstree-file, + .jstree-#{$theme-name}-small .jstree-folder, + #jstree-dnd.jstree-#{$theme-name}-small .jstree-ok, + #jstree-dnd.jstree-#{$theme-name}-small .jstree-er, + .jstree-#{$theme-name}-large .jstree-node, + .jstree-#{$theme-name}-large .jstree-icon, + .jstree-#{$theme-name}-large .jstree-file, + .jstree-#{$theme-name}-large .jstree-folder, + #jstree-dnd.jstree-#{$theme-name}-large .jstree-ok, + #jstree-dnd.jstree-#{$theme-name}-large .jstree-er { + background-image: #{$small-bg}; + } + + @include media-breakpoint-down(md) { + #jstree-dnd.jstree-dnd-responsive > .jstree-ok, + #jstree-dnd.jstree-dnd-responsive > .jstree-er, + .jstree-#{$theme-name}-responsive .jstree-icon, + .jstree-#{$theme-name}-responsive .jstree-node, + .jstree-#{$theme-name}-responsive .jstree-icon, + .jstree-#{$theme-name}-responsive .jstree-node > .jstree-ocl, + .jstree-#{$theme-name}-responsive .jstree-themeicon, + .jstree-#{$theme-name}-responsive .jstree-checkbox, + .jstree-#{$theme-name}-responsive .jstree-file, + .jstree-#{$theme-name}-responsive .jstree-folder { + background-image: #{$big-bg}; + } + } + + .jstree-#{$theme-name} .jstree-last, + .jstree-#{$theme-name} > .jstree-no-dots .jstree-node, + .jstree-#{$theme-name} > .jstree-no-dots .jstree-leaf > .jstree-ocl, + .jstree-#{$theme-name} .jstree-disabled, + .jstree-#{$theme-name} .jstree-themeicon-custom:not(.jstree-file):not(.jstree-folder) { + background: transparent !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/32px.png b/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/32px.png new file mode 100644 index 0000000..d6fd721 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/32px.png differ diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/40px.png b/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/40px.png new file mode 100644 index 0000000..4fc88e4 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/40px.png differ diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/throbber.gif b/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/throbber.gif new file mode 100644 index 0000000..cd75035 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/jstree/themes/default-dark/throbber.gif differ diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/default/32px.png b/src/modules/Resources/assets/vendor/libs/jstree/themes/default/32px.png new file mode 100644 index 0000000..8950a30 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/jstree/themes/default/32px.png differ diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/default/40px.png b/src/modules/Resources/assets/vendor/libs/jstree/themes/default/40px.png new file mode 100644 index 0000000..1959347 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/jstree/themes/default/40px.png differ diff --git a/src/modules/Resources/assets/vendor/libs/jstree/themes/default/throbber.gif b/src/modules/Resources/assets/vendor/libs/jstree/themes/default/throbber.gif new file mode 100644 index 0000000..1b5b2fd Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/jstree/themes/default/throbber.gif differ diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/images/layers-2x.png b/src/modules/Resources/assets/vendor/libs/leaflet/images/layers-2x.png new file mode 100644 index 0000000..200c333 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/leaflet/images/layers-2x.png differ diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/images/layers.png b/src/modules/Resources/assets/vendor/libs/leaflet/images/layers.png new file mode 100644 index 0000000..1a72e57 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/leaflet/images/layers.png differ diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-icon-2x.png b/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-icon-2x.png new file mode 100644 index 0000000..88f9e50 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-icon-2x.png differ diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-icon.png b/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-icon.png new file mode 100644 index 0000000..950edf2 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-icon.png differ diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-shadow.png b/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-shadow.png new file mode 100644 index 0000000..9fd2979 Binary files /dev/null and b/src/modules/Resources/assets/vendor/libs/leaflet/images/marker-shadow.png differ diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/leaflet.js b/src/modules/Resources/assets/vendor/libs/leaflet/leaflet.js new file mode 100644 index 0000000..6d76387 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/leaflet/leaflet.js @@ -0,0 +1,19 @@ +import leaFlet from 'leaflet'; + +import markerIcon2x from 'leaflet/dist/images/marker-icon-2x.png'; +import markerIcon from 'leaflet/dist/images/marker-icon.png'; +import markerShadow from 'leaflet/dist/images/marker-shadow.png'; + +delete leaFlet.Icon.Default.prototype._getIconUrl; + +leaFlet.Icon.Default.mergeOptions({ + iconRetinaUrl: markerIcon2x, + iconUrl: markerIcon, + shadowUrl: markerShadow +}); + +try { + window.leaFlet = leaFlet; +} catch (e) {} + +export { leaFlet }; diff --git a/src/modules/Resources/assets/vendor/libs/leaflet/leaflet.scss b/src/modules/Resources/assets/vendor/libs/leaflet/leaflet.scss new file mode 100644 index 0000000..a8ee3e3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/leaflet/leaflet.scss @@ -0,0 +1,46 @@ +@import '../../scss/_bootstrap-extended/include'; +@import '../../scss/_custom-variables/libs'; +@import 'leaflet/dist/leaflet'; + +.leaflet-map { + height: 400px; +} + +.leaflet-pane { + z-index: 1; +} + +// RTL + +@include app-rtl(false) { + .leaflet-map { + .leaflet-control-container { + .leaflet-left { + right: 0; + left: unset; + .leaflet-control-zoom, + .leaflet-control-layers { + margin-left: 0; + margin-right: 10px; + } + } + .leaflet-right { + left: 0; + right: unset; + .leaflet-control-zoom, + .leaflet-control-layers { + margin-left: 10px; + margin-right: 0px; + } + } + } + } +} + +//Map tooltip border radius + +.leaflet-popup { + .leaflet-popup-content-wrapper { + border-radius: $border-radius; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/mapbox-gl/mapbox-gl.js b/src/modules/Resources/assets/vendor/libs/mapbox-gl/mapbox-gl.js new file mode 100644 index 0000000..cf7aab5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/mapbox-gl/mapbox-gl.js @@ -0,0 +1,7 @@ +import mapboxgl from 'mapbox-gl'; + +try { + window.mapboxgl = mapboxgl; +} catch (e) {} + +export { mapboxgl }; diff --git a/src/modules/Resources/assets/vendor/libs/mapbox-gl/mapbox-gl.scss b/src/modules/Resources/assets/vendor/libs/mapbox-gl/mapbox-gl.scss new file mode 100644 index 0000000..7435565 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/mapbox-gl/mapbox-gl.scss @@ -0,0 +1,8 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'mapbox-gl/dist/mapbox-gl'; + +.marker-focus { + filter: drop-shadow(0px 0px 7px light.$purple); +} diff --git a/src/modules/Resources/assets/vendor/libs/masonry/masonry.js b/src/modules/Resources/assets/vendor/libs/masonry/masonry.js new file mode 100644 index 0000000..1b99631 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/masonry/masonry.js @@ -0,0 +1,7 @@ +import Masonry from 'masonry-layout'; + +try { + window.Masonry = Masonry; +} catch (e) {} + +export { Masonry }; diff --git a/src/modules/Resources/assets/vendor/libs/moment/moment.js b/src/modules/Resources/assets/vendor/libs/moment/moment.js new file mode 100644 index 0000000..7ab3937 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/moment/moment.js @@ -0,0 +1,7 @@ +import moment from 'moment/moment'; + +try { + window.moment = moment; +} catch (e) {} + +export { moment }; diff --git a/src/modules/Resources/assets/vendor/libs/node-waves/node-waves.js b/src/modules/Resources/assets/vendor/libs/node-waves/node-waves.js new file mode 100644 index 0000000..4fcc263 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/node-waves/node-waves.js @@ -0,0 +1,3 @@ +import nodeWaves from 'node-waves/src/js/waves'; + +window.Waves = nodeWaves; diff --git a/src/modules/Resources/assets/vendor/libs/node-waves/node-waves.scss b/src/modules/Resources/assets/vendor/libs/node-waves/node-waves.scss new file mode 100644 index 0000000..ba09b71 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/node-waves/node-waves.scss @@ -0,0 +1,4 @@ +// Waves +// ******************************************************************************* + +@import 'node-waves/src/scss/waves'; diff --git a/src/modules/Resources/assets/vendor/libs/nouislider/_mixins.scss b/src/modules/Resources/assets/vendor/libs/nouislider/_mixins.scss new file mode 100644 index 0000000..db7d2cf --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/nouislider/_mixins.scss @@ -0,0 +1,26 @@ +@mixin nouislider-variant($parent, $background) { + #{$parent}.noUi-target { + // If slider is not disabled + &:not([disabled]) { + background: rgba($background, 0.16); + .noUi-connect { + background: $background; + } + + .noUi-handle { + border-color: $background; + &:hover { + box-shadow: 0 0 0 8px rgba($background, 0.16); + } + &:active, + &:focus { + box-shadow: 0 0 0 13px rgba($background, 0.16); + } + } + } + } +} + +@mixin nouislider-theme($background) { + @include nouislider-variant('', $background); +} diff --git a/src/modules/Resources/assets/vendor/libs/nouislider/nouislider.js b/src/modules/Resources/assets/vendor/libs/nouislider/nouislider.js new file mode 100644 index 0000000..73b3a45 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/nouislider/nouislider.js @@ -0,0 +1,7 @@ +import noUiSlider from 'nouislider'; + +try { + window.noUiSlider = noUiSlider; +} catch (e) {} + +export { noUiSlider }; diff --git a/src/modules/Resources/assets/vendor/libs/nouislider/nouislider.scss b/src/modules/Resources/assets/vendor/libs/nouislider/nouislider.scss new file mode 100644 index 0000000..99588ce --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/nouislider/nouislider.scss @@ -0,0 +1,398 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import 'nouislider/dist/nouislider'; +@import '../../scss/_custom-variables/libs'; +@import 'mixins'; + +$noUiSlider-handle-color: #fff !default; +$noUiSlider-handle-width: 1.375rem !default; +$noUiSlider-handle-height: 1.375rem !default; +$noUiSlider-bar-height: 0.375rem !default; +$noUiSlider-vertical-height: 13.125rem !default; +$noUiSlider-tick-size: 0.5rem !default; +$noUiSlider-tick-label-font-size: light.$font-size-sm !default; + +.noUi-target { + direction: ltr !important; + position: relative; + border-width: 0; + box-shadow: none; +} + +.noUi-target, +.noUi-target * { + touch-action: none; + user-select: none; + box-sizing: border-box; +} + +.noUi-connects { + height: $noUiSlider-bar-height; + border-radius: light.$border-radius-pill; +} + +.noUi-base, +.noUi-connects { + z-index: 1; + position: relative; + height: 100%; + width: 100%; +} + +.noUi-horizontal .noUi-origin { + height: 0; + + @include app-ltr { + left: auto; + right: 0; + } +} + +.noUi-vertical .noUi-origin { + width: 0; +} + +.noUi-handle { + backface-visibility: hidden; + outline: none !important; + position: absolute; + box-shadow: none; + border: none; + transition: all 0.2s; + border: 4px solid; + background: #fff; + &:before, + &:after { + display: none; + } +} + +.noUi-touch-area { + height: 100%; + width: 100%; +} + +.noUi-state-tap .noUi-connect, +.noUi-state-tap .noUi-origin { + transition: + top 0.3s, + right 0.3s, + bottom 0.3s, + left 0.3s; +} + +.noUi-state-drag * { + cursor: inherit !important; +} + +// Slider size and handle placement + +.noUi-horizontal { + height: $noUiSlider-bar-height; + margin-bottom: 3rem; + margin-top: 1.5rem; +} + +.noUi-horizontal .noUi-handle { + left: -($noUiSlider-handle-width * 0.5); + width: $noUiSlider-handle-width; + height: $noUiSlider-handle-height; + top: ($noUiSlider-bar-height - $noUiSlider-handle-height) * 0.5; + + @include app-ltr { + right: -($noUiSlider-handle-width * 0.5); + left: auto; + } +} + +.noUi-vertical { + width: $noUiSlider-bar-height; +} + +.noUi-vertical .noUi-handle { + bottom: -($noUiSlider-handle-height); + width: $noUiSlider-handle-height; + height: $noUiSlider-handle-width; + right: ($noUiSlider-bar-height - $noUiSlider-handle-height) * 0.5; +} + +// Styling +.noUi-target { + border-radius: 10rem; +} + +// Handles and cursors +.noUi-draggable { + cursor: ew-resize; +} + +.noUi-vertical .noUi-draggable { + cursor: ns-resize; +} + +.noUi-handle { + border-radius: 10rem; + background: $noUiSlider-handle-color; + cursor: pointer; +} + +// Disabled state +.noUi-target[disabled] { + opacity: 0.45; +} + +[disabled] .noUi-handle { + box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.05); +} + +[disabled].noUi-target, +[disabled].noUi-handle, +[disabled] .noUi-handle { + cursor: not-allowed; +} + +// Base +.noUi-pips, +.noUi-pips * { + box-sizing: border-box; +} + +.noUi-pips { + color: #999; + position: absolute; +} + +// Values +.noUi-value { + position: absolute; + white-space: nowrap; + text-align: center; + font-size: $noUiSlider-tick-label-font-size; +} + +// Markings +.noUi-marker { + position: absolute; +} + +// Horizontal layout +.noUi-pips-horizontal { + left: 0; + top: 100%; + padding: (($noUiSlider-handle-height - $noUiSlider-bar-height) * 0.5 + 0.375rem) 0 0 0; + height: 5rem; + width: 100%; +} + +.noUi-value-horizontal { + padding-top: 0.125rem; + transform: translate(-50%, 50%); + + @include app-rtl { + transform: translate(50%, 50%); + } +} + +.noUi-marker-horizontal.noUi-marker { + height: $noUiSlider-tick-size; + width: 1px; +} + +@include app-rtl(false) { + .noUi-horizontal { + .noUi-origin { + left: 0; + } + } +} + +// Vertical layout +.noUi-pips-vertical { + top: 0; + left: 100%; + padding: 0 0 0 (($noUiSlider-handle-height - $noUiSlider-bar-height) * 0.5 + 0.375rem); + height: 100%; + + @include app-rtl { + right: 100%; + left: auto; + } +} + +.noUi-value-vertical { + padding-left: $noUiSlider-tick-size + 0.375rem; + transform: translate(0, 50%); + + @include app-rtl { + right: 100%; + padding-right: $noUiSlider-tick-size + 0.375rem; + padding-left: 0; + } +} + +@include app-rtl(false) { + .noUi-marker-vertical { + right: 100%; + } +} + +.noUi-marker-vertical.noUi-marker { + width: $noUiSlider-tick-size; + height: 1px; +} + +// Tooltips +.noUi-tooltip { + position: absolute; + display: block; + padding: 0.25rem 0.5rem; + border-radius: 0.25rem; + text-align: center; + line-height: 1; + transition: transform 0.2s; + &::after { + content: ''; + position: absolute; + width: 0; + height: 0; + clear: both; + } +} + +.noUi-horizontal .noUi-tooltip { + bottom: 125%; + left: 50%; + transform: translate(-50%, -45%); + &::after { + content: ''; + left: 50%; + transform: translateX(-50%); + top: 1.25rem; + border-left: 8px solid transparent; + border-right: 8px solid transparent; + } +} + +.noUi-vertical .noUi-tooltip { + top: 50%; + right: 125%; + transform: translate(-15%, -52%); + + &::after { + content: ''; + top: 14%; + right: -5px; + border-top: 8px solid transparent; + border-bottom: 8px solid transparent; + @include app-rtl { + left: -14px; + right: auto; + } + } + + @include app-rtl { + right: auto; + left: 125%; + transform: translate(15%, -52%); + } +} + +// Light style +@if $enable-light-style { + .light-style { + $noUiSlider-default-bg: light.$gray-400; + $noUiSlider-tick-label-color: light.$text-light; + .noUi-target { + .noUi-handle { + box-shadow: light.$form-range-thumb-box-shadow; + } + } + + .noUi-value { + color: $noUiSlider-tick-label-color; + } + .noUi-marker { + background: $noUiSlider-tick-label-color; + } + + .noUi-tooltip { + font-size: light.$small-font-size; + color: light.$tooltip-color; + border: none; + background: light.$tooltip-bg; + } + .noUi-horizontal .noUi-tooltip { + &::after { + border-top: 8px solid light.$tooltip-bg; + } + } + .noUi-vertical .noUi-tooltip { + &::after { + border-left: 8px solid light.$tooltip-bg; + } + } + @include app-rtl-style { + .noUi-vertical .noUi-tooltip { + &::after { + border-right: 8px solid light.$tooltip-bg; + border-left: 8px solid transparent; + } + } + } + + @each $color, $value in light.$theme-colors { + @if $color !=primary { + @include nouislider-variant('.noUi-#{$color}', $value); + } + } + } +} + +@if $enable-dark-style { + .dark-style { + $noUiSlider-default-bg: dark.$gray-400; + $noUiSlider-tick-label-color: dark.$text-light; + .noUi-target { + .noUi-handle { + box-shadow: dark.$form-range-thumb-box-shadow; + } + } + + .noUi-value { + color: $noUiSlider-tick-label-color; + } + .noUi-marker { + background: $noUiSlider-tick-label-color; + } + + .noUi-tooltip { + font-size: dark.$small-font-size; + color: dark.$tooltip-color; + border: none; + background: dark.$tooltip-bg; + } + .noUi-horizontal .noUi-tooltip { + &::after { + border-top: 8px solid dark.$tooltip-bg; + } + } + .noUi-vertical .noUi-tooltip { + &::after { + border-left: 8px solid dark.$tooltip-bg; + } + } + @include app-rtl-style { + .noUi-vertical .noUi-tooltip { + &::after { + border-right: 8px solid dark.$tooltip-bg; + border-left: 8px solid transparent; + } + } + } + @each $color, $value in dark.$theme-colors { + @if $color !=primary { + @include nouislider-variant('.noUi-#{$color}', $value); + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/numeral/numeral.js b/src/modules/Resources/assets/vendor/libs/numeral/numeral.js new file mode 100644 index 0000000..d641a00 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/numeral/numeral.js @@ -0,0 +1,8 @@ +import numeral from 'numeral'; +import 'numeral/locales'; + +try { + window.numeral = numeral; +} catch (e) {} + +export { numeral }; diff --git a/src/modules/Resources/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js b/src/modules/Resources/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js new file mode 100644 index 0000000..80556c6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.js @@ -0,0 +1,7 @@ +import PerfectScrollbar from 'perfect-scrollbar/dist/perfect-scrollbar'; + +try { + window.PerfectScrollbar = PerfectScrollbar; +} catch (e) {} + +export { PerfectScrollbar }; diff --git a/src/modules/Resources/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.scss b/src/modules/Resources/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.scss new file mode 100644 index 0000000..da4a4a8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/perfect-scrollbar/perfect-scrollbar.scss @@ -0,0 +1,177 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'perfect-scrollbar/css/perfect-scrollbar'; + +$ps-width: 0.25rem !default; +$ps-hover-width: 0.375rem !default; + +.ps { + position: relative; +} + +.ps__rail-x { + height: $ps-width; +} + +.ps__rail-y { + width: $ps-width; + z-index: 3; +} + +.ps__rail-x, +.ps__rail-y, +.ps__thumb-x, +.ps__thumb-y { + border-radius: 10rem; +} +.ps__rail-x:hover, +.ps__rail-x:focus, +.ps__rail-x.ps--clicking, +.ps__rail-x:hover > .ps__thumb-x, +.ps__rail-x:focus > .ps__thumb-x, +.ps__rail-x.ps--clicking > .ps__thumb-x { + height: $ps-hover-width; +} + +.ps__rail-y:hover, +.ps__rail-y:focus, +.ps__rail-y.ps--clicking, +.ps__rail-y:hover > .ps__thumb-y, +.ps__rail-y:focus > .ps__thumb-y, +.ps__rail-y.ps--clicking > .ps__thumb-y { + width: $ps-hover-width; +} + +.ps__thumb-x { + height: $ps-width; + bottom: 0; +} + +.ps__thumb-y { + width: $ps-width; + right: 0; +} + +// Light layout +@if $enable-light-style { + .light-style { + .ps__thumb-x, + .ps__thumb-y { + background-color: light.$gray-400; + } + + .ps__rail-x:hover, + .ps__rail-y:hover, + .ps__rail-x:focus, + .ps__rail-y:focus, + .ps__rail-x.ps--clicking, + .ps__rail-y.ps--clicking { + background-color: light.$gray-200; + } + + .ps__rail-x:hover > .ps__thumb-x, + .ps__rail-y:hover > .ps__thumb-y, + .ps__rail-x:focus > .ps__thumb-x, + .ps__rail-y:focus > .ps__thumb-y, + .ps__rail-x.ps--clicking > .ps__thumb-x, + .ps__rail-y.ps--clicking > .ps__thumb-y { + background-color: light.$gray-700; + } + + .ps-inverted { + .ps__rail-x:hover, + .ps__rail-y:hover, + .ps__rail-x:focus, + .ps__rail-y:focus, + .ps__rail-x.ps--clicking, + .ps__rail-y.ps--clicking { + background-color: rgba(light.$white, 0.5); + } + + .ps__thumb-x, + .ps__thumb-y { + background-color: rgba(light.$white, 0.7); + } + + .ps__rail-x:hover > .ps__thumb-x, + .ps__rail-y:hover > .ps__thumb-y, + .ps__rail-x:focus > .ps__thumb-x, + .ps__rail-y:focus > .ps__thumb-y, + .ps__rail-x.ps--clicking > .ps__thumb-x, + .ps__rail-y.ps--clicking > .ps__thumb-y { + background-color: light.$white; + } + } + } +} + +// Firefox width issue fixed +@supports (-moz-appearance: none) { + #both-scrollbars-example { + max-width: 1080px; + margin: 0 auto; + padding-left: 0; + padding-right: 0; + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + .ps__thumb-x, + .ps__thumb-y { + background-color: rgba(255, 255, 255, 0.438133) !important; + } + + .ps__rail-x:hover, + .ps__rail-y:hover, + .ps__rail-x:focus, + .ps__rail-y:focus, + .ps__rail-x.ps--clicking, + .ps__rail-y.ps--clicking { + background-color: rgba(255, 255, 255, 0.438133) !important; + } + + .ps__rail-x:hover > .ps__thumb-x, + .ps__rail-y:hover > .ps__thumb-y, + .ps__rail-x:focus > .ps__thumb-x, + .ps__rail-y:focus > .ps__thumb-y, + .ps__rail-x.ps--clicking > .ps__thumb-x, + .ps__rail-y.ps--clicking > .ps__thumb-y { + background-color: dark.$gray-700; + } + + .ps-inverted { + .ps__rail-x:hover, + .ps__rail-y:hover, + .ps__rail-x:focus, + .ps__rail-y:focus, + .ps__rail-x.ps--clicking, + .ps__rail-y.ps--clicking { + background-color: rgba(light.$white, 0.5); + } + + .ps__thumb-x, + .ps__thumb-y { + background-color: rgba(light.$white, 0.7); + } + + .ps__rail-x:hover > .ps__thumb-x, + .ps__rail-y:hover > .ps__thumb-y, + .ps__rail-x:focus > .ps__thumb-x, + .ps__rail-y:focus > .ps__thumb-y, + .ps__rail-x.ps--clicking > .ps__thumb-x, + .ps__rail-y.ps--clicking > .ps__thumb-y { + background-color: light.$white; + } + } + } +} +// RTL rail-y position +.ps--active-y > .ps__rail-y { + @include app-rtl { + left: 0; + right: unset !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/pickr/_mixins.scss b/src/modules/Resources/assets/vendor/libs/pickr/_mixins.scss new file mode 100644 index 0000000..8da073b --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/pickr/_mixins.scss @@ -0,0 +1,11 @@ +@import '../../scss/_custom-variables/libs'; + +// Background & Primary color for picker +@mixin colorPicker-theme($background) { + .pcr-app { + .pcr-type.active, + .pcr-save { + background: $background !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/pickr/_pickr-classic.scss b/src/modules/Resources/assets/vendor/libs/pickr/_pickr-classic.scss new file mode 100644 index 0000000..68d7429 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/pickr/_pickr-classic.scss @@ -0,0 +1,15 @@ +@import '@simonwep/pickr/dist/themes/classic.min'; +@import '../../scss/_custom-variables/libs'; + +@include app-rtl(false) { + .pcr-app[data-theme='classic'] .pcr-selection .pcr-color-preview { + margin-right: inherit; + margin-left: 0.75em; + } + + .pcr-app[data-theme='classic'] .pcr-selection .pcr-color-chooser, + .pcr-app[data-theme='classic'] .pcr-selection .pcr-color-opacity { + margin-left: inherit; + margin-right: 0.75em; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/pickr/_pickr-monolith.scss b/src/modules/Resources/assets/vendor/libs/pickr/_pickr-monolith.scss new file mode 100644 index 0000000..63ecab7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/pickr/_pickr-monolith.scss @@ -0,0 +1,10 @@ +@import '@simonwep/pickr/dist/themes/monolith.min'; + +@include app-rtl(false) { + .pcr-app[data-theme='monolith'] .pcr-selection .pcr-color-preview .pcr-last-color { + border-radius: 0 0.15em 0.15em 0; + } + .pcr-app[data-theme='monolith'] .pcr-selection .pcr-color-preview .pcr-current-color { + border-radius: 0.15em 0 0 0.15em; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/pickr/_pickr-nano.scss b/src/modules/Resources/assets/vendor/libs/pickr/_pickr-nano.scss new file mode 100644 index 0000000..c03bed5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/pickr/_pickr-nano.scss @@ -0,0 +1,7 @@ +@import '@simonwep/pickr/dist/themes/nano.min'; + +@include app-rtl(false) { + .pcr-app[data-theme='nano'] .pcr-selection .pcr-color-preview { + margin-right: 0.6em; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/pickr/pickr-themes.scss b/src/modules/Resources/assets/vendor/libs/pickr/pickr-themes.scss new file mode 100644 index 0000000..aeb2034 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/pickr/pickr-themes.scss @@ -0,0 +1,39 @@ +// Pickr +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +@import 'pickr-classic'; +@import 'pickr-monolith'; +@import 'pickr-nano'; +@import 'mixins'; + +@if $enable-light-style { + .light-style { + .pcr-app { + .pcr-interaction input:focus { + box-shadow: light.$box-shadow; + } + } + } +} + +// Dark style for pickr +@if $enable-dark-style { + .dark-style { + .pcr-app { + background: dark.$card-bg !important; + + .pcr-type:not(.active), + .pcr-result { + background: dark.$dropdown-bg !important; + color: dark.$white !important; + } + .pcr-interaction input:focus { + box-shadow: dark.$box-shadow; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/pickr/pickr.js b/src/modules/Resources/assets/vendor/libs/pickr/pickr.js new file mode 100644 index 0000000..fb3b52f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/pickr/pickr.js @@ -0,0 +1,7 @@ +import pickr from '@simonwep/pickr/dist/pickr.es5.min'; + +try { + window.pickr = pickr; +} catch (e) {} + +export { pickr }; diff --git a/src/modules/Resources/assets/vendor/libs/plyr/_mixins.scss b/src/modules/Resources/assets/vendor/libs/plyr/_mixins.scss new file mode 100644 index 0000000..c4aa97e --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/plyr/_mixins.scss @@ -0,0 +1,52 @@ +@import '../../scss/_bootstrap-extended/functions'; + +// Light style +@mixin plyr-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .plyr input[type='range']::-ms-fill-lower { + background: $background !important; + } + + .plyr input[type='range']:active { + &::-webkit-slider-thumb { + background: $background !important; + } + &::-moz-range-thumb { + background: $background !important; + } + &::-ms-thumb { + background: $background !important; + } + } + .plyr--video .plyr__control.plyr__control--overlaid, + .plyr--video .plyr__controls button.tab-focus:focus, + .plyr--video .plyr__control[aria-expanded='true'], + .plyr--video .plyr__controls button:hover { + background: $background !important; + color: $color !important; + } + + .plyr--audio .plyr__controls button.tab-focus:focus, + .plyr--audio .plyr__control[aria-expanded='true'], + .plyr--audio .plyr__controls button:hover { + background: $background !important; + color: $color !important; + } + + .plyr__play-large { + background: $background !important; + color: $color !important; + } + + .plyr__progress--played, + .plyr__volume--display { + color: $background !important; + } + .plyr--full-ui input[type='range'] { + color: $background !important; + } + .plyr__menu__container .plyr__control[role='menuitemradio'][aria-checked='true']::before { + background: $background !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/plyr/plyr.js b/src/modules/Resources/assets/vendor/libs/plyr/plyr.js new file mode 100644 index 0000000..018283e --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/plyr/plyr.js @@ -0,0 +1,7 @@ +import Plyr from 'plyr'; + +try { + window.Plyr = Plyr; +} catch (e) {} + +export { Plyr }; diff --git a/src/modules/Resources/assets/vendor/libs/plyr/plyr.scss b/src/modules/Resources/assets/vendor/libs/plyr/plyr.scss new file mode 100644 index 0000000..441d93a --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/plyr/plyr.scss @@ -0,0 +1,132 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +// Variables +@import 'plyr/src/sass/settings/breakpoints'; +@import 'plyr/src/sass/settings/colors'; +@import 'plyr/src/sass/settings/cosmetics'; +@import 'plyr/src/sass/settings/type'; +@import 'plyr/src/sass/settings/badges'; +@import 'plyr/src/sass/settings/captions'; +@import 'plyr/src/sass/settings/controls'; +@import 'plyr/src/sass/settings/helpers'; +@import 'plyr/src/sass/settings/menus'; +@import 'plyr/src/sass/settings/progress'; +@import 'plyr/src/sass/settings/sliders'; +@import 'plyr/src/sass/settings/tooltips'; +@import 'plyr/src/sass/lib/animation'; +@import 'plyr/src/sass/lib/functions'; +@import 'plyr/src/sass/lib/mixins'; + +// Components +@import 'plyr/src/sass/base'; +@import 'plyr/src/sass/components/badges'; +@import 'plyr/src/sass/components/captions'; +@import 'plyr/src/sass/components/control'; +@import 'plyr/src/sass/components/controls'; +@import 'plyr/src/sass/components/menus'; +@import 'plyr/src/sass/components/sliders'; +@import 'plyr/src/sass/components/poster'; +@import 'plyr/src/sass/components/times'; +@import 'plyr/src/sass/components/tooltips'; +@import 'plyr/src/sass/components/progress'; +@import 'plyr/src/sass/components/volume'; +@import 'plyr/src/sass/types/audio'; +@import 'plyr/src/sass/types/video'; +@import 'plyr/src/sass/states/fullscreen'; +@import 'plyr/src/sass/plugins/ads'; +@import 'plyr/src/sass/plugins/preview-thumbnails'; +@import 'plyr/src/sass/utils/animation'; +@import 'plyr/src/sass/utils/hidden'; + +.plyr__progress__container, +.plyr__volume input[type='range'] { + flex: 0 1 auto; +} +.plyr--audio .plyr__controls { + padding: 0; +} + +.plyr__menu__container { + @include app-rtl { + direction: rtl; + text-align: right; + + .plyr__control--forward { + &::after { + left: 5px; + right: auto; + border-right-color: rgba($plyr-menu-color, 0.8); + border-left-color: transparent; + } + + &.plyr__tab-focus::after, + &:hover::after { + border-right-color: currentColor; + } + } + + .plyr__menu__value { + padding-left: 1rem; + padding-right: calc(calc(var(--plyr-control-spacing, 10px) * 0.7) * 1.5); + } + + .plyr__control[role='menuitemradio'] { + .plyr__menu__value { + margin-right: auto; + padding-left: 0; + } + &::before { + margin-left: $plyr-control-spacing; + margin-right: 0; + } + + &::after { + right: 15px; + left: auto; + } + } + } +} + +@if $enable-light-style { + .light-style { + .plyr__tooltip { + line-height: light.$line-height-sm; + font-size: light.$font-size-sm; + } + } +} + +@if $enable-dark-style { + .dark-style { + .plyr__tooltip { + line-height: dark.$line-height-sm; + font-size: dark.$font-size-sm; + } + + .plyr--audio .plyr__controls { + color: dark.$body-color; + background-color: dark.$card-bg; + } + + .plyr--full-ui.plyr--audio input[type='range'] { + &::-webkit-slider-runnable-track { + background-color: dark.$gray-100; + } + + &::-moz-range-track { + background-color: dark.$gray-100; + } + + &::-ms-track { + background-color: dark.$gray-100; + } + } + + .plyr--audio .plyr__progress__buffer { + color: dark.$gray-200; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/popper/popper.js b/src/modules/Resources/assets/vendor/libs/popper/popper.js new file mode 100644 index 0000000..a7b487d --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/popper/popper.js @@ -0,0 +1,10 @@ +import Popper from '@popperjs/core/dist/umd/popper.min'; + +// Required to enable animations on dropdowns/tooltips/popovers +// Popper.Defaults.modifiers.computeStyle.gpuAcceleration = false + +try { + window.Popper = Popper; +} catch (e) {} + +export { Popper }; diff --git a/src/modules/Resources/assets/vendor/libs/quill/_mixins.scss b/src/modules/Resources/assets/vendor/libs/quill/_mixins.scss new file mode 100644 index 0000000..df48b30 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/quill/_mixins.scss @@ -0,0 +1,115 @@ +@mixin quill-generate-lists($indent) { + $quill-list-types: ( + 1: lower-alpha, + 2: lower-roman, + 3: decimal, + 4: lower-alpha, + 5: lower-roman, + 6: decimal, + 7: lower-alpha, + 8: lower-roman, + 9: decimal + ); + + @for $i from 1 through 9 { + ol li.ql-indent-#{$i} { + counter-increment: list-#{$i}; + + @if $i < 9 { + $lists: ''; + + @for $l from $i + 1 through 9 { + $lists: '#{$lists} list-#{$l}'; + } + + counter-reset: #{$lists}; + } + + &::before { + content: counter(list-#{$i}, map-get($quill-list-types, $i)) '. '; + } + } + + .ql-indent-#{$i}:not(.ql-direction-rtl) { + padding-left: $indent * $i; + + [dir='rtl'] & { + padding-right: $indent * $i; + padding-left: 0; + } + } + li.ql-indent-#{$i}:not(.ql-direction-rtl) { + padding-left: $indent * ($i + 1); + + [dir='rtl'] & { + padding-right: $indent * ($i + 1); + padding-left: 0; + } + } + .ql-indent-#{$i}.ql-direction-rtl.ql-align-right { + padding-right: $indent * $i; + + [dir='rtl'] & { + padding-right: 0; + padding-left: $indent * $i; + } + } + li.ql-indent-#{$i}.ql-direction-rtl.ql-align-right { + padding-right: $indent * ($i + 1); + + [dir='rtl'] & { + padding-right: 0; + padding-left: $indent * ($i + 1); + } + } + } +} + +@mixin quill-theme($color) { + .ql-snow.ql-toolbar, + .ql-snow .ql-toolbar { + button:hover, + button:focus, + button.ql-active, + .ql-picker-label:hover, + .ql-picker-label.ql-active, + .ql-picker-item:hover, + .ql-picker-item.ql-selected { + color: $color !important; + } + + button:hover .ql-fill, + button:focus .ql-fill, + button.ql-active .ql-fill, + .ql-picker-label:hover .ql-fill, + .ql-picker-label.ql-active .ql-fill, + .ql-picker-item:hover .ql-fill, + .ql-picker-item.ql-selected .ql-fill, + button:hover .ql-stroke.ql-fill, + button:focus .ql-stroke.ql-fill, + button.ql-active .ql-stroke.ql-fill, + .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-picker-item.ql-selected .ql-stroke.ql-fill { + fill: $color !important; + } + + button:hover .ql-stroke, + button:focus .ql-stroke, + button.ql-active .ql-stroke, + .ql-picker-label:hover .ql-stroke, + .ql-picker-label.ql-active .ql-stroke, + .ql-picker-item:hover .ql-stroke, + .ql-picker-item.ql-selected .ql-stroke, + button:hover .ql-stroke-miter, + button:focus .ql-stroke-miter, + button.ql-active .ql-stroke-miter, + .ql-picker-label:hover .ql-stroke-miter, + .ql-picker-label.ql-active .ql-stroke-miter, + .ql-picker-item:hover .ql-stroke-miter, + .ql-picker-item.ql-selected .ql-stroke-miter { + stroke: $color !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/quill/editor.scss b/src/modules/Resources/assets/vendor/libs/quill/editor.scss new file mode 100644 index 0000000..b75b2ef --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/quill/editor.scss @@ -0,0 +1,1115 @@ +// Editor +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +// common styles +.ql-container { + display: block; + margin: 0; + position: relative; + + &.ql-disabled .ql-editor ul[data-checked] > li::before { + pointer-events: none; + } + + &.ql-disabled .ql-tooltip { + visibility: hidden; + } +} + +.ql-clipboard { + position: absolute; + overflow-y: hidden; + left: -6250rem; + height: 0.0625rem; + top: 50%; + + @include app-rtl { + left: auto; + right: -6250rem; + } +} + +.ql-editor { + overflow-y: auto; + height: 100%; + tab-size: 4; + -moz-tab-size: 4; + box-sizing: border-box; + display: block; + outline: none; + word-wrap: break-word; + white-space: pre-wrap; + + > * { + cursor: text; + } + + &.ql-blank::before { + font-size: light.$font-size-root; + font-style: italic; + position: absolute; + content: attr(data-placeholder); + left: 0; + right: 0; + pointer-events: none; + } +} + +// Themes +.ql-snow, +.ql-bubble { + box-sizing: border-box; + + * { + box-sizing: border-box; + } + + .ql-out-bottom, + .ql-out-top { + visibility: hidden; + } + + .ql-hidden { + display: none !important; + } + + .ql-even { + fill-rule: evenodd; + } + + .ql-empty { + fill: none; + } + + .ql-transparent { + opacity: 0.4; + } + + .ql-thin, + .ql-stroke.ql-thin { + stroke-width: 1; + } + + .ql-editor a { + text-decoration: underline; + } + + .ql-direction.ql-active { + svg:last-child { + display: inline; + } + + svg:first-child { + display: none; + } + } + + .ql-direction svg:last-child { + display: none; + } + + &.ql-toolbar, + & .ql-toolbar { + border-top-left-radius: light.$border-radius; + border-top-right-radius: light.$border-radius; + box-sizing: border-box; + padding: 0.5rem; + + &::after { + clear: both; + content: ''; + display: table; + } + + button { + float: left; + display: inline-block; + padding: 0.1875rem 0.3125rem; + height: 1.5rem; + width: 1.75rem; + background: none; + border: none; + cursor: pointer; + + &:active:hover { + outline: none; + } + + @include app-rtl { + float: right; + } + + svg { + height: 100%; + float: left; + + @include app-rtl { + float: right; + } + } + } + + input.ql-image[type='file'] { + display: none; + } + } + + .ql-tooltip { + transform: translateY(0.625rem); + position: absolute; + + &.ql-flip { + transform: translateY(-0.625rem); + } + + a { + cursor: pointer; + text-decoration: none; + } + } + + .ql-formats { + display: inline-block; + margin-right: 0.9375rem; + vertical-align: middle; + + @include app-rtl { + margin-right: 0; + margin-left: 0.9375rem; + } + + &::after { + content: ''; + display: table; + clear: both; + } + } + + .ql-picker { + vertical-align: middle; + position: relative; + height: 1.5rem; + display: inline-block; + float: left; + + @include app-rtl { + float: right; + } + + &.ql-expanded .ql-picker-options { + top: 100%; + display: block; + z-index: 1; + margin-top: -0.0625rem; + } + + &.ql-header, + &.ql-font, + &.ql-size { + .ql-picker-label[data-label]:not([data-label=''])::before, + .ql-picker-item[data-label]:not([data-label=''])::before { + content: attr(data-label); + } + } + + &.ql-header { + width: 6.125rem; + + .ql-picker-label, + .ql-picker-item { + &::before { + content: 'Normal'; + } + + &[data-value='1']::before { + content: 'Heading 1'; + } + + &[data-value='2']::before { + content: 'Heading 2'; + } + + &[data-value='3']::before { + content: 'Heading 3'; + } + + &[data-value='4']::before { + content: 'Heading 4'; + } + + &[data-value='5']::before { + content: 'Heading 5'; + } + + &[data-value='6']::before { + content: 'Heading 6'; + } + } + } + + &.ql-font { + width: 6.75rem; + + .ql-picker-label, + .ql-picker-item { + &::before { + content: 'Sans Serif'; + } + + &[data-value='serif']::before { + content: 'Serif'; + } + + &[data-value='monospace']::before { + content: 'Monospace'; + } + } + } + + &.ql-size { + width: 6.125rem; + + .ql-picker-label, + .ql-picker-item { + &::before { + content: 'Normal'; + } + + &[data-value='small']::before { + content: 'Small'; + } + + &[data-value='large']::before { + content: 'Large'; + } + + &[data-value='huge']::before { + content: 'Huge'; + } + } + } + + &:not(.ql-color-picker):not(.ql-icon-picker) svg { + position: absolute; + top: 50%; + right: 0; + margin-top: -0.5625rem; + width: 1.125rem; + + @include app-rtl { + right: auto; + left: 0; + } + } + } + + .ql-picker-label { + position: relative; + display: inline-block; + padding-right: 0.125rem; + padding-left: 0.5rem; + height: 100%; + width: 100%; + border: 0.0625rem solid transparent; + cursor: pointer; + + &::before { + line-height: 1.375rem; + display: inline-block; + } + } + + .ql-picker-options { + padding: 0.25rem 0.5rem; + min-width: 100%; + position: absolute; + display: none; + white-space: nowrap; + + .ql-picker-item { + padding-bottom: 0.3125rem; + padding-top: 0.3125rem; + display: block; + cursor: pointer; + } + } + + .ql-color-picker, + .ql-icon-picker { + width: 1.75rem; + + .ql-picker-label { + padding: 0.125rem 0.25rem; + } + } + + .ql-icon-picker { + .ql-picker-options { + padding: 0.25rem 0; + } + + .ql-picker-item { + padding: 0.125rem 0.25rem; + width: 1.5rem; + height: 1.5rem; + } + } + + .ql-color-picker { + .ql-picker-options { + padding: 0.1875rem 0.3125rem; + width: 9.5rem; + } + + .ql-picker-item { + float: left; + margin: 0.125rem; + padding: 0; + width: 1rem; + height: 1rem; + border: 0.0625rem solid transparent; + + @include app-rtl { + float: right; + } + } + + &.ql-background .ql-picker-item { + background-color: light.$white; + } + + &.ql-color .ql-picker-item { + background-color: #000; + } + } + + @include app-rtl { + .ql-italic svg, + .ql-list svg, + .ql-indent svg, + .ql-direction svg, + .ql-align svg, + .ql-link svg, + .ql-image svg, + .ql-clean svg { + transform: scaleX(-1); + } + } +} + +.ql-snow { + &.ql-toolbar, + .ql-toolbar { + background: light.$white; + background-clip: padding-box; + } + + .ql-editor { + min-height: 15rem; + background: light.$white; + } + + .ql-picker.ql-expanded .ql-picker-label { + z-index: 2; + color: #ccc !important; + + .ql-fill { + fill: #ccc !important; + } + + .ql-stroke { + stroke: #ccc !important; + } + } + + .ql-stroke { + fill: none; + stroke-width: 2; + stroke-linejoin: round; + stroke-linecap: round; + } + + .ql-stroke-miter { + fill: none; + stroke-width: 2; + stroke-miterlimit: 10; + } + + .ql-picker-label { + border: 0.0625rem solid transparent; + } + + .ql-picker-options { + border: 0.0625rem solid transparent; + background-color: light.$white; + background-clip: padding-box; + } + + .ql-color-picker .ql-picker-item.ql-selected, + .ql-color-picker .ql-picker-item:hover { + border-color: #000; + } + + .ql-tooltip { + display: flex; + padding: 0.3125rem 0.75rem; + background-color: light.$white; + background-clip: padding-box; + white-space: nowrap; + + &::before { + content: 'Visit URL:'; + margin-right: 0.5rem; + line-height: 1.625rem; + + @include app-rtl { + margin-right: 0; + margin-left: 0.5rem; + } + } + + input[type='text'] { + display: none; + margin: 0; + padding: 0.1875rem 0.3125rem; + width: 10.625rem; + height: 1.625rem; + font-size: 0.8125rem; + } + + a.ql-preview { + display: inline-block; + vertical-align: top; + max-width: 12.5rem; + overflow-x: hidden; + text-overflow: ellipsis; + } + + a.ql-action::after { + content: 'Edit'; + margin-left: 1rem; + padding-right: 0.5rem; + border-right: 0.0625rem solid #ccc; + + @include app-rtl { + margin-left: 0; + margin-right: 1rem; + padding-left: 0.5rem; + padding-right: 0; + border-right: 0; + border-left: 0.0625rem solid #ccc; + } + } + + a.ql-remove::before { + content: 'Remove'; + margin-left: 0.5rem; + + @include app-rtl { + margin-right: 0.5rem; + margin-left: 0; + } + } + + a { + line-height: 1.625rem; + } + + &.ql-editing a.ql-preview, + &.ql-editing a.ql-remove { + display: none; + } + + &.ql-editing input[type='text'] { + display: inline-block; + } + + &.ql-editing a.ql-action::after { + content: 'Save'; + border-right: 0; + padding-right: 0; + + @include app-rtl { + border-left: 0; + padding-left: 0; + } + } + + &[data-mode='link']::before { + content: 'Enter link:'; + } + + &[data-mode='formula']::before { + content: 'Enter formula:'; + } + + &[data-mode='video']::before { + content: 'Enter video:'; + } + } +} + +.ql-bubble { + &.ql-toolbar, + .ql-toolbar { + button:hover, + button:focus, + button.ql-active, + .ql-picker-label:hover, + .ql-picker-label.ql-active, + .ql-picker-item:hover, + .ql-picker-item.ql-selected { + color: light.$white; + } + + button:hover .ql-stroke, + button:focus .ql-stroke, + button.ql-active .ql-stroke, + .ql-picker-label:hover .ql-stroke, + .ql-picker-label.ql-active .ql-stroke, + .ql-picker-item:hover .ql-stroke, + .ql-picker-item.ql-selected .ql-stroke, + button:hover .ql-stroke-miter, + button:focus .ql-stroke-miter, + button.ql-active .ql-stroke-miter, + .ql-picker-label:hover .ql-stroke-miter, + .ql-picker-label.ql-active .ql-stroke-miter, + .ql-picker-item:hover .ql-stroke-miter, + .ql-picker-item.ql-selected .ql-stroke-miter { + stroke: light.$white; + } + button:hover .ql-fill, + button:focus .ql-fill, + button.ql-active .ql-fill, + .ql-picker-label:hover .ql-fill, + .ql-picker-label.ql-active .ql-fill, + .ql-picker-item:hover .ql-fill, + .ql-picker-item.ql-selected .ql-fill, + button:hover .ql-stroke.ql-fill, + button:focus .ql-stroke.ql-fill, + button.ql-active .ql-stroke.ql-fill, + .ql-picker-label:hover .ql-stroke.ql-fill, + .ql-picker-label.ql-active .ql-stroke.ql-fill, + .ql-picker-item:hover .ql-stroke.ql-fill, + .ql-picker-item.ql-selected .ql-stroke.ql-fill { + fill: light.$white; + } + + @media (pointer: coarse) { + button:hover:not(.ql-active) { + color: #ccc; + } + button:hover:not(.ql-active) .ql-fill, + button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: #ccc; + } + button:hover:not(.ql-active) .ql-stroke, + button:hover:not(.ql-active) .ql-stroke-miter { + stroke: #ccc; + } + } + } + + .ql-stroke { + fill: none; + stroke: #ccc; + stroke-linejoin: round; + stroke-linecap: round; + stroke-width: 2; + } + + .ql-stroke-miter { + fill: none; + stroke: #ccc; + stroke-miterlimit: 10; + stroke-width: 2; + } + + .ql-fill, + .ql-stroke.ql-fill { + fill: #ccc; + } + + .ql-picker { + color: #ccc; + + &.ql-expanded .ql-picker-label { + z-index: 2; + color: #777; + + .ql-fill { + fill: #777; + } + + .ql-stroke { + stroke: #777; + } + } + } + + .ql-picker-options { + background-color: #444; + } + + .ql-color-picker .ql-picker-label svg, + .ql-icon-picker .ql-picker-label svg { + right: 0.25rem; + + @include app-rtl { + right: auto; + left: 0.25rem; + } + } + + .ql-color-picker { + .ql-color-picker svg { + margin: 0.0625rem; + } + + .ql-picker-item.ql-selected, + .ql-picker-item:hover { + border-color: light.$white; + } + } + + .ql-toolbar .ql-formats { + margin: 0.5rem 0.75rem 0.5rem 0; + + @include app-rtl { + margin: 0.5rem 0 0.5rem 0.75rem; + } + + &:first-child { + margin-left: 0.75rem; + + @include app-rtl { + margin-right: 0.75rem; + } + } + } + + .ql-tooltip-arrow { + content: ' '; + position: absolute; + display: block; + left: 50%; + margin-left: -0.375rem; + border-right: 0.375rem solid transparent; + border-left: 0.375rem solid transparent; + } + + .ql-tooltip { + background-color: #444; + color: light.$white; + + &:not(.ql-flip) .ql-tooltip-arrow { + top: -0.375rem; + border-bottom: 0.375rem solid #444; + } + + &.ql-flip .ql-tooltip-arrow { + bottom: -0.375rem; + border-top: 0.375rem solid #444; + } + + &.ql-editing { + .ql-tooltip-editor { + display: block; + } + + .ql-formats { + visibility: hidden; + } + } + } + + .ql-tooltip-editor { + display: none; + + input[type='text'] { + position: absolute; + padding: 0.625rem 1.25rem; + height: 100%; + width: 100%; + outline: none; + background: transparent; + border: none; + color: light.$white; + font-size: 0.8125rem; + } + + a { + position: absolute; + right: 1.25rem; + top: 0.625rem; + + @include app-rtl { + right: auto; + left: 1.25rem; + } + + &::before { + content: '\D7'; + color: #ccc; + font-size: 1rem; + font-weight: light.$font-weight-medium; + } + } + } + + &.ql-container:not(.ql-disabled) a { + white-space: nowrap; + position: relative; + + &::before, + &::after { + margin-left: 50%; + position: absolute; + visibility: hidden; + left: 0; + transition: visibility 0s ease 200ms; + transform: translate(-50%, -100%); + } + + &:hover::before, + &:hover::after { + visibility: visible; + } + + &::before { + content: attr(href); + top: -0.3125rem; + z-index: 1; + overflow: hidden; + padding: 0.3125rem 0.9375rem; + border-radius: 0.9375rem; + background-color: #444; + text-decoration: none; + color: light.$white; + font-weight: normal; + font-size: 0.75rem; + } + + &::after { + content: ' '; + top: 0; + height: 0; + width: 0; + border-top: 0.375rem solid #444; + border-right: 0.375rem solid transparent; + border-left: 0.375rem solid transparent; + } + } +} + +// Light styles +@if $enable-light-style { + .light-style { + .ql-editor.ql-blank:before { + color: light.$input-placeholder-color; + } + + .ql-snow, + .ql-bubble { + &.ql-toolbar .ql-picker-options, + & .ql-toolbar .ql-picker-options { + box-shadow: light.$dropdown-box-shadow; + } + + .ql-picker { + &.ql-header .ql-picker-item { + &[data-value='1']::before { + font-size: light.$h1-font-size; + } + + &[data-value='2']::before { + font-size: light.$h2-font-size; + } + + &[data-value='3']::before { + font-size: light.$h3-font-size; + } + + &[data-value='4']::before { + font-size: light.$h4-font-size; + } + + &[data-value='5']::before { + font-size: light.$h5-font-size; + } + + &[data-value='6']::before { + font-size: light.$h6-font-size; + } + } + + &.ql-font .ql-picker-item { + &[data-value='serif']::before { + font-family: light.$font-family-serif; + } + + &[data-value='monospace']::before { + font-family: light.$font-family-monospace; + } + } + + &.ql-size .ql-picker-item { + &[data-value='small']::before { + font-size: light.$font-size-sm; + } + + &[data-value='large']::before { + font-size: light.$font-size-lg; + } + + &[data-value='huge']::before { + font-size: light.$font-size-xl; + } + } + } + } + + .ql-snow { + .ql-editor.ql-blank::before { + padding: 0 light.$input-padding-x; + } + + &.ql-container { + border: 0.0625rem solid light.$input-border-color; + } + + .ql-editor { + padding: light.$card-spacer-x-sm * 0.5 light.$input-padding-x; + } + + &.ql-toolbar, + & .ql-toolbar { + border: 0.0625rem solid light.$input-border-color; + + @media (pointer: coarse) { + button:hover:not(.ql-active) { + color: light.$body-color; + } + button:hover:not(.ql-active) .ql-stroke, + button:hover:not(.ql-active) .ql-stroke-miter { + stroke: light.$body-color; + } + button:hover:not(.ql-active) .ql-fill, + button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: light.$body-color; + } + } + } + + &.ql-toolbar + .ql-container.ql-snow { + border-top: 0; + .ql-editor, + & { + @include light.border-bottom-radius(light.$border-radius); + } + } + + .ql-stroke { + stroke: light.$body-color; + } + + .ql-fill, + .ql-stroke.ql-fill { + fill: light.$body-color; + } + + .ql-stroke-miter { + stroke: light.$body-color; + } + .ql-picker { + color: light.$body-color; + + &.ql-expanded .ql-picker-options { + border-color: light.$dropdown-border-color; + } + + &.ql-expanded .ql-picker-label { + border-color: light.$input-border-color; + } + } + + .ql-tooltip { + border: light.$dropdown-border-width solid light.$dropdown-border-color; + color: light.$body-color; + box-shadow: light.$dropdown-box-shadow; + + input[type='text'] { + border: 0.0625rem solid light.$input-border-color; + } + } + } + + .ql-bubble .ql-tooltip { + border-radius: light.$border-radius; + z-index: light.$zindex-menu-fixed + 10; + } + } +} + +// dark styles +@if $enable-dark-style { + .dark-style { + .ql-editor.ql-blank:before { + color: dark.$input-placeholder-color; + } + + .ql-snow, + .ql-bubble { + .ql-tooltip { + background: dark.$body-bg; + } + &.ql-toolbar .ql-picker-options, + & .ql-toolbar .ql-picker-options { + box-shadow: dark.$dropdown-box-shadow; + } + + .ql-picker { + &.ql-header .ql-picker-item { + &[data-value='1']::before { + font-size: dark.$h1-font-size; + } + + &[data-value='2']::before { + font-size: dark.$h2-font-size; + } + + &[data-value='3']::before { + font-size: dark.$h3-font-size; + } + + &[data-value='4']::before { + font-size: dark.$h4-font-size; + } + + &[data-value='5']::before { + font-size: dark.$h5-font-size; + } + + &[data-value='6']::before { + font-size: dark.$h6-font-size; + } + } + + &.ql-font .ql-picker-item { + &[data-value='serif']::before { + font-family: dark.$font-family-serif; + } + + &[data-value='monospace']::before { + font-family: dark.$font-family-monospace; + } + } + + &.ql-size .ql-picker-item { + &[data-value='small']::before { + font-size: dark.$font-size-sm; + } + + &[data-value='large']::before { + font-size: dark.$font-size-lg; + } + + &[data-value='huge']::before { + font-size: dark.$font-size-xl; + } + } + } + } + + .ql-snow { + .ql-editor.ql-blank::before { + padding: 0 dark.$input-padding-x; + } + + &.ql-container { + border: 0.0625rem solid dark.$input-border-color; + } + + .ql-editor { + padding: dark.$card-spacer-x-sm * 0.5 dark.$input-padding-x; + background: dark.$card-bg; + } + + .ql-picker-options { + background: dark.$card-bg; + } + + &.ql-toolbar, + & .ql-toolbar { + border: 0.0625rem solid dark.$input-border-color; + background: dark.$card-bg; + + @media (pointer: coarse) { + button:hover:not(.ql-active) { + color: dark.$body-color; + } + button:hover:not(.ql-active) .ql-stroke, + button:hover:not(.ql-active) .ql-stroke-miter { + stroke: dark.$body-color; + } + button:hover:not(.ql-active) .ql-fill, + button:hover:not(.ql-active) .ql-stroke.ql-fill { + fill: dark.$body-color; + } + } + } + + &.ql-toolbar + .ql-container.ql-snow { + border-top: 0; + .ql-editor, + & { + @include dark.border-bottom-radius(dark.$border-radius); + } + } + + .ql-stroke-miter { + stroke: dark.$body-color; + } + + .ql-stroke { + stroke: dark.$body-color; + } + + .ql-fill, + .ql-stroke.ql-fill { + fill: dark.$body-color; + } + + .ql-picker { + color: dark.$body-color; + + &.ql-expanded .ql-picker-options { + border-color: dark.$dropdown-border-color; + } + + &.ql-expanded .ql-picker-label { + border-color: dark.$input-border-color; + } + } + + .ql-tooltip { + border: dark.$dropdown-border-width solid dark.$dropdown-border-color; + color: dark.$body-color; + box-shadow: dark.$dropdown-box-shadow; + + input[type='text'] { + border: 0.0625rem solid dark.$input-border-color; + } + } + } + + .ql-bubble .ql-tooltip { + border-radius: dark.$border-radius; + z-index: dark.$zindex-menu-fixed + 10; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/quill/katex.js b/src/modules/Resources/assets/vendor/libs/quill/katex.js new file mode 100644 index 0000000..ca9f0aa --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/quill/katex.js @@ -0,0 +1,7 @@ +import katex from 'katex/dist/katex'; + +try { + window.katex = katex; +} catch (e) {} + +export { katex }; diff --git a/src/modules/Resources/assets/vendor/libs/quill/katex.scss b/src/modules/Resources/assets/vendor/libs/quill/katex.scss new file mode 100644 index 0000000..c7a85d5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/quill/katex.scss @@ -0,0 +1 @@ +@import 'katex/dist/katex'; diff --git a/src/modules/Resources/assets/vendor/libs/quill/quill.js b/src/modules/Resources/assets/vendor/libs/quill/quill.js new file mode 100644 index 0000000..e1d3937 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/quill/quill.js @@ -0,0 +1,7 @@ +import Quill from 'quill/dist/quill'; + +try { + window.Quill = Quill; +} catch (e) {} + +export { Quill }; diff --git a/src/modules/Resources/assets/vendor/libs/quill/typography.scss b/src/modules/Resources/assets/vendor/libs/quill/typography.scss new file mode 100644 index 0000000..5c882f8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/quill/typography.scss @@ -0,0 +1,289 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'mixins'; + +.ql-editor, +.ql-content { + $quill-indent: 2rem; + + p, + ol, + ul, + pre, + blockquote, + h1, + h2, + h3, + h4, + h5, + h6 { + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + } + + ol, + ul { + margin-right: 0; + margin-left: 0; + padding-right: 0; + padding-left: 0; + } + + ol > li, + ul > li { + list-style-type: none; + + &:not(.ql-direction-rtl) { + padding-left: $quill-indent; + + @include app-rtl { + padding-right: $quill-indent; + padding-left: 0; + } + } + + &.ql-direction-rtl { + padding-right: $quill-indent; + + @include app-rtl { + padding-right: 0; + padding-left: $quill-indent; + } + } + } + + ul > li::before { + content: '\2022'; + } + + ul[data-checked='true'], + ul[data-checked='false'] { + pointer-events: none; + + > li * { + pointer-events: all; + + &::before { + pointer-events: all; + cursor: pointer; + color: #777; + } + } + } + + ul[data-checked='false'] > li::before { + content: '\2610'; + } + + ul[data-checked='true'] > li::before { + content: '\2611'; + } + + li::before { + display: inline-block; + width: calc(#{$quill-indent} - 0.3em); + white-space: nowrap; + } + + li.ql-direction-rtl::before { + margin-right: -$quill-indent; + margin-left: 0.3em; + text-align: left; + + @include app-rtl { + margin-right: 0.3em; + margin-left: -$quill-indent; + text-align: right; + } + } + + li:not(.ql-direction-rtl)::before { + text-align: right; + margin-left: -$quill-indent; + margin-right: 0.3em; + + @include app-rtl { + text-align: left; + margin-left: 0.3em; + margin-right: -$quill-indent; + } + } + + ol li { + counter-increment: list-0; + counter-reset: list-1 list-2 list-3 list-4 list-5 list-6 list-7 list-8 list-9; + + &::before { + content: counter(list-0, decimal) '. '; + } + } + + @include quill-generate-lists($quill-indent); + + .ql-video { + max-width: 100%; + display: block; + + &.ql-align-right { + margin: 0 0 0 auto; + + @include app-rtl { + margin: 0 auto 0 0; + } + } + + &.ql-align-center { + margin: 0 auto; + } + } + + .ql-bg-red { + background-color: #e60000; + } + + .ql-bg-black { + background-color: #000; + } + + .ql-bg-yellow { + background-color: #ff0; + } + + .ql-bg-orange { + background-color: #f90; + } + + .ql-bg-purple { + background-color: #93f; + } + + .ql-bg-blue { + background-color: #06c; + } + + .ql-bg-green { + background-color: #008a00; + } + + .ql-color-red { + color: #e60000; + } + .ql-color-white { + color: #fff; + } + + .ql-color-yellow { + color: #ff0; + } + + .ql-color-orange { + color: #f90; + } + + .ql-color-purple { + color: #93f; + } + + .ql-color-blue { + color: #06c; + } + + .ql-color-green { + color: #008a00; + } + + .ql-direction-rtl { + direction: rtl; + text-align: inherit; + + @include app-rtl { + direction: ltr; + text-align: inherit; + } + } + + .ql-align-center { + text-align: center; + } + + .ql-align-justify { + text-align: justify; + } + + .ql-align-right { + text-align: right; + + @include app-rtl { + text-align: left; + } + } + + img { + max-width: 100%; + } +} + +// Light style +@if $enable-light-style { + .light-style { + .ql-editor, + .ql-content { + blockquote { + font-size: light.$blockquote-font-size; + margin-bottom: light.$spacer; + } + + .ql-font-serif { + font-family: light.$font-family-serif; + } + + .ql-font-monospace { + font-family: light.$font-family-monospace; + } + + .ql-size-large { + font-size: light.$font-size-lg; + } + .ql-size-huge { + font-size: light.$font-size-xl; + } + + .ql-size-small { + font-size: light.$font-size-sm; + } + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + .ql-editor, + .ql-content { + blockquote { + font-size: dark.$blockquote-font-size; + margin-bottom: dark.$spacer; + } + + .ql-font-monospace { + font-family: dark.$font-family-monospace; + } + + .ql-font-serif { + font-family: dark.$font-family-serif; + } + + .ql-size-huge { + font-size: dark.$font-size-xl; + } + + .ql-size-large { + font-size: dark.$font-size-lg; + } + + .ql-size-small { + font-size: dark.$font-size-sm; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/rateyo/rateyo.js b/src/modules/Resources/assets/vendor/libs/rateyo/rateyo.js new file mode 100644 index 0000000..e67be48 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/rateyo/rateyo.js @@ -0,0 +1 @@ +import 'rateyo/src/jquery.rateyo'; diff --git a/src/modules/Resources/assets/vendor/libs/rateyo/rateyo.scss b/src/modules/Resources/assets/vendor/libs/rateyo/rateyo.scss new file mode 100644 index 0000000..d548dad --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/rateyo/rateyo.scss @@ -0,0 +1,97 @@ +// Rateyo +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import 'rateyo/src/jquery.rateyo'; +@import '../../scss/_custom-variables/libs'; + +// For Horizontal menu-item, z-index overrides +.jq-ry-container > .jq-ry-group-wrapper > .jq-ry-group, +.jq-ry-container > .jq-ry-group-wrapper > .jq-ry-group.jq-ry-rated-group { + z-index: 8; +} + +// Light Style +@if $enable-light-style { + .light-style { + $unratedStarColor: light.rgba-to-hex(rgba(light.$black, 0.16), light.$rgba-to-hex-bg); + $ratedStarColor: light.$yellow; + + .jq-ry-container { + padding: 0; + } + @include app-ltr-style { + .jq-ry-container { + .jq-ry-normal-group { + svg { + fill: $unratedStarColor; + } + } + } + .jq-ry-container:not(.multi-color-ratings) { + .jq-ry-rated-group { + svg { + fill: $ratedStarColor; + } + } + } + } + @include app-rtl-style { + .jq-ry-container:not(.multi-color-ratings) { + .jq-ry-normal-group { + svg { + fill: $ratedStarColor; + } + } + } + .jq-ry-container { + .jq-ry-rated-group { + svg { + fill: light.rgba-to-hex($unratedStarColor, light.$rgba-to-hex-bg); + } + } + } + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + $unratedStarColor: dark.rgba-to-hex(rgba(dark.$base, 0.16), dark.$rgba-to-hex-bg); + $ratedStarColor: dark.$yellow; + @include app-ltr-style { + .jq-ry-container { + .jq-ry-normal-group { + svg { + fill: $unratedStarColor; + } + } + } + .jq-ry-container:not(.multi-color-ratings) { + .jq-ry-rated-group { + svg { + fill: $ratedStarColor; + } + } + } + } + @include app-rtl-style { + .jq-ry-container:not(.multi-color-ratings) { + .jq-ry-normal-group { + svg { + fill: $ratedStarColor; + } + } + } + .jq-ry-container { + .jq-ry-rated-group { + svg { + fill: dark.rgba-to-hex($unratedStarColor, dark.$rgba-to-hex-bg); + } + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/select2/_mixins.scss b/src/modules/Resources/assets/vendor/libs/select2/_mixins.scss new file mode 100644 index 0000000..d9796b1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/select2/_mixins.scss @@ -0,0 +1,38 @@ +@import '../../scss/_bootstrap-extended/include'; +@mixin select2-variant($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background: rgba($background, 0.16) !important; + color: $background !important; + } +} + +@mixin select2-validation-state($state, $border) { + .is-#{$state} .select2-container--default .select2-selection, + .is-#{$state}.select2-container--default .select2-selection { + border-width: $input-focus-border-width; + border-color: $border !important; + } +} + +@mixin select2-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .select2-container--default { + .select2-results__option--highlighted[aria-selected] { + background-color: $background !important; + color: $color !important; + } + + &.select2-container--focus .select2-selection, + &.select2-container--open .select2-selection { + border-width: $input-focus-border-width; + border-color: $background !important; + } + } + + .select2-primary { + @include select2-variant($background, $color); + } +} diff --git a/src/modules/Resources/assets/vendor/libs/select2/select2.js b/src/modules/Resources/assets/vendor/libs/select2/select2.js new file mode 100644 index 0000000..19e8c38 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/select2/select2.js @@ -0,0 +1,8 @@ +import select2 from 'select2/dist/js/select2.full'; + +try { + window.select2 = select2; +} catch (e) {} +select2(); + +export { select2 }; diff --git a/src/modules/Resources/assets/vendor/libs/select2/select2.scss b/src/modules/Resources/assets/vendor/libs/select2/select2.scss new file mode 100644 index 0000000..f4200e6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/select2/select2.scss @@ -0,0 +1,890 @@ +// Select2 +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'mixins'; + +$select2-arrow-wrapper-width: 2.25rem !default; +$select2-multiple-selection-line-height: 1.5rem !default; + +.select2-container { + margin: 0; + width: 100% !important; + display: inline-block; + position: relative; + vertical-align: middle; + box-sizing: border-box; + + @import 'select2/src/scss/single'; + @import 'select2/src/scss/multiple'; + .select2-search--inline { + .select2-search__field { + margin-top: 6px; + } + } +} + +@import 'select2/src/scss/dropdown'; + +.select2-results__option { + &[role='option'] { + margin: 0.125rem 0.5rem; + } + &[role='option'] { + border-radius: light.$border-radius; + padding: 0.543rem light.$spacer; + + &[aria-selected='true'] { + background-color: light.$primary; + color: light.$component-active-color; + } + } +} +.select2-container--default .select2-results__option--highlighted:not([aria-selected='true']) { + background-color: light.$component-hover-bg !important; + color: light.$component-hover-color !important; +} +.select2-hidden-accessible { + clip: rect(0 0 0 0) !important; + overflow: hidden !important; + position: absolute !important; + padding: 0 !important; + margin: -1px !important; + border: 0 !important; + height: 1px !important; + width: 1px !important; +} + +.select2-close-mask { + display: block; + padding: 0; + margin: 0; + position: fixed; + left: 0; + top: 0; + min-width: 100%; + min-height: 100%; + z-index: 99; + width: auto; + opacity: 0; + border: 0; + height: auto; +} + +.select2-dropdown { + border: 0; + border-radius: light.$input-border-radius; +} +.select2-container--default { + // Single Selection + + .select2-selection--single { + .select2-selection__rendered { + padding-right: $select2-arrow-wrapper-width - 0.0625rem; + } + + .select2-selection__clear { + cursor: pointer; + font-weight: light.$font-weight-medium; + float: right; + } + + .select2-selection__arrow { + width: $select2-arrow-wrapper-width; + position: absolute; + right: 1px; + top: 1px; + + b { + position: absolute; + height: 18px; + width: 20px; + top: 24%; + background-repeat: no-repeat; + background-size: 20px 19px; + transform-origin: center; + transition: transform 0.3s ease; + } + } + } + &.select2-container--above.select2-container--open .select2-selection__arrow b { + transform: rotate(180deg); + } + + // Remove outlines + &, + * { + outline: 0 !important; + } + &.select2-container--disabled { + pointer-events: none; + } + + &.select2-container--disabled .select2-selection--single { + cursor: not-allowed; + + .select2-selection__clear { + display: none; + } + } + + @include app-rtl-style { + .select2-selection__clear { + float: left; + } + + .select2-selection__arrow { + left: 1px; + right: auto; + } + } + + // search field styles + .select2-search--dropdown .select2-search__field { + border-radius: light.$input-border-radius; + margin: 0.25rem 0.5rem; + margin-bottom: 0; + width: calc(100% - 1rem); + } + + // Multiple Selection + .select2-selection--multiple { + .select2-selection__rendered { + margin: 0; + box-sizing: border-box; + display: block; + list-style: none; + width: 100%; + + li { + list-style: none; + } + } + + .select2-selection__placeholder { + float: left; + } + + .select2-selection__clear { + cursor: pointer; + font-weight: light.$font-weight-medium; + float: right; + margin-right: 0.625rem; + } + + .select2-search--inline { + line-height: $select2-multiple-selection-line-height; + } + + .select2-selection__choice { + position: relative; + font-size: light.$font-size-sm; + border-radius: light.$border-radius-sm; + padding: 0 0.5rem; + cursor: default; + line-height: $select2-multiple-selection-line-height; + float: left; + @include app-ltr { + padding-right: 1rem; + } + + @include app-rtl { + padding-left: 1rem; + } + } + + .select2-selection__choice__remove { + font-weight: light.$font-weight-medium; + color: inherit; + display: inline-block; + position: absolute; + cursor: pointer; + opacity: 0.5; + + @include app-ltr { + right: 0.3rem; + } + + @include app-rtl { + left: 0.3rem; + } + + &:hover { + opacity: 0.8; + color: inherit; + } + } + } + + &.select2-container--disabled .select2-selection__choice__remove { + display: none; + } + + &.select2-container--disabled .select2-selection--multiple { + cursor: not-allowed; + } + + @include app-rtl-style { + .select2-selection__choice, + .select2-selection__placeholder, + .select2-search--inline { + float: right; + } + + .select2-selection__choice__remove { + margin-left: 0; + float: left; + margin-right: 0.25rem; + } + + .select2-selection__clear { + margin-left: 0.625rem; + float: left; + } + } + + // Placeholder + .select2-search__field::-moz-placeholder { + opacity: 1; + } + + .select2-search--inline .select2-search__field { + box-shadow: none; + background: transparent; + border: none; + outline: 0; + -webkit-appearance: textfield; + } + + &.select2-container--focus .select2-search--inline .select2-search__field { + margin-top: 5px; + } + .select2-results > .select2-results__options { + max-height: 15rem; + overflow-y: auto; + margin-block: 0.5rem; + } + + .select2-results__option { + &[role='group'] { + padding: 0; + } + &[aria-disabled='true'] { + color: #999; + } + + .select2-results__option .select2-results__group { + padding-left: 0; + } + } + + &.select2-container--open { + &.select2-container--below .select2-selection { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + &.select2-container--above .select2-selection { + border-top-right-radius: 0; + border-top-left-radius: 0; + } + } + + .select2-results__group { + cursor: default; + display: block; + font-weight: light.$font-weight-medium; + } +} + +.select2-hidden-accessible { + &.is-invalid { + + .select2-container--default { + &.select2-container--focus { + .select2-search--inline { + .select2-search__field { + margin-top: 6px; + } + } + } + } + } +} + +@include app-rtl(false) { + .select2-container--default .select2-selection--single .select2-selection__rendered { + padding-left: $select2-arrow-wrapper-width - 0.0625rem; + } +} + +@if $enable-light-style { + .light-style { + $select2-multiple-choice-spacer: px-to-rem( + floor(rem-to-px((light.$input-height-inner - $select2-multiple-selection-line-height) * 0.5)) + ); + .select2-hidden-accessible { + &.is-invalid { + + .select2-container--default { + &, + &.select2-container--open { + .select2-selection--multiple { + padding: calc( + light.$form-select-padding-y - + light.$input-border-width - + $select2-multiple-choice-spacer - + light.$input-border-width + ) + calc(light.$form-select-padding-x - $input-focus-border-width); + } + } + } + } + } + + .select2-selection--multiple { + .select2-selection__clear { + margin-top: $select2-multiple-choice-spacer; + } + .select2-selection__rendered { + padding: 0; + } + + .select2-selection__choice { + margin-top: calc($select2-multiple-choice-spacer - 1px); + margin-right: $select2-multiple-choice-spacer; + background-color: light.$gray-75; + &:nth-last-child(2) { + margin-bottom: calc($select2-multiple-choice-spacer - 1px); + } + } + + .select2-selection__placeholder { + margin-top: $select2-multiple-choice-spacer; + } + } + + .select2-search__field { + color: light.$input-color; + } + + .select2-dropdown { + background: light.$dropdown-bg; + box-shadow: light.$dropdown-box-shadow; + background-clip: padding-box; + border-color: light.$dropdown-border-color; + z-index: light.$zindex-dropdown; + &.select2-dropdown--above { + box-shadow: 0 -0.2rem 1.25rem rgba(light.rgba-to-hex(light.$gray-500, light.$rgba-to-hex-bg), 0.4) !important; + } + } + + .select2-container--default { + .select2-selection { + transition: light.$input-transition; + background-color: light.$input-bg; + border: 1px solid light.$input-border-color; + + @include light.border-radius(light.$border-radius); + &:hover { + border-color: light.$input-border-hover-color; + } + } + + .select2-selection__placeholder { + color: light.$input-placeholder-color; + } + + // Single Selection + // ******************************************************************************* + + .select2-selection--single { + height: light.$input-height; + + .select2-selection__clear { + color: light.$text-muted; + } + + .select2-selection__arrow { + height: light.$input-height; + position: absolute; + + b { + background-image: str-replace( + str-replace( + light.$form-select-indicator, + '#{$form-select-indicator-color}', + light.$form-select-indicator-color + ), + '#', + '%23' + ); + } + } + .select2-selection__rendered { + line-height: calc(light.$input-height-inner - light.$input-border-width); + color: light.$input-color; + } + } + &.select2-container--disabled .select2-selection__arrow { + b { + background-image: str-replace( + str-replace(light.$form-select-disabled-indicator, '#{$text-muted}', light.$text-muted), + '#', + '%23' + ); + } + } + @include app-ltr-style { + .select2-selection--single .select2-selection__rendered { + padding-left: calc(light.$input-padding-x - light.$input-border-width); + } + } + + @include app-rtl-style { + .select2-selection--single .select2-selection__rendered { + padding-right: calc(light.$input-padding-x - light.$input-border-width); + } + } + + &.select2-container--disabled .select2-selection--single { + background-color: light.$input-disabled-bg; + border-color: light.$input-border-color !important; + .select2-selection__rendered { + color: light.$text-muted; + } + } + + // Multiple Selection + // ******************************************************************************* + + .select2-selection--multiple { + min-height: calc(light.$input-height - light.$input-focus-border-width); + // TODO: Improve the padding calculation + padding: calc(light.$form-select-padding-y - light.$input-border-width - $select2-multiple-choice-spacer) + calc(light.$form-select-padding-x - light.$input-border-width); + .select2-selection__choice { + color: light.$body-color; + background-color: light.$gray-75; + } + } + &.select2-container--focus, + &.select2-container--open { + .select2-selection--single { + .select2-selection__rendered { + line-height: calc($input-height-inner - $input-border-width - $input-focus-border-width); + padding-inline-start: calc(light.$input-padding-x - $input-focus-border-width); + padding-inline-end: calc($select2-arrow-wrapper-width - $input-focus-border-width); + } + } + .select2-selection--multiple { + padding: calc( + light.$form-select-padding-y - + light.$input-border-width - + $select2-multiple-choice-spacer - + light.$input-border-width + ) + calc(light.$form-select-padding-x - $input-focus-border-width); + .select2-selection__choice { + margin-top: calc($select2-multiple-choice-spacer - light.$input-focus-border-width); + &:nth-last-child(2) { + margin-bottom: calc($select2-multiple-choice-spacer - light.$input-focus-border-width); + } + } + } + } + + &.select2-container--disabled .select2-selection--multiple { + border-color: light.$input-border-color !important; + background-color: light.$input-disabled-bg; + .select2-selection__rendered { + color: light.$text-muted; + } + } + + // Generic + // ******************************************************************************* + + .select2-search--dropdown .select2-search__field { + border: 1px solid light.$input-border-color; + } + + // Placeholder + .select2-search__field { + &::-webkit-input-placeholder { + color: light.$input-placeholder-color; + } + + &::-moz-placeholder { + color: light.$input-placeholder-color; + } + + &:-ms-input-placeholder { + color: light.$input-placeholder-color; + } + } + + .select2-results__option { + color: light.$headings-color; + &[aria-selected='true'] { + color: light.$body-color; + background-color: light.$gray-100; + } + + .select2-results__option[role='option'] { + width: calc(#{'100% - #{light.$input-padding-x}'}); + padding-left: light.$input-padding-x; + + .select2-results__option[role='option'] { + padding-left: light.$input-padding-x * 2; + + .select2-results__option[role='option'] { + padding-left: light.$input-padding-x * 3; + + .select2-results__option[role='option'] { + padding-left: light.$input-padding-x * 4; + + .select2-results__option[role='option'] { + padding-left: light.$input-padding-x * 5; + + .select2-results__option[role='option'] { + padding-left: light.$input-padding-x; + } + } + } + } + } + } + } + + .select2-results__group { + padding: 0.5rem (light.$input-padding-x * 0.5); + } + } + + @if $enable-rtl-support { + .select2-container--default[dir='rtl'] .select2-selection--multiple .select2-selection__choice { + margin-left: $select2-multiple-choice-spacer; + margin-right: 0; + } + } + + @include app-rtl-style { + .select2-container--default { + .select2-results__option .select2-results__option { + padding-right: light.$input-padding-x; + padding-left: 0 !important; + margin-left: 0 !important; + + .select2-results__option[role='option'] { + padding-right: light.$input-padding-x * 2; + + .select2-results__option[role='option'] { + padding-right: light.$input-padding-x * 3; + + .select2-results__option[role='option'] { + padding-right: light.$input-padding-x * 4; + + .select2-results__option[role='option'] { + padding-right: light.$input-padding-x * 5; + + .select2-results__option[role='option'] { + padding-right: light.$input-padding-x; + } + } + } + } + } + } + } + } + + @include select2-validation-state('valid', light.$form-feedback-valid-color); + @include select2-validation-state('invalid', light.$form-feedback-invalid-color); + + @each $color, $value in light.$theme-colors { + @if $color != primary { + .select2-#{$color} { + @include select2-variant($value); + } + } + } + } +} + +@if $enable-dark-style { + .dark-style { + $select2-multiple-choice-spacer: px-to-rem( + floor(rem-to-px((dark.$input-height-inner - $select2-multiple-selection-line-height) * 0.5)) + ); + + .select2-selection--multiple { + .select2-selection__choice { + margin-top: calc($select2-multiple-choice-spacer - 1px); + margin-right: $select2-multiple-choice-spacer; + background-color: dark.$gray-75; + &:nth-last-child(2) { + margin-bottom: calc($select2-multiple-choice-spacer - 1px); + } + } + .select2-selection__clear { + margin-top: $select2-multiple-choice-spacer; + } + .select2-selection__placeholder { + margin-top: $select2-multiple-choice-spacer; + } + + .select2-selection__rendered { + padding: 0; + } + } + + @if $enable-rtl-support { + .select2-container--default[dir='rtl'] .select2-selection--multiple .select2-selection__choice { + margin-left: $select2-multiple-choice-spacer; + margin-right: 0; + } + } + + .select2-container--default { + .select2-selection { + transition: dark.$input-transition; + background-color: dark.$input-bg; + border: 1px solid dark.$input-border-color; + + @include dark.border-radius(dark.$border-radius); + &:hover { + border-color: dark.$input-border-hover-color; + } + } + + .select2-selection__placeholder { + color: dark.$input-placeholder-color; + } + + // Single Selection + // ******************************************************************************* + + .select2-selection--single { + height: dark.$input-height; + + .select2-selection__arrow { + height: dark.$input-height; + position: absolute; + + b { + background-image: str-replace( + str-replace( + dark.$form-select-indicator, + '#{$form-select-indicator-color}', + dark.$form-select-indicator-color + ), + '#', + '%23' + ); + } + } + + .select2-selection__rendered { + line-height: calc(dark.$input-height-inner - dark.$input-border-width); + color: dark.$input-color; + } + + .select2-selection__clear { + color: dark.$text-muted; + } + } + &.select2-container--disabled .select2-selection__arrow { + b { + background-image: str-replace( + str-replace(dark.$form-select-disabled-indicator, '#{$text-muted}', dark.$text-muted), + '#', + '%23' + ); + } + } + @include app-ltr-style { + .select2-selection--single .select2-selection__rendered { + padding-left: calc(dark.$input-padding-x - dark.$input-border-width); + } + } + + // Multiple Selection + + .select2-selection--multiple { + min-height: calc(dark.$input-height - dark.$input-focus-border-width); + // TODO: Improve the padding calculation + padding: calc(dark.$form-select-padding-y - dark.$input-border-width - $select2-multiple-choice-spacer) + calc(dark.$form-select-padding-x - dark.$input-border-width); + .select2-selection__choice { + color: dark.$body-color; + background-color: dark.$gray-75; + } + } + &.select2-container--focus, + &.select2-container--open { + .select2-selection--single { + .select2-selection__rendered { + line-height: calc(dark.$input-height-inner - dark.$input-border-width - dark.$input-focus-border-width); + padding-inline-start: calc(dark.$input-padding-x - dark.$input-focus-border-width) !important; + padding-inline-end: calc($select2-arrow-wrapper-width - dark.$input-focus-border-width); + } + } + .select2-selection--multiple { + padding: calc( + dark.$form-select-padding-y - + dark.$input-border-width - + $select2-multiple-choice-spacer - + dark.$input-border-width + ) + calc(dark.$form-select-padding-x - dark.$input-focus-border-width); + .select2-selection__choice { + margin-top: calc($select2-multiple-choice-spacer - light.$input-focus-border-width); + &:nth-last-child(2) { + margin-bottom: calc($select2-multiple-choice-spacer - light.$input-focus-border-width); + } + } + } + } + + &.select2-container--disabled .select2-selection--multiple { + border-color: dark.$input-border-color !important; + background-color: dark.$input-disabled-bg; + .select2-selection__rendered { + color: dark.$text-muted; + } + } + + @include app-rtl-style { + .select2-selection--single .select2-selection__rendered { + padding-right: calc(dark.$input-padding-x - dark.$input-border-width); + } + } + + &.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent dark.$input-placeholder-color transparent; + } + + &.select2-container--disabled .select2-selection--single { + background-color: dark.$input-disabled-bg; + border-color: dark.$input-border-color !important; + .select2-selection__rendered { + color: dark.$text-muted; + } + } + + // Placeholder + .select2-search__field { + &::-webkit-input-placeholder { + color: dark.$input-placeholder-color; + } + &::-moz-placeholder { + color: dark.$input-placeholder-color; + } + + &:-ms-input-placeholder { + color: dark.$input-placeholder-color; + } + } + + .select2-search--dropdown .select2-search__field { + border: 1px solid dark.$input-border-color; + background: dark.$input-bg; + } + + .select2-results__option { + color: dark.$headings-color; + &[aria-selected='true'] { + color: dark.$body-color; + background-color: dark.$gray-100; + } + + .select2-results__option { + .select2-results__option[role='option'] { + padding-left: dark.$input-padding-x; + + .select2-results__option[role='option'] { + padding-left: dark.$input-padding-x * 2; + + .select2-results__option[role='option'] { + padding-left: dark.$input-padding-x * 3; + + .select2-results__option[role='option'] { + padding-left: dark.$input-padding-x * 4; + + .select2-results__option[role='option'] { + padding-left: dark.$input-padding-x * 5; + + .select2-results__option[role='option'] { + padding-left: dark.$input-padding-x; + } + } + } + } + } + } + } + } + + .select2-results__group { + padding: 0.5rem (dark.$input-padding-x * 0.5); + } + } + + .select2-dropdown { + z-index: dark.$zindex-dropdown; + background: dark.$dropdown-bg; + border-color: dark.$dropdown-border-color; + background-clip: padding-box; + box-shadow: dark.$dropdown-box-shadow; + &.select2-dropdown--above { + box-shadow: 0 -0.2rem 1.25rem rgba(15, 20, 34, 0.55) !important; + } + } + + .select2-search__field { + color: dark.$input-color; + } + + @include app-rtl-style { + .select2-container--default { + .select2-results__option .select2-results__option { + padding-left: 0 !important; + padding-right: dark.$input-padding-x; + margin-left: 0 !important; + + .select2-results__option[role='option'] { + padding-right: dark.$input-padding-x * 2; + + .select2-results__option[role='option'] { + padding-right: dark.$input-padding-x * 3; + + .select2-results__option[role='option'] { + padding-right: dark.$input-padding-x * 4; + + .select2-results__option[role='option'] { + padding-right: dark.$input-padding-x * 5; + + .select2-results__option[role='option'] { + padding-right: dark.$input-padding-x; + } + } + } + } + } + } + } + } + + @include select2-validation-state('valid', dark.$form-feedback-valid-color); + @include select2-validation-state('invalid', dark.$form-feedback-invalid-color); + + @each $color, $value in dark.$theme-colors { + @if $color != primary { + .select2-#{$color} { + @include select2-variant($value); + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/shepherd/_mixins.scss b/src/modules/Resources/assets/vendor/libs/shepherd/_mixins.scss new file mode 100644 index 0000000..7b247b5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/shepherd/_mixins.scss @@ -0,0 +1,8 @@ +@import '../../scss/_bootstrap-extended/include'; +@mixin tour-theme($background) { + // ! Note: If we remove this mixin, the background-color of label button in dark mode will not work properly. + .shepherd-element { + @include template-button-variant('.shepherd-button:not(:disabled).btn-primary', $background); + @include template-button-label-variant('.shepherd-button:not(:disabled).btn-label-secondary', $secondary); + } +} diff --git a/src/modules/Resources/assets/vendor/libs/shepherd/shepherd.js b/src/modules/Resources/assets/vendor/libs/shepherd/shepherd.js new file mode 100644 index 0000000..59b587d --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/shepherd/shepherd.js @@ -0,0 +1,7 @@ +import Shepherd from '/node_modules/shepherd.js/dist/esm/shepherd.mjs'; + +try { + window.Shepherd = Shepherd; +} catch (e) {} + +export { Shepherd }; diff --git a/src/modules/Resources/assets/vendor/libs/shepherd/shepherd.scss b/src/modules/Resources/assets/vendor/libs/shepherd/shepherd.scss new file mode 100644 index 0000000..8ebd309 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/shepherd/shepherd.scss @@ -0,0 +1,144 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@charset "UTF-8"; +@import '../../scss/_custom-variables/libs'; +@import '/node_modules/shepherd.js/dist/css/shepherd.css'; +@import './mixins'; + +$shepherd-header-content-padding-x: 1.25rem !default; +$shepherd-header-content-padding-y: 1.25rem !default; +$shepherd-btn-padding-x: 1.25rem !default; +$shepherd-container-width: 15rem !default; + +.shepherd-element { + .shepherd-arrow:before { + border-right: 1px solid; + border-bottom: 1px solid; + } + .shepherd-content { + min-width: $shepherd-container-width; + border-radius: light.$border-radius !important; + .shepherd-header { + padding: $shepherd-header-content-padding-y $shepherd-header-content-padding-x 0; + .shepherd-title { + font-weight: light.$font-weight-medium !important; + font-size: light.$h5-font-size !important; + } + + .shepherd-cancel-icon { + font-size: 1.85rem !important; + &:focus { + outline: 0; + } + } + } + .shepherd-text { + font-size: light.$font-size-base !important; + padding: 1rem $shepherd-header-content-padding-x !important; + } + + .shepherd-footer { + .shepherd-button { + &:not(:last-child) { + margin-right: 0.75rem !important; + } + } + padding: 0 $shepherd-header-content-padding-x $shepherd-header-content-padding-y !important; + } + } + // Ask before submit + &[data-popper-placement='bottom'] { + margin-top: 0.8rem !important; + } + &[data-popper-placement='top'] { + margin-top: -0.8rem !important; + } + &[data-popper-placement='left'] { + margin-left: -0.8rem !important; + .shepherd-arrow:before { + border-bottom: 0; + border-top: 1px solid; + } + } + &[data-popper-placement='right'] { + margin-left: 0.8rem !important; + .shepherd-arrow:before { + border-right: 0; + border-left: 1px solid; + } + } +} + +// Light style +@if $enable-light-style { + .shepherd-element { + box-shadow: light.$box-shadow; + background-color: light.$card-bg !important; + .shepherd-content { + .shepherd-header { + background: light.$card-bg !important; + .shepherd-title { + color: light.$headings-color !important; + } + .shepherd-cancel-icon { + color: light.$text-muted !important; + } + } + .shepherd-text { + color: light.$body-color !important; + } + } + .shepherd-arrow:before { + background-color: light.$card-bg !important; + border-color: light.$card-bg !important; + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + .shepherd-element { + box-shadow: dark.$box-shadow; + background: dark.$card-bg !important; + .shepherd-content { + .shepherd-header { + background: dark.$card-bg !important; + .shepherd-title { + color: dark.$headings-color !important; + } + .shepherd-cancel-icon { + color: dark.$text-muted !important; + } + } + .shepherd-text { + color: dark.$body-color !important; + } + } + } + .shepherd-arrow:before { + background-color: dark.$card-bg !important; + border-color: dark.$card-bg !important; + } + } +} + +// RTL +@if $enable-rtl-support { + [dir='rtl'] { + .shepherd-element { + .btn-next { + margin-right: 0.75rem; + } + &[data-popper-placement='left'] { + margin-left: -0.8rem !important; + } + } + } +} + +@include light.media-breakpoint-down(sm) { + .shepherd-element { + max-width: 300px !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/sortablejs/sortable.js b/src/modules/Resources/assets/vendor/libs/sortablejs/sortable.js new file mode 100644 index 0000000..7886c88 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/sortablejs/sortable.js @@ -0,0 +1,7 @@ +import Sortable from 'sortablejs/Sortable'; + +try { + window.Sortable = Sortable; +} catch (e) {} + +export { Sortable }; diff --git a/src/modules/Resources/assets/vendor/libs/spinkit/_mixins.scss b/src/modules/Resources/assets/vendor/libs/spinkit/_mixins.scss new file mode 100644 index 0000000..612206b --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/spinkit/_mixins.scss @@ -0,0 +1,14 @@ +@mixin spinkit-theme($background) { + .sk-primary.sk-plane, + .sk-primary .sk-chase-dot:before, + .sk-primary .sk-bounce-dot, + .sk-primary .sk-wave-rect, + .sk-primary.sk-pulse, + .sk-primary .sk-swing-dot, + .sk-primary .sk-circle-dot:before, + .sk-primary .sk-circle-fade-dot:before, + .sk-primary .sk-grid-cube, + .sk-primary .sk-fold-cube:before { + background-color: $background; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/spinkit/spinkit.scss b/src/modules/Resources/assets/vendor/libs/spinkit/spinkit.scss new file mode 100644 index 0000000..622912c --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/spinkit/spinkit.scss @@ -0,0 +1,25 @@ +@import 'spinkit/spinkit'; +:root { + --sk-size: 30px; + --sk-color: #fff; +} + +.sk-wave { + width: 40px; + white-space: nowrap; +} + +.sk-fading-circle .sk-circle { + margin-top: 0; + margin-bottom: 0; +} + +.sk-wave { + width: 40px; + white-space: nowrap; +} + +.sk-fading-circle .sk-circle { + margin-top: 0; + margin-bottom: 0; +} diff --git a/src/modules/Resources/assets/vendor/libs/sweetalert2/_mixins.scss b/src/modules/Resources/assets/vendor/libs/sweetalert2/_mixins.scss new file mode 100644 index 0000000..25241f9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/sweetalert2/_mixins.scss @@ -0,0 +1,35 @@ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin sweetalert2-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .swal2-progress-steps[class] .swal2-progress-step.swal2-active-progress-step, + .swal2-progress-steps[class] .swal2-progress-step-line, + .swal2-progress-steps[class] .swal2-active-progress-step, + .swal2-progress-steps[class] .swal2-progress-step { + background: $background; + color: $color; + } + + .swal2-progress-steps[class] .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step, + .swal2-progress-steps[class] .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: mix($white, $background, 85%); + } +} + +@mixin sweetalert2-dark-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .swal2-progress-steps[class] .swal2-progress-step.swal2-active-progress-step, + .swal2-progress-steps[class] .swal2-progress-step-line, + .swal2-progress-steps[class] .swal2-active-progress-step, + .swal2-progress-steps[class] .swal2-progress-step { + background: $background; + color: $color; + } + + .swal2-progress-steps[class] .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step, + .swal2-progress-steps[class] .swal2-progress-step.swal2-active-progress-step ~ .swal2-progress-step-line { + background: mix($dark, $background, 55%); + } +} diff --git a/src/modules/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js b/src/modules/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js new file mode 100644 index 0000000..bb7762e --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js @@ -0,0 +1,16 @@ +import SwalPlugin from 'sweetalert2/dist/sweetalert2'; + +const Swal = SwalPlugin.mixin({ + buttonsStyling: false, + customClass: { + confirmButton: 'btn btn-primary', + cancelButton: 'btn btn-label-danger', + denyButton: 'btn btn-label-secondary' + } +}); + +try { + window.Swal = Swal; +} catch (e) {} + +export { Swal }; diff --git a/src/modules/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss b/src/modules/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss new file mode 100644 index 0000000..2fb202e --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss @@ -0,0 +1,314 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'sweetalert2/src/sweetalert2'; + +// Sweet Alert2 Modal +.swal2-modal.swal2-popup { + .swal2-title { + margin: 1.875rem 0 1rem 0; + max-width: $swal2-width * 0.5; + line-height: light.$line-height-base; + } + + .swal2-content { + margin: 0 0 1rem 0; + } + + .swal2-actions { + margin-top: 1rem; + .btn { + align-items: center; + } + } + + .swal2-actions button + button { + margin-left: 0.375rem; + + @include app-rtl { + margin-left: 0; + margin-right: 0.375rem; + } + } + + .swal2-input, + .swal2-file, + .swal2-textarea { + box-shadow: none !important; + } + + .swal2-icon { + margin-bottom: 0; + } + + .swal2-checkbox input, + .swal2-radio input { + margin-right: 0.375rem; + + @include app-rtl { + margin-right: 0; + margin-left: 0.375rem; + } + } + .swal2-close:focus { + box-shadow: none; + } +} + +// RTL Specific +@include app-rtl(false) { + .swal2-close { + right: auto; + left: 0.5rem; + } + + .swal2-range input { + float: right; + } + + .swal2-range output { + float: left; + } + + .swal2-radio label:not(:first-child) { + margin-left: 0; + margin-right: 1.25rem; + } + + .swal2-validationerror::before { + margin-left: 0.625rem; + margin-right: 0; + } + + .swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after { + margin-left: 0; + margin-right: 0.3125rem; + } +} + +// Light style +@if $enable-light-style { + .light-style { + .swal2-container { + z-index: light.$zindex-modal; + + .tooltip { + z-index: light.$zindex-modal + 2; + } + + .popover { + z-index: light.$zindex-modal + 1; + } + } + + .swal2-modal.swal2-popup { + font-family: light.$font-family-base; + box-shadow: light.$modal-content-box-shadow-xs; + + @include light.border-radius(light.$border-radius); + } + + .swal2-container.swal2-shown { + background: rgba(light.$modal-backdrop-bg, light.$modal-backdrop-opacity); + } + + .swal2-popup .swal2-title { + font-size: light.$h2-font-size; + font-weight: light.$headings-font-weight; + color: light.$body-color; + } + + .swal2-popup .swal2-content { + color: light.$text-muted; + line-height: light.$line-height-base; + font-size: light.$lead-font-size; + font-weight: light.$lead-font-weight; + } + + .swal2-popup .swal2-input, + .swal2-popup .swal2-file, + .swal2-popup .swal2-textarea { + border: light.$input-border-width solid light.$input-border-color !important; + font-size: light.$font-size-lg; + color: light.$body-color; + + @include light.border-radius(light.$border-radius-lg); + } + + .swal2-popup .swal2-validationerror { + color: light.$body-color; + background: light.$gray-100; + } + + // Colors + .swal2-popup .swal2-icon.swal2-success { + border-color: light.$success; + + .swal2-success-ring { + border-color: rgba(light.$success, 0.2); + } + + [class^='swal2-success-line'] { + background-color: light.$success; + } + } + + .swal2-popup .swal2-icon.swal2-question { + border-color: rgba(light.$secondary, 0.4); + color: light.$secondary; + } + + .swal2-popup .swal2-icon.swal2-info { + border-color: rgba(light.$info, 0.4); + color: light.$info; + } + + .swal2-popup .swal2-icon.swal2-warning { + border-color: rgba(light.$warning, 0.8); + color: light.$warning; + } + + .swal2-popup .swal2-icon.swal2-error { + border-color: rgba(light.$danger, 0.6); + + [class^='swal2-x-mark-line'] { + border-color: light.$danger; + } + } + } +} +// Dark Style +@if $enable-dark-style { + .dark-style { + .swal2-container { + z-index: dark.$zindex-modal; + + .tooltip { + z-index: dark.$zindex-modal + 2; + } + + .popover { + z-index: dark.$zindex-modal + 1; + } + } + + .swal2-modal.swal2-popup { + background: dark.$modal-content-bg; + font-family: dark.$font-family-base; + box-shadow: dark.$modal-content-box-shadow-xs; + + @include dark.border-radius(dark.$border-radius); + } + + .swal2-container.swal2-shown { + background: rgba(dark.$modal-backdrop-bg, dark.$modal-backdrop-opacity); + } + + .swal2-popup .swal2-title { + font-size: dark.$h2-font-size; + font-weight: dark.$headings-font-weight; + color: dark.$body-color; + } + + .swal2-popup .swal2-content { + font-weight: dark.$lead-font-weight; + color: dark.$text-muted; + line-height: dark.$line-height-base; + font-size: dark.$lead-font-size; + pre { + color: dark.$body-color; + } + } + .swal2-popup .swal2-footer { + border-top: 1px solid dark.$border-color; + } + + .swal2-popup .swal2-html-container { + color: dark.$body-color; + } + + .swal2-popup .swal2-input, + .swal2-popup .swal2-file, + .swal2-popup .swal2-textarea { + color: dark.$body-color; + border: dark.$input-border-width solid dark.$input-border-color !important; + font-size: dark.$font-size-lg; + + @include dark.border-radius(dark.$border-radius-lg); + } + + .swal2-popup .swal2-validationerror { + color: dark.$body-color; + background: dark.$gray-100; + } + + // Colors + .swal2-popup .swal2-icon.swal2-success { + border-color: dark.$success; + + .swal2-success-ring { + border-color: rgba(dark.$success, 0.2); + } + + [class^='swal2-success-line'] { + background-color: dark.$success; + } + } + + .swal2-popup .swal2-icon.swal2-question { + border-color: rgba(dark.$secondary, 0.4); + color: dark.$secondary; + } + + .swal2-popup .swal2-icon.swal2-info { + border-color: rgba(dark.$info, 0.4); + color: dark.$info; + } + + .swal2-popup .swal2-icon.swal2-warning { + border-color: rgba(dark.$warning, 0.8); + color: dark.$warning; + } + + .swal2-popup .swal2-icon.swal2-error { + border-color: rgba(dark.$danger, 0.6); + + [class^='swal2-x-mark-line'] { + border-color: dark.$danger; + } + } + } +} + +.swal2-popup .swal2-actions.swal2-loading :not(.swal2-styled).swal2-confirm::after { + display: block; + width: 1em; + height: 1em; + margin-left: 0.2rem; + border: 0.15em solid currentColor; + border-right-color: transparent; + box-shadow: none; + + @include app-rtl { + margin-left: 0; + margin-right: 0.5em; + } +} + +// IE Specific +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .swal2-modal:not([style='display: none;']), + .swal2-icon:not([style='display: none;']), + .swal2-actions:not([style='display: none;']), + .swal2-image:not([style='display: none;']), + .swal2-input:not([style='display: none;']), + .swal2-file:not([style='display: none;']), + .swal2-range:not([style='display: none;']), + .swal2-select:not([style='display: none;']), + .swal2-radio:not([style='display: none;']), + .swal2-checkbox:not([style='display: none;']), + .swal2-textarea:not([style='display: none;']), + .swal2-footer:not([style='display: none;']) { + display: flex; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/swiper/_mixins.scss b/src/modules/Resources/assets/vendor/libs/swiper/_mixins.scss new file mode 100644 index 0000000..66c841f --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/swiper/_mixins.scss @@ -0,0 +1,6 @@ +@mixin swiper-theme($background) { + .swiper-pagination-bullet.swiper-pagination-bullet-active, + .swiper-pagination.swiper-pagination-progressbar .swiper-pagination-progressbar-fill { + background: $background !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/swiper/swiper.js b/src/modules/Resources/assets/vendor/libs/swiper/swiper.js new file mode 100644 index 0000000..ff6e4b1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/swiper/swiper.js @@ -0,0 +1,7 @@ +import Swiper from 'swiper/bundle'; + +try { + window.Swiper = Swiper; +} catch (e) {} + +export { Swiper }; diff --git a/src/modules/Resources/assets/vendor/libs/swiper/swiper.scss b/src/modules/Resources/assets/vendor/libs/swiper/swiper.scss new file mode 100644 index 0000000..8f92171 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/swiper/swiper.scss @@ -0,0 +1,113 @@ +@import '../../scss/_bootstrap-extended/include'; +@import '../../scss/_custom-variables/libs'; +@import 'swiper/css/bundle'; + +.swiper { + width: 100%; + overflow: hidden !important; + .swiper-slide { + color: $white; + } + .swiper-pagination-bullet.swiper-pagination-bullet-active.bg-transparent { + background: transparent !important; + } +} + +.swiper-button-prev, +.swiper-button-next { + display: flex; + justify-content: center; + align-items: center; + + &.swiper-button-white { + color: $white; + } + + &.custom-icon { + background-image: none; + line-height: 1; + &::after { + font-size: 2rem; + } + @include app-rtl { + transform: scaleX(-1) rotate(180deg); + } + } +} + +.swiper-pagination-bullet { + background: rgba(0, 0, 0, 0.7); +} + +.swiper-pagination-progressbar, +.swiper-scrollbar { + background: rgba(0, 0, 0, 0.08); +} + +.swiper-scrollbar-drag { + background: rgba(0, 0, 0, 0.3); +} + +.swiper-pagination-white { + .swiper-pagination-bullet { + background: $white !important; + } + + .swiper-pagination-bullet-active { + background: $white !important; + } +} + +.swiper-scrollbar-white { + background: rgba(255, 255, 255, 0.2) !important; + + .swiper-scrollbar-drag { + background: $white !important; + } +} + +// black arrows for 3d style +@if $enable-dark-style { + .dark-style { + .swiper-3d { + .swiper-pagination-bullet { + background-color: $white; + } + .swiper-button-prev, + .swiper-button-next { + &.swiper-button-black { + --swiper-navigation-color: $white; + } + } + } + } +} + +@include app-rtl(false) { + .swiper-button-next { + right: auto; + left: 10px; + } + + .swiper-button-prev { + right: 10px; + left: auto; + } + + .swiper-vertical { + > .swiper-pagination-bullets { + right: auto; + left: 10px; + } + + > .swiper-pagination-progressbar { + right: 0; + left: auto; + } + + > .swiper-scrollbar { + right: auto; + left: 3px; + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/tagify/_mixins.scss b/src/modules/Resources/assets/vendor/libs/tagify/_mixins.scss new file mode 100644 index 0000000..57a2912 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/tagify/_mixins.scss @@ -0,0 +1,8 @@ +@mixin tagify-theme($color) { + .tagify--focus { + border-color: $color !important; + } + .tagify__dropdown__item--active { + background: $color !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/tagify/_tagify-email-list.scss b/src/modules/Resources/assets/vendor/libs/tagify/_tagify-email-list.scss new file mode 100644 index 0000000..5cf2047 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/tagify/_tagify-email-list.scss @@ -0,0 +1,105 @@ +.tagify-email-list { + display: inline-block; + min-width: 0; + border: none; + &.tagify { + padding: 0 !important; + padding-bottom: calc($tag-spacer - light.$input-border-width) !important; + } + + &.tagify { + padding: 0 !important; + padding-bottom: calc($tag-spacer - light.$input-border-width) !important; + } + + &.tagify.tagify--focus { + padding-left: 0 !important; + } + .tagify__tag { + margin: 0; + margin-inline-start: 0 !important; + margin-inline-end: $tag-spacer !important; + margin-bottom: $tag-spacer !important; + > div { + padding: $tag-spacer * 0.5 $tag-spacer !important; + padding-inline: $tag-spacer * 2 !important; + } + &:only-of-type { + > div { + padding-inline: $tag-spacer !important; + } + } + } + + /* Do not show the "remove tag" (x) button when only a single tag remains */ + .tagify__tag:only-of-type .tagify__tag__removeBtn { + display: none; + } + + .tagify__tag__removeBtn { + opacity: 0; + transform: translateX(-6px) scale(0.5); + margin-left: -3ch; + transition: 0.12s; + position: absolute; + inset-inline-end: 0; + } + + .tagify__tag:hover .tagify__tag__removeBtn { + transform: none; + opacity: 1; + margin-left: -1ch; + } + + .tagify__input { + display: none; + } +} + +.tagify__tag > div { + border-radius: light.$border-radius-pill; +} + +//RTL +@include app-rtl(false) { + .tagify-email-list { + .tagify__tag { + margin: 0 $tag-spacer $tag-spacer 0; + &:hover .tagify__tag__removeBtn { + margin-left: auto; + margin-right: -1ch; + } + } + .tagify__tag__removeBtn { + transform: translateX(6px) scale(0.5); + margin-left: auto; + margin-right: -3ch; + } + } +} + +// Light styles +@if $enable-light-style { + .light-style { + .tagify-email-list { + .tagify__tag { + &--editable:not(.tagify--invalid) > div::before { + box-shadow: 0 0 0 2px light.$border-color inset !important; + } + } + } + } +} + +// Dark styles +@if $enable-dark-style { + .dark-style { + .tagify-email-list { + .tagify__tag { + &--editable:not(.tagify--invalid) > div::before { + box-shadow: 0 0 0 2px dark.$border-color inset !important; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/tagify/_tagify-inline-suggestion.scss b/src/modules/Resources/assets/vendor/libs/tagify/_tagify-inline-suggestion.scss new file mode 100644 index 0000000..75a2685 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/tagify/_tagify-inline-suggestion.scss @@ -0,0 +1,67 @@ +.tags-inline { + .tagify__dropdown__wrapper { + padding: 0 $tag-spacer $tag-spacer $tag-spacer; + border: none; + box-shadow: none; + } + .tagify__dropdown__item { + display: inline-block; + border-radius: 3px; + padding: 0.3em 0.5em; + margin: $tag-spacer $tag-spacer 0 0; + font-size: 0.85em; + transition: 0s; + } +} + +//RTL +@include app-rtl(false) { + .tags-inline { + .tagify__dropdown__item { + margin: $tag-spacer 0 0 $tag-spacer; + } + } +} + +// Light styles +@if $enable-light-style { + .light-style { + .tags-inline { + .tagify__dropdown__item { + border: 1px solid light.$border-color; + background: light.rgba-to-hex(light.$gray-100); + + color: light.$body-color; + + &--active { + color: light.$white !important; + } + + &:hover { + color: light.$white !important; + } + } + } + } +} + +// Dark styles +@if $enable-dark-style { + .dark-style { + .tags-inline { + .tagify__dropdown__item { + border: 1px solid dark.$border-color; + background: dark.$body-bg; + color: dark.$body-color; + + &--active { + color: dark.$white !important; + } + + &:hover { + color: dark.$white !important; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/tagify/_tagify-users-list.scss b/src/modules/Resources/assets/vendor/libs/tagify/_tagify-users-list.scss new file mode 100644 index 0000000..d8b01e3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/tagify/_tagify-users-list.scss @@ -0,0 +1,124 @@ +/* Suggestions items */ +.tagify__dropdown.users-list { + font-size: 1rem; + .addAll { + display: block !important; + } + + .tagify__dropdown__item { + display: grid; + grid-template-columns: auto 1fr; + gap: 0 1em; + grid-template-areas: + 'avatar name' + 'avatar email'; + + &__avatar-wrap { + grid-area: avatar; + width: $tag-avatar-select-size; + height: $tag-avatar-select-size; + border-radius: 50%; + overflow: hidden; + + transition: 0.1s ease-out; + } + } + + img { + width: 100%; + vertical-align: top; + } + + strong { + grid-area: name; + width: 100%; + align-self: center; + font-weight: 500; + } + + span { + grid-area: email; + width: 100%; + font-size: 0.9em; + opacity: 0.6; + } +} + +/* Tags items */ +.tagify__tag { + white-space: nowrap; + + .tagify__tag__avatar-wrap { + width: $tag-avatar-size; + height: $tag-avatar-size; + white-space: normal; + + border-radius: 50%; + margin-right: 5px; + transition: 0.12s ease-out; + vertical-align: middle; + } + + img { + width: 100%; + vertical-align: top; + } +} + +//RTL +@include app-rtl(false) { + .tagify__tag { + .tagify__tag__avatar-wrap { + margin-left: 5px; + margin-right: auto; + } + } +} + +// Light styles +@if $enable-light-style { + .light-style { + .tagify { + &__dropdown.users-list { + .tagify__dropdown__item__avatar-wrap { + background: light.$body-bg; + } + } + + &__tag { + .tagify__tag__avatar-wrap { + background: light.$body-bg; + } + } + &__dropdown.users-list { + .addAll { + border-bottom: 1px solid light.$border-color; + } + } + } + } +} + +// Dark styles +@if $enable-dark-style { + .dark-style { + .tagify { + &__dropdown.users-list { + .tagify__dropdown__item__avatar-wrap { + background: dark.$body-bg; + } + } + + &__tag { + .tagify__tag__avatar-wrap { + background: dark.$body-bg; + } + } + &__dropdown.users-list { + .addAll { + border-bottom: 1px solid dark.$border-color; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/tagify/tagify.js b/src/modules/Resources/assets/vendor/libs/tagify/tagify.js new file mode 100644 index 0000000..ef2f8f2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/tagify/tagify.js @@ -0,0 +1,7 @@ +import Tagify from '/node_modules/@yaireo/tagify/dist/tagify.js'; + +try { + window.Tagify = Tagify; +} catch (e) {} + +export { Tagify }; diff --git a/src/modules/Resources/assets/vendor/libs/tagify/tagify.scss b/src/modules/Resources/assets/vendor/libs/tagify/tagify.scss new file mode 100644 index 0000000..735bc38 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/tagify/tagify.scss @@ -0,0 +1,246 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +@import 'mixins'; + +// Height clac to match form-control height +$tag-line-height: 1.5rem !default; +$tag-spacer: light.px-to-rem(floor(light.rem-to-px((light.$input-height-inner - $tag-line-height) * 0.6))) !default; + +// Override tagify vars +$tag-remove: light.$danger !default; +$tag-remove-btn-bg--hover: darken($tag-remove, 5) !default; +$tag-invalid-color: $tag-remove !default; +$tag-inset-shadow-size: 2em !default; +$tag-remove-btn-color: light.rgba-to-hex(light.$gray-600, light.$rgba-to-hex-bg) !default; +$tag-invalid-bg: rgba($tag-remove, 0.5) !default; + +$tag-avatar-size: 22px !default; +$tag-avatar-select-size: 36px !default; + +$tag-max-width: auto !default; + +$tag-inset-shadow-size: 2em !default; + +//! Tagify $tag-bg custom color to match with dark and light layout +$tag-bg: rgb(light.$text-light, 0.5) !default; + +@import '/node_modules/@yaireo/tagify/src/tagify.scss'; + +@import 'tagify-users-list'; +@import 'tagify-inline-suggestion'; +@import 'tagify-email-list'; + +.tagify { + &.form-control { + transition: none; + display: flex; + align-items: flex-end; + padding: calc(light.$input-focus-border-width - light.$input-border-width) $tag-spacer $tag-spacer - 0.1875rem !important; + .fv-plugins-bootstrap5-row-invalid & { + padding: 0 calc($tag-spacer - light.$input-border-width) calc($tag-spacer - light.$input-focus-border-width) !important; + } + } + + &.tagify--focus, + &.form-control:focus { + padding: 0 calc($tag-spacer - light.$input-border-width) + calc($tag-spacer - calc(light.$input-focus-border-width * 2)) !important; + border-width: light.$input-focus-border-width; + } + &__tag, + &__input { + margin: $tag-spacer - 0.25rem $tag-spacer 0 0 !important; + line-height: 1; + } + &__input { + line-height: $tag-line-height; + &:empty::before { + top: 4px; + } + } + &__tag { + > div { + line-height: $tag-line-height; + padding: 0 0 0 $tag-spacer; + } + &__removeBtn { + margin-right: $tag-spacer - 0.3rem; + margin-left: $tag-spacer * 0.5; + font-family: 'tabler-icons'; + opacity: 0.7; + &:hover { + background: none; + color: $tag-remove-btn-bg--hover !important; + } + &::after { + content: '\f739'; + } + } + &:hover:not([readonly]), + &:focus { + div::before { + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + } + } + } + &__dropdown { + transform: translateY(0); + } + &[readonly]:not(.tagify--mix) .tagify__tag > div { + padding: 0 $tag-spacer 0 $tag-spacer !important; + } + &__input { + padding: 0; + } + &__tag-text { + font-size: light.$font-size-sm; + font-weight: light.$font-weight-medium; + } +} +.tagify { + &.form-control { + padding-top: calc(light.$input-padding-y - $tag-spacer) !important; + } + &.tagify--focus, + &.form-control:focus { + padding-top: calc(light.$input-padding-y - $tag-spacer - 1px) !important; + } +} + +//RTL +@include app-rtl(false) { + .tagify { + &__tag, + &__input { + margin: $tag-spacer 0 0 $tag-spacer; + } + + + input, + + textarea { + left: 0; + right: -9999em !important; + } + + &__tag { + > div { + padding: 0 $tag-spacer + 0.25rem 0 0; + } + &__removeBtn { + margin-left: $tag-spacer; + margin-right: $tag-spacer * 0.5; + } + } + } +} + +// Light styles +@if $enable-light-style { + .light-style { + .tagify { + &__tag { + > div::before { + box-shadow: 0 0 0 1.3em light.$gray-75 inset; + } + .tagify__tag-text { + color: light.$headings-color; + } + &:hover:not([readonly]), + &:focus { + div::before { + box-shadow: 0 0 0 1.3em light.$gray-200 inset; + } + } + &__removeBtn { + color: light.rgba-to-hex(light.$gray-600, light.$rgba-to-hex-bg); + &:hover + div::before { + background: rgba($tag-remove, 0.3); + } + } + } + &:hover:not([readonly]) { + border-color: light.$input-border-color; + } + &__input::before { + color: light.$input-placeholder-color !important; + } + &__dropdown { + box-shadow: light.$dropdown-box-shadow; + border-top-color: light.$dropdown-border-color; + &__wrapper { + background: light.$dropdown-bg; + border-color: light.$dropdown-border-color; + } + } + } + } +} + +// Dark styles +@if $enable-dark-style { + .dark-style { + .tagify { + &__tag { + > div { + &::before { + box-shadow: 0 0 0 1.3em dark.$gray-75 inset; + } + .tagify__tag-text { + color: dark.$headings-color; + } + } + &:hover:not([readonly]), + &:focus { + div::before { + box-shadow: 0 0 0 1.3em dark.$gray-200 inset; + } + } + &__removeBtn { + color: dark.rgba-to-hex(dark.$gray-600, dark.$rgba-to-hex-bg); + &:hover + div::before { + background: rgba($tag-remove, 0.3); + } + } + } + &:hover:not([readonly]) { + border-color: dark.$input-border-color; + } + &__input::before { + color: dark.$input-placeholder-color !important; + } + &[readonly]:not(.tagify--mix) { + .tagify__tag > div::before { + background: linear-gradient( + 45deg, + dark.$input-border-color 25%, + transparent 25%, + transparent 50%, + dark.$input-border-color 50%, + dark.$input-border-color 75%, + transparent 75%, + transparent + ) + 0/5px + 5px; + } + &:not(.tagify--select) .tagify__tag > div::before { + animation: none; + box-shadow: none; + } + } + &__dropdown { + box-shadow: dark.$dropdown-box-shadow; + border-top-color: dark.$dropdown-border-color; + &__wrapper { + box-shadow: dark.$dropdown-box-shadow; + background: dark.$dropdown-bg; + border-color: dark.$dropdown-border-color; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/libs/toastr/toastr.js b/src/modules/Resources/assets/vendor/libs/toastr/toastr.js new file mode 100644 index 0000000..1f9c229 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/toastr/toastr.js @@ -0,0 +1,7 @@ +import toastr from 'toastr/toastr'; + +try { + window.toastr = toastr; +} catch (e) {} + +export { toastr }; diff --git a/src/modules/Resources/assets/vendor/libs/toastr/toastr.scss b/src/modules/Resources/assets/vendor/libs/toastr/toastr.scss new file mode 100644 index 0000000..14331be --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/toastr/toastr.scss @@ -0,0 +1,199 @@ +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; +@import 'toastr/toastr.scss'; + +.toast-message { + margin-left: 0.75rem !important; + margin-right: 0.75rem !important; + a { + color: light.$primary; + &:hover { + color: rgba(light.$primary, 0.6); + } + } +} +// Toast title +.toast-title { + margin-left: 0.75rem; + color: light.$headings-color; + margin-bottom: 0.25rem; + @include app-rtl { + margin-right: 0.75rem; + } +} + +#toast-container { + > div { + padding: 20px 30px 20px 50px !important; + opacity: 1; + + @include app-rtl { + direction: rtl; + background-position: top 0.9rem right 1.25rem; + padding: 20px 50px 20px 30px !important; + } + } + &.toast-top-left { + @include app-rtl { + right: 12px; + left: auto; + } + } + &.toast-top-right { + @include app-rtl { + left: 12px; + right: auto; + } + } + &.toast-bottom-left { + @include app-rtl { + right: 12px; + left: auto; + } + } + &.toast-bottom-right { + @include app-rtl { + left: 12px; + right: auto; + } + } + &.toast-top-full-width, + &.toast-bottom-full-width { + &#toast-container > div { + @include app-rtl { + left: 0; + right: 0; + } + } + } + > .toast { + max-width: 100%; + background-size: 28px; + background-repeat: no-repeat; + } + &.toast-bottom-full-width > div, + &.toast-top-full-width > div { + width: 100%; + margin-bottom: 0; + border-radius: 0 !important; + } + + > .toast-info { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='26' viewBox='0 0 26 26' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='26' height='26' rx='6' fill='%2300CFE8' fill-opacity='0.08'/%3E%3Ccircle cx='13' cy='13' r='6.75' stroke='%2300CFE8' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13.0002 10H13.0077' stroke='%2300CFE8' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M12.25 13H13V16H13.75' stroke='%2300CFE8' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A") !important; + background-position: 1.25rem 1.25rem; + } + > .toast-error { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='26' viewBox='0 0 26 26' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='26' height='26' rx='6' fill='%23EA5455' fill-opacity='0.08'/%3E%3Cpath d='M17.5 8.5L8.5 17.5' stroke='%23EA5455' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M8.5 8.5L17.5 17.5' stroke='%23EA5455' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A") !important; + + background-position: 1.25rem 1.25rem; + } + > .toast-success { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='26' viewBox='0 0 26 26' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='26' height='26' rx='6' fill='%2328C76F' fill-opacity='0.08'/%3E%3Cpath d='M7.75 13L11.5 16.75L19 9.25' stroke='%2328C76F' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A") !important; + background-position: 1.25rem 1.25rem; + } + > .toast-warning { + background-image: url("data:image/svg+xml,%3Csvg width='26' height='26' viewBox='0 0 26 26' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect width='26' height='26' rx='6' fill='%23FF9F43' fill-opacity='0.08'/%3E%3Cpath d='M13 10V12.8362' stroke='%23FF9F43' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M13 15.6543L13 15.6899' stroke='%23FF9F43' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M7.74941 18.2504H18.2494C18.7463 18.2469 19.2092 17.9976 19.4856 17.5846C19.7619 17.1716 19.8158 16.6485 19.6294 16.1879L14.3044 7.00038C14.0402 6.5229 13.5376 6.22656 12.9919 6.22656C12.4462 6.22656 11.9436 6.5229 11.6794 7.00038L6.35441 16.1879C6.17171 16.6377 6.218 17.1481 6.47865 17.5577C6.7393 17.9673 7.18207 18.2254 7.66691 18.2504' stroke='%23FF9F43' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !important; + background-position: 1.25rem 1.25rem; + } +} +// for full width toasts +#toast-container:not(.toast-bottom-full-width, .toast-top-full-width) > div { + width: 22em !important; +} + +.toast-progress { + position: absolute; + bottom: auto; + top: 0; + opacity: 0.15; + height: 0.1875rem; + -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=15); + filter: alpha(opacity=15); + + @include app-rtl { + left: auto; + right: 0; + } +} + +.toast-close-button { + position: absolute; + right: 1.25rem !important; + top: 0.5rem; + text-shadow: none; + color: light.$text-muted !important; + padding: auto; + font-size: 1.625rem; + + @include app-rtl { + left: 1.25rem !important; + right: auto !important; + } +} + +// Light style +@if $enable-light-style { + .light-style { + #toast-container { + z-index: light.$zindex-notification; + + .toast-close-button { + font-weight: light.$close-font-weight; + } + + > div { + box-shadow: light.$box-shadow; + border-radius: light.$border-radius; + } + + > .toast-success, + .toast-error, + .toast-info, + .toast-warning { + color: light.$headings-color; + background-color: light.$card-bg; + } + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + #toast-container { + z-index: dark.$zindex-notification; + + .toast-close-button { + font-weight: dark.$close-font-weight; + color: dark.$text-muted !important; + } + .toast-title { + color: dark.$headings-color; + } + + > div { + box-shadow: dark.$box-shadow; + border-radius: dark.$border-radius; + } + .toast-progress { + background-color: dark.$white; + } + + > .toast-success, + .toast-error, + .toast-info, + .toast-warning { + color: dark.$headings-color; + background-color: dark.$card-bg; + } + } + } +} + +// toast close button style +@media (min-width: 241px) and (max-width: 480px) { + #toast-container .toast-close-button { + top: 0.3em; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/typeahead-js/_mixins.scss b/src/modules/Resources/assets/vendor/libs/typeahead-js/_mixins.scss new file mode 100644 index 0000000..7a0263a --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/typeahead-js/_mixins.scss @@ -0,0 +1,11 @@ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin typeahead-theme($background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + .tt-suggestion:active, + .tt-cursor { + background: $background !important; + color: $color !important; + } +} diff --git a/src/modules/Resources/assets/vendor/libs/typeahead-js/typeahead.js b/src/modules/Resources/assets/vendor/libs/typeahead-js/typeahead.js new file mode 100644 index 0000000..bd1e169 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/typeahead-js/typeahead.js @@ -0,0 +1,7 @@ +import 'typeahead.js/dist/typeahead.bundle'; + +// try { +// window.typeahead = typeahead; +// } catch (e) {} + +// export { typeahead }; diff --git a/src/modules/Resources/assets/vendor/libs/typeahead-js/typeahead.scss b/src/modules/Resources/assets/vendor/libs/typeahead-js/typeahead.scss new file mode 100644 index 0000000..4fa9556 --- /dev/null +++ b/src/modules/Resources/assets/vendor/libs/typeahead-js/typeahead.scss @@ -0,0 +1,144 @@ +// Typeahead +// ******************************************************************************* + +@use '../../scss/_bootstrap-extended/include' as light; +@use '../../scss/_bootstrap-extended/include-dark' as dark; +@import '../../scss/_custom-variables/libs'; + +.twitter-typeahead { + display: block !important; + + .tt-menu { + float: left; + position: absolute; + left: 0; + top: 100%; + text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer) + list-style: none; + background-clip: padding-box; + display: none; + + @include app-rtl { + float: right; + left: auto !important; + right: 0 !important; + text-align: right; + } + + .tt-suggestion { + text-align: inherit; + border: 0; + width: 100%; + display: block; + white-space: nowrap; + background: none; + clear: both; + cursor: pointer; + + p { + margin: 0; + } + .tt-highlight { + font-weight: light.$font-weight-medium; + } + } + } + .tt-hint { + color: #999; + } + .tt-input { + @include app-rtl { + direction: rtl; + } + } +} + +// Light style +@if $enable-light-style { + .light-style { + .twitter-typeahead { + .tt-menu { + min-width: light.$dropdown-min-width; + padding: light.$dropdown-padding-y 0; + font-size: light.$font-size-base; + // border: light.$dropdown-border-width solid light.$dropdown-border-color; + z-index: light.$zindex-dropdown; + margin: calc(light.$dropdown-spacer + light.$dropdown-spacer) 0; + color: light.$body-color; + box-shadow: light.$dropdown-box-shadow; + background-color: light.$dropdown-bg; + @include light.border-radius(light.$border-radius); + } + .tt-hint { + color: light.$input-placeholder-color; + } + .tt-suggestion { + font-weight: light.$font-weight-normal; + color: light.$dropdown-link-color; + padding: light.$dropdown-item-padding-y light.$dropdown-item-padding-x; + + &:hover, + &:focus { + text-decoration: none; + color: light.$dropdown-link-hover-color; + background-color: light.$dropdown-link-hover-bg; + } + } + } + .tt-menu { + .suggestion { + &:hover, + &:focus { + text-decoration: none; + color: light.$dropdown-link-hover-color; + background-color: light.$dropdown-link-hover-bg; + } + } + } + } +} + +// Dark Style +@if $enable-dark-style { + .dark-style { + .twitter-typeahead { + .tt-menu { + color: dark.$body-color; + min-width: dark.$dropdown-min-width; + padding: dark.$dropdown-padding-y 0; + margin: calc(dark.$dropdown-spacer + dark.$dropdown-spacer) 0; + box-shadow: dark.$dropdown-box-shadow; + // border: dark.$dropdown-border-width solid dark.$dropdown-border-color; + font-size: dark.$font-size-base; + background-color: dark.$dropdown-bg; + z-index: dark.$zindex-dropdown; + @include dark.border-radius(dark.$border-radius); + .tt-suggestion { + font-weight: dark.$font-weight-normal; + color: dark.$dropdown-link-color; + padding: dark.$dropdown-item-padding-y dark.$dropdown-item-padding-x; + + &:hover, + &:focus { + text-decoration: none; + color: dark.$dropdown-link-hover-color; + background-color: dark.$dropdown-link-hover-bg; + } + } + } + .tt-hint { + color: dark.$input-placeholder-color; + } + } + .tt-menu { + .suggestion { + &:hover, + &:focus { + text-decoration: none; + color: dark.$dropdown-link-hover-color; + background-color: dark.$dropdown-link-hover-bg; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-dark.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-dark.scss new file mode 100644 index 0000000..2071652 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-dark.scss @@ -0,0 +1,39 @@ +@import '_bootstrap-extended/include-dark'; + +// Import bootstrap core scss from node_module +// ! Utilities are customized and added in bootstrap-extended + +// Layout & components +@import 'bootstrap/scss/root'; +@import 'bootstrap/scss/reboot'; +@import 'bootstrap/scss/type'; +@import 'bootstrap/scss/images'; +@import 'bootstrap/scss/containers'; +@import 'bootstrap/scss/grid'; +@import 'bootstrap/scss/tables'; +@import 'bootstrap/scss/forms'; +@import 'bootstrap/scss/buttons'; +@import 'bootstrap/scss/transitions'; +@import 'bootstrap/scss/dropdown'; +@import 'bootstrap/scss/button-group'; +@import 'bootstrap/scss/nav'; +@import 'bootstrap/scss/navbar'; +@import 'bootstrap/scss/card'; +@import 'bootstrap/scss/accordion'; +@import 'bootstrap/scss/breadcrumb'; +@import 'bootstrap/scss/pagination'; +@import 'bootstrap/scss/badge'; +@import 'bootstrap/scss/alert'; +@import 'bootstrap/scss/progress'; +@import 'bootstrap/scss/list-group'; +@import 'bootstrap/scss/close'; +@import 'bootstrap/scss/toasts'; +@import 'bootstrap/scss/modal'; +@import 'bootstrap/scss/tooltip'; +@import 'bootstrap/scss/popover'; +@import 'bootstrap/scss/carousel'; +@import 'bootstrap/scss/spinners'; +@import 'bootstrap/scss/offcanvas'; + +// Helpers +@import 'bootstrap/scss/helpers'; diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended-dark.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended-dark.scss new file mode 100644 index 0000000..32a032d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended-dark.scss @@ -0,0 +1,40 @@ +@import '_bootstrap-extended/include-dark'; + +// Import bootstrap extended scss +@import '_bootstrap-extended/root'; +@import '_bootstrap-extended/reboot'; +@import '_bootstrap-extended/type'; +@import '_bootstrap-extended/utilities'; +@import '_bootstrap-extended/tables'; +@import '_bootstrap-extended/buttons'; +@import '_bootstrap-extended/button-group'; +@import '_bootstrap-extended/badge'; +@import '_bootstrap-extended/dropdown'; +@import '_bootstrap-extended/nav'; +@import '_bootstrap-extended/pagination'; +@import '_bootstrap-extended/alert'; +@import '_bootstrap-extended/tooltip'; +@import '_bootstrap-extended/popover'; +@import '_bootstrap-extended/forms'; +@import '_bootstrap-extended/modal'; +@import '_bootstrap-extended/progress'; +@import '_bootstrap-extended/breadcrumb'; +@import '_bootstrap-extended/list-group'; +@import '_bootstrap-extended/navbar'; +@import '_bootstrap-extended/card'; +@import '_bootstrap-extended/accordion'; +@import '_bootstrap-extended/close'; +@import '_bootstrap-extended/toasts'; +@import '_bootstrap-extended/carousel'; +@import '_bootstrap-extended/spinners'; +@import '_bootstrap-extended/offcanvas'; + +// Common Utilities +@import 'bootstrap/scss/utilities/api'; + +// LTR Utilities + +@include ltr-only { + @import '_bootstrap-extended/utilities-ltr'; + @import 'bootstrap/scss/utilities/api'; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended.scss new file mode 100644 index 0000000..0d3ba7f --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended.scss @@ -0,0 +1,39 @@ +@import '_bootstrap-extended/include'; + +// Import bootstrap extended scss +@import '_bootstrap-extended/root'; +@import '_bootstrap-extended/reboot'; +@import '_bootstrap-extended/type'; +@import '_bootstrap-extended/utilities'; +@import '_bootstrap-extended/tables'; +@import '_bootstrap-extended/buttons'; +@import '_bootstrap-extended/button-group'; +@import '_bootstrap-extended/badge'; +@import '_bootstrap-extended/dropdown'; +@import '_bootstrap-extended/nav'; +@import '_bootstrap-extended/pagination'; +@import '_bootstrap-extended/alert'; +@import '_bootstrap-extended/tooltip'; +@import '_bootstrap-extended/popover'; +@import '_bootstrap-extended/forms'; +@import '_bootstrap-extended/modal'; +@import '_bootstrap-extended/progress'; +@import '_bootstrap-extended/breadcrumb'; +@import '_bootstrap-extended/list-group'; +@import '_bootstrap-extended/navbar'; +@import '_bootstrap-extended/card'; +@import '_bootstrap-extended/accordion'; +@import '_bootstrap-extended/close'; +@import '_bootstrap-extended/toasts'; +@import '_bootstrap-extended/carousel'; +@import '_bootstrap-extended/spinners'; +@import '_bootstrap-extended/offcanvas'; + +// Common Utilities +@import 'bootstrap/scss/utilities/api'; + +// LTR Utilities +@include ltr-only { + @import '_bootstrap-extended/utilities-ltr'; + @import 'bootstrap/scss/utilities/api'; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_accordion.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_accordion.scss new file mode 100644 index 0000000..1bd238b --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_accordion.scss @@ -0,0 +1,250 @@ +// Accordions +// ******************************************************************************* + +// arrow left + +.accordion-arrow-left { + .accordion-button.collapsed:focus { + box-shadow: none; + } + .accordion-item { + border: 0; + } + .accordion-button { + padding: var(--#{$prefix}accordion-btn-padding-y) 0; + // Accordion icon + &::after { + content: ''; + display: none; + } + &:not(.collapsed) { + color: var(--#{$prefix}accordion-active-color); + background-color: var(--#{$prefix}accordion-active-bg); + box-shadow: none; // stylelint-disable-line function-disallowed-list + + &::before { + background-image: var(--#{$prefix}accordion-btn-active-icon); + transform: var(--#{$prefix}accordion-btn-icon-transform); + } + &::after { + background-image: none; + transform: none; + } + } + &.collapsed::before { + transform: rotate(-90deg); + } + &::before { + flex-shrink: 0; + width: var(--#{$prefix}accordion-btn-icon-width); + height: var(--#{$prefix}accordion-btn-icon-width); + margin-left: 0; + margin-top: 0.75rem; + margin-right: 0.9rem; + content: ''; + background-image: var(--#{$prefix}accordion-btn-icon); + background-repeat: no-repeat; + background-size: var(--#{$prefix}accordion-btn-icon-width); + @include transition(var(--#{$prefix}accordion-btn-icon-transition)); + } + } +} + +// Solid variant icon color +.accordion[class*='accordion-solid-'] { + .accordion-button::after { + background-image: str-replace(str-replace($accordion-button-icon, '#{$accordion-icon-color}', $white), '#', '%23'); + } +} + +// Solid Accordion With Active Border +.accordion[class*='accordion-border-solid-'] { + .accordion-button.collapsed::after { + background-image: str-replace(str-replace($accordion-button-icon, '#{$accordion-icon-color}', $white), '#', '%23'); + } +} + +.accordion-header + .accordion-collapse .accordion-body { + padding-top: 0; + padding-bottom: 1.25rem; +} + +// accordion without icon +.accordion { + &.accordion-without-arrow { + .accordion-button::after { + background-image: none !important; + } + } +} + +.accordion-header { + line-height: $line-height-base; +} + +.accordion:not(.accordion-custom-button):not(.accordion-arrow-left) .accordion-item { + box-shadow: $box-shadow-xs; + border: 0; + &:not(:first-child) { + margin-top: $spacer * 0.5; + } + &:last-child { + margin-bottom: $spacer * 0.5; + } + &.active { + box-shadow: $box-shadow; + & .accordion-button:not(.collapsed) { + box-shadow: none; + } + } +} + +// Accordion border radius +.accordion-button { + font-weight: inherit; + align-items: unset; + @include border-top-radius($accordion-border-radius); + &.collapsed { + @include border-radius($accordion-border-radius); + } + &.collapsed { + &::after { + transform: rotate(-90deg); + } + } +} +// added box shadow +.accordion { + &:not(.accordion-bordered) > .card.accordion-item { + box-shadow: $box-shadow-xs; + &.active { + box-shadow: $card-box-shadow; + } + } +} +.accordion-header + .accordion-collapse .accordion-body { + padding-top: 0; +} + +// Accordion custom button + +.accordion-custom-button { + .accordion-item { + transition: $accordion-transition; + transition-property: margin-top, margin-bottom, border-radius, border; + box-shadow: none; + border: $accordion-border-width solid $accordion-border-color; + &:not(:last-child) { + border-bottom: 0; + } + &:not(.active):not(:first-child) { + .accordion-header { + border: none; + } + } + .accordion-button { + border-color: $accordion-border-color; + } + &.active { + margin: 0; + box-shadow: none; + .accordion-header .accordion-button:focus { + border-bottom: $accordion-border-width solid $accordion-border-color; + } + & + .accordion-item { + @include border-top-radius(0); + } + &:not(:first-child) { + @include border-top-radius(0); + } + &:not(:last-child) { + @include border-bottom-radius(0); + } + } + .accordion-body { + padding-top: $accordion-body-padding-x; + } + &.previous-active { + @include border-bottom-radius(0); + } + } + + .accordion-button { + border-radius: 0; + background-color: #fafafa; + &:not(.collapsed) { + &::after { + background-image: escape-svg($accordion-custom-button-active-icon); + transform: rotate(-180deg); + } + } + // Accordion icon + &::after { + background-image: escape-svg($accordion-custom-button-icon); + } + } + + &:focus { + z-index: 3; + border-color: $border-color; + outline: 0; + box-shadow: var(--#{$prefix}accordion-btn-focus-box-shadow); + } +} + +// RTL +// ******************************************************************************* + +@include rtl-only { + .accordion-arrow-left { + .accordion-button { + &::before { + margin-left: 1.1rem; + margin-right: 0; + transform: rotate(90deg); + } + &:not(.collapsed)::before { + transform: rotate(0deg); + } + // !- For RTL accordion icon rotation in other templates + // &:not(.collapsed)::before { + // transform: rotate(90deg); + // } + } + } + + .accordion-button { + text-align: right; + &::after { + margin-left: 0; + margin-right: auto; + } + &.collapsed { + &::after { + transform: rotate(90deg); + } + } + } + .accordion-custom-button { + .accordion-button:not(.collapsed)::after { + transform: rotate(180deg); + } + } +} + +//Dark style +// ******************************************************************************* + +@include dark-layout-only { + .accordion-custom-button { + .accordion-button { + background-color: #353a52; + } + } + .accordion:not(.accordion-custom-button):not(.accordion-arrow-left) .accordion-item { + box-shadow: $box-shadow-xs; + &.active { + box-shadow: $box-shadow; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_alert.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_alert.scss new file mode 100644 index 0000000..74f2fcf --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_alert.scss @@ -0,0 +1,53 @@ +// Alerts +// ******************************************************************************* + +// Alert mixins +@each $state, $value in $theme-colors { + @if $state != primary and $state != light { + @include template-alert-variant('.alert-#{$state}', $value); + @include template-alert-outline-variant('.alert-outline-#{$state}', $value); + @include template-alert-solid-variant('.alert-solid-#{$state}', $value); + } +} + +// Alert and alert-icon styles +.alert { + line-height: 1.375rem; + .alert-icon { + color: $white; + height: $alert-icon-size; + width: $alert-icon-size; + padding: $spacer * 0.75; + margin-right: $spacer; + display: flex; + align-items: center; + justify-content: center; + } + &[class*='alert-solid-'] { + .alert-icon { + background-color: $white; + box-shadow: $box-shadow-xs; + :before { + font-size: 1.375rem; + } + } + } +} +// RTL +// ******************************************************************************* + +@include rtl-only { + .alert-dismissible { + padding-left: $alert-dismissible-padding-r; + padding-right: $alert-padding-x; + } + + .alert-dismissible .btn-close { + right: auto; + left: 0; + } + .alert .alert-icon { + margin-right: 0; + margin-left: $spacer; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_badge.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_badge.scss new file mode 100644 index 0000000..44cf65b --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_badge.scss @@ -0,0 +1,53 @@ +// Badges +// ? Bootstrap use bg-label-variant and bg color for solid and label style, hence we have not created mixin for that. +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color != primary and $color != light { + @include bg-glow-variant('.bg-#{$color}', $value); + } +} + +// Badge Center Style + +.badge-center { + padding: 3px; + line-height: 1.375; + @include badge-size($badge-height, $badge-width, $badge-center-font-size); + i { + font-size: 0.875rem; + } +} + +// Dots Style + +.badge.badge-dot { + display: inline-block; + margin: 0; + padding: 0; + width: 0.5rem; + height: 0.5rem; + border-radius: 50%; + vertical-align: middle; +} + +// Notifications + +.badge.badge-notifications { + position: absolute; + top: auto; + display: inline-block; + margin: 0; + transform: translate(-50%, -45%); + + @include rtl-style { + transform: translate(50%, -45%); + } + + &:not(.badge-dot) { + padding: 0.063rem 0.112rem; + font-size: 0.75rem; + line-height: 0.875rem; + @include border-radius(50rem); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_breadcrumb.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_breadcrumb.scss new file mode 100644 index 0000000..36fbffa --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_breadcrumb.scss @@ -0,0 +1,62 @@ +// Breadcrumbs +// ******************************************************************************* + +.breadcrumb-item, +.breadcrumb-item a { + color: $breadcrumb-color; +} + +.breadcrumb-item.active a { + &:hover, + &:focus { + color: $breadcrumb-color; + } + &:not(:hover, :focus) { + color: $breadcrumb-active-color; + } +} + +.breadcrumb-item { + + .breadcrumb-item { + &::before { + width: 26px; + height: 10px; + } + } +} +.breadcrumb-style1 .breadcrumb-item + .breadcrumb-item::before { + content: '/'; + color: $breadcrumb-divider-color; + width: 1.43rem; + font-weight: 500; + margin-left: 0.2rem; +} +.breadcrumb-style2 .breadcrumb-item + .breadcrumb-item::before { + content: $breadcrumb-icon-check-svg; + line-height: 1.375rem; + width: 26px; + height: 10px; +} + +// RTL +// ******************************************************************************* + +@include rtl-only { + .breadcrumb-item + .breadcrumb-item { + padding-right: $breadcrumb-item-padding-x; + padding-left: 0; + + &::before { + padding-right: 0; + padding-left: $breadcrumb-item-padding-x; + float: right; + } + } + // Breadcrumb divider style Icons + .breadcrumb-style1 .breadcrumb-item + .breadcrumb-item::before { + content: '\\'; + } + .breadcrumb-style2 .breadcrumb-item + .breadcrumb-item::before { + content: $breadcrumb-icon-check-svg; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_button-group.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_button-group.scss new file mode 100644 index 0000000..614e828 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_button-group.scss @@ -0,0 +1,161 @@ +// Button groups +// ******************************************************************************* + +// * Split button +// ******************************************************************************* + +.btn-group, +.btn-group-vertical { + &:disabled, + &.disabled { + opacity: 0.45; + } +} + +.dropdown-toggle-split, +.btn-lg + .dropdown-toggle-split, +.btn-group-lg > .btn + .dropdown-toggle-split, +.input-group-lg .btn + .dropdown-toggle-split, +.btn-xl + .dropdown-toggle-split, +.btn-group-xl > .btn + .dropdown-toggle-split { + padding: 0.92em; +} + +.btn-sm + .dropdown-toggle-split, +.btn-group-sm > .btn + .dropdown-toggle-split, +.input-group-sm .btn + .dropdown-toggle-split { + padding: 0.8em; +} + +.btn-xs + .dropdown-toggle-split, +.btn-group-xs > .btn + .dropdown-toggle-split { + padding: 0.7em; +} + +// * Sizing +// ******************************************************************************* + +.btn-group-xs > .btn { + @extend .btn-xs; +} + +.btn-group-xl > .btn { + @extend .btn-xl; +} + +// Button groups border + +.btn-group > .btn-group:first-child > .btn:not([class*='btn-outline-']):first-child, +.input-group > .btn:not([class*='btn-outline-']):first-child, +:not(.btn-group):not(.input-group) > .btn-group > .btn:not([class*='btn-outline-']):first-child, +.input-group > .btn-group:first-child > .btn:not([class*='btn-outline-']):first-child { + @include ltr-style { + border-left-color: transparent !important; + } + @include rtl-style { + border-right-color: transparent !important; + } +} + +.btn-group > .btn-group:last-child > .btn:not([class*='btn-outline-']):last-of-type, +.input-group > .btn:not([class*='btn-outline-']):last-of-type, +:not(.btn-group):not(.input-group) > .btn-group > .btn:not([class*='btn-outline-']):last-of-type, +.input-group > .btn-group:last-child > .btn:not([class*='btn-outline-']):last-of-type { + @include ltr-style { + border-right-color: transparent !important; + } + @include rtl-style { + border-left-color: transparent !important; + } +} + +.btn-group-vertical > .btn-group-vertical:first-child > .btn:not([class*='btn-outline-']):first-child, +:not(.btn-group-vertical):not(.input-group) > .btn-group-vertical > .btn:not([class*='btn-outline-']):first-child { + @include ltr-style { + border-top-color: transparent !important; + } +} + +.btn-group-vertical > .btn-group-vertical:last-child > .btn:not([class*='btn-outline-']):last-child, +:not(.btn-group-vertical):not(.input-group) > .btn-group-vertical > .btn:not([class*='btn-outline-']):last-child { + @include ltr-style { + border-bottom-color: transparent !important; + } +} + +.btn-group-vertical > .btn-group-vertical:first-child > .btn:not([class*='btn-outline-']):first-child, +:not(.btn-group-vertical):not(.input-group) > .btn-group-vertical > .btn:not([class*='btn-outline-']):first-child { + border-top-color: transparent !important; +} + +.btn-group-vertical > .btn-group-vertical:last-child > .btn:not([class*='btn-outline-']):last-of-type, +:not(.btn-group-vertical):not(.input-group) > .btn-group-vertical > .btn:not([class*='btn-outline-']):last-of-type { + border-bottom-color: transparent !important; +} + +// * RTL +// ******************************************************************************* + +@include rtl-only { + .btn-group .btn[class] { + @include border-radius($border-radius); + } + + .btn-group .btn-xs[class], + .btn-group-xs .btn[class] { + @include border-radius($border-radius-xs); + } + + .btn-group .btn-sm[class], + .btn-group-sm .btn[class] { + @include border-radius($border-radius-sm); + } + + .btn-group .btn-lg[class], + .btn-group-lg .btn[class] { + @include border-radius($border-radius-lg); + } + + .btn-group .btn-xl[class], + .btn-group-xl .btn[class] { + @include border-radius($border-radius-xl); + } + + .btn-group { + // Prevent double borders when buttons are next to each other + > .btn:not(:first-child), + > .btn-group:not(:first-child) { + margin-left: 0; + margin-right: calc(#{$btn-border-width} * -1); + } + + // Reset rounded corners + > .btn:not(:last-child):not(.dropdown-toggle), + > .btn-group:not(:last-child) > .btn { + @include border-start-radius(0); + } + + // The left radius should be 0 if the button is: + // - the "third or more" child + // - the second child and the previous element isn't `.btn-check` (making it the first child visually) + // - part of a btn-group which isn't the first child + > .btn:nth-child(n + 3), + > :not(.btn-check) + .btn, + > .btn-group:not(:first-child) > .btn { + @include border-end-radius(0); + } + } + + .btn-group-vertical { + // Reset rounded corners + > .btn:not(:last-child):not(.dropdown-toggle), + > .btn-group:not(:last-child) > .btn { + @include border-bottom-radius(0); + } + + > .btn ~ .btn, + > .btn-group:not(:first-child) > .btn { + @include border-top-radius(0); + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_buttons.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_buttons.scss new file mode 100644 index 0000000..a01c72b --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_buttons.scss @@ -0,0 +1,178 @@ +// Buttons +// ******************************************************************************* + +.btn { + cursor: pointer; + display: inline-flex !important; + align-items: center; + justify-content: center; + &:not(.dropdown-toggle):not([class*='btn-text-']) { + transition: all 0.135s ease-in-out; + transform: scale(1.001); + } + + &[class*='btn-outline-'] { + &:disabled, + &.disabled { + background: transparent !important; + } + } + &[class*='btn-text-'] { + padding-inline: 0.75rem; + &[class*='btn-sm'] { + padding-inline: 0.5625rem; + } + &[class*='btn-lg'] { + padding-inline: 1rem; + } + &:disabled, + &.disabled { + background: transparent !important; + border-color: transparent !important; + } + } + + .ti { + line-height: 0.9; + } + &.btn-text { + background: none; + box-shadow: none; + border: none; + } + &.disabled, + &:disabled { + cursor: default; + } + &[class*='btn-']:active:not([class*='btn-text']):not(.dropdown-toggle), + &[class*='btn-'].active:not([class*='btn-text']):not(.dropdown-toggle) { + transform: scale(0.98); + transition: all 0.135s ease-in-out; + } +} + +// Badge within button +.btn .badge { + @include transition($btn-transition); +} + +label.btn { + margin-bottom: 0; +} + +// Button Sizes + +.btn-xl { + @include button-size($btn-padding-y-xl, $btn-padding-x-xl, $btn-font-size-xl, $btn-border-radius-xl); +} + +.btn-sm { + line-height: $btn-line-height-sm; +} + +.btn-xs { + @include button-size($btn-padding-y-xs, $btn-padding-x-xs, $btn-font-size-xs, $btn-border-radius-xs); +} + +// Buttons Variant + +@each $color, $value in $theme-colors { + @if $color != primary { + @include template-button-variant('.btn-#{$color}', if($color== 'dark' and $dark-style, $dark, $value)); + @include template-button-label-variant('.btn-label-#{$color}', if($color== 'dark' and $dark-style, $dark, $value)); + @include template-button-outline-variant( + '.btn-outline-#{$color}', + if($color== 'dark' and $dark-style, $dark, $value) + ); + @if $color == secondary { + $value: $body-color; + } + @include template-button-text-variant('.btn-text-#{$color}', $value); + } +} + +// Icon button + +.btn-icon { + $btn-icon-size: ($btn-font-size * $btn-line-height) + ($btn-padding-y * 1.998); + $btn-icon-size-xl: ($btn-font-size-xl * $btn-line-height-xl) + ($btn-padding-y-xl * 2); + $btn-icon-size-lg: ($btn-font-size-lg * $btn-line-height-lg) + ($btn-padding-y-lg * 2); + $btn-icon-size-sm: ($btn-font-size-sm * $btn-line-height-sm) + ($btn-padding-y-sm * 2.785); + $btn-icon-size-xs: ($btn-font-size-xs * $btn-line-height-xs) + ($btn-padding-y-xs * 2); + $borders-width: calc(#{$btn-border-width} * 2); + --#{$prefix}btn-active-border-color: transparent; + + padding: 0; + width: calc(#{$btn-icon-size} + #{$borders-width}); + height: calc(#{$btn-icon-size} + #{$borders-width}); + display: inline-flex; + flex-shrink: 0; + justify-content: center; + align-items: center; + + &.btn-xl { + width: calc(#{$btn-icon-size-xl} + #{$borders-width}); + height: calc(#{$btn-icon-size-xl} + #{$borders-width}); + > span { + font-size: $btn-font-size-xl; + } + } + + &.btn-lg { + width: calc(#{$btn-icon-size-lg} + #{$borders-width}); + height: calc(#{$btn-icon-size-lg} + #{$borders-width}); + font-size: $btn-font-size-lg; + } + + &.btn-sm { + width: calc(#{$btn-icon-size-sm} + #{$borders-width}); + height: calc(#{$btn-icon-size-sm} + #{$borders-width}); + font-size: $btn-font-size-sm; + } + + &.btn-xs { + width: calc(#{$btn-icon-size-xs} + #{$borders-width}); + height: calc(#{$btn-icon-size-xs} + #{$borders-width}); + font-size: $btn-font-size-xs; + } +} + +// Without border + +.btn.borderless { + &:not(.active):not(:active):not(:hover):not(:focus), + :not(.show) > &.dropdown-toggle:not(:hover):not(:focus) { + border-color: transparent; + box-shadow: none; + } +} + +// Link buttons +.btn.btn-link { + font-size: inherit; +} + +.btn-pinned { + position: absolute; + top: 1rem; + @include ltr-style { + right: 1rem; + } + @include rtl-style { + left: 1rem; + } +} + +// Button focus +button:focus, +button:focus-visible { + outline: none; +} + +// Table Action Dropdown fix +.btn:not([class*='btn-']):active, +.btn:not([class*='btn-']).active, +.btn:not([class*='btn-']).show, +.btn:not([class*='btn-']) { + border: none; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_card.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_card.scss new file mode 100644 index 0000000..92c13e4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_card.scss @@ -0,0 +1,389 @@ +// Cards +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color != primary { + @include template-card-border-shadow-variant('.card-border-shadow-#{$color}', $value); + @include template-card-hover-border-variant('.card-hover-border-#{$color}', $value); + } +} + +.card { + background-clip: padding-box; + box-shadow: $card-box-shadow; + + .card-link { + display: inline-block; + } + // ! FIX: to remove padding top from first card-body if used with card-header + .card-header + .card-body, + .card-header + .card-content > .card-body:first-of-type, + .card-header + .card-footer, + .card-body + .card-footer { + padding-top: 0; + } + + // color border bottom and shadow in card + &[class*='card-border-shadow-'] { + position: relative; + border-bottom: none; + transition: $card-transition; + z-index: 1; + &::after { + content: ''; + position: absolute; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border-bottom-width: 2px; + border-bottom-style: solid; + border-radius: $card-border-radius; + transition: $card-transition; + z-index: -1; + } + &:hover { + box-shadow: $box-shadow-lg; + &::after { + border-bottom-width: 3px; + } + } + } + + // card hover border color + &[class*='card-hover-border-'] { + border-width: 1px; + } +} +// adding class with card background color +.bg-card { + background-color: $card-bg; +} + +// Card action +.card-action { + // Expand card(fullscreen) + &.card-fullscreen { + display: block; + z-index: 9999; + position: fixed; + width: 100% !important; + height: 100% !important; + top: 0; + right: 0; + left: 0; + bottom: 0; + overflow: auto; + border: none; + border-radius: 0; + } + // Alert + .card-alert { + position: absolute; + width: 100%; + z-index: 999; + .alert { + border-bottom-right-radius: 0px; + border-bottom-left-radius: 0px; + } + } + // Collapsed + .card-header { + &.collapsed { + border-bottom: 0; + } + } + + // Card header + .card-header { + display: flex; + .card-action-title { + flex-grow: 1; + margin-right: 0.5rem; + } + .card-action-element { + flex-shrink: 0; + background-color: inherit; + top: 1rem; + right: 1.5rem; + color: $body-color; + a { + color: $headings-color; + .collapse-icon::after { + margin-top: -0.15rem; + } + } + } + } + // Block UI loader + .blockUI { + .sk-fold { + margin: 0 auto; + } + h5 { + color: $body-color; + margin: 1rem 0 0 0; + } + } + + .collapse > .card-body, + .collapsing > .card-body { + padding-top: 0; + } +} + +// Card inner borders +.card-header, +.card-footer { + border-color: $card-inner-border-color; +} +.card hr { + color: $card-inner-border-color; +} + +.card .row-bordered > [class*=' col '], +.card .row-bordered > [class^='col '], +.card .row-bordered > [class*=' col-'], +.card .row-bordered > [class^='col-'], +.card .row-bordered > [class='col'] { + .card .row-bordered > [class$=' col'], + &::before, + &::after { + border-color: $card-inner-border-color; + } +} + +//Card header elements +.card-header.header-elements, +.card-title.header-elements { + display: flex; + width: 100%; + align-items: center; + flex-wrap: wrap; +} + +.card-header { + &.card-header-elements { + padding-top: $card-spacer-y * 0.5; + padding-bottom: $card-spacer-y * 0.5; + } + .card-header-elements { + padding-top: 0.25rem; + padding-bottom: 0.25rem; + } +} + +.card-header-elements, +.card-title-elements { + display: flex; + flex-wrap: wrap; + align-items: center; + & + &, + > * + * { + margin-left: 0.25rem; + @include rtl-style { + margin-left: 0; + margin-right: 0.25rem; + } + } +} + +.card-title { + &:not(:is(h1, h2, h3, h4, h5, h6)) { + color: $body-color; + } +} + +// * Horizontal card radius issue fix +.card-img-left { + @include border-start-radius($card-inner-border-radius); + @include border-end-radius(0); + @include media-breakpoint-down(md) { + @include border-top-radius($card-inner-border-radius); + @include border-bottom-radius(0); + } +} + +.card-img-right { + @include border-end-radius($card-inner-border-radius); + @include border-start-radius(0); + @include media-breakpoint-down(md) { + @include border-bottom-radius($card-inner-border-radius); + @include border-top-radius(0); + } +} + +// Card group +.card-group { + box-shadow: $card-box-shadow; + background-color: $card-bg; + border-radius: $card-border-radius; + .card { + box-shadow: none; + @include media-breakpoint-down(sm) { + &:not(:first-child) .card-img-top { + @include border-top-radius(0); + } + } + } +} +// List groups +// ******************************************************************************* + +.card > .list-group .list-group-item { + padding-left: $card-spacer-x; + padding-right: $card-spacer-x; +} + +// Card Statistics specific separator +// ******************************************************************************* +.card { + .card-separator { + @include ltr-style { + border-right: $border-width solid $card-border-color; + } + + @include rtl-style { + border-left: $border-width solid $card-border-color; + } + } +} + +//Card Widget Separator +// ******************************************************************************* + +.card { + .card-widget-separator-wrapper { + @include media-breakpoint-down(lg) { + .card-widget-separator { + .card-widget-2.border-end { + border-right: none !important; + border-left: none !important; + } + } + } + + @include media-breakpoint-down(sm) { + .card-widget-separator { + .card-widget-1.border-end, + .card-widget-2.border-end, + .card-widget-3.border-end { + border-right: none !important; + border-left: none !important; + border-bottom: 1px solid $border-color; + } + } + } + } +} + +@include media-breakpoint-down(lg) { + .card { + .card-separator { + border-bottom: $border-width solid $card-border-color; + padding-bottom: $card-spacer-y; + + @include ltr-style { + border-right-width: 0 !important; + } + + @include rtl-style { + border-left-width: 0 !important; + } + } + } +} +// RTL +// ******************************************************************************* + +@include rtl-only { + .card-link + .card-link { + margin-right: $card-spacer-x; + margin-left: 0; + } + + // Card advance + .card-action { + .card-header { + .card-action-title { + margin-left: 0.5rem; + margin-right: 0; + } + + .card-action-element, + .card-action-element-toggle { + left: 1.5rem; + right: auto; + } + } + } + + // * Horizontal card radius issue fix + .card-img-left { + @include border-start-radius(0); + @include border-end-radius($card-inner-border-radius); + @include media-breakpoint-down(md) { + @include border-top-radius(0); + @include border-bottom-radius($card-inner-border-radius); + } + } + .card-img-right { + @include border-end-radius(0); + @include border-start-radius($card-inner-border-radius); + @include media-breakpoint-down(md) { + @include border-bottom-radius(0); + @include border-top-radius($card-inner-border-radius); + } + } + // Card group + @include media-breakpoint-up(sm) { + .card-group > .card { + border: $card-border-width solid $card-border-color; + border-radius: $card-border-radius; + + .card-img-top, + .card-header:first-child { + @include border-top-radius($card-inner-border-radius); + } + + .card-img-bottom, + .card-footer:last-child { + @include border-bottom-radius($card-inner-border-radius); + } + + + .card { + border-right: 0; + } + } + + // Handle rounded corners + @if $enable-rounded { + .card-group > .card { + &:not(:first-child) { + @include border-end-radius(0); + + .card-img-top, + .card-header { + border-top-right-radius: 0; + } + .card-img-bottom, + .card-footer { + border-bottom-right-radius: 0; + } + } + &:not(:last-child) { + @include border-start-radius(0); + + .card-img-top, + .card-header { + border-top-left-radius: 0; + } + .card-img-bottom, + .card-footer { + border-bottom-left-radius: 0; + } + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_carousel.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_carousel.scss new file mode 100644 index 0000000..7732751 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_carousel.scss @@ -0,0 +1,50 @@ +// Carousel +// ******************************************************************************* + +// +.carousel { + .carousel-item.active, + .carousel-item.carousel-item-start { + h1, + .h1, + h2, + .h2, + h3, + .h3, + h4, + .h4, + h5, + .h5, + h6, + .h6 { + color: $carousel-caption-color; + } + } +} +.carousel.carousel-dark { + .carousel-item, + .carousel-item.active, + .carousel-item.carousel-item-start { + h1, + .h1, + h2, + .h2, + h3, + .h3, + h4, + .h4, + h5, + .h5, + h6, + .h6 { + color: $carousel-dark-caption-color; + } + } +} + +.carousel-indicators { + margin-bottom: 1.06rem; + [data-bs-target] { + border-radius: $border-radius; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_close.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_close.scss new file mode 100644 index 0000000..ab45fe6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_close.scss @@ -0,0 +1,12 @@ +// Close buttons +// ******************************************************************************* + +.close:focus { + outline: 0; +} + +@include rtl-only { + .close { + float: left; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_dropdown.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_dropdown.scss new file mode 100644 index 0000000..e19d7fc --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_dropdown.scss @@ -0,0 +1,126 @@ +// Dropdowns +// ***************************************************************** + +// On hover outline +[data-trigger='hover'] { + outline: 0; +} + +.dropdown-menu { + box-shadow: $dropdown-box-shadow; + + // Mega dropdown inside the dropdown menu + .mega-dropdown > & { + left: 0 !important; + right: 0 !important; + } + + // Badge within dropdown menu + .badge[class^='float-'], + .badge[class*=' float-'] { + position: relative; + top: 0.071em; + } + + // Dark style + @if $dark-style { + .list-group-item { + border-color: rgba-to-hex($dropdown-divider-bg, $dropdown-bg); + } + } + + // For RTL + @include rtl-style { + text-align: right; + } +} +// Dropdown item line height +.dropdown-item { + li:not(:first-child) &, + .dropdown-menu &:not(:first-child) { + margin-top: 2px; + } + border-radius: $dropdown-border-radius; + &.disabled .waves-ripple { + display: none; + } +} + +// Hidden dropdown toggle arrow +.dropdown-toggle.hide-arrow, +.dropdown-toggle-hide-arrow > .dropdown-toggle { + &::before, + &::after { + display: none; + } +} + +// Dropdown caret icon + +@if $enable-caret { + // Dropdown arrow + .dropdown-toggle::after { + @include caret-down($caret-width); + } + // Dropend arrow + .dropend .dropdown-toggle::after { + @include caret-right($caret-width); + } + // Dropstart arrow + .dropstart .dropdown-toggle::before { + @include caret-left($caret-width); + } + // Dropup arrow + .dropup .dropdown-toggle::after { + @include caret-up($caret-width); + } + + .dropstart .dropdown-toggle::before, + .dropend .dropdown-toggle::after { + vertical-align: $caret-vertical-align; + } + + @include rtl-only { + .dropdown-toggle:not(.dropdown-toggle-split)::after { + margin-left: 0; + margin-right: $caret-spacing; + } + } + @include ltr-only { + .dropdown-toggle-split:after { + margin-left: 0 !important; + } + } + @include rtl-only { + .dropdown-toggle-split:after { + margin-right: 0 !important; + } + } +} + +@include rtl-only { + // Dropdown menu alignment + @each $breakpoint in map-keys($grid-breakpoints) { + @include media-breakpoint-up($breakpoint) { + $infix: breakpoint-infix($breakpoint, $grid-breakpoints); + + .dropdown-menu#{$infix}-start { + --bs-position: start; + + &[data-bs-popper] { + left: auto; + right: 0; + } + } + + .dropdown-menu#{$infix}-end { + --bs-position: end; + + &[data-bs-popper] { + left: 0; + right: auto; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_forms.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_forms.scss new file mode 100644 index 0000000..15bcaa3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_forms.scss @@ -0,0 +1,12 @@ +// Forms +// ***************************************************************** + +@import 'forms/labels'; +@import 'forms/form-text'; +@import 'forms/form-control'; +@import 'forms/form-select'; +@import 'forms/form-check'; +@import 'forms/form-range'; +@import 'forms/input-group'; +@import 'forms/floating-labels'; +@import 'forms/validation'; diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_functions.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_functions.scss new file mode 100644 index 0000000..a5ad1c7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_functions.scss @@ -0,0 +1,148 @@ +// Functions +// ******************************************************************************* + +// Lists +// ******************************************************************************* +@function slice-list($list, $start: 1, $end: length($list)) { + $result: null; + + @if type-of($start) != number or type-of($end) != number { + @warn "Either $start or $end are not a number for `slice`."; + } @else if $start > $end { + @warn "The start index has to be lesser than or equals to the end index for `slice`."; + } @else if $start < 1 or $end < 1 { + @warn "List indexes must be non-zero integers for `slice`."; + } @else if $start > length($list) { + @warn "List index is #{$start} but list is only #{length($list)} item long for `slice`."; + } @else if $end > length($list) { + @warn "List index is #{$end} but list is only #{length($list)} item long for `slice`."; + } @else { + $result: (); + + @for $i from $start through $end { + $result: append($result, nth($list, $i)); + } + } + + @return $result; +} + +// * Units +// ******************************************************************************* + +// Remove the unit of a length +@function strip-unit($number) { + @if type-of($number) == 'number' and not unitless($number) { + @return divide($number, ($number * 0 + 1)); + } + + @return $number; +} + +// Convert size px to rem +@function px-to-rem($value) { + // Assumes the browser default font size = `16px` + @return (divide(strip-unit($value), 16)) * 1rem; +} + +// Convert size rem to px +@function rem-to-px($value) { + // Assumes the browser default font size = `16px` + @return (strip-unit($value) * 16) * 1px; +} + +// * Colors +// ******************************************************************************* + +// ? Override shade, tint and shift function with custom background color option i.e $card-bg to make it similar like design +// Shade a color: mix a color with background/white +@function tint-color($color, $weight, $background: null) { + $background: if($background, $background, white); + @return mix($background, $color, $weight); +} + +// Shade a color: mix a color with background/black +@function shade-color($color, $weight, $background: null) { + $background: if($background, $background, black); + @return mix($background, $color, $weight); +} + +// Shade the color if the weight is positive, else tint it +@function shift-color($color, $weight, $background: null) { + @return if($weight > 0, shade-color($color, $weight, $background), tint-color($color, -$weight)); +} + +//RGBA to HEX +@function rgba-to-hex($color, $background: #fff) { + @if $color and alpha($color) != 1 { + $percent: alpha($color) * 100%; + $opaque: opacify($color, 1); + + @return mix($opaque, $background, $percent); + } @else { + @return $color; + } +} + +// Calculating Color Contrast +@function contrast-value($color) { + @if $color == transparent { + @return $body-color; + } @else if alpha($color) != 1 { + $color: rgba-to-hex($color); + } + + $r: red($color); + $g: green($color); + $b: blue($color); + + @return divide((($r * 299) + ($g * 587) + ($b * 114)), 1000); +} + +// * Utilities +// ******************************************************************************* + +// Return Nav opacity, contrast-percent, contrast-percent-inverted, bg, color, active-color, disabled-color, muted-color, border +@function get-navbar-prop($bg, $active-color: null, $inactive-color: null, $border: null, $text-color: null) { + $bg: rgba-to-hex($bg); + + $active-color: rgba-to-hex($active-color); + $active-color: if($active-color, $active-color, color-contrast($bg)); + + $contrast-percent: divide(contrast-value($bg), 255); + $contrast-percent-inverted: 1 - $contrast-percent; + + $opacity: if($active-color == #fff, 0.6 + (0.4 * $contrast-percent), 0.6 + (0.4 * (1 - $contrast-percent))); + + $color: if( + $inactive-color, + rgba-to-hex($inactive-color, $bg), + rgba-to-hex(rgba($active-color, if($contrast-percent < 0.25, $opacity + 0.2, $opacity)), $bg) + ); + $disabled-color: rgba-to-hex(rgba($color, 0.6), $bg); + $muted-color: rgba-to-hex(rgba($color, 0.4), $bg); + $border: if( + $border, + $border, + if( + $contrast-percent > 0.75, + rgba($active-color, divide($opacity, 8)), + if($contrast-percent < 0.25, rgba($active-color, 0.06), rgba($active-color, 0.15)) + ) + ); + + @return ( + // Metadata + opacity: $opacity, + contrast-percent: $contrast-percent, + contrast-percent-inverted: $contrast-percent-inverted, + // Colors + bg: $bg, + color: $color, + active-color: $active-color, + disabled-color: $disabled-color, + muted-color: $muted-color, + border: $border, + text-color: $text-color + ); +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_include-dark.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_include-dark.scss new file mode 100644 index 0000000..1e086b3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_include-dark.scss @@ -0,0 +1,15 @@ +//Functions +@import 'bootstrap/scss/functions'; // Bootstrap core functions +@import 'functions'; // Bootstrap extended functions + +//Variables +@import '../_custom-variables/bootstrap-extended-dark'; // Bootstrap extended custom dark variable (for customization purpose) +@import '../_custom-variables/bootstrap-extended'; // Bootstrap extended custom dark variable (for customization purpose) +@import 'variables-dark'; // Bootstrap extended dark variable +@import 'variables'; // Bootstrap extended variable +@import 'bootstrap/scss/variables'; // Bootstrap core variable +@import 'bootstrap/scss/maps'; // Bootstrap core variable + +//Mixins +@import 'bootstrap/scss/mixins'; // Bootstrap core mixins +@import 'mixins'; // Bootstrap extended mixins diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_include.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_include.scss new file mode 100644 index 0000000..23b090d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_include.scss @@ -0,0 +1,13 @@ +//Functions +@import 'bootstrap/scss/functions'; // Bootstrap core functions +@import 'functions'; // Bootstrap extended functions + +//Variables +@import '../_custom-variables/bootstrap-extended'; // Bootstrap extended custom variable (for customization purpose) +@import 'variables'; // Bootstrap extended variable +@import 'bootstrap/scss/variables'; // Bootstrap core variable +@import 'bootstrap/scss/maps'; // Bootstrap core variable + +//Mixins +@import 'bootstrap/scss/mixins'; // Bootstrap core mixins +@import 'mixins'; // Bootstrap extended mixins diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_list-group.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_list-group.scss new file mode 100644 index 0000000..2958b1a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_list-group.scss @@ -0,0 +1,210 @@ +// List groups +// ******************************************************************************* + +// List Group Mixin +@each $color, $value in $theme-colors { + @if $color != primary and $color != light { + @include template-list-group-item-variant('.list-group-item-#{$color}', $value); + @include template-list-group-timeline-variant('.list-group-timeline-#{$color}', $value); + } +} +.list-group { + .list-group-item-action { + &:not(.active) { + & :not(.add-btn) > :active { + color: $list-group-color; + background-color: $list-group-hover-bg !important; + } + } + } + .list-group-item { + line-height: 1.375rem; + padding-bottom: calc($list-group-item-padding-y - 1px); + } + &:not([class*='list-group-flush']) .list-group-item:first-of-type { + padding-top: calc($list-group-item-padding-y - 1px); + } + &[class*='list-group-flush'] .list-group-item:last-of-type { + padding-bottom: $list-group-item-padding-y; + } + &[class*='list-group-horizontal-md'] .list-group-item { + @include media-breakpoint-up(md) { + padding-top: calc($list-group-item-padding-y - 1px); + } + } +} + +.list-group { + // Timeline CSS + &.list-group-timeline { + position: relative; + &:before { + background-color: $border-color; + position: absolute; + content: ''; + width: 1px; + height: 100%; + top: 0; + bottom: 0; + left: 0.2rem; + } + .list-group-item { + border: none; + padding-left: 1.25rem; + &:before { + position: absolute; + display: block; + content: ''; + width: 7px; + height: 7px; + left: 0; + top: 50%; + margin-top: -3.5px; + border-radius: 100%; + } + } + } + + .list-group-item.active { + h1, + .h1, + h2, + .h2, + h3, + .h3, + h4, + .h4, + h5, + .h5, + h6, + .h6 { + color: $primary; + } + } +} + +// RTL +// ******************************************************************************* + +@include rtl-only { + .list-group { + padding-right: 0; + + // Timeline RTL List group + &.list-group-timeline { + &:before { + left: auto; + right: 0.2rem; + } + .list-group-item { + padding-right: 1.25rem; + &:before { + left: auto; + right: 1px; + } + } + } + // List group horizontal RTL style + + &.list-group-horizontal { + .list-group-item { + &:first-child { + border-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &:last-child { + border-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-left-width: 1px; + } + } + } + @include media-breakpoint-up(sm) { + &.list-group-horizontal-sm { + .list-group-item { + &:first-child { + border-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &:last-child { + border-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-left-width: 1px; + } + } + } + } + @include media-breakpoint-up(md) { + &.list-group-horizontal-md { + .list-group-item { + &:first-child { + border-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &:last-child { + border-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-left-width: 1px; + } + } + } + } + @include media-breakpoint-up(lg) { + &.list-group-horizontal-lg { + .list-group-item { + &:first-child { + border-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &:last-child { + border-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-left-width: 1px; + } + } + } + } + @include media-breakpoint-up(xl) { + &.list-group-horizontal-xl { + .list-group-item { + &:first-child { + border-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &:last-child { + border-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-left-width: 1px; + } + } + } + } + @include media-breakpoint-up(xxl) { + &.list-group-horizontal-xxl { + .list-group-item { + &:first-child { + border-radius: 0.25rem; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + &:last-child { + border-radius: 0.25rem; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-left-width: 1px; + } + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_mixins.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_mixins.scss new file mode 100644 index 0000000..7597d2c --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_mixins.scss @@ -0,0 +1,20 @@ +// Mixins +// +// Template mixins (custom and overrides) + +@import 'mixins/alert'; +@import 'mixins/badge'; +@import 'mixins/buttons'; +@import 'mixins/list-group'; +@import 'mixins/modal'; +@import 'mixins/navs'; +@import 'mixins/pagination'; +@import 'mixins/progress'; +@import 'mixins/popover'; +@import 'mixins/tooltip'; +@import 'mixins/caret'; +@import 'mixins/dropdown'; +@import 'mixins/forms'; +@import 'mixins/table-variants'; +@import 'mixins/misc'; +@import 'mixins/card'; // layout, text directions & colors diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_modal.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_modal.scss new file mode 100644 index 0000000..3acb312 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_modal.scss @@ -0,0 +1,390 @@ +// Modals +// ******************************************************************************* +//modal header btn close style +.modal { + .btn-close { + background-color: $card-bg; + border-radius: $border-radius-sm; + background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $text-muted), '#', '%23'); + opacity: 1; + padding: 0.3757rem; + box-shadow: $box-shadow-xs; + transition: all 0.23s ease 0.1s; + @include ltr-style { + transform: translate(23px, -25px); + } + + @include rtl-style { + transform: translate(-31px, -25px); + } + + // For hover effect of close btn + &:hover, + &:focus, + &:active { + opacity: 1; + outline: none; + + @include ltr-style { + transform: translate(20px, -20px); + } + + @include rtl-style { + transform: translate(-26px, -20px); + } + } + } + + .modal-header { + position: relative; + .btn-close { + position: absolute; + top: $modal-dialog-margin + 0.1875rem; + @include ltr-style() { + right: $modal-footer-margin-between - 0.1875rem; + } + @include rtl-style { + left: $modal-footer-margin-between + 0.3; + } + } + } +} +//modal footer +.modal-footer { + padding: $modal-footer-padding; + > * { + margin-block: 0; + @include ltr-style { + &:last-child { + margin-right: 0; + } + &:first-child { + margin-left: 0; + } + } + @include rtl-style { + &:last-child { + margin-left: 0; + } + &:first-child { + margin-right: 0; + } + } + } +} + +// Modal Shadow +.modal-content { + box-shadow: $modal-content-box-shadow-xs; +} + +// Modal RTL +// ! remove close button animation & shadow for .modal-dialog-scrollable, .modal-fullscreen, .modal-top modal +.modal-dialog-scrollable, +.modal-fullscreen, +.modal-top { + .btn-close { + box-shadow: none; + @include ltr-style { + transform: translate(0, 0) !important; + } + + @include rtl-style { + transform: translate(0, 0) !important; + } + &:hover { + @include ltr-style { + transform: translate(0, 0) !important; + } + + @include rtl-style { + transform: translate(0, 0) !important; + } + } + } +} + +// Onboarding Modals +// ******************************************************************************* + +.modal-onboarding { + .close-label { + font-size: 0.8rem; + position: absolute; + top: 0.85rem; + opacity: $btn-close-opacity; + &:hover { + opacity: $btn-close-hover-opacity; + } + } + .modal-header { + .btn-close { + @include rtl-style { + margin-left: 0; + margin-right: auto; + } + } + } + + .onboarding-media { + margin-bottom: 1rem; + img { + margin: 0 auto; + } + } + .onboarding-content { + margin: 2rem; + } + form { + margin-top: 2rem; + text-align: left; + } + + // Carousel Inside Modal + .carousel-indicators { + bottom: -10px; + } + + .carousel-control-prev, + .carousel-control-next { + top: auto; + bottom: 0.75rem; + opacity: 1; + @include rtl-style { + flex-direction: row-reverse; + } + } + .carousel-control-prev { + left: 1rem; + } + .onboarding-horizontal { + display: flex; + justify-content: space-between; + align-items: center; + .onboarding-media { + margin: 2rem; + margin-top: 0; + } + .carousel-control-prev { + left: 0; + } + } + // Modal animation + &.animated { + .onboarding-media { + transform: translateY(10px) scale(0.8); + transition: all 0.5s cubic-bezier(0.25, 1.1, 0.5, 1.35); + transition-delay: 0.3s; + opacity: 0; + } + .onboarding-content { + transform: translateY(40px); + transition-delay: 0.1s; + transition: all 0.4s ease; + opacity: 0; + } + .onboarding-title { + opacity: 0; + transition-delay: 0.5s; + transition: all 0.5s cubic-bezier(0.25, 1.1, 0.5, 1.35); + transform: translateY(40px); + } + .onboarding-info { + opacity: 0; + transition-delay: 0.6s; + transition: all 0.5s cubic-bezier(0.25, 1.1, 0.5, 1.35); + transform: translateY(40px); + } + form { + opacity: 0; + transition-delay: 0.7s; + transition: all 0.5s ease; + transform: translateY(40px); + } + &.show { + .onboarding-media { + transform: translateY(0) scale(1); + opacity: 1; + } + .onboarding-content { + transform: translateY(0); + opacity: 1; + } + .onboarding-title { + transform: translateY(0); + opacity: 1; + } + .onboarding-info { + opacity: 1; + transform: translateY(0px); + } + form { + opacity: 1; + transform: translateY(0px); + } + } + } +} + +// Top modals +// ******************************************************************************* + +.modal-top { + .modal-dialog { + margin-top: 0; + } + + .modal-content { + @include border-top-radius(0); + } +} + +// Transparent modals +// ****************************************************************************** + +.modal-transparent { + .modal-dialog { + display: flex; + margin: 0 auto; + min-height: 100vh; + } + + .modal-content { + margin: auto; + width: 100%; + border: 0; + background: transparent; + box-shadow: none; + } + + .btn-close { + position: absolute; + top: 0; + right: $modal-inner-padding; + opacity: 1; + padding: $btn-close-padding-y $btn-close-padding-x; + background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $white), '#', '%23'); + background-color: transparent !important; + box-shadow: none; + @include rtl-style { + right: auto; + left: $modal-header-padding-x; + } + } +} + +// Modal Simple (Modal Examples) +// ****************************************************************************** + +.modal-simple { + .modal-content { + padding: $modal-simple-padding; + @include media-breakpoint-down(md) { + padding: 1rem; + .modal-body { + padding: 1rem; + } + } + } + .btn-close { + position: absolute; + top: -($modal-simple-padding - $modal-simple-close-position); + @include rtl-style() { + left: -($modal-simple-padding - $modal-simple-close-position); + } + @include ltr-style() { + right: -($modal-simple-padding - $modal-simple-close-position); + } + // For small screen set top, left/right 0 p-3, p-md-5 + @include media-breakpoint-down(md) { + top: 0; + @include rtl-style() { + left: 0; + } + @include ltr-style() { + right: 0; + } + } + } +} + +// Refer & Earn Modal Example +.modal-refer-and-earn { + .modal-refer-and-earn-step { + width: 88px; + height: 88px; + display: flex; + justify-content: center; + align-items: center; + border-radius: $card-border-radius; + i { + font-size: 2.5rem; + } + } +} + +// Add new address modal +.modal-add-new-address { + .custom-option-icon:not(.checked) svg { + stroke: $headings-color; + } + .custom-option-icon.checked svg { + stroke: $primary; + } +} + +// Modal Animations +// ****************************************************************************** + +// Slide from Top +.modal-top.fade .modal-dialog, +.modal-top .modal.fade .modal-dialog { + transform: translateY(-100%); +} + +.modal-top.show .modal-dialog, +.modal-top .modal.show .modal-dialog { + transform: translateY(0); +} + +// Transparent +.modal-transparent.fade .modal-dialog, +.modal-transparent .modal.fade .modal-dialog { + transform: scale(0.5, 0.5); +} + +.modal-transparent.show .modal-dialog, +.modal-transparent .modal.show .modal-dialog { + transform: scale(1, 1); +} + +// Responsive +// ******************************************************************************* + +@include media-breakpoint-down(lg) { + .modal-onboarding .onboarding-horizontal { + flex-direction: column; + } +} +@include media-breakpoint-down(md) { + .modal { + .carousel-control-prev, + .carousel-control-next { + display: none; + } + } +} +@include media-breakpoint-up(sm) { + .modal-content { + box-shadow: $modal-content-box-shadow-sm-up; + } + + .modal-sm .modal-dialog { + max-width: $modal-sm; + } +} +@include media-breakpoint-up(xl) { + .modal-xl .modal-dialog { + max-width: $modal-xl; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_nav.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_nav.scss new file mode 100644 index 0000000..c8b4af8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_nav.scss @@ -0,0 +1,510 @@ +// Nav +// ******************************************************************************* +.nav .nav-item, +.nav .nav-link, +.tab-pane, +.tab-pane .card-body { + outline: none !important; +} + +// To fix height issue of nav pills +.nav { + flex-wrap: inherit; + &.nav-pills:not(.nav-align-right):not(.nav-align-left) { + flex-wrap: wrap; + } + .nav-item { + white-space: nowrap; + } + .nav-tabs { + background-color: $card-bg; + } +} + +//nav tabs shadow +.nav-tabs-shadow { + box-shadow: $card-box-shadow; +} +// Tab and pills style +.nav-tabs, +.nav-pills { + .nav-link { + display: inline-flex; + align-items: center; + justify-content: center; + text-transform: capitalize; + &.active { + background-color: transparent; + } + } + + &:not(.nav-fill):not(.nav-justified) .nav-link { + margin-right: $nav-spacer; + width: 100%; + + @include rtl-style { + margin-left: $nav-spacer; + margin-right: 0; + } + } +} + +.tab-content:not(.doc-example-content) { + padding: $card-spacer-y; + .tab-pane { + opacity: 0; + transition: all linear 0.1s; + @include ltr-style { + transform: translateX(-30px); + } + @include rtl-style { + transform: translateX(30px); + } + &.show { + opacity: 1; + transform: unset !important; + transition: all ease-out 0.2s 0.1s; + } + } +} + +// For scrollable navs/tabs/pills +.nav-scrollable { + display: -webkit-inline-box; + display: -moz-inline-box; + width: 100%; + overflow-y: auto; + flex-wrap: nowrap; +} + +// Widget Tabs +// -------------------------------------------------- + +.nav-tabs { + div:not(.nav-align-left):not(.nav-align-right) > & { + display: inline-flex; + width: 100%; + overflow-x: auto !important; + overflow-y: hidden; + } + &.widget-nav-tabs { + border: 0 !important; + overflow-x: auto; + .nav-link { + border: $border-width dashed $border-color; + &.active { + border: $border-width solid $border-color; + } + @include media-breakpoint-up(md) { + height: 100px !important; + width: 110px !important; + @include border-radius($border-radius); + } + @include media-breakpoint-down(md) { + border: 0 !important; + padding: 0; + } + &.active { + border-color: $primary; + box-shadow: none !important; + .badge { + background-color: $component-hover-bg !important; + color: $component-active-bg !important; + } + } + .tab-widget-title { + @include media-breakpoint-down(md) { + display: none; + } + } + } + } +} + +// Todo: remove/ update style for nav with perfect scrollbar +// ? Not working with fixed width +// ? if provide width/min-width with %/auto not working +// ? Also can't use width with PX (as it's required for ps) +// ? removed JS so need to initialize ps again +// ? Once done add an example to docs + +// .nav-scrollable { +// display: -webkit-inline-box; +// display: -moz-inline-box; +// width: 420px; +// padding-bottom: 0.5rem; +// position: relative; +// // overflow-y: auto; +// flex-wrap: nowrap; +// } + +// Tab link +.nav-tabs { + position: relative; + .tab-slider { + height: 2px; + position: absolute; + .nav-align-left &, + .nav-align-right & { + width: 2px !important; + } + } + .nav-link { + background-clip: padding-box; + border-radius: 0; + } +} +.nav-pills { + .nav-link { + padding: $nav-pills-padding-y $nav-pills-padding-x; + } + & .nav-item .nav-link:not(.active):hover { + border-bottom: none; + padding-bottom: $nav-link-padding-y; + background-color: $nav-pills-link-hover-bg; + } + ~ .tab-content { + box-shadow: $box-shadow; + } +} + +// Sizing +// ******************************************************************************* + +.nav-sm { + @include template-nav-size($nav-link-padding-y-sm, $nav-link-padding-x-sm, $font-size-sm, $nav-link-line-height-sm); +} +.nav-lg { + @include template-nav-size($nav-link-padding-y-lg, $nav-link-padding-x-lg, $font-size-lg, $nav-link-line-height-lg); +} + +// Top, Right, Bottom & Left Tabbed panels +// ******************************************************************************* +.nav-align-top, +.nav-align-right, +.nav-align-bottom, +.nav-align-left { + .nav-tabs { + background: $nav-tabs-link-active-bg; + } + display: flex; + + > .nav, + > div > .nav { + z-index: 1; + position: relative; + } + &:has(.nav-tabs) { + border-radius: $border-radius !important; + } + + .row-bordered > [class^='col-'], + .row-bordered > [class*=' col-'], + .row-bordered > [class^='col '], + .row-bordered > [class*=' col '], + .row-bordered > [class$=' col'], + .row-bordered > [class='col'] { + &::before, + &::after { + border-color: $card-inner-border-color; + } + } +} + +.nav-align-right, +.nav-align-left { + align-items: stretch; + + > .nav, + > div > .nav { + flex-grow: 0; + flex-direction: column; + border-bottom-width: 0; + } + + > .nav.nav-pills .nav-item:not(:last-child), + > div > .nav.nav-pills .nav-item:not(:last-child) { + margin: 0 0 $nav-spacer 0 !important; + } + + > .tab-content { + flex-grow: 1; + .tab-pane { + transform: translateY(-30px); + &.show { + transform: translateY(0px); + } + } + } +} + +// Top tabs +.nav-align-top { + .tab-content { + @include border-bottom-radius($border-radius); + } + flex-direction: column; + .nav-tabs { + border-bottom: $border-width solid $border-color; + @include border-top-radius($border-radius); + & .nav-link:not(.active):hover { + color: $primary !important; + border-bottom: 2px solid $nav-pills-link-hover-bg !important; + padding-bottom: calc($nav-link-padding-y - 0.125rem); + } + &.nav-lg .nav-link:not(.active):hover { + padding-bottom: calc($nav-link-padding-y-lg - 0.125rem); + } + &.nav-sm .nav-link:not(.active):hover { + padding-bottom: calc($nav-link-padding-y-sm - 0.125rem); + } + } + .nav-pills ~ .tab-content { + @include border-top-radius($border-radius); + } +} +.nav-align-top, +.nav-align-bottom { + > .tab-content { + .tab-pane { + @include ltr-style { + transform: translateX(-30px); + } + @include rtl-style { + transform: translateX(30px); + } + &.show { + transform: translateX(0px) !important; + } + } + } + @include ltr-style { + > .nav.nav-pills .nav-item:not(:last-child) { + margin-right: $nav-spacer; + } + } + + @include rtl-style { + > .nav.nav-pills .nav-item:not(:last-child) { + margin-left: $nav-spacer; + } + } +} +.nav-align-right { + .tab-content { + @include border-start-radius($border-radius); + } + flex-direction: row-reverse; + .nav-tabs { + border-left: $border-width solid $border-color; + @include border-end-radius($border-radius); + position: relative; + .tab-slider { + @include ltr-style { + left: 0; + } + @include rtl-style { + right: 0; + } + } + ~ .tab-content { + .card & { + @include ltr-style { + border-right: $nav-tabs-border-width solid $nav-tabs-border-color; + } + @include rtl-style { + border-left: $nav-tabs-border-width solid $nav-tabs-border-color; + } + } + } + @include ltr-style { + & .nav-link:not(.active):hover { + color: $primary !important; + border-left: 2px solid $nav-pills-link-hover-bg !important; + padding-left: calc($nav-link-padding-x - 0.125rem); + } + } + + @include rtl-style { + & .nav-link:not(.active):hover { + color: $primary !important; + border-right: 2px solid $nav-pills-link-hover-bg !important; + padding-right: calc($nav-link-padding-x - 0.125rem); + } + } + } + + > .nav .nav-item, + > div > .nav .nav-item { + margin-left: 0; + + @include rtl-style { + margin-left: 0; + margin-right: 0; + } + } + .nav-link { + text-align: right; + justify-content: end; + } + .nav-pills ~ .tab-content { + @include border-end-radius($border-radius); + } +} + +// Bottom tabs +.nav-align-bottom { + .tab-content { + @include border-top-radius($border-radius); + } + flex-direction: column-reverse; + + > .nav .nav-item, + > div > .nav .nav-item { + margin-bottom: 0; + margin-top: 0; + } + + > .nav, + > div > .nav { + border-bottom-width: 0; + border-top: $nav-tabs-border-width solid $nav-tabs-border-color; + } + .nav-tabs { + border-top: $border-width solid $border-color; + @include border-bottom-radius($border-radius); + .tab-slider { + bottom: inherit !important; + } + & .nav-link:not(.active):hover { + color: $primary !important; + border-top: 2px solid $nav-pills-link-hover-bg !important; + padding-top: calc($nav-link-padding-y - 0.125rem); + } + } + .nav-pills ~ .tab-content { + @include border-bottom-radius($border-radius); + } +} + +// Left tabs +.nav-align-left { + .tab-content { + @include border-end-radius($border-radius); + } + .nav-tabs { + border-right: $border-width solid $border-color; + @include border-start-radius($border-radius); + position: relative; + ~ .tab-content { + .card & { + @include ltr-style { + border-left: $nav-tabs-border-width solid $nav-tabs-border-color; + } + @include rtl-style { + border-right: $nav-tabs-border-width solid $nav-tabs-border-color; + } + } + } + @include ltr-style { + & .nav-link:not(.active):hover { + color: $primary !important; + border-right: 2px solid $nav-pills-link-hover-bg !important; + padding-right: calc($nav-link-padding-x - 0.125rem); + } + } + + @include rtl-style { + & .nav-link:not(.active):hover { + color: $primary !important; + border-left: 2px solid $nav-pills-link-hover-bg !important; + padding-left: calc($nav-link-padding-x - 0.125rem); + } + } + } + > .nav .nav-item, + > div > .nav .nav-item { + margin-right: 0; + @include rtl-style { + margin-right: 0; + margin-left: 0; + } + } + .nav-link { + text-align: left; + justify-content: start; + } + .nav-pills ~ .tab-content { + @include border-start-radius($border-radius); + } +} + +// Tab content +.nav-align-top > .tab-content, +.nav-align-right > .tab-content, +.nav-align-bottom > .tab-content, +.nav-align-left > .tab-content { + flex-shrink: 1; + background-clip: padding-box; + background: $nav-tabs-link-active-bg; + .card & { + background: transparent; + } +} +.card .tab-content { + box-shadow: none !important; +} + +// Dark +@if $dark-style { + .nav-tabs { + .nav-link.active { + border-color: $border-color; + border-bottom-color: $nav-tabs-link-active-bg; + } + } + .nav-align-top, + .nav-align-bottom, + .nav-align-left, + .nav-align-right { + .nav-tabs { + .nav-link.active { + border-color: $gray-200; + @include rtl-style { + border-right-color: $gray-200 !important; + } + } + } + } + .nav-align-top { + .nav-tabs { + .nav-link.active { + border-bottom-color: $nav-tabs-link-active-bg !important; + } + } + } + .nav-align-bottom { + .nav-tabs { + .nav-link.active { + border-top-color: $nav-tabs-link-active-bg !important; + } + } + } +} + +// RTL +@include rtl-only { + .nav { + padding-right: 0; + } + .nav-align-left { + .nav-link { + text-align: right; + } + } + .nav-align-right { + .nav-link { + text-align: left; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_navbar.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_navbar.scss new file mode 100644 index 0000000..bd6db22 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_navbar.scss @@ -0,0 +1,87 @@ +// Navbar +// ******************************************************************************* + +.navbar { + z-index: 2; + // ! Fix: navbar dropdown focus outline + .dropdown:focus, + .dropdown-toggle:focus { + outline: 0; + } + .navbar-toggler:focus { + box-shadow: none; + } + .list-group-item:hover, + .list-group-item:focus { + background-color: $navbar-dropdown-hover-bg; + color: inherit; + } +} + +.fixed-top { + z-index: $zindex-fixed; +} + +.navbar.navbar-light { + color: $navbar-light-color; +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: $navbar-light-disabled-color !important; +} + +.navbar.navbar-dark { + color: $navbar-dark-color; +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: $navbar-dark-disabled-color !important; +} + +// IE fix +.navbar-collapse, +.navbar-brand, +.navbar-text { + flex-shrink: 1; +} + +// Icons +// .navbar-icon { +// font-size: 130%; +// } + +// Rulers +.navbar-dark hr { + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-light hr { + border-color: $gray-100; +} + +// RTL Style +// ****************************************************************************** + +@include rtl-only { + .navbar-nav { + padding-right: 0; + } + + .navbar-brand { + margin-right: 0; + margin-left: $navbar-padding-x; + } +} + +// Mega dropdown +// ****************************************************************************** + +.mega-dropdown { + .dropdown-toggle { + outline: 0; + box-shadow: none; + } + .dropdown-menu { + width: 100%; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_offcanvas.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_offcanvas.scss new file mode 100644 index 0000000..d56fa0f --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_offcanvas.scss @@ -0,0 +1,33 @@ +// Offcanvas +// ******************************************************************************* + +.offcanvas { + box-shadow: $offcanvas-box-shadow; + .offcanvas-header { + .btn-close { + padding: 0.44rem; + margin-right: 0; + background-size: 1.5rem; + background-image: str-replace( + str-replace($btn-close-bg, '#{$offcanvas-btn-close-color}', $headings-color), + '#', + '%23' + ); + } + } +} + +// RTL +// ******************************************************************************* +@include rtl-only { + .offcanvas-start { + right: 0; + transform: translateX(100%); + } + + .offcanvas-end { + right: auto; + left: 0; + transform: translateX(-100%); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_pagination.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_pagination.scss new file mode 100644 index 0000000..2e913e1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_pagination.scss @@ -0,0 +1,226 @@ +// Pagination +// ******************************************************************************* + +// Pagination Mixins +@each $color, $value in $theme-colors { + @if $color != primary and $color != light { + @include template-pagination-variant('.pagination-#{$color}', $value); + @include template-pagination-outline-variant('.pagination-outline-#{$color}', $value); + } +} +// Pagination next, prev, first & last css padding +.page-item { + &.first, + &.last, + &.next, + &.prev, + &.previous { + .page-link { + padding: $pagination-padding-y - 0.043rem $pagination-padding-x - 0.067rem; + } + } + &.disabled, + &[disabled] { + .page-link { + pointer-events: none; + } + } +} +.pagination { + &.disabled, + &[disabled] { + .page-item .page-link { + opacity: $pagination-disabled-opacity; + } + } +} + +// Pagination basic style +.page-link, +.page-link > a { + @include border-radius($border-radius); + + text-align: center; + min-width: calc( + #{'#{($font-size-base * $pagination-line-height) + ($pagination-padding-x * 1.923)} + calc(#{$pagination-border-width} * 2)'} + ); + min-height: calc( + #{'#{($font-size-base * $pagination-line-height) + ($pagination-padding-y * 2)} + calc(#{$pagination-border-width} * 2)'} + ); + + &:focus { + color: $pagination-hover-color; + } + display: inline-flex !important; + justify-content: center; + align-items: center; +} + +// Add spacing between pagination items +.page-item + .page-item .page-link, +.pagination li + li > a:not(.page-link) { + .pagination-sm & { + margin-left: 0.25rem; + } + .pagination-lg & { + margin-left: 0.5rem; + } +} + +// Removed border from default pagination and set line-height of icons +.pagination { + &:not([class*='pagination-outline-']) { + .page-link { + border-color: transparent; + } + & .page-item.active .waves-ripple { + background: none; + } + } + &[class*='pagination-outline-'] { + .page-item.active .page-link { + box-shadow: none; + } + .page-item:not(.active) .page-link, + .pagination li > a:not(.page-link) { + background-color: transparent; + &:hover, + &:focus { + background-color: rgba-to-hex(rgba($black, 0.06), $rgba-to-hex-bg); + border-color: rgba-to-hex(rgba($black, 0.22), $rgba-to-hex-bg); + color: $headings-color; + } + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($black, 0.3) 0, + rgba($black, 0.4) 40%, + rgba($black, 0.5) 50%, + rgba($black, 0.6) 60%, + rgba($black, 0) 70% + ); + } + } + } + } +} + +.page-link.btn-primary { + box-shadow: none !important; +} + +// Pagination shape rounded & Square +.pagination { + &.pagination-square .page-item a { + @include border-radius(0); + } + &.pagination-round .page-item a { + @include border-radius(50%); + } + &.pagination-rounded .page-item a { + @include border-radius($border-radius); + } + &.pagination-sm.pagination-rounded .page-item a { + @include border-radius($border-radius-sm); + } + &.pagination-lg.pagination-rounded .page-item a { + @include border-radius($border-radius-lg); + } +} + +// Sizing +// ******************************************************************************* + +// Pagination Large +.pagination-lg .page-link, +.pagination-lg > li > a:not(.page-link) { + min-width: calc( + #{'#{($font-size-base * $pagination-line-height) + ($pagination-padding-x-lg * 1.615)} + calc(#{$pagination-border-width} * 2)'} + ); + min-height: calc( + #{'#{($font-size-base * $pagination-line-height) + ($pagination-padding-y-lg * 2.33)} + calc(#{$pagination-border-width} * 2)'} + ); +} + +// Pagination Small +.pagination-sm .page-link, +.pagination-sm > li > a:not(.page-link) { + min-width: calc( + #{'#{($font-size-sm * $pagination-line-height) + ($pagination-padding-x-sm * 2.356)} + calc(#{$pagination-border-width} * 2)'} + ); + min-height: calc( + #{'#{($font-size-sm * $pagination-line-height) + ($pagination-padding-y-sm * 2)} + calc(#{$pagination-border-width} * 2)'} + ); +} +.pagination-sm > .page-item { + &.first, + &.last, + &.next, + &.prev, + &.previous { + .page-link { + padding: $pagination-padding-y-sm - 0.1055rem; + } + } +} + +// RTL pagination +// ******************************************************************************* + +@include rtl-only { + .pagination { + padding-right: 0; + } + + // Add spacing between pagination items + .page-item + .page-item .page-link, + .pagination li + li > a:not(.page-link) { + margin-left: 0; + margin-right: $pagination-margin-start; + .pagination-sm & { + margin-right: 0.25rem; + } + .pagination-lg & { + margin-right: 0.5rem; + } + } + + .page-item { + &.first, + &.last, + &.next, + &.prev, + &.previous { + .page-link { + i { + transform: rotate(180deg); + } + } + } + } +} + +@include dark-layout-only { + .pagination[class*='pagination-outline-'] { + .page-item .page-link, + .pagination li > a:not(.page-link) { + background-color: transparent; + &:hover, + &:focus { + background-color: rgba-to-hex(rgba($base, 0.06), $rgba-to-hex-bg); + border-color: rgba-to-hex(rgba($base, 0.22), $rgba-to-hex-bg); + } + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba(#000, 0.3) 0, + rgba(#000, 0.4) 40%, + rgba(#000, 0.5) 50%, + rgba(#000, 0.6) 60%, + rgba(#000, 0) 70% + ); + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_popover.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_popover.scss new file mode 100644 index 0000000..98294fe --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_popover.scss @@ -0,0 +1,42 @@ +// Popovers +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color != primary and $color != light { + @include template-popover-variant( + '.popover-#{$color}, .popover-#{$color} > .popover, .ngb-popover-#{$color} + ngb-popover-window', + rgba-to-hex($value, $rgba-to-hex-bg) + ); + } +} + +.modal-open .popover { + z-index: $zindex-modal + 1; +} + +.popover { + box-shadow: $popover-box-shadow; + + // Popover header padding and font-size + .popover-header { + padding-bottom: 0; + font-size: $h5-font-size; + } + + // Popover body padding + .popover-body { + padding-top: $spacer; + } + .popover-arrow { + z-index: 1; + } +} + +// RTL +// ******************************************************************************* + +@include rtl-only { + .popover { + text-align: right; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_progress.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_progress.scss new file mode 100644 index 0000000..c41a774 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_progress.scss @@ -0,0 +1,44 @@ +// Progress +// ******************************************************************************* + +.progress:has(:only-child) { + overflow: visible; +} + +@each $color, $value in $theme-colors { + @if $color != primary { + @include template-progress-shadow-theme('.progress-bar.bg-#{$color}', $value); + } +} +@include ltr-only { + .progress { + .progress-bar:last-child { + border-top-right-radius: $progress-border-radius; + border-bottom-right-radius: $progress-border-radius; + } + .progress-bar:first-child { + border-top-left-radius: $progress-border-radius; + border-bottom-left-radius: $progress-border-radius; + } + } +} + +// RTL +// ******************************************************************************* + +@include rtl-only { + .progress-bar-animated { + animation-direction: reverse; + } + .progress { + // border radius for first and last child + .progress-bar:last-child { + border-top-left-radius: $progress-border-radius; + border-bottom-left-radius: $progress-border-radius; + } + .progress-bar:first-child { + border-top-right-radius: $progress-border-radius; + border-bottom-right-radius: $progress-border-radius; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_reboot.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_reboot.scss new file mode 100644 index 0000000..b05d833 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_reboot.scss @@ -0,0 +1,74 @@ +// Reboot +// + +b, +strong { + font-weight: $font-weight-bold; +} + +// Todo: commenting this style as creating issue on toast select and customizer select in windows +// @if $dark-style { +// select:not([multiple]):not([size]), +// select[size='1'] { +// option { +// color: $black; +// } +// } +// } + +@include rtl-only { + caption { + text-align: right; + } + dd { + margin-right: 0; + } +} + +a:not([href]) { + color: inherit; + text-decoration: none; + + &:hover { + color: inherit; + text-decoration: none; + } +} + +//! Fix: Autofill input bg and text color issue on different OS and browsers +input:-webkit-autofill, +input:-webkit-autofill:hover, +input:-webkit-autofill:focus, +textarea:-webkit-autofill, +textarea:-webkit-autofill:hover, +textarea:-webkit-autofill:focus, +select:-webkit-autofill, +select:-webkit-autofill:hover, +select:-webkit-autofill:focus, +input:-internal-autofill-selected { + background-clip: text !important; + -webkit-background-clip: text !important; +} + +h1 { + line-height: $h1-line-height; +} +h2 { + line-height: $h2-line-height; +} + +h3 { + line-height: $h3-line-height; +} + +h4 { + line-height: $h4-line-height; +} + +h5 { + line-height: $h5-line-height; +} + +h6 { + line-height: $h6-line-height; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_root.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_root.scss new file mode 100644 index 0000000..4bbd2bd --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_root.scss @@ -0,0 +1,4 @@ +// The color-scheme CSS property https://web.dev/color-scheme/ +:root { + color-scheme: #{$color-scheme}; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_spinners.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_spinners.scss new file mode 100644 index 0000000..72dc9c3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_spinners.scss @@ -0,0 +1,44 @@ +// Spinners +// + +//Large size +.spinner-border-lg { + width: $spinner-width-lg; + height: $spinner-height-lg; + border-width: $spinner-border-width-lg; +} + +.spinner-grow-lg { + width: $spinner-width-lg; + height: $spinner-height-lg; + border-width: $spinner-border-width-lg; +} + +// * Within button +// ******************************************************************************* + +.btn { + .spinner-border, + .spinner-grow { + position: relative; + top: -0.0625rem; + height: 1em; + width: 1em; + } + + .spinner-border { + border-width: 0.15em; + } +} + +@include keyframes('spinner-border-rtl') { + to { + transform: rotate(-360deg); + } +} +// RTL +@include rtl-only { + .spinner-border { + animation-name: spinner-border-rtl; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_tables.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_tables.scss new file mode 100644 index 0000000..e4eb283 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_tables.scss @@ -0,0 +1,136 @@ +// Tables +// ********************************************************************************/ + +@each $color, $value in $table-variants { + @if $color != primary { + @include template-table-variant($color, $value); + } +} + +// Firefox fix for table head border bottom +.table { + > :not(caption) > * > * { + background-clip: padding-box; + } + &:not(.table-borderless):not(.table-dark) > :not(caption) > *:not(.table-dark) > * { + border-top-width: 1px; + } + .dropdown-item { + display: flex; + gap: 0.25rem; + } + tr { + > td { + .dropdown { + position: static; + } + } + } + caption { + padding: $table-cell-padding-y $table-cell-padding-x; + } + &.table-sm { + thead tr th { + padding-block: $table-head-padding-y-sm; + } + } + thead tr th { + padding-block: $table-head-padding-y; + } +} + +// Style for table inside card +.card { + .table { + margin-bottom: 0; + } +} +@supports (-moz-appearance: none) { + .table { + .dropdown-menu.show { + display: inline-table; + } + } +} +// Table heading style +.table th { + text-transform: uppercase; + font-size: $font-size-sm; + letter-spacing: 0.2px; + color: $table-th-color; +} +.table-dark th { + color: var(--#{$prefix}table-color); + border-top: 1px solid $table-border-color; +} +@if $dark-style { + .table-light th { + color: var(--#{$prefix}table-color); + } +} + +// Dark Table icon button +.table.table-dark .btn.btn-icon { + color: $table-border-color; +} + +// class for to remove table border bottom +.table-border-bottom-0 { + tr:last-child { + td, + th { + border-bottom-width: 0; + } + } +} + +// Dark Table icon button color +.table.table-dark { + .btn { + i { + color: $component-active-color; + } + } +} + +// Flush spacing of left from first column ans right from last column +.table.table-flush-spacing { + thead, + tbody { + tr > td:first-child { + padding-left: 0; + } + tr > td:last-child { + padding-right: 0; + } + } +} + +// * Table inside card +// ******************************************************************************* + +// .card, +.nav-align-top, +.nav-align-right, +.nav-align-bottom, +.nav-align-left { + .table:not(.table-dark), + .table:not(.table-dark) thead:not(.table-dark) th, + .table:not(.table-dark) tfoot:not(.table-dark) th, + .table:not(.table-dark) td { + border-color: $border-color; + } +} + +// Dark styles + +// Dark Table icon button color +@if $dark-style { + .table.table-dark { + .btn { + i { + color: $card-bg; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_toasts.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_toasts.scss new file mode 100644 index 0000000..c033faf --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_toasts.scss @@ -0,0 +1,51 @@ +// Toasts +// ******************************************************************************* + +.toast.bs-toast { + z-index: $zindex-toast; +} + +//btn close +.toast-header { + border-bottom: $border-width solid $toast-header-border-color; + .btn-close { + background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $text-muted), '#', '%23'); + padding-top: 0; + padding-bottom: 0; + margin-left: 0.875rem; + background-size: 0.875rem; + } +} + +// Toast body font size and padding override +.toast-body { + font-size: 0.8125rem; + padding-top: 0.684rem; + padding-bottom: 0.684rem; +} +.toast-container { + --#{$prefix}toast-zindex: 9; +} +// RTL close btn style +@include rtl-only { + .toast-header { + .btn-close { + margin-left: $toast-padding-x * -0.5; + margin-right: $toast-padding-x + 0.125; + } + } +} +// Bootstrap Toasts Example +.toast-ex { + position: fixed; + top: 4.1rem; + right: 0.5rem; + @include rtl-style { + left: 0.5rem; + right: auto; + } +} +// Placement Toast example +.toast-placement-ex { + position: fixed; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_tooltip.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_tooltip.scss new file mode 100644 index 0000000..78c5e17 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_tooltip.scss @@ -0,0 +1,58 @@ +// Tooltips +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color != primary and $color != light { + @include template-tooltip-variant( + '.tooltip-#{$color}, .tooltip-#{$color} > .tooltip, .ngb-tooltip-#{$color} + ngb-tooltip-window', + rgba-to-hex($value, $rgba-to-hex-bg) + ); + } +} + +// Open modal tooltip z-index +.modal-open .tooltip { + z-index: $zindex-modal + 2; +} + +.tooltip-inner { + box-shadow: $tooltip-box-shadow; + font-weight: $font-weight-medium; +} + +// Tooltip line height override +.tooltip { + line-height: $line-height-lg; +} +// RTL +// ******************************************************************************* + +@include rtl-only { + .tooltip { + text-align: right; + } + &.bs-tooltip-auto { + &[data-popper-placement='right'] { + .tooltip-arrow { + right: 0; + left: inherit; + &::before { + left: -1px; + border-width: ($tooltip-arrow-width * 0.5) 0 ($tooltip-arrow-width * 0.5) $tooltip-arrow-height; + border-left-color: $tooltip-arrow-color; + } + } + } + &[data-popper-placement='left'] { + .tooltip-arrow { + left: 0; + right: inherit; + &::before { + right: -1px; + border-width: ($tooltip-arrow-width * 0.5) $tooltip-arrow-height ($tooltip-arrow-width * 0.5) 0; + border-right-color: $tooltip-arrow-color; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_type.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_type.scss new file mode 100644 index 0000000..2001fd4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_type.scss @@ -0,0 +1,13 @@ +// Type +// + +@include rtl-only { + .list-inline, + .list-unstyled { + padding-right: 0; + } + .list-inline-item:not(:last-child) { + margin-right: 0; + margin-left: $list-inline-padding; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities-ltr.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities-ltr.scss new file mode 100644 index 0000000..a055e24 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities-ltr.scss @@ -0,0 +1,299 @@ +// stylelint-disable indentation + +// Utilities + +// stylelint-disable-next-line scss/dollar-variable-default +$utilities: map-merge( + $utilities, + ( + 'align': null, + 'overflow': null, + 'display': null, + 'shadow': null, + 'position': null, + 'top': null, + 'bottom': null, + 'border': null, + 'border-top': null, + 'border-bottom': null, + 'border-color': null, + 'border-width': null, + 'border-bottom-dashed': null, + 'border-top-dashed': null, + 'width': null, + 'max-width': null, + 'viewport-width': null, + 'min-viewport-width': null, + 'height': null, + 'max-height': null, + 'viewport-height': null, + 'min-viewport-height': null, + 'flex': null, + 'flex-direction': null, + 'flex-grow': null, + 'flex-shrink': null, + 'flex-wrap': null, + 'gap': null, + 'justify-content': null, + 'align-items': null, + 'align-content': null, + 'align-self': null, + 'order': null, + 'margin': null, + 'margin-x': null, + 'margin-y': null, + 'margin-top': null, + 'margin-bottom': null, + 'negative-margin': null, + 'negative-margin-x': null, + 'negative-margin-y': null, + 'negative-margin-top': null, + 'negative-margin-bottom': null, + 'padding': null, + 'padding-x': null, + 'padding-y': null, + 'padding-top': null, + 'padding-bottom': null, + 'font-family': null, + 'font-size': null, + 'font-style': null, + 'font-weight': null, + 'line-height': null, + 'text-decoration': null, + 'text-transform': null, + 'white-space': null, + 'word-wrap': null, + 'color': null, + 'background-color': null, + 'transparent': null, + 'gradient': null, + 'user-select': null, + 'pointer-events': null, + 'rounded': null, + 'rounded-top': null, + 'rounded-bottom': null, + 'visibility': null, + 'opacity': null, + 'flex-basis': null, + 'cursor': null, + // scss-docs-start utils-float + 'float': + ( + responsive: true, + property: float, + values: ( + start: left, + end: right, + none: none + ) + ), + // scss-docs-end utils-float + // scss-docs-start utils-position + 'end': + ( + property: right, + class: end, + values: $position-values + ), + 'start': ( + property: left, + class: start, + values: $position-values + ), + 'translate-middle': ( + property: transform, + class: translate-middle, + values: ( + null: translate(-50%, -50%), + x: translateX(-50%), + y: translateY(-50%) + ) + ), + // scss-docs-end utils-position + // scss-docs-start utils-borders + 'border-end': + ( + property: border-right, + class: border-end, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-start': ( + property: border-left, + class: border-start, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-left-dashed': ( + property: border-left-style, + class: border-left-dashed, + values: ( + null: dashed + ) + ), + 'border-right-dashed': ( + property: border-right-style, + class: border-right-dashed, + values: ( + null: dashed + ) + ), + // scss-docs-end utils-borders + // scss-docs-start utils-text + 'text-align': + ( + responsive: true, + property: text-align, + class: text, + values: ( + start: left, + end: right, + center: center + ) + ), + // scss-docs-end utils-text + // scss-docs-start utils-border-radius + 'rounded-end': + ( + property: border-top-right-radius border-bottom-right-radius, + class: rounded-end, + values: ( + null: $border-radius + ) + ), + 'rounded-start': ( + property: border-bottom-left-radius border-top-left-radius, + class: rounded-start, + values: ( + null: $border-radius + ) + ), + 'rounded-start-top': ( + property: border-top-left-radius, + class: rounded-start-top, + values: ( + null: $border-radius + ) + ), + 'rounded-start-bottom': ( + property: border-bottom-left-radius, + class: rounded-start-bottom, + values: ( + null: $border-radius + ) + ), + 'rounded-end-top': ( + property: border-top-right-radius, + class: rounded-end-top, + values: ( + null: $border-radius + ) + ), + 'rounded-end-bottom': ( + property: border-bottom-right-radius, + class: rounded-end-bottom, + values: ( + null: $border-radius + ) + ), + // scss-docs-end utils-border-radius + // Margin utilities + // scss-docs-start utils-spacing + 'margin-end': + ( + responsive: true, + property: margin-right, + class: me, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + 'margin-start': ( + responsive: true, + property: margin-left, + class: ms, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + // Negative margin utilities + 'negative-margin-end': + ( + responsive: true, + property: margin-right, + class: me, + values: $negative-spacers + ), + 'negative-margin-start': ( + responsive: true, + property: margin-left, + class: ms, + values: $negative-spacers + ), + // Padding utilities + 'padding-end': + ( + responsive: true, + property: padding-right, + class: pe, + values: $spacers + ), + 'padding-start': ( + responsive: true, + property: padding-left, + class: ps, + values: $spacers + ), + // scss-docs-end utils-spacing + // Custom Utilities + // ******************************************************************************* + // scss-docs-start utils-rotate + 'rotate': + ( + property: transform, + class: rotate, + values: ( + 0: rotate(0deg), + 90: rotate(90deg), + 180: rotate(180deg), + 270: rotate(270deg), + n90: rotate(-90deg), + n180: rotate(-180deg), + n270: rotate(-270deg) + ) + ), + // scss-docs-end utils-rotate + // scss-docs-start utils-scaleX + 'scaleX': + ( + property: transform, + class: scaleX, + values: ( + n1: scaleX(-1) + ) + ), + // scss-docs-end utils-scaleX + // scss-docs-start utils-scaleY + 'scaleY': + ( + property: transform, + class: scaleY, + values: ( + n1: scaleY(-1) + ) + ) + // scss-docs-end utils-scaleY + ) +); diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities-rtl.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities-rtl.scss new file mode 100644 index 0000000..0193ad7 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities-rtl.scss @@ -0,0 +1,301 @@ +// stylelint-disable indentation + +// Utilities + +// stylelint-disable-next-line scss/dollar-variable-default +$utilities: map-merge( + $utilities, + ( + 'align': null, + 'overflow': null, + 'display': null, + 'shadow': null, + 'position': null, + 'top': null, + 'bottom': null, + 'border': null, + 'border-top': null, + 'border-bottom': null, + 'border-color': null, + 'border-width': null, + 'border-bottom-dashed': null, + 'border-top-dashed': null, + 'width': null, + 'max-width': null, + 'viewport-width': null, + 'min-viewport-width': null, + 'height': null, + 'max-height': null, + 'viewport-height': null, + 'min-viewport-height': null, + 'flex': null, + 'flex-direction': null, + 'flex-grow': null, + 'flex-shrink': null, + 'flex-wrap': null, + 'gap': null, + 'justify-content': null, + 'align-items': null, + 'align-content': null, + 'align-self': null, + 'order': null, + 'margin': null, + 'margin-x': null, + 'margin-y': null, + 'margin-top': null, + 'margin-bottom': null, + 'negative-margin': null, + 'negative-margin-x': null, + 'negative-margin-y': null, + 'negative-margin-top': null, + 'negative-margin-bottom': null, + 'padding': null, + 'padding-x': null, + 'padding-y': null, + 'padding-top': null, + 'padding-bottom': null, + 'font-family': null, + 'font-size': null, + 'font-style': null, + 'font-weight': null, + 'line-height': null, + 'text-decoration': null, + 'text-transform': null, + 'white-space': null, + 'word-wrap': null, + 'color': null, + 'background-color': null, + 'transparent': null, + 'gradient': null, + 'user-select': null, + 'pointer-events': null, + 'rounded': null, + 'rounded-top': null, + 'rounded-bottom': null, + 'visibility': null, + 'opacity': null, + 'flex-basis': null, + 'cursor': null, + // scss-docs-start utils-float + 'float': + ( + responsive: true, + property: float, + values: ( + start: right, + end: left, + none: none + ) + ), + // scss-docs-end utils-float + // scss-docs-start utils-position + 'end': + ( + property: left, + class: end, + values: $position-values + ), + 'start': ( + property: right, + class: start, + values: $position-values + ), + 'translate-middle': ( + property: transform, + class: translate-middle, + values: ( + null: translate(50%, -50%), + x: translateX(50%), + y: translateY(-50%) + ) + ), + // scss-docs-end utils-position + // scss-docs-start utils-borders + 'border-end': + ( + property: border-left, + class: border-end, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-start': ( + property: border-right, + class: border-start, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-left-dashed': ( + property: border-right-style, + class: border-left-dashed, + values: ( + null: dashed + ) + ), + 'border-right-dashed': ( + property: border-left-style, + class: border-right-dashed, + values: ( + null: dashed + ) + ), + // scss-docs-end utils-borders + // scss-docs-start utils-text + 'text-align': + ( + responsive: true, + property: text-align, + class: text, + values: ( + start: right, + end: left, + center: center + ) + ), + // scss-docs-end utils-text + // scss-docs-start utils-border-radius + 'rounded-end': + ( + property: border-top-left-radius border-bottom-left-radius, + class: rounded-end, + values: ( + null: $border-radius + ) + ), + 'rounded-start': ( + property: border-bottom-right-radius border-top-right-radius, + class: rounded-start, + values: ( + null: $border-radius + ) + ), + 'rounded-start-top': ( + property: border-top-right-radius, + class: rounded-start-top, + values: ( + null: $border-radius + ) + ), + 'rounded-start-bottom': ( + property: border-bottom-right-radius, + class: rounded-start-bottom, + values: ( + null: $border-radius + ) + ), + 'rounded-end-top': ( + property: border-top-left-radius, + class: rounded-end-top, + values: ( + null: $border-radius + ) + ), + 'rounded-end-bottom': ( + property: border-bottom-left-radius, + class: rounded-end-bottom, + values: ( + null: $border-radius + ) + ), + // scss-docs-end utils-border-radius + // Margin utilities + // scss-docs-start utils-spacing + 'margin-end': + ( + responsive: true, + property: margin-left, + class: me, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + 'margin-start': ( + responsive: true, + property: margin-right, + class: ms, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + // Negative margin utilities + 'negative-margin-end': + ( + responsive: true, + property: margin-left, + class: me, + values: $negative-spacers + ), + 'negative-margin-start': ( + responsive: true, + property: margin-right, + class: ms, + values: $negative-spacers + ), + // Padding utilities + 'padding-end': + ( + responsive: true, + property: padding-left, + class: pe, + values: $spacers + ), + 'padding-start': ( + responsive: true, + property: padding-right, + class: ps, + values: $spacers + ), + // scss-docs-end utils-spacing + // Custom Utilities + // ******************************************************************************* + // scss-docs-start utils-rotate + 'rotate': + ( + property: transform, + class: rotate, + values: ( + 0: rotate(0deg), + 90: rotate(-90deg), + 180: rotate(-180deg), + 270: rotate(-270deg), + n90: rotate(90deg), + n180: rotate(180deg), + n270: rotate(270deg) + ) + ), + // scss-docs-end utils-rotate + // scss-docs-start utils-scaleX + 'scaleX': + ( + property: transform, + class: scaleX, + values: ( + n1: scaleX(1), + n1-rtl: scaleX(-1) + ) + ), + // scss-docs-end utils-scaleX + // scss-docs-start utils-scaleY + 'scaleY': + ( + property: transform, + class: scaleY, + values: ( + n1: scaleY(1), + n1-rtl: scaleY(-1) + ) + ) + // scss-docs-end utils-scaleY + ) +); diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities.scss new file mode 100644 index 0000000..5f2cef1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_utilities.scss @@ -0,0 +1,1081 @@ +// Utilities +// ******************************************************************************* +// stylelint-disable indentation + +// Utilities + +$utilities: () !default; +// stylelint-disable-next-line scss/dollar-variable-default +$utilities: map-merge( + ( + // scss-docs-start utils-vertical-align + 'align': + ( + property: vertical-align, + class: align, + values: baseline top middle bottom text-bottom text-top + ), + // scss-docs-end utils-vertical-align + // Object Fit utilities + // scss-docs-start utils-object-fit + 'object-fit': + ( + responsive: true, + property: object-fit, + values: ( + contain: contain, + cover: cover, + fill: fill, + scale: scale-down, + none: none + ) + ), + // scss-docs-end utils-object-fit + // Opacity utilities + // scss-docs-start utils-opacity + 'opacity': + ( + property: opacity, + values: ( + 0: 0, + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1 + ) + ), + // scss-docs-end utils-opacity + // scss-docs-start utils-overflow + 'overflow': + ( + property: overflow, + values: auto hidden visible scroll + ), + // scss-docs-end utils-overflow + // scss-docs-start utils-display + 'display': + ( + responsive: true, + print: true, + property: display, + class: d, + values: inline inline-block block grid table table-row table-cell flex inline-flex none + ), + // scss-docs-end utils-display + // scss-docs-start utils-shadow + 'shadow': + ( + property: box-shadow, + class: shadow, + values: ( + null: $box-shadow, + xs: $box-shadow-xs, + sm: $box-shadow-sm, + lg: $box-shadow-lg, + xl: $box-shadow-xl, + none: none + ) + ), + // scss-docs-end utils-shadow + // scss-docs-start utils-position + 'position': + ( + property: position, + values: static relative absolute fixed sticky + ), + 'top': ( + property: top, + values: $position-values + ), + 'bottom': ( + property: bottom, + values: $position-values + ), + // scss-docs-end utils-position + // scss-docs-start utils-borders + 'border': + ( + property: border, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-style': ( + property: border-style, + class: border, + responsive: true, + values: ( + solid: solid, + dashed: dashed, + none: none + ) + ), + 'border-top': ( + property: border-top, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-bottom': ( + property: border-bottom, + values: ( + null: $border-width solid $border-color, + 0: 0 + ) + ), + 'border-color': ( + property: border-color, + class: border, + values: + map-merge( + $theme-colors, + ( + 'white': $white, + 'light': $gray-100, + // (C) + 'transparent': transparent // (C) + ) + ) + ), + 'border-label-color': ( + property: border-color, + class: border-label, + local-vars: ( + 'border-opacity': 0.16 + ), + values: $utilities-border-colors + ), + 'border-width': ( + property: border-width, + class: border, + values: $border-widths + ), + 'border-opacity': ( + css-var: true, + class: border-opacity, + values: ( + 10: 0.1, + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1 + ) + ), + 'border-top-dashed': ( + property: border-top-style, + class: border-top-dashed, + values: ( + null: dashed + ) + ), + 'border-bottom-dashed': ( + property: border-bottom-style, + class: border-bottom-dashed, + values: ( + null: dashed + ) + ), + // scss-docs-end utils-borders + // Sizing utilities + // scss-docs-start utils-sizing + 'width': + ( + property: width, + class: w, + values: + map-merge( + $sizes-px, + ( + 20: 20%, + 25: 25%, + 50: 50%, + 60: 60%, + 75: 75%, + 100: 100%, + auto: auto + ) + ) + ), + 'max-width': ( + property: max-width, + class: mw, + values: ( + 100: 100% + ) + ), + 'viewport-width': ( + property: width, + class: vw, + values: ( + 100: 100vw + ) + ), + 'min-viewport-width': ( + property: min-width, + class: min-vw, + values: ( + 100: 100vw + ) + ), + 'height': ( + property: height, + class: h, + values: + map-merge( + $sizes-px, + ( + 25: 25%, + 50: 50%, + 75: 75%, + 100: 100%, + auto: auto + ) + ) + ), + 'max-height': ( + property: max-height, + class: mh, + values: ( + 100: 100% + ) + ), + 'viewport-height': ( + property: height, + class: vh, + values: ( + 100: 100vh + ) + ), + 'min-viewport-height': ( + property: min-height, + class: min-vh, + values: ( + 100: 100vh + ) + ), + // scss-docs-end utils-sizing + // Flex utilities + // scss-docs-start utils-flex + 'flex': + ( + responsive: true, + property: flex, + values: ( + fill: 1 1 auto + ) + ), + 'flex-direction': ( + responsive: true, + property: flex-direction, + class: flex, + values: row column row-reverse column-reverse + ), + 'flex-grow': ( + responsive: true, + property: flex-grow, + class: flex, + values: ( + grow-0: 0, + grow-1: 1 + ) + ), + 'flex-shrink': ( + responsive: true, + property: flex-shrink, + class: flex, + values: ( + shrink-0: 0, + shrink-1: 1 + ) + ), + 'flex-wrap': ( + responsive: true, + property: flex-wrap, + class: flex, + values: wrap nowrap wrap-reverse + ), + 'justify-content': ( + responsive: true, + property: justify-content, + values: ( + start: flex-start, + end: flex-end, + center: center, + between: space-between, + around: space-around, + evenly: space-evenly + ) + ), + 'align-items': ( + responsive: true, + property: align-items, + values: ( + start: flex-start, + end: flex-end, + center: center, + baseline: baseline, + stretch: stretch + ) + ), + 'align-content': ( + responsive: true, + property: align-content, + values: ( + start: flex-start, + end: flex-end, + center: center, + between: space-between, + around: space-around, + stretch: stretch + ) + ), + 'align-self': ( + responsive: true, + property: align-self, + values: ( + auto: auto, + start: flex-start, + end: flex-end, + center: center, + baseline: baseline, + stretch: stretch + ) + ), + 'order': ( + responsive: true, + property: order, + values: ( + first: -1, + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5, + last: 6 + ) + ), + // scss-docs-end utils-flex + // Margin utilities + // scss-docs-start utils-spacing + 'margin': + ( + responsive: true, + property: margin, + class: m, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + 'margin-x': ( + responsive: true, + property: margin-right margin-left, + class: mx, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + 'margin-y': ( + responsive: true, + property: margin-top margin-bottom, + class: my, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + 'margin-top': ( + responsive: true, + property: margin-top, + class: mt, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + 'margin-bottom': ( + responsive: true, + property: margin-bottom, + class: mb, + values: + map-merge( + $spacers, + ( + auto: auto + ) + ) + ), + // Negative margin utilities + 'negative-margin': + ( + responsive: true, + property: margin, + class: m, + values: $negative-spacers + ), + 'negative-margin-x': ( + responsive: true, + property: margin-right margin-left, + class: mx, + values: $negative-spacers + ), + 'negative-margin-y': ( + responsive: true, + property: margin-top margin-bottom, + class: my, + values: $negative-spacers + ), + 'negative-margin-top': ( + responsive: true, + property: margin-top, + class: mt, + values: $negative-spacers + ), + 'negative-margin-bottom': ( + responsive: true, + property: margin-bottom, + class: mb, + values: $negative-spacers + ), + // Padding utilities + 'padding': + ( + responsive: true, + property: padding, + class: p, + values: $spacers + ), + 'padding-x': ( + responsive: true, + property: padding-right padding-left, + class: px, + values: $spacers + ), + 'padding-y': ( + responsive: true, + property: padding-top padding-bottom, + class: py, + values: $spacers + ), + 'padding-top': ( + responsive: true, + property: padding-top, + class: pt, + values: $spacers + ), + 'padding-bottom': ( + responsive: true, + property: padding-bottom, + class: pb, + values: $spacers + ), + 'gap': ( + responsive: true, + property: gap, + class: gap, + values: $spacers + ), + 'row-gap': ( + responsive: true, + property: row-gap, + class: row-gap, + values: $spacers + ), + 'column-gap': ( + responsive: true, + property: column-gap, + class: column-gap, + values: $spacers + ), + // scss-docs-end utils-spacing + // Text + // scss-docs-start utils-text + 'font-family': + ( + property: font-family, + class: font, + values: ( + monospace: var(--#{$variable-prefix}font-monospace) + ) + ), + 'font-size': ( + rfs: true, + property: font-size, + class: fs, + values: + map-merge( + $font-sizes, + ( + tiny: $tiny-font-size, + //(C) + big: $big-font-size, + //(C) + large: $large-font-size, + //(C) + xlarge: $xlarge-font-size, + //(C) + ) + ) + ), + 'font-style': ( + property: font-style, + class: fst, + values: italic normal + ), + 'font-weight': ( + property: font-weight, + class: fw, + values: ( + lighter: $font-weight-lighter, + light: $font-weight-light, + normal: $font-weight-normal, + medium: $font-weight-medium, + semibold: $font-weight-semibold, + bold: $font-weight-bold, + extrabold: $font-weight-extrabold, + bolder: $font-weight-bolder + ) + ), + 'line-height': ( + property: line-height, + class: lh, + values: ( + 1: 1, + inherit: inherit, + //(C) + sm: $line-height-sm, + base: $line-height-base, + lg: $line-height-lg + ) + ), + 'text-decoration': ( + property: text-decoration, + values: none underline line-through + ), + 'text-transform': ( + property: text-transform, + class: text, + values: none lowercase uppercase capitalize + ), + 'white-space': ( + property: white-space, + class: text, + values: ( + wrap: normal, + nowrap: nowrap + ) + ), + 'word-wrap': ( + property: word-wrap word-break, + class: text, + values: ( + break: break-word + ), + rtl: false + ), + // scss-docs-end utils-text + // scss-docs-start utils-color + 'color': + ( + property: color, + class: text, + local-vars: ( + 'text-opacity': 1 + ), + values: + map-merge( + $utilities-text-colors, + ( + 'white': $white, + 'body': $body-color, + 'muted': $text-muted, + 'black-50': rgba($black, 0.5), + // deprecated + 'white-50': rgba($white, 0.5), + // deprecated + 'light': $text-light, + // (c) + 'heading': $headings-color, + // (c) + 'reset': inherit + ) + ) + ), + 'text-opacity': ( + css-var: true, + class: text-opacity, + values: ( + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1 + ) + ), + // scss-docs-end utils-color + // scss-docs-start utils-links + 'link-opacity': + ( + css-var: true, + class: link-opacity, + state: hover, + values: ( + 10: 0.1, + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1 + ) + ), + 'link-offset': ( + property: text-underline-offset, + class: link-offset, + state: hover, + values: ( + 1: 0.125em, + 2: 0.25em, + 3: 0.375em + ) + ), + 'link-underline': ( + property: text-decoration-color, + class: link-underline, + local-vars: ( + 'link-underline-opacity': 1 + ), + values: + map-merge( + $utilities-links-underline, + ( + null: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-underline-opacity, 1)) + ) + ) + ), + 'link-underline-opacity': ( + css-var: true, + class: link-underline-opacity, + state: hover, + values: ( + 0: 0, + 10: 0.1, + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1 + ) + ), + // scss-docs-end utils-links + // scss-docs-start utils-bg-color + 'background-color': + ( + property: background-color, + class: bg, + local-vars: ( + 'bg-opacity': 1 + ), + values: + map-merge( + $utilities-bg-colors, + ( + 'body': $body-bg, + 'white': $white, + 'transparent': transparent, + 'lighter': rgba-to-hex($gray-50, $rgba-to-hex-bg), + //(C) + 'lightest': rgba-to-hex($gray-25, $rgba-to-hex-bg), + //(C) + ) + ) + ), + 'bg-opacity': ( + css-var: true, + class: bg-opacity, + values: ( + 10: 0.1, + 25: 0.25, + 50: 0.5, + 75: 0.75, + 100: 1 + ) + ), + 'subtle-background-color': ( + property: background-color, + class: bg, + values: $utilities-bg-subtle + ), + // scss-docs-end utils-bg-color + 'gradient': + ( + property: background-image, + class: bg, + values: ( + gradient: var(--#{$variable-prefix}gradient) + ) + ), + // scss-docs-start utils-interaction + 'user-select': + ( + property: user-select, + values: all auto none + ), + 'pointer-events': ( + property: pointer-events, + class: pe, + values: none auto + ), + // scss-docs-end utils-interaction + // scss-docs-start utils-border-radius + 'rounded': + ( + property: border-radius, + class: rounded, + values: ( + null: $border-radius, + 0: 0, + 1: $border-radius-sm, + 2: $border-radius, + 3: $border-radius-lg, + circle: 50%, + pill: $border-radius-pill + ) + ), + 'rounded-top': ( + property: border-top-left-radius border-top-right-radius, + class: rounded-top, + values: ( + null: $border-radius + ) + ), + 'rounded-bottom': ( + property: border-bottom-right-radius border-bottom-left-radius, + class: rounded-bottom, + values: ( + null: $border-radius + ) + ), + // scss-docs-end utils-border-radius + // scss-docs-start utils-visibility + 'visibility': + ( + property: visibility, + class: null, + values: ( + visible: visible, + invisible: hidden + ) + ), + // scss-docs-end utils-visibility + // scss-docs-start utils-zindex + 'z-index': + ( + property: z-index, + class: z, + values: $zindex-levels + ), + // scss-docs-end utils-zindex + // Custom Utilities + // ******************************************************************************* + // scss-docs-start utils-flex-basis + 'cursor': + ( + property: cursor, + class: cursor, + values: pointer move grab + ), + // scss-docs-end utils-flex-basis + ), + $utilities +); + +// Borders +// ******************************************************************************* + +// Bordered rows +.row-bordered { + overflow: hidden; + + > .col, + > [class^='col-'], + > [class*=' col-'], + > [class^='col '], + > [class*=' col '], + > [class$=' col'], + > [class='col'] { + position: relative; + padding-top: 1px; + + &::before { + content: ''; + position: absolute; + right: 0; + bottom: -1px; + left: 0; + display: block; + height: 0; + border-top: 1px solid $bordered-row-border-color; + } + + &::after { + content: ''; + position: absolute; + top: 0; + bottom: 0; + left: -1px; + display: block; + width: 0; + border-left: 1px solid $bordered-row-border-color; + } + } + + &.row-border-light { + > .col, + > [class^='col-'], + > [class*=' col-'], + > [class^='col '], + > [class*=' col '], + > [class$=' col'], + > [class='col'] { + &::before, + &::after { + border-color: $gray-100; + } + } + } +} + +@include rtl-only { + .row-bordered > .col::after, + .row-bordered > [class^='col-']::after, + .row-bordered > [class*=' col-']::after, + .row-bordered > [class^='col ']::after, + .row-bordered > [class*=' col ']::after, + .row-bordered > [class$=' col']::after, + .row-bordered > [class='col']::after { + left: auto; + right: -1px; + } +} + +// Color +// ******************************************************************************* + +// Bg Label variant (Not able to include this in utils due to custom style) +@each $color, $value in $theme-colors { + @if $color != primary { + @include bg-label-variant('.bg-label-#{$color}', $value); + } +} +// BG hover: label to solid variant +@each $color, $value in $theme-colors { + @if $color != primary { + @include bg-label-hover-variant('.bg-label-hover-#{$color}', $value); + } +} +// Bg- Gradient variant +@each $color, $value in $theme-colors { + @if $color != primary { + @include bg-gradient-variant('.bg-gradient-#{$color}', $value); + } +} + +// ! FIX: .bg-dark & .bg-label-dark color in dark mode +@if $dark-style { + .bg-dark { + color: color-contrast($dark); + } +} + +// Anchor hover/focus bg colors +a.bg-dark { + &:hover, + &:focus { + background-color: $gray-900 !important; + } +} + +a.bg-light { + &:hover, + &:focus { + background-color: $gray-200 !important; + } +} + +a.bg-lighter { + &:hover, + &:focus { + background-color: $gray-100 !important; + } +} + +a.bg-lightest { + &:hover, + &:focus { + background-color: $gray-50 !important; + } +} + +.text-muted[href] { + &:hover, + &:focus { + color: $text-muted-hover !important; + } +} + +.text-light { + color: $text-light !important; + + &[href] { + &:hover, + &:focus { + color: $text-muted-hover !important; + } + } +} + +.text-lighter { + color: $text-lighter !important; + + &[href] { + &:hover, + &:focus { + color: $text-muted-hover !important; + } + } +} + +.text-lightest { + color: $text-lightest !important; + + &[href] { + &:hover, + &:focus { + color: $text-muted-hover !important; + } + } +} + +.text-paper { + color: $card-bg !important; + + &[href] { + &:hover, + &:focus { + color: $primary !important; + } + } +} + +// Invertible colors + +.invert-text-white { + color: if(not $dark-style, $white, $body-bg) !important; +} +.invert-text-white[href]:hover { + &:hover, + &:focus { + color: if(not $dark-style, $white, $body-bg) !important; + } +} + +.invert-text-dark { + color: if(not $dark-style, $black, $white) !important; +} +.invert-text-dark[href]:hover { + &:hover, + &:focus { + color: if(not $dark-style, $black, $white) !important; + } +} + +.invert-bg-white { + background-color: if(not $dark-style, $white, $body-bg) !important; +} +a.invert-bg-white { + &:hover, + &:focus { + background-color: if(not $dark-style, $white, $body-bg) !important; + } +} + +.invert-bg-dark { + background-color: if(not $dark-style, $gray-900, $white) !important; +} +a.invert-bg-dark { + &:hover, + &:focus { + background-color: if(not $dark-style, $gray-900, $white) !important; + } +} + +.invert-border-dark { + border-color: if(not $dark-style, $dark, $white) !important; +} + +.invert-border-white { + border-color: if(not $dark-style, $white, $body-bg) !important; +} + +// Misc +// ******************************************************************************* + +// Layout containers +.container-p-x { + padding-right: $container-padding-x-sm !important; + padding-left: $container-padding-x-sm !important; + + @include media-breakpoint-up(lg) { + padding-right: $container-padding-x !important; + padding-left: $container-padding-x !important; + } +} + +.container-m-nx { + margin-right: -$container-padding-x-sm !important; + margin-left: -$container-padding-x-sm !important; + + @include media-breakpoint-up(lg) { + margin-right: -$container-padding-x !important; + margin-left: -$container-padding-x !important; + } +} + +.container-p-y { + &:not([class^='pt-']):not([class*=' pt-']) { + padding-top: $container-padding-y !important; + } + + &:not([class^='pb-']):not([class*=' pb-']) { + padding-bottom: $container-padding-y !important; + } +} + +.container-m-ny { + &:not([class^='mt-']):not([class*=' mt-']) { + margin-top: -$container-padding-y !important; + } + + &:not([class^='mb-']):not([class*=' mb-']) { + margin-bottom: -$container-padding-y !important; + } +} + +// Table cell +.cell-fit { + width: 0.1%; + white-space: nowrap; +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_variables-dark.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_variables-dark.scss new file mode 100644 index 0000000..079a183 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_variables-dark.scss @@ -0,0 +1,236 @@ +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. +// +// (C) Custom variables for extended components of bootstrap only + +// ! _variable-dark.scss file overrides _variable.scss file. + +// * Colors +// ******************************************************************************* + +// scss-docs-start gray-color-variables +$white: #fff !default; +$black: #2f3349 !default; + +$base: #e1def5 !default; +$gray-25: rgba($base, 0.025) !default; // (C) +$gray-50: rgba($base, 0.06) !default; // (C) +$gray-75: rgba($base, 0.08) !default; // (C) +$gray-100: rgba($base, 0.1) !default; +$gray-200: rgba($base, 0.12) !default; +$gray-300: rgba($base, 0.3) !default; +$gray-400: rgba($base, 0.4) !default; +$gray-500: rgba($base, 0.5) !default; +$gray-600: rgba($base, 0.6) !default; +$gray-700: rgba($base, 0.7) !default; +$gray-800: rgba($base, 0.8) !default; +$gray-900: rgba($base, 0.9) !default; +// scss-docs-end gray-color-variables + +// scss-docs-start gray-colors-map +$grays: ( + '25': $gray-25, + '50': $gray-50 +) !default; +// scss-docs-end gray-colors-map + +// scss-docs-start color-variables +$blue: #007bff !default; +$indigo: #6610f2 !default; +$purple: #7367f0 !default; +$pink: #e83e8c !default; +$red: #ff4c51 !default; +$orange: #fd7e14 !default; +$yellow: #ff9f43 !default; +$green: #28c76f !default; +$teal: #20c997 !default; +$cyan: #00bad1 !default; +// scss-docs-end color-variables + +// scss-docs-start theme-color-variables +$primary: $purple !default; +$secondary: #808390 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: #44475b !default; +$dark: #d7d8de !default; +$gray: $gray-500 !default; // (C) +// scss-docs-end theme-color-variables + +// scss-docs-start theme-colors-map +$theme-colors: ( + 'primary': $primary, + 'secondary': $secondary, + 'success': $success, + 'info': $info, + 'warning': $warning, + 'danger': $danger, + 'light': $light, + 'dark': $dark, + 'gray': $gray +) !default; +// scss-docs-end theme-colors-map + +$color-scheme: 'dark' !default; // (C) + +// * Body +// ******************************************************************************* + +$body-bg: #25293c !default; +$rgba-to-hex-bg: $black !default; // (C) +$body-color: rgba-to-hex($gray-700, $rgba-to-hex-bg) !default; +$rgba-to-hex-bg-inverted: rgb(160, 149, 149) !default; // (C) + +// * Components +// ******************************************************************************* + +$alert-border-scale: -84% !default; +$alert-color-scale: 0% !default; + +$border-color: rgba-to-hex($gray-200, $rgba-to-hex-bg) !default; + +// scss-docs-start box-shadow-variables +$shadow-bg: #131120 !default; // (C) +$box-shadow: 0 0.1875rem 0.75rem 0 rgba($shadow-bg, 0.2) !default; +$box-shadow-xs: 0 0.0625rem 0.375rem 0 rgba($shadow-bg, 0.16) !default; +$box-shadow-sm: 0 0.125rem 0.5rem 0 rgba($shadow-bg, 0.18) !default; +$box-shadow-lg: 0 0.25rem 1.125rem 0 rgba($shadow-bg, 0.22) !default; +$box-shadow-xl: 0 0.3125rem 1.875rem 0 rgba($shadow-bg, 0.24) !default; +// scss-docs-end box-shadow-variables + +$floating-component-border-color: rgba($white, 0.05) !default; // (C) +$floating-component-shadow: 0 0.31rem 1.25rem 0 rgba($black, 0.4) !default; // (C) + +// * Typography +// ******************************************************************************* + +$text-muted: rgba-to-hex($gray-400, $rgba-to-hex-bg) !default; +$text-muted-hover: rgba-to-hex($white, $rgba-to-hex-bg) !default; // (C) + +$text-light: rgba-to-hex($gray-500, $rgba-to-hex-bg) !default; // (C) +$text-lighter: rgba-to-hex($gray-400, $rgba-to-hex-bg) !default; // (C) +$text-lightest: rgba-to-hex($gray-300, $rgba-to-hex-bg) !default; // (C) + +$headings-color: rgba-to-hex($gray-900, $rgba-to-hex-bg) !default; + +// * Cards +// ******************************************************************************* + +$card-bg: #2f3349 !default; +$card-subtitle-color: rgba-to-hex(rgba($base, 0.55), $rgba-to-hex-bg) !default; + +// * Tables +// ******************************************************************************* + +$table-bg-scale: -84% !default; +$table-hover-bg-factor: 0.06 !default; +$table-hover-bg: rgba($base, $table-hover-bg-factor) !default; + +$table-striped-bg-factor: 0.06 !default; +$table-striped-bg: rgba-to-hex(rgba($base, $table-striped-bg-factor), $rgba-to-hex-bg) !default; + +$table-active-color: $body-color !default; +$table-active-bg-factor: 0.08 !default; +$table-active-bg: rgba($primary, $table-active-bg-factor) !default; + +$table-hover-bg-factor: 0.06 !default; +$table-hover-bg: rgba($black, $table-hover-bg-factor) !default; + +$table-border-color: $border-color !default; +$table-group-separator-color: $table-border-color !default; + +// * Accordion +// ******************************************************************************* +$accordion-bg: $card-bg !default; +$accordion-border-color: $border-color !default; + +$accordion-button-color: $headings-color !default; + +// * Tooltips +// ******************************************************************************* +$tooltip-bg: #f7f4ff !default; +$tooltip-color: $black !default; + +// Buttons +// ******************************************************************************* + +$btn-box-shadow: 0px 2px 4px rgba(15, 20, 34, 0.4) !default; + +// * Forms +// ******************************************************************************* + +$input-bg: transparent !default; + +$input-disabled-border-color: rgba-to-hex(rgba($base, 0.23), $rgba-to-hex-bg) !default; + +$input-border-hover-color: rgba-to-hex($gray-600, $rgba-to-hex-bg) !default; // (C) + +$input-border-color: rgba-to-hex(rgba($base, 0.22), $rgba-to-hex-bg) !default; + +$form-select-bg: $input-bg !default; +$form-select-indicator: url('data:image/svg+xml,') !default; + +$form-range-thumb-bg: $primary !default; + +// * Navs +// ******************************************************************************* + +$nav-tabs-link-active-bg: $card-bg !default; +$nav-tabs-link-active-border-color: $nav-tabs-link-active-bg !default; +$nav-pills-link-hover-bg: rgba-to-hex(rgba($primary, 0.16), $card-bg) !default; // (C) + +// * Navbar +// ******************************************************************************* + +$navbar-light-hover-color: #4e5155 !default; +$navbar-light-active-color: #4e5155 !default; +$navbar-light-disabled-color: rgba($black, 0.2) !default; +$navbar-dropdown-hover-bg: rgba-to-hex(rgba($base, 0.06), $rgba-to-hex-bg) !default; // (C) +$navbar-dropdown-icon-bg: rgba-to-hex(rgba($base, 0.08), $rgba-to-hex-bg) !default; // (C) + +// * Dropdowns +// ******************************************************************************* + +$dropdown-bg: $card-bg !default; +$dropdown-divider-bg: $border-color !default; + +$dropdown-link-hover-bg: $gray-50 !default; + +// * Pagination +// ******************************************************************************* + +$pagination-bg: $gray-75 !default; +$pagination-border-color: rgba-to-hex(rgba($base, 0.22), $rgba-to-hex-bg) !default; +$pagination-disabled-border-color: rgba-to-hex(rgba($base, 0.22), $rgba-to-hex-bg) !default; + +// * Modal +// ******************************************************************************* +$modal-content-bg: $card-bg !default; +$modal-backdrop-bg: #171925 !default; +$modal-backdrop-opacity: 0.6 !default; + +// * Progress bars +// ******************************************************************************* +$progress-bg: $gray-75 !default; + +// * List group +// ******************************************************************************* + +$list-group-border-color: $border-color !default; +$list-group-item-bg-hover-scale: 6% !default; // (c) +$list-group-active-bg: rgba-to-hex(rgba($primary, 0.16), $rgba-to-hex-bg) !default; +$list-group-hover-bg: rgba-to-hex($gray-50, $rgba-to-hex-bg) !default; + +// * Close +// ******************************************************************************* +$btn-close-color: $white !default; + +$kbd-color: $dark !default; + +// * Config +$rtl-support: false !default; +$dark-style: true !default; diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_variables.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_variables.scss new file mode 100644 index 0000000..7dc629d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/_variables.scss @@ -0,0 +1,1090 @@ +// Variables +// +// Variables should follow the `$component-state-property-size` formula for +// consistent naming. Ex: $nav-link-disabled-color and $modal-content-box-shadow-xs. +// +// (C) Custom variables for extended components of bootstrap only + +// * Color system +// ******************************************************************************* + +// scss-docs-start gray-color-variables +$white: #fff !default; +$black: #2f2b3d !default; +$gray-25: rgba($black, 0.015) !default; // (C) +$gray-50: rgba($black, 0.06) !default; // (C) +$gray-75: rgba($black, 0.08) !default; // (C) +$gray-100: rgba($black, 0.1) !default; +$gray-200: rgba($black, 0.12) !default; +$gray-300: rgba($black, 0.3) !default; +$gray-400: rgba($black, 0.4) !default; +$gray-500: rgba($black, 0.5) !default; +$gray-600: rgba($black, 0.6) !default; +$gray-700: rgba($black, 0.7) !default; +$gray-800: rgba($black, 0.8) !default; +$gray-900: rgba($black, 0.9) !default; +// scss-docs-end gray-color-variables + +// scss-docs-start gray-colors-map +$grays: ( + '25': $gray-25, + '50': $gray-50 +) !default; +// scss-docs-end gray-colors-map + +// scss-docs-start color-variables +$blue: #007bff !default; +$indigo: #6610f2 !default; +$purple: #7367f0 !default; +$pink: #e83e8c !default; +$red: #ff4c51 !default; +$orange: #fd7e14 !default; +$yellow: #ff9f43 !default; +$green: #28c76f !default; +$teal: #20c997 !default; +$cyan: #00bad1 !default; +// scss-docs-end color-variables + +// scss-docs-start theme-color-variables +$primary: $purple !default; +$secondary: #808390 !default; +$success: $green !default; +$info: $cyan !default; +$warning: $yellow !default; +$danger: $red !default; +$light: #dfdfe3 !default; +$dark: #4b4b4b !default; +$gray: $gray-500 !default; // (C) +// scss-docs-end theme-color-variables + +// scss-docs-start theme-colors-map +$theme-colors: ( + 'primary': $primary, + 'secondary': $secondary, + 'success': $success, + 'info': $info, + 'warning': $warning, + 'danger': $danger, + 'light': $light, + 'dark': $dark, + 'gray': $gray +) !default; +// scss-docs-end theme-colors-map + +$color-scheme: 'light' !default; // (C) +// The contrast ratio to reach against white, to determine if color changes from "light" to "dark". Acceptable values for WCAG 2.0 are 3, 4.5 and 7. +// See https://www.w3.org/TR/WCAG20/#visual-audio-contrast-contrast +$min-contrast-ratio: 1.7 !default; + +// Characters which are escaped by the escape-svg function +$escaped-characters: (('<', '%3c'), ('>', '%3e'), ('#', '%23'), ('(', '%28'), (')', '%29')) !default; + +// * Options +// ******************************************************************************* + +$enable-negative-margins: true !default; +$enable-validation-icons: false !default; +$enable-dark-mode: false !default; + +// Prefix for :root CSS variables +$variable-prefix: bs- !default; +$prefix: $variable-prefix !default; + +// * Spacing +// ******************************************************************************* + +$spacer: 1rem !default; +$spacers: ( + 0: 0, + 50: $spacer * 0.125, + 1: $spacer * 0.25, + 1_5: $spacer * 0.375, + 2: $spacer * 0.5, + 3: $spacer * 0.75, + 4: $spacer, + 5: $spacer * 1.25, + 6: $spacer * 1.5, + 7: $spacer * 1.75, + 8: $spacer * 2, + 9: $spacer * 2.25, + 10: $spacer * 2.5, + 11: $spacer * 2.75, + 12: $spacer * 3 +) !default; + +$sizes-px: ( + px-14: 14px, + px-18: 18px, + px-20: 20px, + px-30: 30px, + px-40: 40px, + px-50: 50px, + px-52: 52px, + px-75: 75px, + px-100: 100px, + px-120: 120px, + px-150: 150px, + px-200: 200px, + px-250: 250px, + px-300: 300px, + px-350: 350px, + px-400: 400px, + px-500: 500px, + px-600: 600px, + px-700: 700px, + px-800: 800px, + auto: auto +) !default; // (C) + +// * Body +// ******************************************************************************* + +$body-bg: #f8f7fa !default; +$rgba-to-hex-bg: #fff !default; // (C) +$body-color: rgba-to-hex($gray-700, $rgba-to-hex-bg) !default; +$rgba-to-hex-bg-inverted: #000 !default; // (C) + +// * Links +// ******************************************************************************* + +$link-color: $primary !default; +$link-decoration: none !default; +$link-shade-percentage: 10% !default; +$link-hover-color: shift-color($link-color, $link-shade-percentage) !default; +$link-hover-decoration: null !default; + +// * Grid +// ******************************************************************************* + +// Grid containers + +// scss-docs-start container-max-widths +$container-max-widths: ( + sm: 540px, + md: 720px, + lg: 960px, + xl: 1140px, + xxl: 1440px // Custom xxl size +) !default; +// scss-docs-end container-max-widths + +$grid-gutter-width: 1.5rem !default; +$container-padding-x: 1.5rem !default; // (C) +$container-padding-x-sm: 1rem !default; // (C) +$container-padding-y: 1.5rem !default; // (C) + +// * Components +// ******************************************************************************* + +// scss-docs-start border-variables +$border-width: 1px !default; +$border-color: rgba-to-hex($gray-200, $rgba-to-hex-bg) !default; +// scss-docs-end border-variables + +// scss-docs-start border-radius-variables +$border-radius: 0.375rem !default; +$border-radius-xl: 0.625rem !default; // (C) +$border-radius-lg: 0.5rem !default; +$border-radius-sm: 0.25rem !default; +$border-radius-xs: 0.125rem !default; // (C) +$border-radius-pill: 50rem !default; +// scss-docs-end border-radius-variables + +// scss-docs-start box-shadow-variables +$box-shadow: 0 0.1875rem 0.75rem 0 rgba($black, 0.14) !default; +$box-shadow-xs: 0 0.0625rem 0.375rem 0 rgba($black, 0.1) !default; +$box-shadow-sm: 0 0.125rem 0.5rem 0 rgba($black, 0.12) !default; +$box-shadow-lg: 0 0.25rem 1.125rem 0 rgba($black, 0.16) !default; +$box-shadow-xl: 0 0.3125rem 1.875rem 0 rgba($black, 0.18) !default; +// scss-docs-end box-shadow-variables + +$component-active-color: $white !default; +$component-active-bg: $primary !default; + +$component-hover-color: $primary !default; // (C) +$component-hover-bg: rgba($primary, 0.16) !default; // (C) + +$component-line-height: 1.54 !default; // (C) +$component-focus-shadow-width: 2px !default; // (C) + +$floating-component-border-color: rgba($black, 0.05) !default; // (C) +$floating-component-shadow: 0 0.31rem 1.25rem 0 $gray-400 !default; // (C) used for modal and range + +$hr-color: $border-color !default; +$hr-opacity: 1 !default; +$bordered-row-border-color: $hr-color !default; // (C) + +$focus-ring-width: 0.15rem !default; +$focus-ring-opacity: 0.75 !default; +$focus-ring-color: rgba($gray-700, $focus-ring-opacity) !default; + +// scss-docs-start caret-variables +$caret-width: 0.55em !default; +$caret-vertical-align: middle !default; +$caret-spacing: 0.5em !default; +// scss-docs-end caret-variables + +// * Typography +// ******************************************************************************* + +// scss-docs-start font-variables +$font-family-sans-serif: + 'Public Sans', + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + 'Oxygen', + 'Ubuntu', + 'Cantarell', + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif !default; +$font-family-serif: Georgia, 'Times New Roman', serif !default; // (C) +$font-family-monospace: 'SFMono-Regular', Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace !default; +// stylelint-enable value-keyword-case +$font-family-base: var(--#{$variable-prefix}font-sans-serif) !default; +$font-family-code: var(--#{$variable-prefix}font-monospace) !default; + +// $font-size-root effects the value of `rem`, which is used for as well font sizes, paddings and margins +// $font-size-base effects the font size of the body text +$font-size-root: 16px !default; +$font-size-base: 0.9375rem !default; // Assumes the browser default, typically `16px` +$font-size-xl: 1.1875rem !default; // (C) +$font-size-lg: 1rem !default; +$font-size-sm: 0.8125rem !default; +$font-size-xs: 0.6875rem !default; // (C) + +$font-weight-lighter: lighter !default; +$font-weight-light: 300 !default; +$font-weight-normal: 400 !default; +$font-weight-medium: 500 !default; +$font-weight-semibold: 600 !default; +$font-weight-bold: 700 !default; +$font-weight-extrabold: 800 !default; +$font-weight-bolder: bolder !default; + +$line-height-base: 1.375 !default; +$line-height-xl: 1.75 !default; // (C) +$line-height-lg: 1.625 !default; +$line-height-sm: 1.125 !default; +$line-height-xs: 1 !default; // (C) + +$h1-font-size: 2.875rem !default; +$h2-font-size: 2.375rem !default; +$h3-font-size: 1.75rem !default; +$h4-font-size: 1.5rem !default; +$h5-font-size: 1.125rem !default; +$h6-font-size: $font-size-base !default; + +$h1-line-height: 4.25rem !default; +$h2-line-height: 3.5rem !default; +$h3-line-height: 2.625rem !default; +$h4-line-height: 2.375rem !default; +$h5-line-height: 1.75rem !default; +$h6-line-height: 1.375rem !default; +// scss-docs-end font-variables + +// scss-docs-start headings-variables +$headings-margin-bottom: $spacer !default; +$headings-font-weight: $font-weight-medium !default; +$headings-line-height: 1.37 !default; +$headings-color: rgba-to-hex($gray-900, $rgba-to-hex-bg) !default; +// scss-docs-end headings-variables + +// scss-docs-start display-headings +$display-font-sizes: ( + 1: 4.75rem, + 2: 4.375rem, + 3: 3.875rem, + 4: 3.375rem, + 5: 3rem, + 6: 2.625rem +) !default; + +$display-font-weight: 500 !default; + +// scss-docs-end display-headings + +// scss-docs-start type-variables + +$lead-font-size: $spacer * 1.125 !default; + +$tiny-font-size: 70% !default; // (C) +$small-font-size: 0.8125rem !default; +$big-font-size: 112% !default; // (C) +$large-font-size: 150% !default; // (C) +$xlarge-font-size: 170% !default; // (C) + +$text-muted: rgba-to-hex($gray-400, $rgba-to-hex-bg) !default; +$text-muted-hover: rgba-to-hex($gray-600, $rgba-to-hex-bg) !default; // (C) + +$blockquote-font-size: $font-size-base !default; + +$text-light: rgba-to-hex($gray-400, $rgba-to-hex-bg) !default; // (C) +$text-lighter: rgba-to-hex($gray-300, $rgba-to-hex-bg) !default; // (C) +$text-lightest: rgba-to-hex($gray-200, $rgba-to-hex-bg) !default; // (C) + +$dt-font-weight: $font-weight-medium !default; +// scss-docs-end type-variables + +// * Z-index master list +// ******************************************************************************* + +$zindex-menu-fixed: 1080 !default; +$zindex-modal: 1090 !default; +$zindex-modal-backdrop: $zindex-modal - 1 !default; +// $zindex-modal-top: 1090 !default; // (C) +$zindex-offcanvas: 1090 !default; +$zindex-offcanvas-backdrop: $zindex-offcanvas - 1 !default; +$zindex-layout-mobile: 1100 !default; // (C) +$zindex-popover: 1091 !default; +$zindex-toast: 1095 !default; // (C) +$zindex-tooltip: 1099 !default; +$zindex-notification: 999999 !default; // (C) + +// scss-docs-start zindex-levels-map +$zindex-levels: ( + n1: -1, + 0: 0, + 1: 1, + 2: 2, + 3: 3, + 4: 4, + 5: 5 +) !default; +// scss-docs-end zindex-levels-map + +// * Tables +// ******************************************************************************* + +// scss-docs-start table-variables +$table-head-padding-y: 1.161rem !default; // (C) +$table-head-padding-y-sm: 1.114rem !default; // (C) +$table-cell-padding-y: 0.782rem !default; +$table-cell-padding-x: 1.25rem !default; +$table-cell-padding-y-sm: 0.594rem !default; +$table-cell-padding-x-sm: $table-cell-padding-x !default; + +$table-cell-vertical-align: middle !default; + +$table-th-color: $headings-color !default; // (C) +$table-color: var(--#{$prefix}body-color) !default; +$table-bg: transparent !default; + +$table-th-font-weight: $font-weight-medium !default; + +$table-striped-bg-factor: 0.06 !default; +$table-striped-bg: rgba-to-hex(rgba($black, $table-striped-bg-factor), $rgba-to-hex-bg) !default; + +$table-active-color: $body-color !default; +$table-active-bg-factor: 0.08 !default; +$table-active-bg: rgba($primary, $table-active-bg-factor) !default; + +$table-hover-bg-factor: 0.06 !default; +$table-hover-bg: rgba($black, $table-hover-bg-factor) !default; + +$table-border-factor: 0.12 !default; +$table-border-color: rgba-to-hex(rgba($black, $table-border-factor), $rgba-to-hex-bg) !default; + +$table-striped-order: even !default; + +$table-group-separator-color: $table-border-color !default; + +$table-caption-color: $text-muted !default; + +$table-bg-scale: -84% !default; + +// scss-docs-start table-loop +$table-variants: ( + 'primary': shift-color($primary, $table-bg-scale), + 'secondary': shift-color($secondary, $table-bg-scale), + 'success': shift-color($success, $table-bg-scale), + 'info': shift-color($info, $table-bg-scale), + 'warning': shift-color($warning, $table-bg-scale), + 'danger': shift-color($danger, $table-bg-scale), + 'light': rgba-to-hex($gray-100, $rgba-to-hex-bg), + 'dark': $dark +) !default; +// scss-docs-end table-loop +// * Buttons + Forms +// ******************************************************************************* + +$input-btn-padding-y: 0.6rem !default; +$input-btn-padding-x: 1.25rem !default; +$input-btn-font-size: $font-size-base !default; +$input-btn-line-height: $line-height-base !default; + +$input-btn-focus-width: 0.05rem !default; +$input-btn-focus-color-opacity: 0.1 !default; +$input-btn-focus-color: rgba($component-active-bg, $input-btn-focus-color-opacity) !default; +$input-btn-focus-blur: 0.25rem !default; +$input-btn-focus-box-shadow: 0 0 $input-btn-focus-blur $input-btn-focus-width $input-btn-focus-color !default; + +$input-btn-padding-y-xs: 0.175rem !default; // (C) +$input-btn-padding-x-xs: 0.75rem !default; // (C) +$input-btn-font-size-xs: $font-size-xs !default; // (C) +$input-btn-line-height-xs: $line-height-xs !default; // (C) + +$input-btn-padding-y-sm: 0.41rem !default; +$input-btn-padding-x-sm: 0.875rem !default; +$input-btn-font-size-sm: 0.8125rem !default; +$input-btn-line-height-sm: $line-height-sm !default; + +$input-btn-padding-y-lg: 0.84rem !default; +$input-btn-padding-x-lg: 1.625rem !default; +$input-btn-font-size-lg: 1.0625rem !default; +$input-btn-line-height-lg: $line-height-lg !default; + +$input-btn-padding-y-xl: 0.875rem !default; // (C) +$input-btn-padding-x-xl: 1.75rem !default; // (C) +$input-btn-font-size-xl: $font-size-xl !default; // (C) +$input-btn-line-height-xl: $line-height-lg !default; // (C) + +// * Buttons +// ******************************************************************************* + +$btn-padding-y: 0.4812rem !default; +$btn-padding-x: 1.25rem !default; + +$btn-padding-y-sm: 0.317rem !default; +$btn-padding-x-sm: 0.875rem !default; + +$btn-padding-y-lg: 0.708rem !default; +$btn-padding-x-lg: 1.625rem !default; + +$btn-padding-y-xs: 0.153rem !default; // (C) +$btn-padding-x-xs: $input-btn-padding-x-xs !default; // (C) +$btn-font-size-xs: $font-size-xs !default; // (C) + +$btn-padding-y-xl: 0.809rem !default; // (C) +$btn-padding-x-xl: 1.75rem !default; // (C) +$btn-font-size-xl: $font-size-xl !default; // (C) + +$btn-line-height-xs: $line-height-base !default; // (C) +$btn-line-height-sm: $line-height-base !default; // (C) +$btn-line-height-lg: $line-height-base !default; // (C) +$btn-line-height-xl: $line-height-base !default; // (C) + +$btn-font-weight: 500 !default; +$btn-box-shadow: none !default; +$btn-focus-box-shadow: none !default; +$btn-disabled-opacity: 0.45 !default; +$btn-active-box-shadow: none !default; + +$btn-border-radius-xs: $border-radius-xs !default; // (C) +$btn-border-radius-xl: $border-radius-xl !default; // (C) + +$btn-transition: all 0.2s ease-in-out !default; + +$btn-label-bg-shade-amount: 84% !default; // (C) +$btn-label-bg-tint-amount: 84% !default; // (C) +$btn-label-hover-shade-amount: 76% !default; // (C) +$btn-label-hover-tint-amount: 76% !default; // (C) +$btn-label-disabled-bg-shade-amount: 84% !default; // (C) +$btn-label-disabled-bg-tint-amount: 85% !default; // (C) +$btn-label-border-tint-amount: 68% !default; // (C) +$btn-label-border-shade-amount: 68% !default; // (C) + +$btn-hover-bg-shade-amount: 10% !default; +$btn-hover-bg-tint-amount: 25% !default; +$btn-hover-border-shade-amount: 10% !default; +$btn-hover-border-tint-amount: 10% !default; +$btn-active-bg-shade-amount: 10% !default; +$btn-active-bg-tint-amount: 20% !default; +$btn-active-border-shade-amount: 10% !default; +$btn-active-border-tint-amount: 10% !default; + +// Outline buttons +$btn-outline-hover-bg-shade-amount: 8% !default; // (C) +$btn-outline-hover-bg-tint-amount: 92% !default; // (C) +$btn-outline-active-bg-shade-amount: 8% !default; // (C) +$btn-outline-active-bg-tint-amount: 92% !default; // (C) + +// text buttons +$btn-text-hover-shade-amount: 8% !default; // (C) +$btn-text-hover-tint-amount: 92% !default; // (C) +$btn-text-focus-shade-amount: 8% !default; // (C) +$btn-text-focus-tint-amount: 92% !default; // (C) +$btn-text-active-shade-amount: 8% !default; // (C) +$btn-text-active-tint-amount: 92% !default; // (C) + +// * Forms +// ******************************************************************************* + +// scss-docs-start form-text-variables +$form-text-font-size: $input-btn-font-size-sm !default; +$form-text-color: $body-color !default; +// scss-docs-end form-text-variables + +// scss-docs-start form-label-variables +$form-label-margin-bottom: 0.25rem !default; +$form-label-font-size: $input-btn-font-size-sm !default; +$form-label-color: $headings-color !default; +$form-label-letter-spacing: inherit !default; //(C) +$form-label-text-transform: inherit !default; //(C) +// scss-docs-end form-label-variables + +// scss-docs-start form-input-variables +$input-padding-y: 0.426rem !default; +$input-padding-x: 0.9375rem !default; +$input-line-height: $line-height-lg !default; +$input-font-size: $input-btn-font-size !default; + +$input-padding-y-sm: 0.215rem !default; +$input-padding-x-sm: 0.75rem !default; + +$input-padding-y-lg: 0.575rem !default; +$input-padding-x-lg: $spacer !default; +$input-font-size-lg: 1.0625rem !default; + +$input-bg: transparent !default; +$input-disabled-color: $text-muted !default; +$input-disabled-bg: rgba-to-hex($gray-50, $rgba-to-hex-bg) !default; +$input-disabled-border-color: rgba-to-hex(rgba($black, 0.24), $rgba-to-hex-bg) !default; + +$input-color: $headings-color !default; +$input-border-color: rgba-to-hex(rgba($black, 0.22), $rgba-to-hex-bg) !default; +$input-border-hover-color: rgba-to-hex($gray-600, $rgba-to-hex-bg) !default; // (C) + +$input-focus-border-width: 2px !default; //(C) +$input-focus-border-color: $component-active-bg !default; +$input-focus-box-shadow: 0 2px 6px 0 rgba($component-active-bg, 0.3) !default; + +$input-placeholder-color: $text-muted !default; +$input-plaintext-color: $headings-color !default; + +$input-height-inner: px-to-rem( + floor(rem-to-px(($input-btn-font-size * $input-btn-line-height) + ($input-btn-padding-y * 2))) +) !default; +$input-height-inner-sm: px-to-rem( + floor(rem-to-px(($input-btn-font-size-sm * $input-btn-line-height-sm) + ($input-btn-padding-y-sm * 2))) +) !default; // (C) +$input-height-inner-lg: px-to-rem( + floor(rem-to-px(($font-size-lg * $line-height-lg) + ($input-btn-padding-y-lg * 2))) +) !default; // (C) +// scss-docs-end form-input-variables + +// scss-docs-start form-check-variables +$form-check-input-width: 1.2em !default; +$form-datatables-check-input-size: 18px !default; // (C) For datatables with checkbox- update according to $form-check-input-width +$form-check-min-height: $font-size-base * $line-height-base * 1.067 !default; +$form-check-padding-start: $form-check-input-width + 0.6em !default; +$form-check-margin-bottom: 0.5rem !default; +$form-check-input-border: $input-focus-border-width solid $text-muted !default; +$form-check-label-color: $headings-color !default; +$form-check-input-focus-box-shadow: none !default; + +$form-check-label-cursor: pointer !default; + +$form-check-input-border-radius: 0.267em !default; +$form-check-input-focus-border: $body-color !default; +$form-check-input-checked-color: $component-active-color !default; +$form-check-input-checked-bg-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='17' viewBox='0 0 15 14' fill='none'%3E%3Cpath d='M3.41667 7L6.33333 9.91667L12.1667 4.08333' stroke='#{$form-check-input-checked-color}' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !default; + +$form-check-radio-checked-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='1.6' fill='#{$form-check-input-checked-color}' /%3e%3c/svg%3e") !default; + +$form-check-input-indeterminate-color: $component-active-color !default; +$form-check-input-indeterminate-bg-image: url("data:image/svg+xml,") !default; + +$form-check-input-disabled-opacity: 0.45 !default; +$form-check-input-disabled-bg: rgba-to-hex($gray-300, $rgba-to-hex-bg) !default; // (C) +$form-check-label-disabled-color: $text-muted !default; // (C) + +// scss-docs-end form-check-variables + +// scss-docs-start form-switch-variables +$form-switch-color: $component-active-color !default; +$form-switch-width: 2em !default; +$form-switch-padding-start: $form-switch-width + 0.667em !default; +$form-switch-focus-color: $component-active-color; +$form-switch-bg-image: url("data:image/svg+xml,%3csvg width='22' height='22' viewBox='0 0 22 22' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cg filter='url(%23a)'%3e%3ccircle cx='12' cy='11' r='8.5' fill='#{$form-switch-color}'/%3e%3c/g%3e%3cdefs%3e%3cfilter id='a' x='0' y='0' width='22' height='22' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3e%3cfeFlood flood-opacity='0' result='BackgroundImageFix'/%3e%3cfeColorMatrix in='SourceAlpha' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3e%3cfeOffset dy='2'/%3e%3cfeGaussianBlur stdDeviation='2'/%3e%3cfeColorMatrix values='0 0 0 0 0.180392 0 0 0 0 0.14902 0 0 0 0 0.239216 0 0 0 0.16 0'/%3e%3cfeBlend in2='BackgroundImageFix' result='effect1_dropShadow_6488_3264'/%3e%3cfeBlend in='SourceGraphic' in2='effect1_dropShadow_6488_3264' result='shape'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e") !default; + +$form-switch-focus-bg-image: url("data:image/svg+xml,%3csvg width='22' height='22' viewBox='0 0 22 22' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cg filter='url(%23a)'%3e%3ccircle cx='12' cy='11' r='8.5' fill='#{$form-switch-color}'/%3e%3c/g%3e%3cdefs%3e%3cfilter id='a' x='0' y='0' width='22' height='22' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3e%3cfeFlood flood-opacity='0' result='BackgroundImageFix'/%3e%3cfeColorMatrix in='SourceAlpha' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3e%3cfeOffset dy='2'/%3e%3cfeGaussianBlur stdDeviation='2'/%3e%3cfeColorMatrix values='0 0 0 0 0.180392 0 0 0 0 0.14902 0 0 0 0 0.239216 0 0 0 0.16 0'/%3e%3cfeBlend in2='BackgroundImageFix' result='effect1_dropShadow_6488_3264'/%3e%3cfeBlend in='SourceGraphic' in2='effect1_dropShadow_6488_3264' result='shape'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e") !default; +$form-switch-checked-bg-image: url("data:image/svg+xml,%3csvg width='22' height='22' viewBox='0 0 22 22' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cg filter='url(%23a)'%3e%3ccircle cx='12' cy='11' r='8.5' fill='#{$form-switch-color}'/%3e%3c/g%3e%3cdefs%3e%3cfilter id='a' x='0' y='0' width='22' height='22' filterUnits='userSpaceOnUse' color-interpolation-filters='sRGB'%3e%3cfeFlood flood-opacity='0' result='BackgroundImageFix'/%3e%3cfeColorMatrix in='SourceAlpha' values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0' result='hardAlpha'/%3e%3cfeOffset dy='2'/%3e%3cfeGaussianBlur stdDeviation='2'/%3e%3cfeColorMatrix values='0 0 0 0 0.180392 0 0 0 0 0.14902 0 0 0 0 0.239216 0 0 0 0.16 0'/%3e%3cfeBlend in2='BackgroundImageFix' result='effect1_dropShadow_6488_3264'/%3e%3cfeBlend in='SourceGraphic' in2='effect1_dropShadow_6488_3264' result='shape'/%3e%3c/filter%3e%3c/defs%3e%3c/svg%3e") !default; +$form-switch-checked-bg-position: 95% center !default; +$form-switch-checked-bg-position-rtl: 4% center !default; // (C) +$form-switch-bg: rgba-to-hex($gray-100, $rgba-to-hex-bg) !default; // (C) +$form-switch-box-shadow: 0 0 0.25rem 0 rgba(0, 0, 0, 0.16) inset !default; // (C) +// scss-docs-end form-switch-variables + +//input-group-variables +$input-group-addon-color: $headings-color !default; +$input-group-addon-bg: $input-bg !default; +// scss-docs-end input-group-variables + +// scss-docs-start form-select-variables +$form-select-padding-y: $input-padding-y !default; +$form-select-padding-x: $input-padding-x !default; +$form-select-indicator-padding: $form-select-padding-x * 2.8 !default; +$form-select-disabled-color: $text-muted !default; +$form-select-disabled-bg: $input-disabled-bg !default; +$form-select-bg-size: 22px 24px !default; +$form-select-indicator: url('data:image/svg+xml,') !default; +$form-select-disabled-indicator: url('data:image/svg+xml,') !default; // (C) +$form-select-indicator-rtl: escape-svg($form-select-indicator) !default; // (C) + +$form-select-focus-box-shadow: $input-focus-box-shadow !default; + +$form-select-padding-y-sm: $input-padding-y-sm !default; +$form-select-padding-x-sm: $input-padding-x-sm !default; + +$form-select-padding-y-lg: $input-padding-y-lg !default; +$form-select-padding-x-lg: $input-padding-x-lg !default; +// scss-docs-end form-select-variables + +// scss-docs-start form-range-variables +$form-range-track-height: 0.375rem !default; +$form-range-track-box-shadow: none !default; +$form-range-track-disabled-bg: rgba-to-hex($gray-400, $rgba-to-hex-bg) !default; // (C) +$form-range-thumb-width: 1.375rem !default; +$form-range-thumb-height: $form-range-thumb-width !default; +$form-range-thumb-box-shadow: $box-shadow-sm !default; +$form-range-thumb-bg: $primary !default; +$form-range-thumb-active-bg: $primary !default; +$form-range-thumb-disabled-bg: rgba-to-hex($gray-400, $rgba-to-hex-bg) !default; +// scss-docs-end form-range-variables + +// scss-docs-start form-file-variables +$form-file-button-bg: $input-group-addon-bg !default; +$form-file-button-hover-bg: shade-color($form-file-button-bg, 5%) !default; +// scss-docs-end form-file-variables + +// scss-docs-start form-floating-variables +$form-floating-label-opacity: 0.75 !default; +$form-floating-transition: + opacity 0.2s ease-in-out, + transform 0.2s ease-in-out !default; +$form-floating-label-transform-rtl: scale(0.85) translateY(-0.5rem) translateX(-0.15rem) !default; // (C) +// scss-docs-end form-floating-variables + +// Form validation + +// scss-docs-start form-feedback-variables +$form-feedback-valid-color: $success !default; +$form-feedback-invalid-color: $danger !default; + +$form-select-feedback-icon-padding: $form-select-indicator-padding + $input-height-inner !default; // (C) +$form-select-feedback-icon-padding-sm: $form-select-indicator-padding + $input-height-inner-sm !default; // (C) +$form-select-feedback-icon-padding-lg: $form-select-indicator-padding + $input-height-inner-lg !default; // (C) +// scss-docs-end form-feedback-variables + +// * Navs +// ******************************************************************************* + +$nav-spacer: 0.25rem !default; // (C) + +$nav-link-padding-y: 0.5435rem !default; +$nav-link-padding-x: 1.375rem !default; +$nav-link-font-size: $font-size-base !default; +$nav-link-font-weight: $font-weight-medium !default; +$nav-link-color: $headings-color !default; +$nav-link-disabled-color: $text-lighter !default; +$nav-link-line-height: $line-height-base !default; // (C) + +$nav-link-padding-y-lg: 0.6rem !default; // (C) +$nav-link-padding-x-lg: 1.5rem !default; // (C) +$nav-link-line-height-lg: $line-height-lg !default; // (C) + +$nav-link-padding-y-sm: 0.376rem !default; // (C) +$nav-link-padding-x-sm: 1rem !default; // (C) +$nav-link-line-height-sm: $line-height-sm !default; // (C) + +$nav-tabs-border-color: $border-color !default; +$nav-tabs-border-width: 0 !default; +// $nav-tabs-link-hover-border-color: null !default; +$nav-tabs-link-active-color: $component-active-bg !default; +$nav-tabs-link-active-bg: $white !default; +$nav-tabs-link-active-border-color: $component-active-bg !default; + +$nav-pills-padding-y: $nav-link-padding-y !default; // (C) +$nav-pills-padding-x: $nav-link-padding-x !default; // (C) + +$nav-pills-link-hover-bg: rgba-to-hex(rgba($primary, 0.16), $rgba-to-hex-bg) !default; // (C) + +$nav-pills-link-active-color: $white !default; +$nav-pills-link-active-bg: transparent !default; + +// * Navbar +// ******************************************************************************* + +$navbar-toggler-padding-y: 0.5rem !default; +$navbar-toggler-padding-x: 0.7rem !default; +$navbar-toggler-font-size: 0.625rem !default; + +$navbar-dark-color: rgba($white, 0.8) !default; +$navbar-dark-hover-color: $white !default; +$navbar-dark-active-color: $white !default; +$navbar-dark-disabled-color: rgba($white, 0.4) !default; +$navbar-dark-toggler-icon-bg: url("data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='#{$navbar-dark-color}' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='#{$navbar-dark-color}' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E") !default; + +$navbar-light-color: $gray-500 !default; +$navbar-light-hover-color: $body-color !default; +$navbar-light-active-color: $body-color !default; +$navbar-light-disabled-color: $gray-300 !default; +$navbar-light-toggler-icon-bg: url("data:image/svg+xml,%3Csvg width='14px' height='11px' viewBox='0 0 14 11' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'%3E%3Cdefs%3E%3Cpath d='M0,0 L14,0 L14,1.75 L0,1.75 L0,0 Z M0,4.375 L14,4.375 L14,6.125 L0,6.125 L0,4.375 Z M0,8.75 L14,8.75 L14,10.5 L0,10.5 L0,8.75 Z' id='path-1'%3E%3C/path%3E%3C/defs%3E%3Cg id='💎-UI-Elements' stroke='none' stroke-width='1' fill='none' fill-rule='evenodd'%3E%3Cg id='12)-Navbar' transform='translate(-1174.000000, -1290.000000)'%3E%3Cg id='Group' transform='translate(1174.000000, 1288.000000)'%3E%3Cg id='Icon-Color' transform='translate(0.000000, 2.000000)'%3E%3Cuse fill='#{$navbar-light-color}' xlink:href='%23path-1'%3E%3C/use%3E%3Cuse fill-opacity='0.1' fill='#{$navbar-light-color}' xlink:href='%23path-1'%3E%3C/use%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/g%3E%3C/svg%3E") !default; + +$navbar-light-toggler-border-color: rgba($black, 0.06) !default; +$navbar-dropdown-hover-bg: rgba-to-hex(rgba($black, 0.06), $rgba-to-hex-bg) !default; // (C) +$navbar-dropdown-icon-bg: rgba-to-hex(rgba($black, 0.08), $rgba-to-hex-bg) !default; // (C) + +// * Dropdowns +// ******************************************************************************* + +$dropdown-padding-x: 0.5rem !default; +$dropdown-bg: $white !default; +$dropdown-border-color: $border-color !default; +$dropdown-border-width: 0 !default; +$dropdown-box-shadow: $box-shadow-lg !default; + +$dropdown-inner-border-radius: 0px !default; + +$dropdown-link-color: $headings-color !default; +$dropdown-link-hover-bg: rgba-to-hex($gray-50, $rgba-to-hex-bg) !default; +$dropdown-link-line-height: $line-height-base !default; // (C) + +$dropdown-link-active-color: $primary !default; +$dropdown-link-active-bg: rgba-to-hex(rgba($primary, 0.16), $rgba-to-hex-bg) !default; + +$dropdown-item-padding-y: 0.543rem !default; +$dropdown-item-padding-x: 1rem !default; + +$dropdown-link-disabled-color: $text-muted !default; +$dropdown-header-color: $text-muted !default; + +// * Pagination +// ******************************************************************************* + +$pagination-padding-y: 0.4809rem !default; +$pagination-padding-x: 0.5rem !default; +$pagination-padding-y-sm: 0.3165rem !default; +$pagination-padding-x-sm: 0.269rem !default; +$pagination-padding-y-lg: 0.681rem !default; +$pagination-padding-x-lg: 0.9826rem !default; + +$pagination-font-size: $font-size-base !default; + +$pagination-line-height: $line-height-base !default; // (c) + +$pagination-color: $headings-color !default; +$pagination-bg: $gray-75 !default; +$pagination-border-radius: 50% !default; +$pagination-border-width: $border-width !default; +$pagination-margin-start: 0.375rem !default; +$pagination-border-color: rgba-to-hex(rgba($black, 0.22), $rgba-to-hex-bg) !default; + +$pagination-focus-color: $pagination-color !default; +$pagination-focus-bg: rgba-to-hex($gray-50, $rgba-to-hex-bg) !default; +$pagination-focus-box-shadow: none !default; + +$pagination-hover-color: $pagination-color !default; +$pagination-hover-bg: $pagination-focus-bg !default; +$pagination-hover-border-color: $pagination-border-color !default; +$pagination-hover-bg-scale: 84% !default; // (c) + +$pagination-active-color: $component-active-color !default; +$pagination-active-bg: $primary !default; +$pagination-active-border-color: $pagination-active-bg !default; + +$pagination-disabled-color: $text-muted !default; +$pagination-disabled-bg: $pagination-bg !default; +$pagination-disabled-border-color: $pagination-border-color !default; +$pagination-disabled-opacity: $btn-disabled-opacity !default; // (c) + +$pagination-border-radius-sm: $pagination-border-radius !default; +$pagination-border-radius-lg: $pagination-border-radius-sm !default; + +// * Cards +// ******************************************************************************* + +$card-title-color: $headings-color !default; +$card-spacer-y: $spacer * 1.5 !default; +$card-spacer-x: $spacer * 1.5 !default; +$card-title-spacer-y: $spacer * 0.5 !default; +$card-subtitle-color: rgba-to-hex(rgba($black, 0.55), $rgba-to-hex-bg) !default; +$card-spacer-x-sm: 1rem !default; // (C) +$card-border-width: 0 !default; +$card-border-color: $border-color !default; +$card-border-radius: 0.375rem !default; +$card-inner-border-color: $border-color !default; // (C) +$card-cap-padding-y: $card-spacer-y !default; +$card-bg: $white !default; +$card-cap-bg: transparent !default; +$card-cap-color: $headings-color !default; +$card-img-overlay-padding: 1.5rem !default; +$card-box-shadow: $box-shadow !default; +$card-group-margin: $grid-gutter-width !default; +$card-transition: all 0.2s ease-in-out !default; // (C) +$card-border-color-scale: 61% !default; // (C) +$card-hover-border-scale: 62% !default; // (C) +$card-inner-border-radius: $border-radius !default; + +// * Accordion +// ******************************************************************************* + +$accordion-padding-y: 0.793rem !default; +$accordion-padding-x: 1.25rem !default; +$accordion-color: $body-color !default; +$accordion-bg: $card-bg !default; +$accordion-border-radius: $border-radius !default; +$accordion-border-color: $border-color !default; +$accordion-inner-border-radius: $accordion-border-radius !default; +$accordion-button-color: $headings-color !default; + +$accordion-border-color: $card-bg !default; +$accordion-button-active-bg: $accordion-bg !default; +$accordion-button-active-color: $accordion-button-color !default; + +$accordion-icon-width: 1.25rem !default; +$accordion-icon-color: $accordion-button-color !default; +$accordion-icon-active-color: $accordion-button-active-color !default; + +$accordion-icon-transform: rotate(0deg) !default; + +$accordion-button-icon: url("data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M5 7.5L10 12.5L15 7.5' stroke='#{$accordion-icon-active-color}' stroke-opacity='0.9' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e") !default; +$accordion-button-active-icon: $accordion-button-icon !default; + +$accordion-custom-button-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$accordion-icon-active-color}' viewBox='0 0 24 24'%3E%3Cpath d='M19 11h-6V5h-2v6H5v2h6v6h2v-6h6z'%3E%3C/path%3E%3C/svg%3E") !default; +$accordion-custom-button-active-icon: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='#{$accordion-icon-active-color}' viewBox='0 0 24 24'%3E%3Cpath d='M5 11h14v2H5z'%3E%3C/path%3E%3C/svg%3E") !default; + +// * Tooltips +// ******************************************************************************* +$tooltip-font-size: $font-size-sm !default; +$tooltip-bg: #2f2b3d !default; +$tooltip-color: $white !default; +$tooltip-border-radius: $border-radius-sm !default; +$tooltip-opacity: 1 !default; +$tooltip-padding-y: $spacer * 0.278 !default; +$tooltip-padding-x: $spacer * 0.75 !default; + +$tooltip-arrow-height: 0.375rem !default; +$tooltip-arrow-width: 0.75rem !default; + +$tooltip-box-shadow: none !default; // (C) + +// * Popovers +// ******************************************************************************* +$popover-font-size: $font-size-base !default; +$popover-bg: $card-bg !default; +$popover-border-width: 0px !default; +$popover-border-radius: $border-radius !default; +$popover-box-shadow: $box-shadow-lg !default; + +$popover-header-bg: $card-bg !default; +$popover-header-color: $headings-color !default; +$popover-header-padding-y: $spacer !default; +$popover-header-padding-x: 1.125rem !default; + +$popover-body-color: $body-color !default; +$popover-body-padding-y: 1.125rem !default; +$popover-body-padding-x: 1.125rem !default; + +// * Toasts +// ******************************************************************************* +$toast-background-color: rgba($white, 0.85) !default; +$toast-padding-y: 0.406rem !default; +$toast-font-size: $font-size-base !default; +$toast-color: $body-color !default; +$toast-background-color: rgba($card-bg, 0.85); +$toast-border-width: 0px !default; +$toast-box-shadow: $box-shadow-lg !default; +$toast-header-border-color: rgba($border-color, 0.3) !default; +$toast-spacing: 1rem !default; + +$toast-header-color: $headings-color !default; +$toast-header-background-color: $card-bg !default; + +// * Badges +// ******************************************************************************* + +$badge-font-size: 0.8667em !default; +$badge-font-weight: $font-weight-medium !default; +$badge-padding-y: 0.4235em !default; +$badge-padding-x: 0.77em !default; +$badge-border-radius: 0.25rem !default; + +$badge-pill-padding-x: 0.583em !default; +$badge-pill-border-radius: 10rem !default; + +$badge-height: 1.5rem !default; // (C) +$badge-width: 1.5rem !default; // (C) +$badge-center-font-size: 0.812rem !default; // (C) + +// * Modals +// ******************************************************************************* + +$modal-inner-padding: 1.5rem !default; + +$modal-footer-margin-between: 1rem !default; + +$modal-dialog-margin: $modal-inner-padding !default; +$modal-content-color: null !default; +$modal-content-bg: $white !default; +$modal-content-border-color: $border-color; +$modal-content-border-width: 0px !default; +$modal-content-border-radius: $border-radius-lg !default; +$modal-content-box-shadow-xs: $box-shadow-lg !default; +$modal-content-box-shadow-sm-up: $box-shadow-lg !default; +$modal-backdrop-bg: #97959e !default; +$modal-backdrop-opacity: 0.5 !default; +$modal-header-border-width: 0px !default; +$modal-header-padding-y: 1.5rem !default; +$modal-header-padding-x: 0rem !default; +$modal-header-padding: $modal-header-padding-y $modal-inner-padding $modal-header-padding-x !default; +$modal-footer-padding: $modal-header-padding-x $modal-inner-padding $modal-header-padding-y !default; // (C) + +$modal-lg: 50rem !default; +$modal-md: 35rem !default; +$modal-sm: 22.5rem !default; + +$modal-fade-transform: translateY(-100px) scale(0.8) !default; +$modal-show-transform: translateY(0) scale(1) !default; + +$modal-transition-duration: 0.15s !default; // (C) +$modal-transition: transform $modal-transition-duration ease-out !default; + +$modal-simple-padding: 3rem !default; // (C) +$modal-simple-close-position: 1rem !default; // (C) + +// * Alerts +// ******************************************************************************* + +$alert-padding-y: 0.6875rem !default; +$alert-padding-x: 0.9375rem !default; +$alert-bg-scale: 84% !default; +$alert-bg-tint-scale: 84% !default; // (c) +$alert-border-scale: -84% !default; +$alert-color-scale: 40% !default; +$alert-icon-size: 1.875rem !default; // (c) + +// * Progress bars +// ******************************************************************************* + +$progress-height: 0.375rem !default; +$progress-font-size: $font-size-sm !default; +$progress-bg: $gray-75 !default; +$progress-border-radius: 3.125rem !default; +$progress-bar-color: $white !default; + +// List group +// ******************************************************************************* + +// scss-docs-start list-group-variables +$list-group-color: $headings-color !default; +$list-group-bg: transparent !default; +$list-group-border-color: $border-color !default; +$list-group-border-radius: $border-radius !default; + +$list-group-item-padding-y: 0.5rem !default; +$list-group-item-padding-x: 1.25rem !default; + +$list-group-item-bg-scale: -84% !default; +$list-group-item-border-scale: -84% !default; // (C) +$list-group-item-color-scale: 0% !default; +$list-group-item-bg-hover-scale: 6% !default; // (c) + +$list-group-hover-bg: rgba-to-hex($gray-50, $rgba-to-hex-bg) !default; +$list-group-active-color: $headings-color !default; +$list-group-active-bg: rgba-to-hex(rgba($primary, 0.16), $rgba-to-hex-bg) !default; +$list-group-active-border-color: $list-group-border-color !default; + +$list-group-disabled-color: $text-muted !default; +$list-group-disabled-bg: $list-group-bg !default; + +$list-group-action-color: $list-group-active-color !default; +$list-group-action-hover-color: $list-group-action-color !default; + +$list-group-action-active-color: $list-group-active-color !default; +$list-group-action-active-bg: $list-group-hover-bg !default; +// scss-docs-end list-group-variables + +// * Image thumbnails +// ******************************************************************************* + +$thumbnail-padding: 0 !default; +$thumbnail-bg: transparent !default; +$thumbnail-border-width: 0px !default; +$thumbnail-border-radius: 0px !default; + +// * Figures +// ******************************************************************************* + +$figure-caption-color: $text-muted !default; + +// * Breadcrumbs +// ******************************************************************************* + +$breadcrumb-padding-y: 0 !default; +$breadcrumb-padding-x: 0 !default; +$breadcrumb-item-padding-x: 0.5rem !default; +$breadcrumb-margin-bottom: 1rem !default; +$breadcrumb-bg: transparent !default; +$breadcrumb-divider-color: $body-color !default; +$breadcrumb-active-color: $headings-color !default; +$breadcrumb-divider: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-chevron-right' width='16' height='24' viewBox='0 0 24 24' stroke-width='1.75' stroke='#{$breadcrumb-divider-color}' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpolyline points='9 6 15 12 9 18'%3E%3C/polyline%3E%3C/svg%3E") !default; +$breadcrumb-divider-flipped: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-chevron-left' width='16' height='24' viewBox='0 0 24 24' stroke-width='1.75' stroke='#{$breadcrumb-divider-color}' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpolyline points='15 6 9 12 15 18'%3E%3C/polyline%3E%3C/svg%3E") !default; +$breadcrumb-color: $component-active-bg !default; // (C) + +$breadcrumb-divider-check: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='icon icon-tabler icon-tabler-check' width='16' height='24' viewBox='0 0 24 24' stroke-width='1.75' stroke='#{$breadcrumb-divider-color}' fill='none' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath stroke='none' d='M0 0h24v24H0z' fill='none'%3E%3C/path%3E%3Cpath d='M5 12l5 5l10 -10'%3E%3C/path%3E%3C/svg%3E"); + +$breadcrumb-icon-check-svg: str-replace( + str-replace($breadcrumb-divider-check, '#{$breadcrumb-divider-color}', $breadcrumb-divider-color), + '#', + '%23' +); // (C) + +// * Carousel +// ******************************************************************************* + +$carousel-control-color: $white !default; + +$carousel-indicator-width: 34px !default; +$carousel-indicator-height: 5px !default; +$carousel-indicator-hit-area-height: 0 !default; +$carousel-indicator-spacer: 5px !default; +$carousel-indicator-opacity: 0.4 !default; + +$carousel-caption-spacer: 1.437rem !default; + +$carousel-control-icon-width: 2.5rem !default; +$carousel-control-prev-icon-bg: url("data:image/svg+xml,%3Csvg width='18' height='18' viewBox='0 0 18 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M11.25 4.5L6.75 9L11.25 13.5' stroke='#{$carousel-control-color}' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M11.25 4.5L6.75 9L11.25 13.5' stroke='white' stroke-opacity='0.2' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A") !default; + +$carousel-control-next-icon-bg: url("data:image/svg+xml,%3Csvg width='19' height='18' viewBox='0 0 19 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M7.25 4.5L11.75 9L7.25 13.5' stroke='#{$carousel-control-color}' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M7.25 4.5L11.75 9L7.25 13.5' stroke='white' stroke-opacity='0.2' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") !default; + +// Spinners +// ******************************************************************************* + +$spinner-width-lg: 3rem !default; // (C) +$spinner-height-lg: $spinner-width-lg !default; // (C) +$spinner-border-width-lg: 0.3em !default; // (C) + +// * Close +// ******************************************************************************* + +$btn-close-width: 1.125rem !default; +$btn-close-color: $black !default; +$btn-close-bg: url("data:image/svg+xml,%3Csvg width='19' height='18' viewBox='0 0 19 18' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M14 4.5L5 13.5' stroke='#{$btn-close-color}' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M14 4.5L5 13.5' stroke='white' stroke-opacity='0.2' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M5 4.5L14 13.5' stroke='#{$btn-close-color}' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3Cpath d='M5 4.5L14 13.5' stroke='white' stroke-opacity='0.2' stroke-width='1.75' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E%0A") !default; +$btn-close-focus-shadow: none !default; +$btn-close-focus-opacity: 0.75 !default; + +$close-font-weight: 300 !default; // (C) + +// * Offcanvas +// ******************************************************************************* + +// scss-docs-start offcanvas-variables +$offcanvas-transition-duration: 0.25s !default; +$offcanvas-bg-color: $modal-content-bg !default; +$offcanvas-color: $modal-content-color !default; +$offcanvas-btn-close-color: $body-color !default; // (C) +// scss-docs-end offcanvas-variables + +// Utilities +$overflows: auto, hidden, scroll, visible !default; + +// Config +$rtl-support: false !default; +$dark-style: false !default; + +// Useful Icons +$upload-icon: url("data:image/svg+xml,%3csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M4 17V19C4 20.1046 4.89543 21 6 21H18C19.1046 21 20 20.1046 20 19V17' stroke='%23808390' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M7 9L12 4L17 9' stroke='%23808390' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3cpath d='M12 4V16' stroke='%23808390' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3e%3c/svg%3e"); diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_floating-labels.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_floating-labels.scss new file mode 100644 index 0000000..be2063a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_floating-labels.scss @@ -0,0 +1,36 @@ +// Floating Labels +// ******************************************************************************* + +// Display placeholder on focus +.form-floating { + > .form-control:focus, + > .form-control:not(:placeholder-shown) { + &::placeholder { + color: $input-placeholder-color; + } + } +} + +// RTL +@include rtl-only { + .form-floating { + > label { + right: 0; + transform-origin: 100% 0; + } + + > .form-control:focus, + > .form-control:not(:placeholder-shown), + > .form-select { + ~ label { + transform: $form-floating-label-transform-rtl; + } + } + + > .form-control:-webkit-autofill { + ~ label { + transform: $form-floating-label-transform-rtl; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-check.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-check.scss new file mode 100644 index 0000000..120f50b --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-check.scss @@ -0,0 +1,79 @@ +// Checkboxes and Radios +// ******************************************************************************* +.form-check-input { + cursor: $form-check-label-cursor; + &:disabled { + background-color: $form-check-input-disabled-bg; + border-color: $form-check-input-disabled-bg; + } + &:checked { + box-shadow: $box-shadow-xs; + } +} + +.form-check { + position: relative; +} + +// Only for checkbox and radio (not for bs default switch) +//? .dt-checkboxes-cell class is used for DataTables checkboxes +.form-check:not(.form-switch), +.dt-checkboxes-cell { + .form-check-input[type='radio'] { + background-size: 1.3125rem; + &:not(:checked) { + background-size: 0.75rem; + } + } +} + +// RTL Style +@include rtl-only { + .form-check { + padding-left: 0; + padding-right: $form-check-padding-start; + } + .form-check .form-check-input { + float: right; + margin-left: 0; + margin-right: $form-check-padding-start * -1; + } +} + +// Switches +// ******************************************************************************* + +.form-switch .form-check-input { + background-color: $form-switch-bg; + border: none; + box-shadow: $form-switch-box-shadow; + &:focus { + box-shadow: $form-switch-box-shadow; + } +} +// RTL Style +@include rtl-only { + .form-switch { + padding-left: 0; + padding-right: $form-switch-padding-start; + .form-check-input { + margin-left: 0; + margin-right: $form-switch-padding-start * -1; + background-position: right center; + &:checked { + background-position: $form-switch-checked-bg-position-rtl; + } + } + } + .form-check-inline { + margin-right: 0; + margin-left: $form-check-inline-margin-end; + } +} + +// Contextual colors for form check +@each $color, $value in $theme-colors { + @if $color != primary { + @include template-form-check-variant('.form-check-#{$color}', $value); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-control.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-control.scss new file mode 100644 index 0000000..15ba127 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-control.scss @@ -0,0 +1,73 @@ +// Form control +// ******************************************************************************* + +//? Form control (all size) padding calc due to border increase on focus +.form-control { + &::placeholder, + &:focus::placeholder { + transition: all 0.2s ease; + } + padding: calc($input-padding-y - $input-border-width) calc($input-padding-x - $input-border-width); + // border color on hover state + &:hover { + &:not([disabled]):not([focus]) { + border-color: $input-border-hover-color; + } + } + // ! FIX: wizard-ex input type number placeholder align issue + &[type='number'] { + .input-group & { + line-height: 1.375rem; + min-height: 2.375rem; + } + .input-group-lg & { + line-height: 1.5rem; + min-height: 3rem; + } + .input-group-sm & { + min-height: 1.875rem; + } + } + + &:focus { + border-width: $input-focus-border-width; + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-focus-border-width); + } + &.form-control-lg { + padding: calc($input-padding-y-lg - $input-border-width) calc($input-padding-x-lg - $input-border-width); + &:focus { + padding: calc($input-padding-y-lg - $input-focus-border-width) + calc($input-padding-x-lg - $input-focus-border-width); + } + } + &.form-control-sm { + padding: calc($input-padding-y-sm - $input-border-width) calc($input-padding-x-sm - $input-border-width); + &:focus { + padding: calc($input-padding-y-sm - $input-focus-border-width) + calc($input-padding-x-sm - $input-focus-border-width); + } + } +} +.input-group:has(button) .form-control { + padding: calc($input-padding-y - $input-border-width) calc($input-padding-x - $input-border-width) !important; + border-width: $input-border-width !important; +} +// ltr only +@include ltr-only { + .form-control:not([readonly]) { + &:focus::placeholder { + transform: translateX(4px); + } + } +} +// rtl only +@include rtl-only { + input[type='tel'] { + text-align: right; + } + .form-control:not([readonly]) { + &:focus::placeholder { + transform: translateX(-4px); + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-range.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-range.scss new file mode 100644 index 0000000..a1dcc9b --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-range.scss @@ -0,0 +1,49 @@ +// Range select +// ******************************************************************************* + +.form-range { + // Chrome specific + &::-webkit-slider-thumb { + box-shadow: $form-range-thumb-box-shadow; + + &:hover { + box-shadow: 0 0 0 8px rgba($primary, 0.16); + } + &:active, + &:focus { + box-shadow: 0 0 0 13px rgba($primary, 0.16); + background-color: $primary; + border-color: $primary; + } + } + &::-webkit-slider-runnable-track { + background-color: $primary; + } + + // Mozilla specific + &::-moz-range-thumb { + box-shadow: $form-range-thumb-box-shadow; + &:hover { + box-shadow: 0 0 0 8px rgba($primary, 0.16); + } + &:active, + &:focus { + box-shadow: 0 0 0 13px rgba($primary, 0.16); + background-color: $primary; + border-color: $primary; + } + } + + &::-moz-range-track { + background-color: $primary; + } + &:disabled { + &::-webkit-slider-runnable-track { + background-color: $form-range-track-disabled-bg; + } + + &::-moz-range-track { + background-color: $form-range-track-disabled-bg; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-select.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-select.scss new file mode 100644 index 0000000..4ac4473 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-select.scss @@ -0,0 +1,109 @@ +// Select +// ******************************************************************************* + +.form-select { + background-clip: padding-box; + padding: calc($form-select-padding-y - $input-border-width) calc($form-select-padding-x - $input-border-width); + padding-inline-end: calc($form-select-padding-x * 3 - $input-border-width); + optgroup { + background-color: $card-bg; + } + &:hover { + &:not([disabled]):not([focus]) { + border-color: $input-border-hover-color; + } + } + &:disabled { + @include ltr-style { + background-image: escape-svg($form-select-disabled-indicator); + } + @include rtl-style { + background-image: escape-svg($form-select-disabled-indicator); + } + } + &:focus, + .was-validated & { + border-width: $input-focus-border-width; + @include ltr-style { + padding: calc($form-select-padding-y - $input-focus-border-width) + calc($form-select-padding-x * 3 - $input-focus-border-width) + calc($form-select-padding-y - $input-focus-border-width) + calc($form-select-padding-x - $input-focus-border-width); + } + @include rtl-style { + padding: calc($form-select-padding-y - $input-focus-border-width) + calc($form-select-padding-x - $input-focus-border-width) + calc($form-select-padding-y - $input-focus-border-width) + calc($form-select-padding-x * 3 - $input-focus-border-width); + } + background-position: right calc($form-select-padding-x - 1px) center; + } + &.form-select-lg { + min-height: $input-height-lg; + background-size: 24px 24px; + padding: calc($form-select-padding-y-lg - $input-border-width) calc($form-select-padding-x-lg - $input-border-width); + padding-inline-end: calc($form-select-padding-x-lg * 3 - $input-border-width); + &:focus, + .was-validated & { + @include ltr-style { + padding: calc($form-select-padding-y-lg - $input-focus-border-width) + calc($form-select-padding-x-lg * 3 - $input-focus-border-width) + calc($form-select-padding-y-lg - $input-focus-border-width) + calc($form-select-padding-x-lg - $input-focus-border-width); + } + @include rtl-style { + padding: calc($form-select-padding-y-lg - $input-focus-border-width) + calc($form-select-padding-x-lg - $input-focus-border-width) + calc($form-select-padding-y-lg - $input-focus-border-width) + calc($form-select-padding-x-lg * 3 - $input-focus-border-width); + } + } + } + &.form-select-sm { + min-height: $input-height-sm; + background-size: 20px 20px; + padding: calc($form-select-padding-y-sm - $input-border-width) calc($form-select-padding-x-sm - $input-border-width); + padding-inline-end: calc($form-select-padding-x-sm * 3 - $input-border-width); + &:focus, + .was-validated & { + @include ltr-style { + padding: calc($form-select-padding-y-sm - $input-focus-border-width) + calc($form-select-padding-x-sm * 3 - $input-focus-border-width) + calc($form-select-padding-y-sm - $input-focus-border-width) + calc($form-select-padding-x-sm - $input-focus-border-width); + } + @include rtl-style { + padding: calc($form-select-padding-y-sm - $input-focus-border-width) + calc($form-select-padding-x-sm - $input-focus-border-width) + calc($form-select-padding-y-sm - $input-focus-border-width) + calc($form-select-padding-x-sm * 3 - $input-focus-border-width); + } + } + // background-size: 14px 11px; + } +} + +// Multiple select RTL Only +@include rtl-only { + .form-select { + background-image: $form-select-indicator-rtl; + background-position: left $form-select-padding-x center; + &:focus { + background-position: left calc($form-select-padding-x - 1px) center; + } + &[multiple], + &[size]:not([size='1']) { + background-image: none; + } + } + .was-validated .form-select { + background-position: left calc($form-select-padding-x - 1px) center; + } +} +@if $dark-style { + select.form-select { + option { + background-color: $card-bg; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-text.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-text.scss new file mode 100644 index 0000000..d8a2ac3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_form-text.scss @@ -0,0 +1,2 @@ +// Form Text +// ******************************************************************************* diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_input-group.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_input-group.scss new file mode 100644 index 0000000..287e879 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_input-group.scss @@ -0,0 +1,393 @@ +// Input groups +// ******************************************************************************* + +$validation-messages: ''; +@each $state in map-keys($form-validation-states) { + $validation-messages: $validation-messages + + ':not(.' + + unquote($state) + + '-tooltip)' + + ':not(.' + + unquote($state) + + '-feedback)'; +} + +// Using :focus-within to apply focus/validation border and shadow to default and merged input-group +.input-group { + border-radius: $input-border-radius; + // Input group (Default) + .input-group-text { + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-border-width); + @include transition($input-transition); + } + + //? Info :focus-within to apply focus/validation border and shadow to default and merged input & input-group + &:focus-within { + .input-group-text { + border-width: $input-focus-border-width; + padding: calc($input-padding-y - calc($input-focus-border-width + $input-border-width)) + calc($input-padding-x - $input-focus-border-width); + .was-validated &, + .fv-plugins-bootstrap5-row-invalid & { + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-border-width); + } + } + .form-control, + .form-select { + border-width: $input-focus-border-width; + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-border-width); + &:first-child { + padding-inline-start: calc($input-padding-x - $input-focus-border-width); + } + } + } + // Input group (lg) + &.input-group-lg { + .input-group-text { + padding: calc($input-padding-y-lg - $input-border-width) calc($input-padding-x-lg - $input-border-width); + } + &:focus-within { + .input-group-text { + padding: calc($input-padding-y-lg - $input-border-width) calc($input-padding-x-lg - $input-focus-border-width); + } + .form-control:not(:first-child), + .form-select:not(:first-child) { + padding: calc($input-padding-y-lg - $input-border-width) calc($input-padding-x-lg); + } + } + } + // Input group (sm) + &.input-group-sm { + .form-control, + .form-select { + padding-inline: calc($input-padding-x-sm - $input-border-width); + } + .input-group-text { + padding: calc($input-padding-y-sm - $input-border-width) calc($input-padding-x-sm - $input-border-width); + } + &:focus-within { + .input-group-text { + padding: calc($input-padding-y-sm - $input-focus-border-width) + calc($input-padding-x-sm - $input-focus-border-width); + } + .form-control, + .form-select { + padding: calc($input-padding-y-sm - $input-border-width) calc($input-padding-x-sm); + } + } + } + + > :not(:first-child):not(.dropdown-menu):not(.btn):not(.dropdown-menu + .form-control):not( + .btn + .form-control + )#{$validation-messages} { + margin-inline-start: calc($input-focus-border-width - 3px); + } + + // Input group merge + &.input-group-merge { + > :not(:first-child):not(.dropdown-menu):not(.btn):not(.dropdown-menu + .form-control):not( + .btn + .form-control + )#{$validation-messages} { + margin-inline-start: calc(($input-focus-border-width + $input-border-width) * -1); + } + &:focus-within { + > .form-control:first-child, + > .form-select:first-child { + padding-inline: calc($input-padding-x - $input-focus-border-width); + } + } + &.input-group-sm { + &:focus-within { + > .form-control:first-child, + > .form-select:first-child { + padding-inline: calc($input-padding-x - $input-focus-border-width); + } + } + } + } + + // Input group on focus-within use margin-left same as as focus border width + &:focus-within { + > :not(:first-child):not(.dropdown-menu):not(.btn):not(.dropdown-menu + .form-control):not( + .btn + .form-control + )#{$validation-messages} { + margin-inline-start: calc($input-focus-border-width * -1); + } + } + + // Rounded pill option + &.rounded-pill { + .input-group-text, + .form-control { + @include border-radius($border-radius-pill); + } + } + &:hover { + .input-group-text, + .form-control { + border-color: $input-border-hover-color; + } + } + + &:focus-within { + box-shadow: $input-focus-box-shadow; + .form-control, + .input-group-text { + box-shadow: none; + } + } + .was-validated & { + &:has(.is-invalid), + &:has(.is-valid), + &:has(:valid), + &:has(:invalid) { + box-shadow: none; + } + } + &.has-validation, + &.is-invalid { + &:has(.is-invalid), + &:has(.is-valid), + &:has(:invalid), + &:has(.form-control.is-invalid) { + box-shadow: none; + } + } + // For disabled input group + &.disabled { + .input-group-text { + background-color: $input-disabled-bg; + } + } + // ! FIX: Formvalidation border radius issue + &.has-validation { + > .input-group-text:first-child { + @include border-end-radius(0); + } + > .form-control:first-child { + @include border-end-radius(0); + } + > .form-control:not(:first-child):not(:last-child) { + @include border-radius(0); + } + } +} + +// input-group-text icon size +.input-group-text { + background-clip: padding-box; + i { + @include font-size(1.25rem); + } +} +.input-group-lg > .input-group-text { + i { + @include font-size(1.375rem); + } +} +.input-group-sm > .input-group-text { + i { + @include font-size(1.125rem); + } +} + +// Merge input + +// Input group merge .form-control border & padding +@include ltr-only { + .input-group-merge { + .input-group-text { + &:first-child { + border-right: 0; + } + &:last-child { + border-left: 0; + } + } + &.disabled { + > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not( + .invalid-feedback + ) { + margin-left: 0 !important; + } + } + .form-control:not(textarea) { + &:not(:first-child) { + padding-left: 0 !important; + border-left: 0; + } + &:not(:last-child) { + padding-right: 0 !important; + border-right: 0; + } + } + .form-control:not(textarea) { + &:not(:first-child) { + padding-left: 0; + } + &:not(:last-child) { + padding-right: 0; + } + } + } +} + +// Adding transition (On focus border color change) +.input-group-text { + @include transition($input-transition); +} + +// RTL Style +// ******************************************************************************* + +@include rtl-only { + .input-group { + // Rounded input field + &.rounded-pill { + .input-group-text { + border-top-right-radius: $border-radius-pill !important; + border-bottom-right-radius: $border-radius-pill !important; + } + .form-control { + border-top-left-radius: $border-radius-pill !important; + border-bottom-left-radius: $border-radius-pill !important; + } + } + + // Input group with dropdown rounded corners, while not validate + &:not(.has-validation) { + > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 3) { + @include border-start-radius(0); + @include border-end-radius($input-border-radius); + } + } + &.input-group-lg { + &:not(.has-validation) { + > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 3) { + @include border-end-radius($input-border-radius-lg); + } + } + } + &.input-group-sm { + &:not(.has-validation) { + > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 3) { + @include border-end-radius($input-border-radius-sm); + } + } + } + + // Input group with dropdown rounded corners, while validate + &.has-validation { + > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 4) { + @include border-start-radius(0); + @include border-end-radius($input-border-radius); + } + } + &.input-group-lg { + > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 4) { + @include border-end-radius($input-border-radius-lg); + } + } + &.input-group-sm { + > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 4) { + @include border-end-radius($input-border-radius-sm); + } + } + + // Input group border radius + $validation-messages: ''; + @each $state in map-keys($form-validation-states) { + $validation-messages: $validation-messages + + ':not(.' + + unquote($state) + + '-tooltip)' + + ':not(.' + + unquote($state) + + '-feedback)'; + } + + > :not(:first-child):not(.dropdown-menu)#{$validation-messages} { + margin-right: calc(#{$input-border-width} * -1); + @include border-end-radius(0); + margin-left: 0px; + @include border-start-radius($input-border-radius); + } + &.input-group-lg { + > :not(:first-child):not(.dropdown-menu)#{$validation-messages} { + @include border-start-radius($input-border-radius-lg); + } + } + &.input-group-sm { + > :not(:first-child):not(.dropdown-menu)#{$validation-messages} { + @include border-start-radius($input-border-radius-sm); + } + } + + // ? We apply border radius from the above styles + // Remove border radius from first and last element + > :not(:first-child):not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), + > .dropdown-toggle:nth-last-child(n + 3):not(:first-child) { + @include border-radius(0 !important); + } + + // ! FIX: Formvalidation border radius issue + &.has-validation { + > .input-group-text:first-child { + @include border-start-radius(0); + @include border-end-radius($input-border-radius); + } + > .form-control:first-child { + @include border-start-radius(0); + @include border-end-radius($input-border-radius); + } + } + } + + // Input group merge .input-group-text border & .form-control border & padding + // Merge input + .input-group-merge { + .input-group-text { + &:first-child { + border-left: 0; + } + &:last-child { + border-right: 0; + } + } + .form-control { + &:not(:first-child) { + padding-right: 0 !important; + border-right: 0; + } + &:not(:last-child) { + padding-left: 0 !important; + border-left: 0; + } + } + } +} + +//! FIX: Formvalidation : .input-group-text valid/invalid border color, If .input-group has .input-group-text first. +.fv-plugins-bootstrap5-row-invalid { + .input-group.has-validation, + .input-group.has-validation:focus-within { + .input-group-text { + border-color: $form-feedback-invalid-color !important; + } + } +} +// ? UnComment If eleValidClass is not blank i.e form-validation.js Line no. ~208 +// .fv-plugins-bootstrap5-row-valid { +// .input-group, +// .input-group:focus-within { +// .input-group-text { +// border-color: $form-feedback-valid-color; +// } +// } +// } diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_labels.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_labels.scss new file mode 100644 index 0000000..3c284d2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_labels.scss @@ -0,0 +1,17 @@ +// Labels +// ******************************************************************************* + +.form-label, +.col-form-label { + text-transform: $form-label-text-transform; + letter-spacing: $form-label-letter-spacing; + color: $headings-color; +} +// Default (vertical ) form label size +.form-label-lg { + @include font-size($input-font-size-lg); +} + +.form-label-sm { + @include font-size($input-font-size-sm); +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_validation.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_validation.scss new file mode 100644 index 0000000..40cfe68 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/forms/_validation.scss @@ -0,0 +1,130 @@ +// Validation states +// ******************************************************************************* + +@each $state, $data in $form-validation-states { + @include template-form-validation-state($state, $data...); +} + +// Currently supported for form-validation and jq-validation +form { + .error:not(li):not(input) { + color: $form-feedback-invalid-color; + font-size: 85%; + margin-top: 0.25rem; + } + + .invalid, + .is-invalid .invalid:before, + .is-invalid::before { + border-width: $input-focus-border-width; + border-color: $form-feedback-invalid-color !important; + } + + .form-label { + &.invalid, + &.is-invalid { + border-width: $input-focus-border-width; + border-color: $form-feedback-invalid-color; + box-shadow: 0 0 0 2px rgba($form-feedback-invalid-color, 0.4) !important; + } + } + + select { + &.invalid { + & ~ .select2 { + .select2-selection { + border-width: $input-focus-border-width; + border-color: $form-feedback-invalid-color; + } + } + } + + // FormValidation + + //Select2 + &.is-invalid { + & ~ .select2 { + .select2-selection { + border-width: $input-focus-border-width; + border-color: $form-feedback-invalid-color !important; + } + } + } + // Bootstrap select + &.selectpicker { + &.is-invalid { + ~ .btn { + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-border-width); + border-width: $input-focus-border-width; + border-color: $form-feedback-invalid-color !important; + } + } + } + } +} + +//!FIX: Input group form floating label .input-group-text border color on validation state +//? Can't use form-validation-state-selector mixin due to :has selector +.was-validated .input-group:has(.input-group-text):has(.form-control:invalid) .input-group-text, +.was-validated .input-group:has(.input-group-text):has(.form-control:valid) .input-group-text, +.input-group:has(.input-group-text):has(.form-control.is-valid) .input-group-text, +.input-group:has(.input-group-text):has(.form-control.is-invalid) .input-group-text { + border-width: $input-focus-border-width; +} +//! FIX: Basic input (without floating) has shake effect due to padding +.was-validated .form-control:invalid, +.was-validated .form-control:valid, +.form-control.is-invalid, +.form-control.is-valid { + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-border-width); + ~ .input-group-text { + padding: calc($input-padding-y - $input-focus-border-width) calc($input-padding-x - $input-border-width); + } +} +.input-group { + > :not(:first-child):not(.dropdown-menu):not(.btn):not(.dropdown-menu + .form-control):not( + .btn + .form-control + )#{$validation-messages}.form-control.is-invalid, + > :not(:first-child):not(.dropdown-menu):not(.btn):not(.dropdown-menu + .form-control):not( + .btn + .form-control + )#{$validation-messages}.form-control.is-valid { + margin-inline-start: calc($input-focus-border-width - 4px); + } + .was-validated & .form-control:invalid, + .was-validated & .form-control:valid, + .form-control.is-invalid, + .form-control.is-valid, + .form-select.is-invalid, + .form-select.is-valid { + &:first-child { + padding-inline-start: calc($input-padding-x - $input-focus-border-width); + } + } +} +// ! Fix: FormValidation: Set border color to .form-control in touch devices for HTML5 inputs i.e date picker +@media (hover: none) { + .fv-plugins-bootstrap5-row-invalid { + .form-control { + &.flatpickr-mobile { + border-color: $form-feedback-invalid-color; + } + } + } +} +// ! Fix: FormValidation: Validation error message display fix for those inputs where .invalid-feedback/tooltip is not a sibling element +.fv-plugins-bootstrap5 { + .invalid-feedback, + .invalid-tooltip { + display: block; + } +} + +//! Fix: FormValidation: Tagify validation error (border color) +.fv-plugins-bootstrap5-row-invalid .tagify.tagify--empty { + border-width: $input-focus-border-width; + border-color: $form-feedback-invalid-color !important; +} +// ? Uncomment if required +// .fv-plugins-bootstrap5-row-valid .tagify:not(.tagify--empty) { +// border-color: $form-feedback-valid-color; +// } diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_alert.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_alert.scss new file mode 100644 index 0000000..4428bf4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_alert.scss @@ -0,0 +1,101 @@ +// Alerts +// ******************************************************************************* + +@mixin alert-variant($background: null, $border: null, $color: null) { +} + +// Basic Alerts +@mixin template-alert-variant($parent, $background) { + $border: if( + $dark-style, + shift-color($background, -$alert-border-scale, $card-bg), + shift-color($background, $alert-border-scale, $card-bg) + ); + $color: $background; + $background: if( + $dark-style, + shade-color($background, $alert-bg-scale, $card-bg), + tint-color($background, $alert-bg-tint-scale, $card-bg) + ); + + #{$parent} { + @include gradient-bg($background); + border-color: $border; + color: $color; + .btn-close { + background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $color), '#', '%23'); + } + + .alert-link { + color: $color; + } + } + + #{$parent} { + hr { + color: $color !important; + } + .alert-icon { + background-color: $color; + } + } +} + +// Solid Alerts +@mixin template-alert-solid-variant($parent, $background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + #{$parent} { + @include gradient-bg($background); + color: $color; + + .btn-close { + background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $color), '#', '%23'); + } + + .alert-link { + color: $color; + } + } + + #{$parent} { + hr { + color: $color !important; + } + .alert-icon { + color: $background !important; + } + } +} + +// Outline Alerts +@mixin template-alert-outline-variant($parent, $background, $color: null) { + $color: $background; + $icon-bg: if( + $dark-style, + shade-color($background, $alert-bg-scale, $card-bg), + tint-color($background, $alert-bg-tint-scale, $card-bg) + ); + + #{$parent} { + border-color: $background; + color: $color; + .btn-close { + background-image: str-replace(str-replace($btn-close-bg, '#{$btn-close-color}', $background), '#', '%23'); + } + + .alert-link { + color: $color; + } + } + + #{$parent} { + hr { + color: $color !important; + } + .alert-icon { + color: $color !important; + background-color: $icon-bg !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_badge.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_badge.scss new file mode 100644 index 0000000..d8ec80a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_badge.scss @@ -0,0 +1,9 @@ +// Badges +// ******************************************************************************* + +// Size +@mixin badge-size($badge-height, $badge-width, $badge-font-size) { + height: $badge-height; + width: $badge-width; + @include font-size($badge-font-size); +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_buttons.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_buttons.scss new file mode 100644 index 0000000..13eede1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_buttons.scss @@ -0,0 +1,360 @@ +// Buttons +// ******************************************************************************* + +// Basic +@mixin button-variant( + $background: null, + $border: null, + $hover-background: null, + $hover-border: null, + $active-background: null, + $active-border: null +) { +} +@mixin template-button-variant($parent, $background, $color: null, $border: null) { + $background: $background; + $border: $background; + $color: if($color, $color, color-contrast($background)); + $hover-background: if( + $color == $color-contrast-light, + shade-color($background, $btn-hover-bg-shade-amount), + tint-color($background, $btn-hover-bg-tint-amount) + ); + $hover-border: if( + $color == $color-contrast-light, + shade-color($border, $btn-hover-border-shade-amount), + tint-color($border, $btn-hover-border-tint-amount) + ); + $hover-color: color-contrast($hover-background); + + $active-background: if( + $color == $color-contrast-light, + shade-color($background, $btn-active-bg-shade-amount), + tint-color($background, $btn-active-bg-tint-amount) + ); + $active-border: if( + $color == $color-contrast-light, + shade-color($border, $btn-active-border-shade-amount), + tint-color($border, $btn-active-border-tint-amount) + ); + $active-color: color-contrast($active-background); + + #{$parent} { + color: $color; + @include gradient-bg($background); + border-color: $border; + &.btn[class*='btn-']:not([class*='btn-label-']):not([class*='btn-outline-']):not([class*='btn-text-']):not( + .btn-icon + ):not(:disabled):not(.disabled) { + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } + &:hover { + color: $hover-color !important; + @include gradient-bg($hover-background !important); + border-color: $hover-border !important; + } + + .btn-check:focus + &, + &:focus, + &.focus { + color: $hover-color; + @include gradient-bg($hover-background); + border-color: $hover-border; + } + + .btn-check:checked + &, + .btn-check:active + &, + &:active, + &.active, + &.show.dropdown-toggle, + .show > &.dropdown-toggle { + color: $active-color !important; + background-color: $active-background !important; + // Remove CSS gradients if they're enabled + background-image: if($enable-gradients, none !important, null); + border-color: $active-border !important; + } + + &.disabled, + &:disabled { + color: $color !important; + background-color: $background !important; + // Remove CSS gradients if they're enabled + background-image: if($enable-gradients, none !important, null); + border-color: $border !important; + } + } + + // Button groups + .btn-group #{$parent}, + .input-group #{$parent} { + border-right: $input-btn-border-width solid $active-background; + border-left: $input-btn-border-width solid $active-background; + } + .btn-group-vertical #{$parent} { + border-top-color: $active-background; + border-bottom-color: $active-background; + } +} + +@mixin template-button-text-variant($parent, $background, $color: null, $border: null) { + $border: transparent; + $label-color: if($color, $color, $background); + $hover-color: $background; + $hover-background: $background; + $hover-background: if( + $hover-color == $color-contrast-light, + shade-color($background, $btn-text-hover-shade-amount, $card-bg), + tint-color($background, $btn-text-hover-tint-amount, $card-bg) + ); + + $focus-background: if( + $hover-color == $color-contrast-light, + shade-color($background, $btn-text-focus-shade-amount, $card-bg), + tint-color($background, $btn-text-focus-tint-amount, $card-bg) + ); + + $active-color: $hover-color; + $active-background: if( + $active-color == $color-contrast-light, + shade-color($background, $btn-text-active-shade-amount, $card-bg), + tint-color($background, $btn-text-active-tint-amount, $card-bg) + ); + + #{$parent} { + color: $label-color; + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($background, 0.2) 0, + rgba($background, 0.3) 40%, + rgba($background, 0.4) 50%, + rgba($background, 0.5) 60%, + rgba($white, 0) 70% + ); + } + } + + &:hover { + border-color: $border; + background: $hover-background; + color: $hover-color; + } + + &:focus, + &.focus { + color: $hover-color; + background: $focus-background; + } + + &:active, + &.active, + &.show.dropdown-toggle, + .show > &.dropdown-toggle { + color: $active-color !important; + background: $active-background !important; + // Remove CSS gradients if they're enabled + background-image: if($enable-gradients, none !important, null); + border-color: $border !important; + } + &:disabled, + &.disabled { + color: $label-color; + } + } + + // Button groups + .btn-group #{$parent}, + .input-group #{$parent} { + border-right: $input-btn-border-width solid $background !important; + border-left: $input-btn-border-width solid $background !important; + } + .btn-group-vertical #{$parent} { + border-top: $input-btn-border-width solid $background !important; + border-bottom: $input-btn-border-width solid $background !important; + } +} + +// Label +@mixin button-label-variant($background: null, $border: null, $active-background: null, $active-border: null) { +} + +@mixin template-button-label-variant($parent, $background, $color: null, $border: null) { + // Using the $dark-style variable for condition as in label style text color can't compare with $color-contrast-light/dark + $border: transparent; + + $label-color: if($color, $color, $background); + $hover-color: if($color, $color, color-contrast($background)); + + $label-background: if( + $hover-color == $color-contrast-light, + shade-color($background, $btn-label-bg-shade-amount, $card-bg), + tint-color($background, $btn-label-bg-tint-amount, $card-bg) + ); + + $hover-color: $background; + $hover-background: $background; + $hover-background: if( + $hover-color == $color-contrast-light, + shade-color($background, $btn-label-hover-shade-amount, $card-bg), + tint-color($background, $btn-label-hover-tint-amount, $card-bg) + ); + + $active-color: $hover-color; + $active-background: $hover-background; + + $disabled-background: if( + $hover-color == $color-contrast-light, + shade-color($background, $btn-label-disabled-bg-shade-amount, $card-bg), + tint-color($background, $btn-label-disabled-bg-tint-amount, $card-bg) + ); + + $border-color: if( + $dark-style, + shade-color($background, $btn-label-border-shade-amount, $card-bg), + tint-color($background, $btn-label-border-tint-amount, $card-bg) + ); + + #{$parent} { + color: $label-color !important; + border-color: $border !important; + background: $label-background !important; + @include box-shadow($btn-box-shadow); + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($background, 0.2) 0, + rgba($background, 0.3) 40%, + rgba($background, 0.4) 50%, + rgba($background, 0.5) 60%, + rgba($white, 0) 70% + ); + } + } + + &:hover { + border-color: $border !important; + background: $hover-background !important; + color: $hover-color !important; + } + + &:focus, + &.focus { + color: $hover-color; + background: $hover-background; + } + + &:active, + &.active, + &.show.dropdown-toggle, + .show > &.dropdown-toggle { + color: $active-color !important; + background-color: $active-background !important; + // Remove CSS gradients if they're enabled + background-image: if($enable-gradients, none !important, null); + border-color: $border !important; + } + + &.disabled, + &:disabled { + color: $label-color !important; + border-color: $border !important; + background: $label-background !important; + } + } + + // Button groups + .btn-group #{$parent}, + .input-group #{$parent} { + border-right: $input-btn-border-width solid $border-color !important; + border-left: $input-btn-border-width solid $border-color !important; + } + .btn-group-vertical #{$parent} { + border-top: $input-btn-border-width solid $border-color !important; + border-bottom: $input-btn-border-width solid $border-color !important; + } +} + +// Outline +@mixin button-outline-variant($color: null, $color-hover: null, $hover-color: null) { +} + +@mixin template-button-outline-variant($parent, $color, $hover-color: null) { + $color: $color; + $color-hover: $color; + + $hover-background: if( + $color-hover == $color-contrast-light, + shade-color($color, $btn-outline-hover-bg-shade-amount, $card-bg), + tint-color($color, $btn-outline-hover-bg-tint-amount, $card-bg) + ); + + $focus-background: $color; + $active-background: if( + $color == $color-contrast-light, + shade-color($color, $btn-outline-active-bg-shade-amount, $card-bg), + tint-color($color, $btn-outline-active-bg-tint-amount, $card-bg) + ); + $active-border: $color; + $active-color: $color; + + #{$parent} { + color: $color; + border-color: $color; + background: transparent; + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($color, 0.2) 0, + rgba($color, 0.3) 40%, + rgba($color, 0.4) 50%, + rgba($color, 0.5) 60%, + rgba($white, 0) 70% + ); + } + } + + &:hover { + color: $color-hover !important; + background-color: $hover-background !important; + border-color: $active-border !important; + } + + .btn-check:focus + &, + &:focus { + color: $color-hover; + background-color: $hover-background; + border-color: $active-border; + } + + .btn-check:checked + &, + .btn-check:active + &, + &:active, + &.active, + &.dropdown-toggle.show { + color: $active-color !important; + background-color: $active-background !important; + border-color: $active-border !important; + } + + &.disabled, + &:disabled { + color: $color !important; + } + } + + #{$parent} .badge { + background: $color; + border-color: $color; + color: color-contrast($color); + } + + #{$parent}:hover .badge, + #{$parent}:focus:hover .badge, + #{$parent}:active .badge, + #{$parent}.active .badge, + .show > #{$parent}.dropdown-toggle .badge { + background: $color-hover; + border-color: $color-hover; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_card.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_card.scss new file mode 100644 index 0000000..c766c67 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_card.scss @@ -0,0 +1,32 @@ +// Cards +// ******************************************************************************* + +// color border bottom and shadow in card +@mixin template-card-border-shadow-variant($parent, $background) { + $border-color: shade-color($background, $card-border-color-scale, $card-bg); + .card { + &#{$parent} { + &::after { + border-bottom-color: $border-color; + } + &:hover { + &::after { + border-bottom-color: $background; + } + } + } + } +} + +// card hover border color +@mixin template-card-hover-border-variant($parent, $background) { + $border-color: shade-color($background, $card-hover-border-scale, $card-bg); + .card { + &#{$parent}, + #{$parent} { + &:hover { + border-color: $border-color; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_caret.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_caret.scss new file mode 100644 index 0000000..cd4b1df --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_caret.scss @@ -0,0 +1,64 @@ +// * Carets +// ******************************************************************************* + +@mixin caret-up($caret-width) { + margin-top: 0.97 * divide($caret-width, 2); + margin-left: 0.8em; + width: $caret-width; + height: $caret-width; + border: 2px solid; + border-bottom: 0; + border-left: 0; + transform: rotate(-45deg); + @include rtl-style { + margin-right: 0.8em !important; + margin-left: 0 !important; + } +} + +@mixin caret-down($caret-width) { + margin-top: -1.08 * divide($caret-width, 2); + margin-left: 0.8em; + width: $caret-width; + height: $caret-width; + border: 2px solid; + border-top: 0; + border-left: 0; + transform: rotate(45deg); + @include rtl-style { + margin-right: 0.8em !important; + margin-left: 0 !important; + } +} + +@mixin caret-left($caret-width) { + margin-top: 0; + margin-right: 0.5em; + width: $caret-width; + height: $caret-width; + border: 2px solid; + border-top: 0; + border-right: 0; + transform: rotate(45deg); + @include rtl-style { + margin-right: 0 !important; + margin-left: $caret-spacing !important; + transform: rotate(225deg); + } +} + +@mixin caret-right($caret-width) { + margin-top: 0; + margin-right: 0.5em; + width: $caret-width; + height: $caret-width; + border: 2px solid; + border-top: 0; + border-left: 0; + transform: rotate(-45deg); + @include rtl-style { + margin-left: 0 !important; + margin-right: $caret-spacing !important; + transform: rotate(135deg); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_dropdown.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_dropdown.scss new file mode 100644 index 0000000..05f4c00 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_dropdown.scss @@ -0,0 +1,33 @@ +// * Dropdowns +// ******************************************************************************* + +@mixin template-dropdown-variant($parent, $background, $color: null) { + #{$parent} .dropdown-item { + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($color, 0.2) 0, + rgba($color, 0.3) 40%, + rgba($color, 0.4) 50%, + rgba($color, 0.5) 60%, + rgba($white, 0) 70% + ); + } + } + &:not(.disabled).active, + &:not(.disabled):active { + background-color: $background; + color: if($color, $color, color-contrast($background)) !important; + } + } + + #{$parent}.dropdown-menu > li:not(.disabled) > a:not(.dropdown-item):active, + #{$parent}.dropdown-menu > li.active:not(.disabled) > a:not(.dropdown-item) { + background-color: $background; + color: if($color, $color, color-contrast($background)) !important; + } +} + +@mixin template-dropdown-theme($background, $color: null) { + @include template-dropdown-variant('', $background, $color); +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_forms.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_forms.scss new file mode 100644 index 0000000..d5270c0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_forms.scss @@ -0,0 +1,361 @@ +// * Form controls +// ******************************************************************************* + +// Form control +@mixin template-form-control-theme($color) { + .form-control:focus, + .form-select:focus { + border-color: $color !important; + } + + // Using :focus-within to apply focus border color to default and merged input-group + .input-group { + &:focus-within { + .form-control, + .input-group-text { + border-color: $color !important; + } + } + } +} + +// Float labels +@mixin template-float-label-theme($color) { + .form-floating { + > .form-control:focus, + > .form-control:focus:not(:placeholder-shown), + > .form-select:focus, + > .form-select:focus:not(:placeholder-shown) { + ~ label { + color: $color; + } + } + } +} + +// Form Switch +@mixin template-form-switch-theme($background) { + $focus-color: $background; + $focus-bg-image: str-replace(str-replace($form-switch-focus-bg-image, '#{$form-switch-color}', $white), '#', '%23'); + + $checked-color: $component-active-color; + $checked-bg-image: str-replace( + str-replace($form-switch-checked-bg-image, '#{$form-switch-checked-color}', $checked-color), + '#', + '%23' + ); + + .form-switch { + .form-check-input { + &:focus { + background-image: escape-svg($focus-bg-image); + } + + &:checked { + @if $enable-gradients { + background-image: escape-svg($checked-bg-image), var(--#{$variable-prefix}gradient); + } @else { + background-image: escape-svg($checked-bg-image); + } + } + } + } +} + +// File Input +@mixin template-file-input-theme($color) { + .form-control:focus ~ .form-label { + border-color: $color; + + &::after { + border-color: inherit; + } + } +} + +// Form Check +@mixin template-form-check-variant($parent, $background, $color: null) { + $color: if($color, $color, color-contrast($background)); + $focus-border: $background; + $focus-color: 0 0 $input-btn-focus-blur $input-focus-width rgba($color, $input-btn-focus-color-opacity); + + #{$parent} .form-check-input { + &:checked { + background-color: $background; + border-color: $background; + box-shadow: 0 2px 6px 0 rgba($background, 0.3); + } + + &[type='checkbox']:indeterminate { + background-color: $background; + border-color: $background; + box-shadow: 0 2px 6px 0 rgba($background, 0.3); + } + } + + // Custom options + #{$parent}.custom-option { + &.checked { + border: $input-focus-border-width solid $background !important; + margin: 0; + .custom-option-body, + .custom-option-header { + i { + color: $background; + } + } + } + &.custom-option-label { + &.checked { + background-color: rgba($background, 0.12); + color: $background; + .custom-option-header span, + .custom-option-title { + color: $background; + } + } + } + } +} + +@mixin template-form-check-theme($background, $color: null) { + @include template-form-check-variant('', $background, $color); +} + +// Form Validation + +@mixin form-validation-state( + $state: null, + $color: null, + $icon: null, + $tooltip-color: null, + $tooltip-bg-color: null, + $focus-box-shadow: null, + $border-color: null +) { +} + +@mixin template-form-validation-state( + $state, + $color, + $icon, + $tooltip-color: color-contrast($color), + $tooltip-bg-color: rgba($color, $form-feedback-tooltip-opacity), + $focus-box-shadow: none, + $border-color: $color +) { + .#{$state}-feedback { + display: none; + width: 100%; + margin-top: $form-feedback-margin-top; + @include font-size($form-feedback-font-size); + font-style: $form-feedback-font-style; + color: $color; + } + + .#{$state}-tooltip { + position: absolute; + top: 100%; + z-index: 5; + display: none; + max-width: 100%; // Contain to parent when possible + padding: $form-feedback-tooltip-padding-y $form-feedback-tooltip-padding-x; + margin-top: 0.1rem; + @include font-size($form-feedback-tooltip-font-size); + line-height: $form-feedback-tooltip-line-height; + color: $tooltip-color; + background-color: $tooltip-bg-color; + @include border-radius($form-feedback-tooltip-border-radius); + } + + @include form-validation-state-selector($state) { + ~ .#{$state}-feedback, + ~ .#{$state}-tooltip { + display: block; + } + } + + .form-control { + @include form-validation-state-selector($state) { + border-color: $color !important; + border-width: $input-focus-border-width; + ~ .input-group-text { + border-width: $input-focus-border-width; + } + + .dark-style & { + border-color: $color !important; + } + + @if $enable-validation-icons { + background-image: escape-svg($icon); + background-repeat: no-repeat; + background-size: $input-height-inner-half $input-height-inner-half; + + @include ltr-style { + padding-right: $input-height-inner; + background-position: right $input-height-inner-quarter center; + } + @include rtl-style { + padding-left: $input-height-inner; + background-position: left $input-height-inner-quarter center; + } + } + + &:focus { + border-color: $color !important; + box-shadow: $focus-box-shadow; + } + } + } + + // StyleLint-disable-next-line selector-no-qualifying-type + textarea.form-control { + @include form-validation-state-selector($state) { + @if $enable-validation-icons { + @include ltr-style { + padding-right: $input-height-inner; + background-position: top $input-height-inner-quarter right $input-height-inner-quarter; + } + @include rtl-style { + padding-left: $input-height-inner; + background-position: top $input-height-inner-quarter left $input-height-inner-quarter; + } + } + } + } + + .form-select { + @include form-validation-state-selector($state) { + border-color: $color !important; + background-image: escape-svg($form-select-indicator), escape-svg($icon); + border-width: $input-focus-border-width; + ~ .input-group-text { + border-width: $input-focus-border-width; + } + @include ltr-style { + background-position: $form-select-bg-position, $form-select-feedback-icon-position; + } + @include rtl-style { + background-position: + left $form-select-padding-x center, + center left $form-select-indicator-padding; // RTL + } + + @if $enable-validation-icons { + background-size: $form-select-bg-size, $form-select-feedback-icon-size; + @include ltr-style { + background-image: escape-svg($form-select-indicator), escape-svg($icon); + padding-right: $form-select-feedback-icon-padding-end; + background-position: $form-select-bg-position, $form-select-feedback-icon-position; + } + @include rtl-style { + background-image: escape-svg($form-select-indicator), escape-svg($icon); + padding-left: $form-select-feedback-icon-padding-end; + background-position: + left $form-select-padding-x center, + center left $form-select-indicator-padding; // RTL + } + } + + &:focus { + border-color: $color; + box-shadow: $focus-box-shadow; + } + } + } + .form-switch .form-check-input { + @include form-validation-state-selector($state) { + background-color: $color; + } + } + .form-check-input { + @include form-validation-state-selector($state) { + border-color: $color; + + &:checked { + background-color: $color; + border-color: $color; + } + + &:active { + box-shadow: $focus-box-shadow; + border-color: $color; + } + + ~ .form-check-label { + color: $color; + } + } + } + .form-check-inline .form-check-input { + ~ .#{$state}-feedback { + @include ltr-style { + margin-left: 0.5em; + } + @include rtl-style { + margin-right: 0.5em; + } + } + } + // On validation .input-group & .input-group-merged, setup proper border color & box-shadow + .input-group { + .form-control { + @include form-validation-state-selector($state) { + ~ .input-group-text { + border-color: $color !important; + } + &:focus { + border-color: $color !important; + box-shadow: none; + // ? .input-group has .input-group-text last/sibling + ~ .input-group-text { + border-color: $color !important; + } + } + } + } + } + + .form-control { + @include form-validation-state-selector($state) { + &:focus { + .input-group & { + box-shadow: none; + } + } + } + } + + .input-group .form-control, + .input-group .form-select { + @include form-validation-state-selector($state) { + z-index: 3; + } + } + + @if ($state == 'invalid') { + .was-validated .input-group:has(.input-group-text):has(.form-control:invalid) .input-group-text, + .input-group:has(.input-group-text):has(.form-control.is-invalid) .input-group-text { + border-color: $color; + } + .was-validated .input-group:has(input:invalid) { + .#{$state}-feedback, + .#{$state}-tooltip { + display: block; + } + } + } + @if ($state == 'valid') { + .was-validated .input-group:has(.input-group-text):has(.form-control:valid) .input-group-text, + .input-group:has(.input-group-text):has(.form-control.is-valid) .input-group-text { + border-color: $color; + } + .was-validated .input-group:has(input:valid) { + .#{$state}-feedback, + .#{$state}-tooltip { + display: block; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_list-group.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_list-group.scss new file mode 100644 index 0000000..50acaf4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_list-group.scss @@ -0,0 +1,86 @@ +// List groups +// ******************************************************************************* + +@mixin list-group-item-variant($state: null, $background: null, $color: null) { +} + +// Basic List groups +@mixin template-list-group-item-variant($parent, $background, $color: null) { + $border-color: if( + $dark-style, + shift-color($background, -$list-group-item-border-scale, $card-bg), + shift-color($background, $list-group-item-border-scale, $card-bg) + ); + $background-color: if( + $dark-style, + shift-color($background, -$list-group-item-bg-scale, $card-bg), + shift-color($background, $list-group-item-bg-scale, $card-bg) + ); + $border-color: if( + $dark-style, + if( + $parent == '.list-group-item-dark', + color-contrast($background), + shift-color($background, -$list-group-item-color-scale, $card-bg) + ), + shift-color($background, $list-group-item-color-scale, $card-bg) + ); + $color: shift-color($background, $list-group-item-color-scale); + $hover-background: shade-color($background-color, $list-group-item-bg-hover-scale); + #{$parent} { + border-color: $border-color; + background-color: $background-color; + color: $color !important; + } + + a#{$parent}, + button#{$parent} { + color: $color; + &:hover, + &:focus { + border-color: $border-color; + background-color: $hover-background; + color: $color; + } + + &.active { + border-color: $border-color !important; + background-color: $background !important; + // color: if($color, $color, color-contrast($background)); + color: color-contrast($background) !important; + } + } +} + +@mixin template-list-group-theme($background, $color: null) { + @include template-list-group-item-variant('.list-group-item-primary', $background); + + .list-group-item.active { + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg); + color: $background; + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($background, 0.2) 0, + rgba($background, 0.3) 40%, + rgba($background, 0.4) 50%, + rgba($background, 0.5) 60%, + rgba($black, 0) 70% + ); + } + } + } +} + +@mixin template-list-group-timeline-variant($parent, $background) { + .list-group { + &.list-group-timeline { + #{$parent} { + &:before { + border-color: $background; + background-color: $background; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_misc.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_misc.scss new file mode 100644 index 0000000..9c79146 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_misc.scss @@ -0,0 +1,158 @@ +// * Light/Dark layout +// ******************************************************************************* +@mixin light-layout-only() { + @if $dark-style { + html:not(.dark-style) { + @content; + } + } @else { + @content; + } +} + +@mixin dark-layout-only() { + @if $dark-style { + .dark-style { + @content; + } + } +} + +// * RTL/LTR +// ******************************************************************************* + +@mixin ltr-only() { + @if $rtl-support { + html:not([dir='rtl']) { + @content; + } + } @else { + @content; + } +} + +@mixin rtl-only() { + @if $rtl-support { + [dir='rtl'] { + @content; + } + } +} + +@mixin ltr-style() { + @if $rtl-support { + html:not([dir='rtl']) & { + @content; + } + } @else { + @content; + } +} + +@mixin rtl-style() { + @if $rtl-support { + [dir='rtl'] & { + @content; + } + } +} + +// * Keyframes +// ******************************************************************************* + +@mixin keyframes($name) { + @-webkit-keyframes #{$name} { + @content; + } + + @-moz-keyframes #{$name} { + @content; + } + + @keyframes #{$name} { + @content; + } +} + +// * Colors +// ******************************************************************************* + +@mixin bg-color-variant($parent, $color, $rth-color: #000) { + #{$parent} { + background-color: $color !important; + } + + a#{$parent} { + &:hover, + &:focus { + background-color: rgba-to-hex(rgba($color, 0.95), $background: $rth-color) !important; + } + } + + //! Fix: Dropdown notification read badge bg color + .dropdown-notifications-item:not(.mark-as-read) { + .dropdown-notifications-read span { + background-color: $color; + } + } +} + +@mixin bg-variant($parent, $color, $rth-color: #000) { + @include bg-color-variant($parent, $color); +} +@mixin bg-glow-variant($parent, $color) { + #{$parent} { + &.bg-glow { + box-shadow: 0px 2px 3px 0px rgba($color, 0.3); + } + } +} + +// BG Label +@mixin bg-label-variant($parent, $background, $color: $background) { + $label-background: if( + $dark-style, + shade-color($background, $btn-label-bg-shade-amount, $card-bg), + tint-color($background, $btn-label-bg-tint-amount, $card-bg) + ); + #{$parent} { + background-color: $label-background !important; + color: if($color, $color, color-contrast($bg)) !important; + } +} + +// BG hover: label to solid +@mixin bg-label-hover-variant($parent, $background, $color: $background) { + $label-background: if( + $dark-style, + shade-color($background, $btn-label-bg-shade-amount, $card-bg), + tint-color($background, $btn-label-bg-tint-amount, $card-bg) + ); + #{$parent} { + background-color: $label-background !important; + color: if($color, $color, color-contrast($bg)) !important; + &:hover { + background-color: $background !important; + color: $white !important; + } + } +} + +@mixin bg-gradient-variant($parent, $background, $deg: 45deg) { + #{$parent} { + background-image: linear-gradient($deg, $background, rgba-to-hex(rgba($background, 0.5))) !important; + } +} + +@mixin text-variant($parent, $color) { + #{$parent} { + color: $color !important; + } + //! Fix: text-body hover color + .text-body, + .text-heading { + &[href]:hover { + color: shift-color($color, $link-shade-percentage) !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_modal.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_modal.scss new file mode 100644 index 0000000..e838924 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_modal.scss @@ -0,0 +1,20 @@ +// Modal +// ******************************************************************************* + +@mixin template-modal-onboarding-theme($background, $color) { + .modal-onboarding { + .carousel-indicators { + [data-bs-target] { + background-color: $background; + } + } + } + .carousel-control-prev, + .carousel-control-next { + color: $background; + &:hover, + &:focus { + color: $background; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_navs.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_navs.scss new file mode 100644 index 0000000..85900ed --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_navs.scss @@ -0,0 +1,101 @@ +// Navs +// ******************************************************************************* + +@mixin template-nav-size($padding-y, $padding-x, $font-size, $line-height) { + > .nav .nav-link, + &.nav .nav-link { + padding: $padding-y $padding-x; + font-size: $font-size; + line-height: $line-height; + } +} + +@mixin template-nav-variant($parent, $background, $color: null) { + $pills-selector: if($parent== '', '.nav-pills', '#{$parent}.nav-pills, #{$parent} > .nav-pills'); + + #{$pills-selector} .nav-link.active { + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + &, + &:hover, + &:focus { + background-color: $background; + color: if($color, $color, color-contrast($background)); + } + } + + #{$parent}.nav-tabs { + .nav-link { + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($background, 0.2) 0, + rgba($background, 0.3) 40%, + rgba($background, 0.4) 50%, + rgba($background, 0.5) 60%, + rgba($white, 0) 70% + ); + } + } + } + } + + #{$parent}.nav-tabs .nav-link.active, + #{$parent}.nav-tabs .nav-link.active { + &, + &:hover, + &:focus { + box-shadow: 0 -2px 0 $background inset; + } + } + + .nav-align-bottom .nav-tabs .nav-link.active, + .nav-align-bottom .nav-tabs .nav-link.active { + &, + &:hover, + &:focus { + box-shadow: 0 2px 0 $background inset; + } + } + + .nav-align-left .nav-tabs .nav-link.active, + .nav-align-left .nav-tabs .nav-link.active { + &, + &:hover, + &:focus { + box-shadow: -2px 0px 0 $background inset; + } + } + + .nav-align-right .nav-tabs .nav-link.active, + .nav-align-right .nav-tabs .nav-link.active { + &, + &:hover, + &:focus { + box-shadow: 2px 0px 0 $background inset; + } + } + + @include rtl-only { + .nav-align-left .nav-tabs .nav-link.active, + .nav-align-left .nav-tabs .nav-link.active { + &, + &:hover, + &:focus { + box-shadow: 2px 0px 0 $background inset; + } + } + + .nav-align-right .nav-tabs .nav-link.active, + .nav-align-right .nav-tabs .nav-link.active { + &, + &:hover, + &:focus { + box-shadow: -2px 0px 0 $background inset; + } + } + } +} + +@mixin template-nav-theme($background, $color: null) { + @include template-nav-variant('', $background, $color); +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_pagination.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_pagination.scss new file mode 100644 index 0000000..f08551a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_pagination.scss @@ -0,0 +1,73 @@ +// Pagination +// ******************************************************************************* + +// Basic Pagination +@mixin template-pagination-variant($parent, $background, $color: null) { + $hover-background: if( + $dark-style, + shade-color($background, $pagination-hover-bg-scale, $rgba-to-hex-bg), + tint-color($background, $pagination-hover-bg-scale, $rgba-to-hex-bg) + ); + #{$parent} .page-item .page-link, + #{$parent}.pagination li > a:not(.page-link) { + &:hover, + &:focus { + background-color: $hover-background; + color: $background; + } + } + #{$parent} .page-item.active .page-link, + #{$parent}.pagination li.active > a:not(.page-link) { + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + &, + &:hover, + &:focus { + border-color: $background; + background-color: $background; + color: if($color, $color, color-contrast($background)); + } + } + #{$parent} .page-item .page-link, + #{$parent}.pagination li > a:not(.page-link) { + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($background, 0.2) 0, + rgba($background, 0.3) 40%, + rgba($background, 0.4) 50%, + rgba($background, 0.5) 60%, + rgba($black, 0) 70% + ); + } + } + } +} + +// Pagination Outline Variant +@mixin template-pagination-outline-variant($parent, $background, $color: null) { + #{$parent} .page-item.active .page-link, + #{$parent}.pagination li.active > a:not(.page-link) { + &, + &:hover, + &:focus { + border-color: $background !important; + color: $background !important; + background-color: rgba-to-hex(rgba($background, 0.16), $card-bg) !important; + } + &.waves-effect { + .waves-ripple { + background: radial-gradient( + rgba($background, 0.2) 0, + rgba($background, 0.3) 40%, + rgba($background, 0.4) 50%, + rgba($background, 0.5) 60%, + rgba($black, 0) 70% + ); + } + } + } +} + +@mixin template-pagination-theme($background, $color: null) { + @include template-pagination-variant('', $background, $color); +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_popover.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_popover.scss new file mode 100644 index 0000000..94b07fd --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_popover.scss @@ -0,0 +1,53 @@ +// Popovers +// ******************************************************************************* + +@mixin template-popover-variant($parent, $background, $color: null) { + $color: if($color, $color, color-contrast($background)); + + #{$parent} { + border-color: transparent; + background: $background; + + .popover-header { + border-color: $background; + background: transparent; + color: $color; + } + + .popover-body { + background: transparent; + color: rgba($color, 0.8); + } + + > .popover-arrow::before { + border-color: transparent; + } + &.bs-popover-auto { + &[data-popper-placement='top'] > .popover-arrow::after { + border-top-color: $background !important; + } + + &[data-popper-placement='right'] > .popover-arrow::after { + border-right-color: $background !important; + @include rtl-style { + border-left-color: $background !important; + } + } + + &[data-popper-placement='bottom'] > .popover-arrow::after { + border-bottom-color: $background !important; + } + + &[data-popper-placement='left'] > .popover-arrow::after { + border-left-color: $background !important; + @include rtl-style { + border-right-color: $background !important; + } + } + + &[data-popper-placement='bottom'] .popover-header::before { + border-bottom: 1px solid transparent !important; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_progress.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_progress.scss new file mode 100644 index 0000000..02f92f2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_progress.scss @@ -0,0 +1,14 @@ +// Progress bars +// ******************************************************************************* + +@mixin template-progress-bar-theme($background, $color: null) { + .progress-bar { + background-color: $background; + color: if($color, $color, color-contrast($background)); + } +} +@mixin template-progress-shadow-theme($parent, $background) { + #{$parent} { + box-shadow: 0 0.125rem 0.375rem 0 rgba($background, 0.3); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_table-variants.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_table-variants.scss new file mode 100644 index 0000000..8f94d41 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_table-variants.scss @@ -0,0 +1,26 @@ +// Tables +// ******************************************************************************* + +@mixin template-table-variant($parent, $background, $layout-color: $white) { + .table-#{$parent} { + $color: color-contrast(opaque($body-bg, $background)); + $hover-bg: mix($color, $background, percentage($table-hover-bg-factor)); + $striped-bg: mix($color, $background, percentage($table-striped-bg-factor)); + $active-bg: mix($color, $background, percentage($table-active-bg-factor)); + + --#{$variable-prefix}table-bg: #{$background}; + --#{$variable-prefix}table-striped-bg: #{$striped-bg}; + --#{$variable-prefix}table-striped-color: #{color-contrast($striped-bg)}; + --#{$variable-prefix}table-active-bg: #{$active-bg}; + --#{$variable-prefix}table-active-color: #{color-contrast($active-bg)}; + --#{$variable-prefix}table-hover-bg: #{$hover-bg}; + --#{$variable-prefix}table-hover-color: #{color-contrast($hover-bg)}; + + color: $color; + border-color: mix($color, $background, percentage($table-border-factor)); + .btn-icon, + .btn { + color: $color; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_tooltip.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_tooltip.scss new file mode 100644 index 0000000..93657ba --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap-extended/mixins/_tooltip.scss @@ -0,0 +1,35 @@ +// Tooltips +// ******************************************************************************* + +@mixin template-tooltip-variant($parent, $background, $color: null) { + #{$parent} { + .tooltip-inner { + background: $background; + color: if($color, $color, color-contrast($background)); + } + + &.bs-tooltip-auto { + &[data-popper-placement='top'] .tooltip-arrow::before { + border-top-color: $background; + } + + &[data-popper-placement='left'] .tooltip-arrow::before { + border-left-color: $background; + @include rtl-style { + border-right-color: $background; + } + } + + &[data-popper-placement='bottom'] .tooltip-arrow::before { + border-bottom-color: $background; + } + + &[data-popper-placement='right'] .tooltip-arrow::before { + border-right-color: $background; + @include rtl-style { + border-left-color: $background; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_bootstrap.scss b/src/modules/Resources/assets/vendor/scss/_bootstrap.scss new file mode 100644 index 0000000..cbf6f2a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_bootstrap.scss @@ -0,0 +1,43 @@ +@import 'bootstrap/scss/mixins/banner'; +@include bsBanner(''); + +@import '_bootstrap-extended/include'; + +// Import bootstrap core scss from node_module +// ! Utilities are customized and added in bootstrap-extended + +// Layout & components +@import 'bootstrap/scss/root'; +@import 'bootstrap/scss/reboot'; +@import 'bootstrap/scss/type'; +@import 'bootstrap/scss/images'; +@import 'bootstrap/scss/containers'; +@import 'bootstrap/scss/grid'; +@import 'bootstrap/scss/tables'; +@import 'bootstrap/scss/forms'; +@import 'bootstrap/scss/buttons'; +@import 'bootstrap/scss/transitions'; +@import 'bootstrap/scss/dropdown'; +@import 'bootstrap/scss/button-group'; +@import 'bootstrap/scss/nav'; +@import 'bootstrap/scss/navbar'; +@import 'bootstrap/scss/card'; +@import 'bootstrap/scss/accordion'; +@import 'bootstrap/scss/breadcrumb'; +@import 'bootstrap/scss/pagination'; +@import 'bootstrap/scss/badge'; +@import 'bootstrap/scss/alert'; +@import 'bootstrap/scss/progress'; +@import 'bootstrap/scss/list-group'; +@import 'bootstrap/scss/close'; +@import 'bootstrap/scss/toasts'; +@import 'bootstrap/scss/modal'; +@import 'bootstrap/scss/tooltip'; +@import 'bootstrap/scss/popover'; +@import 'bootstrap/scss/carousel'; +@import 'bootstrap/scss/spinners'; +@import 'bootstrap/scss/offcanvas'; +@import 'bootstrap/scss/placeholders'; + +// Helpers +@import 'bootstrap/scss/helpers'; diff --git a/src/modules/Resources/assets/vendor/scss/_colors-dark.scss b/src/modules/Resources/assets/vendor/scss/_colors-dark.scss new file mode 100644 index 0000000..9af501a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_colors-dark.scss @@ -0,0 +1,136 @@ +@import '_components/include-dark'; + +// * Custom colors +// ******************************************************************************* + +$facebook: #3b5998 !default; +$twitter: #1da1f2 !default; +$google-plus: #dd4b39 !default; +$instagram: #e1306c !default; +$linkedin: #0077b5 !default; +$github: #cfcde4 !default; +$dribbble: #ea4c89 !default; +$pinterest: #cb2027 !default; +$slack: #4a154b !default; +$reddit: #ff4500 !default; +$youtube: #ff0000 !default; +$vimeo: #1ab7ea !default; + +$custom-colors: ( + 'facebook': $facebook, + 'twitter': $twitter, + 'google-plus': $google-plus, + 'instagram': $instagram, + 'linkedin': $linkedin, + 'github': $github, + 'dribbble': $dribbble, + 'pinterest': $pinterest, + 'slack': $slack, + 'reddit': $reddit, + 'youtube': $youtube, + 'vimeo': $vimeo +) !default; + +:root { + @each $color, $value in $custom-colors { + --#{$prefix}#{$color}: #{$value}; + } +} + +@each $color-name, $color-value in $custom-colors { + @include bg-variant('.bg-#{$color-name}', $color-value); + @include bg-label-variant('.bg-label-#{$color-name}', $color-value); + @include bg-label-hover-variant('.bg-label-hover-#{$color-name}', $color-value); + + @include template-button-variant('.btn-#{$color-name}', $color-value); + @include template-button-label-variant('.btn-label-#{$color-name}', $color-value); + @include template-button-outline-variant('.btn-outline-#{$color-name}', $color-value); + @include template-button-text-variant('.btn-text-#{$color-name}', $color-value); +} + +// * Bootstrap colors (Uncomment required colors) +// ******************************************************************************* + +$bootstrap-colors: ( + // blue: $blue, + // indigo: $indigo, + // purple: $purple, + // pink: $pink, + // orange: $orange, + // teal: $teal +) !default; + +@each $color-name, $color-value in $bootstrap-colors { + @include bg-variant('.bg-#{$color-name}', $color-value); + @include bg-label-variant('.bg-label-#{$color-name}', $color-value); + @include bg-label-hover-variant('.bg-label-hover-#{$color-name}', $color-value); + @include bg-gradient-variant('.bg-gradient-#{$color-name}', $color-value); + + .border-#{$color-name} { + border-color: $color-value !important; + } + + @include template-button-variant('.btn-#{$color-name}', $color-value); + @include template-button-label-variant('.btn-label-#{$color-name}', $color-value); + @include template-button-outline-variant('.btn-outline-#{$color-name}', $color-value); +} + +// * Buttons +// ******************************************************************************* + +@include template-button-variant('.btn-white', $white, $body-color); +@include template-button-label-variant('.btn-label-white', $white, $body-color); +@include template-button-outline-variant('.btn-outline-white', $white, $body-color); + +// ! ToDo: Custom colors (checkbox & radio) +// ******************************************************************************* + +$form-control-colors: ( + black: #000, + white: #fff, + silver: #eee, + gray: #777, + gold: #ffeb3b, + pink: #e91e63, + red: #f44336 +) !default; + +@each $color-name, $color-value in $form-control-colors { + @include template-form-check-variant('.form-check-#{$color-name}', $color-value); +} + +// * Navbar +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color !=primary and $color !=light { + @include template-navbar-style('.navbar.bg-#{$color}', $value); + } +} + +@include template-navbar-style('.navbar.bg-white', #fff, $color: $black, $active-color: $black); +@include template-navbar-style('.navbar.bg-light', $light, $color: $body-color, $active-color: $headings-color); +@include template-navbar-style('.navbar.bg-lighter', $gray-50, $color: $body-color, $active-color: $headings-color); + +// * Footer +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color !=primary and $color !=light { + @include template-footer-style('.footer.bg-#{$color}', $value); + } +} + +@include template-footer-style('.footer.bg-white', #fff, $color: #6d6b77, $active-color: #444050); +@include template-footer-style( + '.footer.bg-light', + rgba-to-hex($gray-100, $rgba-to-hex-bg), + $color: $body-color, + $active-color: $headings-color +); +@include template-footer-style( + '.footer.bg-lighter', + rgba-to-hex($gray-50, $rgba-to-hex-bg), + $color: $body-color, + $active-color: $headings-color +); diff --git a/src/modules/Resources/assets/vendor/scss/_colors.scss b/src/modules/Resources/assets/vendor/scss/_colors.scss new file mode 100644 index 0000000..384dc7a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_colors.scss @@ -0,0 +1,126 @@ +@import '_components/include'; + +// * Custom colors +// ******************************************************************************* + +$facebook: #3b5998 !default; +$twitter: #1da1f2 !default; +$google-plus: #dd4b39 !default; +$instagram: #e1306c !default; +$linkedin: #0077b5 !default; +$github: #444050 !default; +$dribbble: #ea4c89 !default; +$pinterest: #cb2027 !default; +$slack: #4a154b !default; +$reddit: #ff4500 !default; +$youtube: #ff0000 !default; +$vimeo: #1ab7ea !default; + +$custom-colors: ( + 'facebook': $facebook, + 'twitter': $twitter, + 'google-plus': $google-plus, + 'instagram': $instagram, + 'linkedin': $linkedin, + 'github': $github, + 'dribbble': $dribbble, + 'pinterest': $pinterest, + 'slack': $slack, + 'reddit': $reddit, + 'youtube': $youtube, + 'vimeo': $vimeo +) !default; + +:root { + @each $color, $value in $custom-colors { + --#{$prefix}#{$color}: #{$value}; + } +} + +@each $color-name, $color-value in $custom-colors { + @include bg-variant('.bg-#{$color-name}', $color-value); + @include bg-label-variant('.bg-label-#{$color-name}', $color-value); + @include bg-label-hover-variant('.bg-label-hover-#{$color-name}', $color-value); + + @include template-button-variant('.btn-#{$color-name}', $color-value); + @include template-button-label-variant('.btn-label-#{$color-name}', $color-value); + @include template-button-outline-variant('.btn-outline-#{$color-name}', $color-value); + @include template-button-text-variant('.btn-text-#{$color-name}', $color-value); +} + +// * Bootstrap colors (Uncomment required colors) +// ******************************************************************************* + +$bootstrap-colors: ( + // blue: $blue, + // indigo: $indigo, + // purple: $purple, + // pink: $pink, + // orange: $orange, + // teal: $teal +) !default; + +@each $color-name, $color-value in $bootstrap-colors { + @include bg-variant('.bg-#{$color-name}', $color-value); + @include bg-label-variant('.bg-label-#{$color-name}', $color-value); + @include bg-label-hover-variant('.bg-label-hover-#{$color-name}', $color-value); + @include bg-gradient-variant('.bg-gradient-#{$color-name}', $color-value); + + .border-#{$color-name} { + border-color: $color-value !important; + } + + @include template-button-variant('.btn-#{$color-name}', $color-value); + @include template-button-label-variant('.btn-label-#{$color-name}', $color-value); + @include template-button-outline-variant('.btn-outline-#{$color-name}', $color-value); +} + +// * Buttons +// ******************************************************************************* + +@include template-button-variant('.btn-white', $white, $body-color); +@include template-button-label-variant('.btn-label-white', $white, $body-color); +@include template-button-outline-variant('.btn-outline-white', $white, $body-color); + +// ! ToDo: Custom colors (checkbox & radio) +// ******************************************************************************* + +$form-control-colors: ( + black: #000, + white: #fff, + silver: #eee, + gray: #777, + gold: #ffeb3b, + pink: #e91e63, + red: #f44336 +) !default; + +@each $color-name, $color-value in $form-control-colors { + @include template-form-check-variant('.form-check-#{$color-name}', $color-value); +} + +// * Navbar +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color !=primary and $color !=light { + @include template-navbar-style('.navbar.bg-#{$color}', $value); + } +} + +@include template-navbar-style('.navbar.bg-white', #fff, $color: $black, $active-color: $black); +@include template-navbar-style('.navbar.bg-light', $light, $color: $body-color, $active-color: $headings-color); +@include template-navbar-style('.navbar.bg-lighter', $gray-50, $color: $body-color, $active-color: $headings-color); + +// * Footer +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color !=primary and $color !=light { + @include template-footer-style('.footer.bg-#{$color}', $value); + } +} + +@include template-footer-style('.footer.bg-white', #fff, $color: $body-color, $active-color: $headings-color); +@include template-footer-style('.footer.bg-light', $light, $color: $body-color, $active-color: $headings-color); +@include template-footer-style('.footer.bg-lighter', $gray-50, $color: $body-color, $active-color: $headings-color); diff --git a/src/modules/Resources/assets/vendor/scss/_components-dark.scss b/src/modules/Resources/assets/vendor/scss/_components-dark.scss new file mode 100644 index 0000000..b4181f8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components-dark.scss @@ -0,0 +1,16 @@ +@import '_components/include-dark'; + +// Import components scss +@import '_components/base'; +@import '_components/common'; +@import '_components/menu'; +@import '_components/layout'; +@import '_components/app-brand'; +@import '_components/custom-options'; +@import '_components/switch'; +@import '_components/avatar'; +@import '_components/timeline'; +@import '_components/blockui'; +@import '_components/drag-drop'; +@import '_components/text-divider'; +@import '_components/footer'; diff --git a/src/modules/Resources/assets/vendor/scss/_components.scss b/src/modules/Resources/assets/vendor/scss/_components.scss new file mode 100644 index 0000000..e99d543 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components.scss @@ -0,0 +1,16 @@ +@import '_components/include'; + +// Import components scss +@import '_components/base'; +@import '_components/common'; +@import '_components/menu'; +@import '_components/layout'; +@import '_components/app-brand'; +@import '_components/custom-options'; +@import '_components/switch'; +@import '_components/avatar'; +@import '_components/timeline'; +@import '_components/blockui'; +@import '_components/drag-drop'; +@import '_components/text-divider'; +@import '_components/footer'; diff --git a/src/modules/Resources/assets/vendor/scss/_components/_app-brand.scss b/src/modules/Resources/assets/vendor/scss/_components/_app-brand.scss new file mode 100644 index 0000000..0671c29 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_app-brand.scss @@ -0,0 +1,75 @@ +// App Brand +// ******************************************************************************* + +@import 'mixins/app-brand'; + +.app-brand { + display: flex; + flex-grow: 0; + flex-shrink: 0; + overflow: hidden; + line-height: 1; + min-height: 1px; + align-items: center; +} +// For cover auth pages +.auth-cover-brand { + position: absolute; + z-index: 1; + inset-block-start: 2.5rem; + inset-inline-start: $spacer * 1.5; +} +.app-brand-link { + display: flex; + align-items: center; +} +.app-brand-logo { + display: block; + flex-grow: 0; + flex-shrink: 0; + overflow: hidden; + min-height: 1px; + + img, + svg { + display: block; + } +} + +.app-brand-text { + flex-shrink: 0; + opacity: 1; + transition: opacity $menu-animation-duration ease-in-out; + margin-inline-start: 0.75rem !important; +} + +.app-brand-img-collapsed { + display: none; +} + +.app-brand .layout-menu-toggle { + display: block; +} + +// App brand with vertical menu +.menu-vertical .app-brand { + padding-right: $menu-vertical-link-padding-x + 0.25rem; + padding-left: $menu-vertical-link-padding-x + 0.625rem; +} + +// App brand with vertical menu +.menu-horizontal .app-brand, +.menu-horizontal .app-brand + .menu-divider { + display: none !important; +} + +:not(.layout-menu) > .menu-vertical.menu-collapsed:not(.layout-menu):not(:hover) { + @include template-app-brand-collapsed(); +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) + .layout-menu { + @include template-app-brand-collapsed(); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_avatar.scss b/src/modules/Resources/assets/vendor/scss/_components/_avatar.scss new file mode 100644 index 0000000..1f054b1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_avatar.scss @@ -0,0 +1,157 @@ +// Avatar +// ******************************************************************************* + +// Avatar Styles +.avatar { + position: relative; + width: $avatar-size; + height: $avatar-size; + cursor: pointer; + img { + width: 100%; + height: 100%; + } + // Avatar Initials if no images added + .avatar-initial { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + text-transform: uppercase; + display: flex; + align-items: center; + justify-content: center; + color: $component-active-color; + background-color: $avatar-bg; + font-size: $avatar-initial; + } + // Avatar Status indication + &.avatar-online, + &.avatar-offline, + &.avatar-away, + &.avatar-busy { + &:after { + content: ''; + position: absolute; + bottom: 0; + right: 3px; + width: 8px; + height: 8px; + border-radius: 100%; + box-shadow: 0 0 0 2px $avatar-group-border; + } + } + &.avatar-online:after { + background-color: $success; + } + &.avatar-offline:after { + background-color: $secondary; + } + &.avatar-away:after { + background-color: $warning; + } + &.avatar-busy:after { + background-color: $danger; + } +} + +// Pull up avatar style +.pull-up { + transition: all 0.25s ease; + &:hover { + transform: translateY(-5px); + box-shadow: $box-shadow; + z-index: 30; + border-radius: 50%; + } +} + +// Avatar Sizes +.avatar-xs { + @include template-avatar-style($avatar-size-xs, $avatar-size-xs, $avatar-initial-xs, 1px); +} +.avatar-sm { + @include template-avatar-style($avatar-size-sm, $avatar-size-sm, $avatar-initial-sm, 2px); +} +.avatar-md { + @include template-avatar-style($avatar-size-md, $avatar-size-md, $avatar-initial-md, 4px); +} +.avatar-lg { + @include template-avatar-style($avatar-size-lg, $avatar-size-lg, $avatar-initial-lg, 5px); +} +.avatar-xl { + @include template-avatar-style($avatar-size-xl, $avatar-size-xl, $avatar-initial-xl, 6px); +} + +// Avatar Group SCSS +.avatar-group { + .avatar { + transition: all 0.25s ease; + img, + .avatar-initial { + border: 2px solid $avatar-group-border; + // box-shadow: 0 0 0 2px $avatar-group-border, inset 0 0 0 1px rgba($black, 0.07); //0 2px 10px 0 rgba($secondary,.3); + } + .avatar-initial { + background-color: $avatar-bg; + color: $headings-color; + } + &:hover { + z-index: 30 !important; + transition: all 0.25s ease; + } + } +} +// Avatar Group LTR only with sizing +@include ltr-only { + .avatar-group { + // Avatar Group Sizings + .avatar { + margin-left: -0.8rem; + &:first-child { + margin-left: 0; + } + } + .avatar-xs { + margin-left: -0.65rem; + } + .avatar-sm { + margin-left: -0.75rem; + } + .avatar-md { + margin-left: -0.9rem; + } + .avatar-lg { + margin-left: -1.5rem; + } + .avatar-xl { + margin-left: -1.75rem; + } + } +} +// Avatar Group RTL with sizing +@include rtl-only { + .avatar-group { + // Avatar Group Sizings + .avatar { + margin-right: -0.8rem; + margin-left: 0; + } + .avatar-xs { + margin-right: -0.65rem; + } + .avatar-sm { + margin-right: -0.75rem; + } + .avatar-md { + margin-right: -0.9rem; + } + .avatar-lg { + margin-right: -1.5rem; + } + .avatar-xl { + margin-right: -1.75rem; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_base.scss b/src/modules/Resources/assets/vendor/scss/_components/_base.scss new file mode 100644 index 0000000..5e377d5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_base.scss @@ -0,0 +1,183 @@ +// Base +// ******************************************************************************* + +body { + text-rendering: optimizeLegibility; + font-smoothing: antialiased; + -moz-font-feature-settings: 'liga' on; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +@include media-breakpoint-up(md) { + button.list-group-item { + outline: none; + } +} + +// * App Overlay +// ******************************************************************************* + +.app-overlay { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + visibility: hidden; + z-index: 3; + transition: all 0.25s ease; + &.show { + visibility: visible; + } + @if not $dark-style { + .light-style & { + background-color: rgba($black, 0.5); + } + } + @if $dark-style { + .dark-style & { + background-color: rgba($modal-backdrop-bg, 0.6); + } + } +} + +// * Containers +// ******************************************************************************* + +.container, +.container-fluid, +.container-xxl { + padding-right: $container-padding-x-sm; + padding-left: $container-padding-x-sm; + + @include media-breakpoint-up(lg) { + padding-right: $container-padding-x; + padding-left: $container-padding-x; + } +} + +// * Thumbnails +// ******************************************************************************* + +.img-thumbnail { + position: relative; + display: block; + img { + z-index: 1; + } +} +.img-thumbnail-content { + position: absolute; + top: 50%; + left: 50%; + z-index: 3; + display: block; + opacity: 0; + transition: all 0.2s ease-in-out; + transform: translate(-50%, -50%); + + .img-thumbnail:hover &, + .img-thumbnail:focus & { + opacity: 1; + } +} + +// Overlay effect +.img-thumbnail-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 2; + display: block; + transition: all 0.2s ease-in-out; + + .img-thumbnail:not(:hover):not(:focus) & { + opacity: 0 !important; + } +} + +.img-thumbnail-shadow { + transition: box-shadow 0.2s; + + &:hover, + &:focus { + box-shadow: 0 5px 20px rgba($black, 0.4); + } +} + +// Zoom-in effect +.img-thumbnail-zoom-in { + overflow: hidden; + + img { + transition: all 0.3s ease-in-out; + transform: translate3d(0); + } + + .img-thumbnail-content { + transform: translate(-50%, -50%) scale(0.6); + } + + &:hover, + &:focus { + img { + transform: scale(1.1); + } + + .img-thumbnail-content { + transform: translate(-50%, -50%) scale(1); + } + } +} + +// * IE Fixes +// ******************************************************************************* + +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + // Fix IE parent container height bug when containing image with fluid width + .card, + .card-body, + .media, + .flex-column, + .tab-content { + min-height: 1px; + } + + img { + min-height: 1px; + height: auto; + } +} + +// * RTL +// ******************************************************************************* + +@if $rtl-support { + [dir='rtl'] body { + text-align: right; + direction: rtl; + } +} + +// * Buy now section +// ******************************************************************************* +.buy-now { + .btn-buy-now { + position: fixed; + bottom: 3rem; + + right: $container-padding-x; + @include rtl-style() { + left: $container-padding-x; + right: inherit; + } + z-index: $zindex-menu-fixed; + box-shadow: 0 1px 20px 1px $danger !important; + &:hover { + box-shadow: none; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_blockui.scss b/src/modules/Resources/assets/vendor/scss/_components/_blockui.scss new file mode 100644 index 0000000..3b6531d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_blockui.scss @@ -0,0 +1,10 @@ +// Block UI +// ******************************************************************************* + +.blockUI { + &.blockOverlay, + &.blockMsg { + z-index: $zindex-modal + 1 !important; + color: $white !important; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_common.scss b/src/modules/Resources/assets/vendor/scss/_components/_common.scss new file mode 100644 index 0000000..ceef436 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_common.scss @@ -0,0 +1,255 @@ +// * Common +// ******************************************************************************* + +@use '../_bootstrap-extended/include' as light; + +.ui-square, +.ui-rect, +.ui-rect-30, +.ui-rect-60, +.ui-rect-67, +.ui-rect-75 { + position: relative !important; + display: block !important; + padding-top: 100% !important; + width: 100% !important; +} + +.ui-square { + padding-top: 100% !important; +} + +.ui-rect { + padding-top: 50% !important; +} + +.ui-rect-30 { + padding-top: 30% !important; +} + +.ui-rect-60 { + padding-top: 60% !important; +} + +.ui-rect-67 { + padding-top: 67% !important; +} + +.ui-rect-75 { + padding-top: 75% !important; +} + +.ui-square-content, +.ui-rect-content { + position: absolute !important; + top: 0 !important; + right: 0 !important; + bottom: 0 !important; + left: 0 !important; +} + +.text-strike-through { + text-decoration: line-through; +} + +// * Line Clamp with ellipsis +// ******************************************************************************* + +$clamp-numbers: ( + '1': 1, + '2': 2, + '3': 3 +) !default; + +@each $clamp-class, $clamp-value in $clamp-numbers { + .line-clamp-#{$clamp-class} { + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: $clamp-value; + -webkit-box-orient: vertical; + } +} + +// * Stars +// ******************************************************************************* + +.ui-stars, +.ui-star, +.ui-star > * { + height: $ui-star-size; + + // Disable dragging + -webkit-user-drag: none; + -khtml-user-drag: none; + -moz-user-drag: none; + -o-user-drag: none; + user-drag: none; +} + +.ui-stars { + display: inline-block; + vertical-align: middle; + white-space: nowrap; +} + +.ui-star { + position: relative; + display: block; + float: left; + width: $ui-star-size; + height: $ui-star-size; + text-decoration: none !important; + font-size: $ui-star-size; + line-height: 1; + user-select: none; + + @include rtl-style { + float: right; + } + + & + & { + margin-left: $ui-stars-spacer; + + @include rtl-style { + margin-right: $ui-stars-spacer; + margin-left: 0; + } + } + + > *, + > *::before, + > *::after { + position: absolute; + left: $ui-star-size * 0.5; + height: 100%; + font-size: 1em; + line-height: 1; + transform: translateX(-50%); + + @include rtl-style { + right: $ui-star-size * 0.5; + left: auto; + transform: translateX(50%); + } + } + + > * { + top: 0; + width: 100%; + text-align: center; + } + + > *:first-child { + z-index: 10; + display: none; + overflow: hidden; + color: $ui-star-filled-color; + } + + // Default icon + > *:last-child { + z-index: 5; + display: block; + } + + &.half-filled > *:first-child { + width: 50%; + transform: translateX(-100%); + + @include rtl-style { + transform: translateX(100%); + } + } + + &.filled > *:first-child, + &.half-filled > *:first-child { + display: block; + } + + &.filled > *:last-child { + display: none; + } +} + +// Hoverable + +.ui-stars.hoverable .ui-star > *:first-child { + display: block; +} + +// Empty stars if first star is not filled +.ui-stars.hoverable .ui-star:first-child:not(.filled), +.ui-stars.hoverable .ui-star:first-child:not(.half-filled) { + > *:first-child, + ~ .ui-star > *:first-child { + display: none; + } +} + +.ui-stars.hoverable .ui-star.filled > *:first-child, +.ui-stars.hoverable .ui-star.half-filled > *:first-child { + display: block !important; +} + +.ui-stars.hoverable:hover .ui-star > *:first-child { + display: block !important; + width: 100% !important; + transform: translateX(-50%) !important; + + @include rtl-style { + transform: translateX(50%) !important; + } +} + +.ui-stars.hoverable .ui-star:hover ~ .ui-star { + > *:first-child { + display: none !important; + } + + > *:last-child { + display: block !important; + } +} + +// * Background +// ******************************************************************************* + +.ui-bg-cover { + background-color: rgba(0, 0, 0, 0); + background-position: center center; + background-size: cover; +} + +.ui-bg-overlay-container, +.ui-bg-video-container { + position: relative; + + > * { + position: relative; + } +} + +.ui-bg-overlay-container .ui-bg-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: block; +} + +// * Styles +// ******************************************************************************* +@if not $dark-style { + .light-style { + $ui-star-empty-color: light.$gray-200; + + .ui-bordered { + border: 1px solid light.$border-color; + } + + .ui-star > *:last-child { + color: $ui-star-empty-color; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_custom-options.scss b/src/modules/Resources/assets/vendor/scss/_components/_custom-options.scss new file mode 100644 index 0000000..fe28073 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_custom-options.scss @@ -0,0 +1,161 @@ +// Custom Options +// ******************************************************************************* + +// Custom option +.custom-option { + padding-left: 0; + border: $custom-option-border-width solid $custom-option-border-color; + border-radius: $border-radius; + margin: subtract($input-focus-border-width, $custom-option-border-width); + &:hover { + border-width: $custom-option-border-width; + border-color: $custom-option-border-hover-color; + } + &.custom-option-image { + border-width: $custom-option-image-border-width !important; + overflow: hidden; + margin: 0; + &:hover { + border-width: $custom-option-image-border-width !important; + border-color: $custom-option-border-hover-color; + } + } + .custom-option-content { + cursor: $custom-option-cursor; + width: 100%; + } + .form-check-input { + background-color: transparent; + margin-inline-start: $form-check-padding-start * -1.12; + } +} + +// Custom option basic +.custom-option-basic { + .custom-option-content { + padding: $custom-option-padding; + padding-left: $custom-option-padding + $form-check-padding-start + 0.65em; + } + .custom-option-header { + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 0.4375rem; + } +} + +.custom-option-body { + color: $body-color; +} + +// Custom option with icon +.custom-option-icon { + overflow: hidden; + &.checked { + i, + svg { + color: $component-active-bg; + } + } + &:not(.checked) svg { + color: $headings-color; + } + .custom-option-content { + text-align: center; + padding: $custom-option-padding; + } + .custom-option-body { + display: block; + margin-bottom: 0.5rem; + i { + color: $headings-color; + &::before { + font-size: 1.75rem; + } + margin-bottom: 0.5rem; + display: block; + } + svg { + height: 28px; + width: 28px; + margin-bottom: 0.5rem; + } + .custom-option-title { + display: block; + font-size: $font-size-base; + font-weight: $font-weight-medium; + color: $headings-color; + margin-bottom: 0.5rem; + } + } + .form-check-input { + float: none !important; + margin: 0 !important; + } +} + +// Custom option with image +.custom-option-image { + border-width: $custom-option-image-border-width; + .custom-option-content { + padding: 0; + } + .custom-option-body { + img { + height: 100%; + width: 100%; + } + } + //radio + &.custom-option-image-radio { + .form-check-input { + display: none; + } + } + //check + &.custom-option-image-check { + position: relative; + .form-check-input { + position: absolute; + top: 16px; + right: 16px; + margin: 0; + border: 0; + opacity: 0; + border: 1px solid transparent; + &:checked { + opacity: 1; + } + } + &:hover { + .form-check-input { + border-color: $form-check-input-focus-border; + border-width: 1px; + opacity: 1; + &:checked { + border-color: $primary; + } + } + } + } +} + +// RTL Style + +@include rtl-only { + .custom-option { + padding-right: 0; + } + .custom-option-basic { + .custom-option-content { + padding-right: $custom-option-padding + $form-check-padding-start; + padding-left: $custom-option-padding; + } + } + .custom-option-image.custom-option-image-check { + .form-check-input { + right: auto; + left: 16px; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_drag-drop.scss b/src/modules/Resources/assets/vendor/scss/_components/_drag-drop.scss new file mode 100644 index 0000000..82f0008 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_drag-drop.scss @@ -0,0 +1,13 @@ +// * RTL +// ******************************************************************************* + +@include rtl-only { + #sortable-cards { + flex-direction: row-reverse; + } + #image-list-1, + #image-list-2 { + flex-direction: row-reverse; + justify-content: flex-end; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_footer.scss b/src/modules/Resources/assets/vendor/scss/_components/_footer.scss new file mode 100644 index 0000000..f701708 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_footer.scss @@ -0,0 +1,78 @@ +// Footer +// ******************************************************************************* + +.footer-link { + display: inline-block; +} +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container { + padding-inline: 1.5rem; + @include border-top-radius($border-radius); +} +.content-footer .footer-container { + block-size: 54px; +} +// Light footer +.footer-light { + color: $navbar-light-color; + + .footer-text { + color: $navbar-light-active-color; + } + + .footer-link { + color: $navbar-light-color; + + &:hover, + &:focus { + color: $navbar-light-hover-color; + } + + &.disabled { + color: $navbar-light-disabled-color !important; + } + } + + .show > .footer-link, + .active > .footer-link, + .footer-link.show, + .footer-link.active { + color: $navbar-light-active-color; + } + + hr { + border-color: $menu-light-border-color; + } +} + +// Dark footer +.footer-dark { + color: $navbar-dark-color; + + .footer-text { + color: $navbar-dark-active-color; + } + + .footer-link { + color: $navbar-dark-color; + + &:hover, + &:focus { + color: $navbar-dark-hover-color; + } + + &.disabled { + color: $navbar-dark-disabled-color !important; + } + } + + .show > .footer-link, + .active > .footer-link, + .footer-link.show, + .footer-link.active { + color: $navbar-dark-active-color; + } + + hr { + border-color: $menu-dark-border-color; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_include-dark.scss b/src/modules/Resources/assets/vendor/scss/_components/_include-dark.scss new file mode 100644 index 0000000..b1b6718 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_include-dark.scss @@ -0,0 +1,13 @@ +// Include Dark +// ******************************************************************************* + +@import '../_bootstrap-extended/include-dark'; + +// Mixins +@import './_mixins'; // Components mixins + +//Variables +@import '../_custom-variables/components-dark'; // Components custom dark variable (for customization purpose) +@import '../_custom-variables/components'; // Components custom variable (for customization purpose) +@import 'variables-dark'; // Components dark variable +@import 'variables'; // Components variable diff --git a/src/modules/Resources/assets/vendor/scss/_components/_include.scss b/src/modules/Resources/assets/vendor/scss/_components/_include.scss new file mode 100644 index 0000000..6ce1af0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_include.scss @@ -0,0 +1,11 @@ +// Include +// ******************************************************************************* + +@import '../_bootstrap-extended/include'; + +//Mixins +@import './_mixins'; // Components mixins + +//Components variables +@import '../_custom-variables/components'; // Components variable (for customization purpose) +@import 'variables'; // Components variable diff --git a/src/modules/Resources/assets/vendor/scss/_components/_layout.scss b/src/modules/Resources/assets/vendor/scss/_components/_layout.scss new file mode 100644 index 0000000..640db5a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_layout.scss @@ -0,0 +1,1181 @@ +// Layouts +// ******************************************************************************* + +.layout-container { + min-height: 100vh; +} + +.layout-wrapper, +.layout-container { + width: 100%; + display: flex; + flex: 1 1 auto; + align-items: stretch; +} + +.layout-menu-offcanvas .layout-wrapper, +.layout-menu-fixed-offcanvas .layout-wrapper { + overflow: hidden; +} + +// * Display menu toggle on navbar for .layout-menu-offcanvas, .layout-menu-fixed-offcanvas + +.layout-menu-offcanvas .layout-navbar .layout-menu-toggle, +.layout-menu-fixed-offcanvas .layout-navbar .layout-menu-toggle { + display: block !important; +} + +// * Hide menu close icon from large screen for .layout-menu-offcanvas, .layout-menu-fixed-offcanvas + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .layout-menu-offcanvas .layout-menu .layout-menu-toggle, + .layout-menu-fixed-offcanvas .layout-menu .layout-menu-toggle { + display: none; + } + .layout-horizontal .layout-page .menu-horizontal { + box-shadow: $menu-horizontal-box-shadow; + } +} + +.layout-page, +.content-wrapper, +.content-wrapper > *, +.layout-menu { + min-height: 1px; +} + +.layout-navbar, +.content-footer { + flex: 0 0 auto; +} + +.layout-page { + display: flex; + flex: 1 1 auto; + align-items: stretch; + padding: 0; + + // Without menu + .layout-without-menu & { + padding-right: 0 !important; + padding-left: 0 !important; + } +} + +.content-wrapper { + display: flex; + align-items: stretch; + flex: 1 1 auto; + flex-direction: column; + justify-content: space-between; +} +// Content backdrop +.content-backdrop { + // z-index: 1 (layout static) + @include overlay-backdrop(1, $modal-backdrop-bg, $modal-backdrop-opacity); + // z-index: 10 (layout fixed) + .layout-menu-fixed & { + z-index: 10; + } + // z-index: 9 (layout-horizontal) + .layout-horizontal &:not(.fade) { + z-index: 9; + // Horizontal fix for search background with opacity + top: $navbar-height !important; + } + &.fade { + z-index: -1; + } +} + +// * Layout Navbar +// ******************************************************************************* +.layout-navbar { + position: relative; + padding-top: 0.5rem; + padding-bottom: 0.5rem; + height: $navbar-height; + flex-wrap: nowrap; + color: $body-color; + z-index: 2; + + .navbar { + transform: translate3d(0, 0, 0); + } + .navbar-nav-right { + flex-basis: 100%; + } + + // Style for detached navbar + &.navbar-detached { + // Container layout max-width + $container-xxl: map-get($container-max-widths, xxl); + &.container-xxl { + max-width: calc(#{$container-xxl} - calc(#{$container-padding-x} * 2)); + } + .layout-navbar-fixed & { + .search-input:focus { + padding-inline: $card-spacer-x; + } + } + // Navbar fixed + .layout-navbar-fixed & { + width: calc(100% - calc(#{$container-padding-x} * 2) - #{$menu-width}); + @include media-breakpoint-down(xl) { + width: calc(100% - calc(#{$container-padding-x} * 2)) !important; + } + @include media-breakpoint-down(lg) { + width: calc(100% - calc(#{$container-padding-x-sm} * 2)) !important; + } + } + .layout-navbar-fixed.layout-menu-collapsed & { + width: calc(100% - calc(#{$container-padding-x} * 2) - #{$menu-collapsed-width}); + } + + // Navbar static + width: calc(100% - calc(#{$container-padding-x} * 2)); + @include media-breakpoint-down(xl) { + width: calc(100vw - (100vw - 100%) - calc(#{$container-padding-x} * 2)) !important; + } + @include media-breakpoint-down(lg) { + width: calc(100vw - (100vw - 100%) - calc(#{$container-padding-x-sm} * 2)) !important; + } + .layout-menu-collapsed &, + .layout-without-menu & { + width: calc(100% - calc(#{$container-padding-x} * 2)); + } + + margin: $spacer auto 0; + border-radius: $border-radius; + padding: 0 $card-spacer-x; + } + + .navbar-search-wrapper { + .search-input, + .input-group-text { + background-color: transparent; + } + .navbar-search-suggestion { + max-height: $navbar-suggestion-height; + border-radius: $navbar-suggestion-border-radius; + + .suggestion { + color: $body-color; + + &:hover, + &.active { + background: $gray-50; + color: $body-color; + } + } + + .suggestions-header { + font-weight: $font-weight-medium; + } + } + } + + .search-input-wrapper { + .search-toggler { + position: absolute; + top: 50%; + transform: translateY(-50%); + right: 1rem; + z-index: 1; + @include rtl-style() { + right: inherit; + left: 1rem; + } + } + .twitter-typeahead { + position: absolute !important; + left: 0; + top: 0; + width: 100%; + height: 100%; + // ! FIX: Horizontal layout search container layout left spacing + @include media-breakpoint-up('xxl') { + &.container-xxl { + left: calc(calc(100% - map-get($container-max-widths, 'xxl')) * 0.5); + @include rtl-style() { + right: calc(calc(100% - map-get($container-max-widths, 'xxl')) * 0.5); + left: inherit; + } + + + .search-toggler { + right: calc(calc(100% - map-get($container-max-widths, 'xxl') + 5rem) * 0.5); + @include rtl-style() { + left: calc(calc(100% - map-get($container-max-widths, 'xxl') + 5rem) * 0.5); + right: inherit; + } + } + } + } + } + + .search-input { + height: 100%; + box-shadow: none; + } + + .navbar-search-suggestion { + width: $navbar-suggestion-width; + .layout-horizontal & { + width: calc($navbar-suggestion-width - 4%); + } + } + } + + .dropdown-menu[data-bs-popper] { + .layout-wrapper:not(.layout-horizontal) & { + top: 147%; + } + } + + // Navbar custom dropdown + .navbar-dropdown { + .badge-notifications { + top: 3px; + inset-inline-end: -2px; + } + .dropdown-menu { + min-width: $navbar-dropdown-width; + overflow: hidden; + .dropdown-item { + padding-block: $navbar-toggler-padding-y; + min-height: 2.375rem; + } + .last-login { + white-space: normal; + } + } + // Notifications + &.dropdown-notifications { + .dropdown-notifications-list { + max-height: $navbar-dropdown-content-height; + .dropdown-notifications-item { + padding: $navbar-notifications-dropdown-item-padding-y $navbar-notifications-dropdown-item-padding-x; + cursor: pointer; + + //! Fix: Dropdown notification read badge bg color + &:not(.mark-as-read) { + .dropdown-notifications-read span { + background-color: $primary; + } + } + .dropdown-notifications-actions { + text-align: center; + > a { + display: block; + } + } + + .dropdown-notifications-archive i, + .dropdown-notifications-archive span { + color: $headings-color; + } + + // Notification default marked as read/unread + &.marked-as-read { + .dropdown-notifications-read, + .dropdown-notifications-archive { + visibility: hidden; + } + //Dropdown notification unread badge bg color + .dropdown-notifications-read span { + background-color: $secondary; + } + } + &:not(.marked-as-read) { + .dropdown-notifications-archive { + visibility: hidden; + } + } + + // Notification hover marked as read/unread + &:hover { + &.marked-as-read { + .dropdown-notifications-read, + .dropdown-notifications-archive { + visibility: visible; + } + } + &:not(.marked-as-read) { + .dropdown-notifications-archive { + visibility: visible; + } + } + } + } + } + } + // Shortcuts + &.dropdown-shortcuts { + .dropdown-shortcuts-list { + max-height: $navbar-dropdown-content-height; + } + .dropdown-shortcuts-item { + text-align: center; + padding: 1.5rem; + &:hover { + background-color: $navbar-dropdown-hover-bg; + } + .dropdown-shortcuts-icon { + height: 3.125rem; + width: 3.125rem; + margin-left: auto; + margin-right: auto; + display: flex; + align-items: center; + justify-content: center; + background-color: $navbar-dropdown-icon-bg; + } + a, + a:hover { + display: block; + margin-bottom: 0; + color: $headings-color !important; + font-weight: $font-weight-medium; + } + } + } + &.dropdown-user { + .dropdown-menu { + min-width: 14rem; + } + } + } + + &[class*='bg-']:not(.bg-navbar-theme) { + .nav-item { + .input-group-text, + .dropdown-toggle { + color: $white; + } + } + } + + @include media-breakpoint-down($menu-collapsed-layout-breakpoint) { + .navbar-nav { + .nav-item { + &.dropdown { + .dropdown-menu { + position: absolute; + .last-login { + white-space: nowrap; + } + } + } + } + } + } + @include media-breakpoint-down(md) { + .navbar-nav { + .nav-item.dropdown { + position: static; + float: left; + .dropdown-menu { + position: absolute; + left: 0.9rem; + min-width: auto; + width: 92%; + } + } + } + } +} + +// To align search suggestion with navbar search input +@include ltr-only { + .layout-horizontal { + .layout-navbar { + .navbar-search-suggestion { + left: 2% !important; + } + } + } +} + +@include rtl-only { + .layout-horizontal { + .layout-navbar { + .navbar-search-suggestion { + right: 2% !important; + } + } + } +} + +// * Navbar require high z-index as we use z-index for menu slide-out for below large screen +@include media-breakpoint-down(xl) { + .layout-navbar { + z-index: $zindex-menu-fixed; + } +} + +// * Layout Menu +// ******************************************************************************* +.layout-menu { + position: relative; + flex: 1 0 auto; + a:focus-visible { + outline: none; + } + .menu { + transform: translate3d(0, 0, 0); + } + + .menu-vertical { + height: 100%; + } +} + +// * Layout Content navbar +// ******************************************************************************* + +.layout-content-navbar { + .layout-page { + flex-basis: 100%; + flex-direction: column; + width: 0; + min-width: 0; + max-width: 100%; + } + + .content-wrapper { + width: 100%; + } +} + +// * Layout Navbar full +// ******************************************************************************* + +.layout-navbar-full { + .layout-container { + flex-direction: column; + } + @include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + &:not(.layout-horizontal) .menu-inner { + margin-top: 0.75rem; + } + } + + .content-wrapper { + flex-basis: 100%; + width: 0; + min-width: 0; + max-width: 100%; + } + // Adjust content backdrop z-index as per layout navbar full + .content-backdrop { + // static layout + &.show { + z-index: 9; + // fixed/fixed-offcanvas layout + .layout-menu-fixed &, + .layout-menu-fixed-offcanvas & { + z-index: 1076; + } + } + } + // } +} + +// * Flipped layout +// ******************************************************************************* + +.layout-menu-flipped { + .layout-navbar-full .layout-page { + flex-direction: row-reverse; + } + + .layout-content-navbar .layout-container { + flex-direction: row-reverse; + } +} + +// * Toggle +// ******************************************************************************* + +.layout-menu-toggle { + display: block; + // Updated menu toggle icon for menu expanded and collapsed + .menu-toggle-icon::before { + content: '\efb1'; + } + .menu-toggle-icon::before { + .layout-menu-collapsed & { + content: '\ea6b'; + } + } +} + +// * Collapsed layout (Default static and static off-canvasmenu) +// ******************************************************************************* + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + // Menu style + + .layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) { + .layout-menu .menu-vertical, + .layout-menu.menu-vertical { + @include layout-menu-collapsed(); + } + } + + @include rtl-only { + &.layout-menu-collapsed:not(.layout-menu-hover):not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) { + .layout-menu .menu-vertical, + .layout-menu.menu-vertical { + @include layout-menu-collapsed-rtl(); + } + } + } + + // Menu position + + .layout-menu-hover.layout-menu-collapsed { + .layout-menu { + margin-right: -$menu-width + $menu-collapsed-width; + } + + &.layout-menu-flipped .layout-menu { + margin-left: -$menu-width + $menu-collapsed-width; + margin-right: 0; + } + } + + @include rtl-only { + &.layout-menu-hover.layout-menu-collapsed { + .layout-menu { + margin-left: -$menu-width + $menu-collapsed-width; + margin-right: 0; + } + + &.layout-menu-flipped .layout-menu { + margin-right: -$menu-width + $menu-collapsed-width; + margin-left: 0; + } + } + } +} + +// * Off-canvas layout (Layout Collapsed) +// ******************************************************************************* + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .layout-menu-collapsed.layout-menu-offcanvas { + .layout-menu { + margin-right: -$menu-width; + transform: translateX(-100%); + } + + &.layout-menu-flipped .layout-menu { + margin-right: 0; + margin-left: -$menu-width; + transform: translateX(100%); + } + } + + @include rtl-only { + &.layout-menu-collapsed.layout-menu-offcanvas { + .layout-menu { + margin-right: 0; + margin-left: -$menu-width; + transform: translateX(100%); + } + + &.layout-menu-flipped .layout-menu { + margin-right: -$menu-width; + margin-left: 0; + transform: translateX(-100%); + } + } + } +} + +// * Fixed and fixed off-canvas layout (Layout Fixed) +// ******************************************************************************* + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + // Menu + + .layout-menu-fixed, + .layout-menu-fixed-offcanvas { + .layout-menu { + position: fixed; + top: 0; + bottom: 0; + left: 0; + margin-right: 0 !important; + margin-left: 0 !important; + } + + &.layout-menu-flipped .layout-menu { + right: 0; + left: auto; + } + } + + @include rtl-only { + &.layout-menu-fixed, + &.layout-menu-fixed-offcanvas { + .layout-menu { + right: 0; + left: auto; + } + + &.layout-menu-flipped .layout-menu { + right: auto; + left: 0; + } + } + } + + // Fixed off-canvas + + // Menu collapsed + .layout-menu-fixed-offcanvas.layout-menu-collapsed { + .layout-menu { + transform: translateX(-100%); + } + + &.layout-menu-flipped .layout-menu { + transform: translateX(100%); + } + } + + @include rtl-only { + &.layout-menu-fixed-offcanvas.layout-menu-collapsed { + .layout-menu { + transform: translateX(100%); + } + + &.layout-menu-flipped .layout-menu { + transform: translateX(-100%); + } + } + } + + // Container + + // Menu expanded + .layout-menu-fixed:not(.layout-menu-collapsed), + .layout-menu-fixed-offcanvas:not(.layout-menu-collapsed) { + .layout-page { + padding-left: $menu-width; + } + + &.layout-menu-flipped .layout-page { + padding-right: $menu-width; + padding-left: 0; + } + } + + @include rtl-only { + &.layout-menu-fixed:not(.layout-menu-collapsed), + &.layout-menu-fixed-offcanvas:not(.layout-menu-collapsed) { + .layout-page { + padding-right: $menu-width; + padding-left: 0; + } + + &.layout-menu-flipped .layout-page { + padding-right: 0; + padding-left: $menu-width; + } + } + } + + // Menu collapsed + .layout-menu-fixed.layout-menu-collapsed { + .layout-page { + padding-left: $menu-collapsed-width; + } + + &.layout-menu-flipped .layout-page { + padding-right: $menu-collapsed-width; + padding-left: 0; + } + } + + @include rtl-only { + &.layout-menu-fixed.layout-menu-collapsed { + .layout-page { + padding-right: $menu-collapsed-width; + padding-left: 0; + } + + &.layout-menu-flipped .layout-page { + padding-right: 0; + padding-left: $menu-collapsed-width; + } + } + } +} + +// Reset paddings (for non fixed entities) +html:not(.layout-navbar-fixed):not(.layout-menu-fixed):not(.layout-menu-fixed-offcanvas) .layout-page, +html:not(.layout-navbar-fixed) .layout-content-navbar .layout-page { + padding-top: 0 !important; +} +html:not(.layout-footer-fixed) .content-wrapper { + padding-bottom: 0 !important; +} + +@include media-breakpoint-down($menu-collapsed-layout-breakpoint) { + .layout-menu-fixed .layout-wrapper.layout-navbar-full .layout-menu, + .layout-menu-fixed-offcanvas .layout-wrapper.layout-navbar-full .layout-menu { + top: 0 !important; + } + + html:not(.layout-navbar-fixed) .layout-navbar-full .layout-page { + padding-top: 0 !important; + } +} + +// * Hidden navbar layout +// ******************************************************************************* +.layout-navbar-hidden { + .layout-navbar { + display: none; + } +} + +// * Fixed navbar layout +// ******************************************************************************* + +.layout-navbar-fixed { + .layout-navbar { + position: fixed; + top: 0; + right: 0; + left: 0; + } +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + // Fix navbar within Navbar Full layout in fixed mode + .layout-menu-fixed .layout-navbar-full .layout-navbar, + .layout-menu-fixed-offcanvas .layout-navbar-full .layout-navbar { + position: fixed; + top: 0; + right: 0; + left: 0; + } + + // Fix navbar within Content Navbar layout in fixed mode - Menu expanded + .layout-navbar-fixed:not(.layout-menu-collapsed), + .layout-menu-fixed.layout-navbar-fixed:not(.layout-menu-collapsed), + .layout-menu-fixed-offcanvas.layout-navbar-fixed:not(.layout-menu-collapsed) { + .layout-content-navbar:not(.layout-without-menu) .layout-navbar { + left: $menu-width; + } + + &.layout-menu-flipped .layout-content-navbar:not(.layout-without-menu) .layout-navbar { + right: $menu-width; + left: 0; + } + } + + // Horizontal Layout when menu fixed + .layout-menu-fixed .layout-horizontal .layout-page .menu-horizontal, + .layout-menu-fixed-offcanvas .layout-horizontal .layout-page .menu-horizontal { + position: fixed; + top: $navbar-height; + } + + .layout-menu-fixed .layout-horizontal .layout-page .menu-horizontal + [class*='container-'], + .layout-menu-fixed-offcanvas .layout-horizontal .layout-page .menu-horizontal + [class*='container-'] { + padding-top: calc($container-padding-y + 3.9rem) !important; + } + + @include rtl-only { + &.layout-navbar-fixed:not(.layout-menu-collapsed), + &.layout-menu-fixed.layout-navbar-fixed:not(.layout-menu-collapsed), + &.layout-menu-fixed-offcanvas.layout-navbar-fixed:not(.layout-menu-collapsed) { + .layout-content-navbar:not(.layout-without-menu) .layout-navbar { + right: $menu-width; + left: 0; + } + + &.layout-menu-flipped .layout-content-navbar:not(.layout-without-menu) .layout-navbar { + right: 0; + left: $menu-width; + } + } + } + + // Layout fixed not off-canvas - Menu collapsed + + .layout-navbar-fixed.layout-menu-collapsed:not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas), + .layout-menu-fixed.layout-navbar-fixed.layout-menu-collapsed { + .layout-content-navbar .layout-navbar { + left: $menu-collapsed-width; + } + + &.layout-menu-flipped .layout-content-navbar .layout-navbar { + right: $menu-collapsed-width; + left: 0; + } + } + + @include rtl-only { + &.layout-navbar-fixed.layout-menu-collapsed:not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas), + &.layout-menu-fixed.layout-navbar-fixed.layout-menu-collapsed { + .layout-content-navbar .layout-navbar { + right: $menu-collapsed-width; + left: 0; + } + + &.layout-menu-flipped .layout-content-navbar .layout-navbar { + right: 0; + left: $menu-collapsed-width; + } + } + } +} + +// * Fixed footer +// ******************************************************************************* + +.layout-footer-fixed .content-footer { + position: fixed; + bottom: 0; + left: 0; + right: 0; +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + // Fixed footer - Menu expanded + .layout-footer-fixed:not(.layout-menu-collapsed) { + .layout-wrapper:not(.layout-without-menu) .content-footer { + left: $menu-width; + } + + &.layout-menu-flipped .layout-wrapper:not(.layout-without-menu) .content-footer { + right: $menu-width; + left: 0; + } + } + + // Fixed footer - Menu collapsed + .layout-footer-fixed.layout-menu-collapsed:not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) { + .layout-wrapper:not(.layout-without-menu) .content-footer { + left: $menu-collapsed-width; + } + + &.layout-menu-flipped .layout-wrapper:not(.layout-without-menu) .content-footer { + right: $menu-collapsed-width; + left: 0; + } + } + + @include rtl-only { + // Fixed footer - Menu expanded + &.layout-footer-fixed:not(.layout-menu-collapsed) { + .layout-wrapper:not(.layout-without-menu) .content-footer { + left: 0; + right: $menu-width; + } + + &.layout-menu-flipped .layout-wrapper:not(.layout-without-menu) .content-footer { + left: $menu-width; + right: 0; + } + } + + // Fixed footer - Menu collapsed + &.layout-footer-fixed.layout-menu-collapsed:not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) { + .layout-wrapper:not(.layout-without-menu) .content-footer { + left: 0; + right: $menu-collapsed-width; + } + + &.layout-menu-flipped .layout-wrapper:not(.layout-without-menu) .content-footer { + right: 0; + left: $menu-collapsed-width; + } + } + } +} + +// * Small screens layout +// ******************************************************************************* + +@include media-breakpoint-down($menu-collapsed-layout-breakpoint) { + .layout-menu { + position: fixed !important; + top: 0 !important; + height: 100% !important; + left: 0 !important; + margin-right: 0 !important; + margin-left: 0 !important; + transform: translate3d(-100%, 0, 0); + will-change: + transform, + -webkit-transform; + + @include rtl-style { + right: 0 !important; + left: auto !important; + transform: translate3d(100%, 0, 0); + } + + .layout-menu-flipped & { + right: 0 !important; + left: auto !important; + transform: translate3d(100%, 0, 0); + } + + .layout-menu-expanded & { + transform: translate3d(0, 0, 0) !important; + } + } + + .layout-menu-expanded body { + overflow: hidden; + } + + @include rtl-only { + &.layout-menu-flipped .layout-menu { + right: auto !important; + left: 0 !important; + transform: translate3d(-100%, 0, 0); + } + } + + .layout-overlay { + position: fixed; + top: 0; + right: 0; + height: 100% !important; + left: 0; + display: none; + background: $modal-backdrop-bg; + opacity: $modal-backdrop-opacity; + cursor: pointer; + + .layout-menu-expanded & { + display: block; + } + } + + .layout-menu-100vh .layout-menu, + .layout-menu-100vh .layout-overlay { + height: 100vh !important; + } + + .drag-target { + height: 100%; + width: 40px; + position: fixed; + top: 0; + left: 0px; + z-index: 1036; + } +} + +// * Z-Indexes +// ******************************************************************************* + +// Navbar (fixed) +.layout-navbar-fixed body:not(.modal-open), +.layout-menu-fixed body:not(.modal-open), +.layout-menu-fixed-offcanvas body:not(.modal-open) { + .layout-navbar-full .layout-navbar { + z-index: $zindex-menu-fixed; + } + + .layout-content-navbar .layout-navbar { + z-index: $zindex-menu-fixed - 5; + } +} + +// Footer (fixed) +.layout-footer-fixed .content-footer { + z-index: $zindex-fixed; +} + +// Menu horizontal +.layout-menu-horizontal { + z-index: 9; +} + +@include media-breakpoint-down($menu-collapsed-layout-breakpoint) { + .layout-menu { + z-index: $zindex-layout-mobile; + } + + .layout-overlay { + z-index: $zindex-layout-mobile - 1; + } +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + // Default expanded + + // Navbar full layout + .layout-navbar-full { + .layout-navbar { + z-index: 10; + } + + .layout-menu { + z-index: 9; + } + } + // Content Navbar layout + .layout-content-navbar { + .layout-navbar { + z-index: 9; + } + + .layout-menu { + z-index: 10; + } + } + + // Collapsed + + .layout-menu-collapsed:not(.layout-menu-offcanvas):not(.layout-menu-fixed-offcanvas) { + // Navbar full layout + &.layout-menu-hover .layout-navbar-full .layout-menu { + z-index: $zindex-menu-fixed - 5 !important; + } + // Content Navbar layout + .layout-content-navbar .layout-menu { + z-index: $zindex-menu-fixed + 5 !important; + } + } + + // Fixed + // Navbar full layout + .layout-menu-fixed body:not(.modal-open) .layout-navbar-full .layout-menu, + .layout-menu-fixed-offcanvas body:not(.modal-open) .layout-navbar-full .layout-menu { + z-index: $zindex-menu-fixed - 5; + } + // Content Navbar layout + .layout-navbar-fixed body:not(.modal-open) .layout-content-navbar .layout-menu, + .layout-menu-fixed body:not(.modal-open) .layout-content-navbar .layout-menu, + .layout-menu-fixed-offcanvas body:not(.modal-open) .layout-content-navbar .layout-menu { + z-index: $zindex-menu-fixed; + } +} + +// * Transitions and animations +// ******************************************************************************* + +// Disable navbar link hover transition +.layout-menu-link-no-transition { + .layout-menu .menu-link, + .layout-menu-horizontal .menu-link { + transition: none !important; + animation: none !important; + } +} + +// Disable navbar link hover transition +.layout-no-transition .layout-menu, +.layout-no-transition .layout-menu-horizontal { + &, + & .menu, + & .menu-item { + transition: none !important; + animation: none !important; + } +} + +@include media-breakpoint-down($menu-collapsed-layout-breakpoint) { + .layout-transitioning { + .layout-overlay { + animation: menuAnimation $menu-animation-duration; + } + + .layout-menu { + transition-duration: $menu-animation-duration; + transition-property: + transform, + -webkit-transform; + } + } +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .layout-menu-collapsed:not(.layout-transitioning):not(.layout-menu-offcanvas):not(.layout-menu-fixed):not( + .layout-menu-fixed-offcanvas + ) + .layout-menu { + transition-duration: $menu-animation-duration; + transition-property: margin-left, margin-right, width; + } + + .layout-transitioning { + &.layout-menu-offcanvas .layout-menu { + transition-duration: $menu-animation-duration; + transition-property: + margin-left, + margin-right, + transform, + -webkit-transform; + } + + &.layout-menu-fixed, + &.layout-menu-fixed-offcanvas { + .layout-page { + transition-duration: $menu-animation-duration; + transition-property: padding-left, padding-right; + } + } + + &.layout-menu-fixed { + .layout-menu { + transition: width $menu-animation-duration; + } + } + + &.layout-menu-fixed-offcanvas { + .layout-menu { + transition-duration: $menu-animation-duration; + transition-property: + transform, + -webkit-transform; + } + } + + &.layout-navbar-fixed .layout-content-navbar .layout-navbar, + &.layout-footer-fixed .content-footer { + transition-duration: $menu-animation-duration; + transition-property: left, right; + } + + &:not(.layout-menu-offcanvas):not(.layout-menu-fixed):not(.layout-menu-fixed-offcanvas) .layout-menu { + transition-duration: $menu-animation-duration; + transition-property: margin-left, margin-right, width; + } + } +} + +// Disable transitions/animations in IE 10-11 +@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) { + .menu, + .layout-menu, + .layout-page, + .layout-navbar, + .content-footer { + transition: none !important; + transition-duration: 0s !important; + } + .layout-overlay { + animation: none !important; + } +} + +@include keyframes(menuAnimation) { + 0% { + opacity: 0; + } + 100% { + opacity: $modal-backdrop-opacity; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_menu.scss b/src/modules/Resources/assets/vendor/scss/_components/_menu.scss new file mode 100644 index 0000000..bb17fa8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_menu.scss @@ -0,0 +1,784 @@ +// Menu +// ******************************************************************************* + +.menu { + display: flex; + .app-brand { + width: 100%; + transition: padding 0.3s ease-in-out; + } + + //PS Scrollbar + .ps__thumb-y, + .ps__rail-y { + width: 0.125rem !important; + } + + .ps__rail-y { + right: 0.25rem !important; + left: auto !important; + background: none !important; + + @include rtl-style { + right: auto !important; + left: 0.25rem !important; + } + } + + .ps__rail-y:hover, + .ps__rail-y:focus, + .ps__rail-y.ps--clicking, + .ps__rail-y:hover > .ps__thumb-y, + .ps__rail-y:focus > .ps__thumb-y, + .ps__rail-y.ps--clicking > .ps__thumb-y { + width: 0.375rem !important; + } +} + +.menu-inner { + display: flex; + align-items: flex-start; + justify-content: flex-start; + margin: 0; + padding: 0; + height: 100%; +} +.menu-inner-shadow { + display: none; + position: absolute; + top: $navbar-height - (($navbar-height - 3rem) * 0.5); + @include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + height: 3rem; + } + @include media-breakpoint-down($menu-collapsed-layout-breakpoint) { + height: 1.5rem; + } + width: 100%; + pointer-events: none; + z-index: 2; + // Hide menu inner shadow in static layout + html:not(.layout-menu-fixed) & { + display: none !important; + } +} + +// Menu item + +.menu-item { + align-items: flex-start; + justify-content: flex-start; + + &.menu-item-animating { + transition: height $menu-animation-duration ease-in-out; + } +} + +.menu-item, +.menu-header, +.menu-divider, +.menu-block { + flex: 0 0 auto; + flex-direction: column; + margin: 0; + padding: 0; + list-style: none; +} +.menu-header { + opacity: 1; + transition: opacity $menu-animation-duration ease-in-out; + .menu-header-text { + text-transform: uppercase; + letter-spacing: 0.4px; + white-space: nowrap; + color: $text-muted; + } +} + +// Menu Icon +.menu-icon { + flex-grow: 0; + flex-shrink: 0; + margin-right: $menu-icon-expanded-spacer; + line-height: 1; + font-size: $menu-icon-expanded-font-size; + .menu:not(.menu-no-animation) & { + transition: margin-right $menu-animation-duration ease; + } + + @include rtl-style { + margin-right: 0; + margin-left: $menu-icon-expanded-spacer; + .menu:not(.menu-no-animation) & { + transition: margin-left $menu-animation-duration ease; + } + } +} + +// Menu link +.menu-link { + position: relative; + display: flex; + align-items: center; + flex: 0 1 auto; + margin: 0; + + .menu-item.disabled & { + cursor: not-allowed !important; + } + // link hover animation + .menu:not(.menu-no-animation) & { + transition-duration: $menu-animation-duration; + transition-property: color, background-color; + } + + > :not(.menu-icon) { + flex: 0 1 auto; + opacity: 1; + .menu:not(.menu-no-animation) & { + transition: opacity $menu-animation-duration ease-in-out; + } + } +} + +// Sub menu +.menu-sub { + display: none; + flex-direction: column; + margin: 0; + padding: 0; + + .menu:not(.menu-no-animation) & { + transition: background-color $menu-animation-duration; + } + + .menu-item.open > & { + display: flex; + } +} + +// Menu toggle open/close arrow +.menu-toggle::after { + position: absolute; + top: 50%; + display: block; + font-family: 'tabler-icons'; + font-size: $menu-icon-expanded-font-size; + transform: translateY(-50%); + + @include ltr-style { + content: '\ea61'; + } + @include rtl-style { + content: '\ea60'; + } + + .menu:not(.menu-no-animation) & { + transition-duration: $menu-animation-duration; + transition-property: -webkit-transform, transform; + } +} + +// Menu divider +.menu-divider { + width: 100%; + border: 0; + border-top: 1px solid; +} + +// Vertical Menu +// ******************************************************************************* + +.menu-vertical { + overflow: hidden; + flex-direction: column; + + // menu expand collapse animation + &:not(.menu-no-animation) { + transition: width $menu-animation-duration; + } + + &, + .menu-block, + .menu-inner > .menu-item, + .menu-inner > .menu-header { + width: $menu-width; + } + + .menu-inner { + flex-direction: column; + flex: 1 1 auto; + + > .menu-item { + margin: $menu-item-spacer 0 0; + // menu-link spacing + .menu-link { + margin: 0 $menu-vertical-link-margin-x; + border-radius: $border-radius; + } + } + } + + .menu-header { + padding: $menu-vertical-header-margin-x calc($menu-vertical-link-margin-x * 2) 0.375rem; + } + .menu-item .menu-link, + .menu-block { + padding: $menu-vertical-menu-link-padding-y $menu-vertical-link-padding-x; + } + .menu-item .menu-link { + font-size: $menu-font-size; + min-height: 38px; + > div:not(.badge) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + line-height: 1.467; + } + } + + .menu-item .menu-toggle { + padding-right: calc(#{$menu-vertical-link-padding-x} + #{$caret-width * 3.2}); + + @include rtl-style { + padding-right: $menu-vertical-link-padding-x; + padding-left: calc(#{$menu-vertical-link-padding-x} + #{$caret-width * 3.2}); + } + + &::after { + right: $menu-vertical-link-padding-x; + + @include rtl-style { + right: auto; + left: $menu-vertical-link-padding-x; + } + } + } + + .menu-item.open:not(.menu-item-closing) > .menu-link:after { + transform: translateY(-50%) rotate(90deg); + + @include rtl-style { + transform: translateY(-50%) rotate(-90deg); + } + } + + .menu-divider { + margin-top: $menu-link-spacer-x; + margin-bottom: $menu-link-spacer-x; + padding: 0; + } + + .menu-sub { + .menu-link { + padding-top: $menu-vertical-menu-link-padding-y; + padding-bottom: $menu-vertical-menu-link-padding-y; + } + .menu-item { + margin: $menu-item-spacer 0 0; + } + } + + .menu-icon { + width: $menu-icon-expanded-width; + } + + .menu-sub .menu-icon { + margin-right: 0; + + @include rtl-style { + margin-left: 0; + } + } + + .menu-horizontal-wrapper { + flex: none; + } + + // Levels + // + + $menu-first-level-spacer: $menu-vertical-link-padding-x + $menu-icon-expanded-width + $menu-icon-expanded-spacer; + + .menu-sub .menu-link { + padding-left: $menu-first-level-spacer; + + @include rtl-style { + padding-right: $menu-first-level-spacer; + padding-left: $menu-vertical-link-padding-x; + } + } + // Menu levels loop for padding left/right + @for $i from 2 through $menu-max-levels { + $selector: ''; + + @for $l from 1 through $i { + $selector: '#{$selector} .menu-sub'; + } + .layout-wrapper:not(.layout-horizontal) & { + .menu-inner > .menu-item { + #{$selector} .menu-link { + padding-left: $menu-first-level-spacer + ($menu-vertical-menu-level-spacer * ($i)) - 0.225; + &::before { + left: $menu-icon-expanded-left-spacer + ($menu-vertical-menu-level-spacer * $i) - 1.5; + @include rtl-style { + right: $menu-icon-expanded-left-spacer + ($menu-vertical-menu-level-spacer * $i) - 1.5; + left: inherit; + } + } + @include rtl-style { + padding-right: $menu-first-level-spacer + ($menu-vertical-menu-level-spacer * ($i)) - 0.225; + padding-left: $menu-vertical-link-padding-x; + } + } + } + } + } +} + +// Vertical Menu Collapsed +// ******************************************************************************* + +@mixin layout-menu-collapsed() { + width: $menu-collapsed-width; + + .menu-inner > .menu-item { + width: $menu-collapsed-width; + } + + .menu-inner > .menu-header, + .menu-block { + position: relative; + margin-left: $menu-collapsed-width; + padding-right: ($menu-vertical-link-padding-x * 2) - $menu-icon-expanded-spacer; + padding-left: $menu-icon-expanded-spacer; + width: $menu-width; + .menu-header-text { + overflow: hidden; + opacity: 0; + } + + &::before { + content: ''; + position: absolute; + left: -1 * ($menu-collapsed-width * 0.66); + height: 1px; + width: 1.375rem; + background-color: $border-color; + top: 50%; + } + } + + .app-brand { + padding-left: $menu-vertical-link-padding-x + 0.38rem; + } + + .menu-inner > .menu-item div:not(.menu-block) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0; + } + .menu-inner > .menu-item > .menu-sub, + .menu-inner > .menu-item.open > .menu-sub { + display: none; + } + .menu-inner > .menu-item > .menu-toggle::after { + display: none; + } + + &:not(.layout-menu-hover) { + .menu-inner > .menu-item > .menu-link, + .menu-inner > .menu-block, + .menu-inner > .menu-header { + padding-right: calc(#{$menu-vertical-link-padding-x} + #{$caret-width * 1.2}); + } + } + + .menu-inner > .menu-item > .menu-link .menu-icon { + text-align: center; + margin-right: 0; + } +} + +@mixin layout-menu-collapsed-rtl() { + .menu-block { + width: $menu-collapsed-width !important; + } + .menu-inner > .menu-item > .menu-link { + padding-left: $menu-vertical-link-padding-x; + } + + .menu-inner > .menu-header, + .menu-block { + margin-right: $menu-collapsed-width; + margin-left: 0; + padding-right: $menu-icon-expanded-spacer; + padding-left: ($menu-vertical-link-padding-x * 2) - $menu-icon-expanded-spacer; + + &::before { + right: -1 * ($menu-collapsed-width * 0.66); + left: auto; + } + } + + &:not(.layout-menu-hover) { + .menu-inner > .menu-item > .menu-link, + .menu-inner > .menu-block, + .menu-inner > .menu-header { + padding-inline: $menu-vertical-link-padding-x; + } + } + + .menu-inner > .menu-item > .menu-link .menu-icon { + margin-left: 0; + } +} +// Only for menu example +.menu-collapsed:not(:hover) { + @include layout-menu-collapsed(); + + @include rtl-style { + @include layout-menu-collapsed-rtl(); + } +} + +// Horizontal +// ******************************************************************************* + +.menu-horizontal { + flex-direction: row; + width: 100%; + + .menu-inner { + overflow: hidden; + flex-direction: row; + flex: 0 1 100%; + > .menu-item.active > .menu-link.menu-toggle { + font-weight: $font-weight-medium; + } + .menu-item.active > .menu-link:not(.menu-toggle) { + font-weight: $font-weight-medium; + } + } + + .menu-item .menu-link { + padding: $menu-horizontal-link-padding-y $menu-horizontal-link-padding-x; + } + + .menu-item .menu-toggle { + padding-right: calc(#{$menu-horizontal-link-padding-x} + #{$caret-width * 3}); + + @include rtl-style { + padding-right: $menu-horizontal-link-padding-x; + padding-left: calc(#{$menu-horizontal-link-padding-x} + #{$caret-width * 3}); + } + + &::after { + right: calc(#{$menu-horizontal-link-padding-x} - #{0.2rem}); + + @include rtl-style { + right: auto; + left: calc(#{$menu-horizontal-link-padding-x} - #{0.2rem}); + } + } + } + + .menu-inner > .menu-item > .menu-toggle { + &::after { + transform: translateY(-50%) rotate(90deg); + + @include rtl-style { + transform: translateY(-50%) rotate(-90deg); + } + } + &::before { + position: absolute; + block-size: $menu-vertical-header-margin-y; + content: ''; + inline-size: 100%; + inset-block-start: 100%; + inset-inline-start: 0; + z-index: 2; + pointer-events: auto; + } + } + .menu-inner > .menu-item > .menu-sub { + margin-top: $menu-vertical-header-margin-y; + } + + .menu-inner > .menu-item:not(.menu-item-closing).open .menu-item.open { + position: relative; + } + + .menu-header, + .menu-divider { + display: none !important; + } + + .menu-sub { + position: absolute; + width: $menu-sub-width; + padding: calc($menu-horizontal-item-spacer + $menu-item-spacer) 0; + box-shadow: $box-shadow-lg; + .menu-item { + padding: 1px $menu-link-spacer-x; + &.open .menu-link > div::after { + position: absolute; + content: ''; + z-index: 2; + pointer-events: auto; + width: 1.0625rem; + height: 100%; + right: -1.0625rem; + } + } + + .menu-sub { + position: absolute; + left: 100%; + top: 0; + width: 100%; + + @include rtl-style { + left: -100%; + } + } + + .menu-link { + padding-top: $menu-horizontal-menu-link-padding-y; + padding-bottom: $menu-horizontal-menu-link-padding-y; + border-radius: $border-radius; + } + } + + .menu-inner > .menu-item { + .menu-sub { + @include border-radius($border-radius); + } + > .menu-sub { + .menu-sub { + margin: 0 $menu-horizontal-spacer-x; + } + } + } + + &:not(.menu-no-animation) .menu-inner .menu-item.open .menu-sub { + animation: menuDropdownShow $menu-animation-duration ease-in-out; + } + + // Sub menu link padding left + .menu-sub .menu-link { + padding-left: $menu-horizontal-menu-level-spacer; + min-height: 2.375rem; + + @include rtl-style { + padding-right: $menu-horizontal-menu-level-spacer; + padding-left: $menu-horizontal-link-padding-x; + } + } + @include media-breakpoint-down(lg) { + & { + display: none; + } + } +} + +.menu-horizontal-wrapper { + overflow: hidden; + flex: 0 1 100%; + width: 0; + + .menu:not(.menu-no-animation) & .menu-inner { + transition: margin $menu-animation-duration; + } +} + +.menu-horizontal-prev, +.menu-horizontal-next { + position: relative; + display: block; + flex: 0 0 auto; + width: $menu-control-width; + + &::after { + content: '\ea61'; + position: absolute; + top: 50%; + display: block; + font-family: 'tabler-icons'; + font-size: $menu-icon-expanded-font-size; + transform: translateY(-50%); + } + + &.disabled { + cursor: not-allowed !important; + } +} + +.menu-horizontal-prev::after { + border-right: 0; + transform: translate(0, -50%) rotate(180deg); + + @include rtl-style { + transform: translate(0, -50%) rotate(360deg); + } +} + +.menu-horizontal-next::after { + border-left: 0; + transform: translate(50%, -50%) rotate(360deg); + + @include rtl-style { + transform: translate(-50%, -50%) rotate(180deg); + } +} + +@include keyframes(menuDropdownShow) { + 0% { + opacity: 0; + transform: translateY(-0.5rem); + } + 100% { + opacity: 1; + transform: translateY(0); + } +} + +// Menu light/dark color mode +// ******************************************************************************* + +.menu-light { + color: $navbar-light-color; + + .menu-link, + .menu-horizontal-prev, + .menu-horizontal-next { + color: $navbar-light-color; + + &:hover, + &:focus { + color: $navbar-light-hover-color; + } + + &.active { + color: $navbar-light-active-color; + } + } + + .menu-item.disabled .menu-link { + color: $navbar-light-disabled-color !important; + } + + .menu-item.open:not(.menu-item-closing) > .menu-toggle, + .menu-item.active > .menu-link { + color: $navbar-light-active-color; + } + + .menu-item.active > .menu-link:not(.menu-toggle) { + background: $menu-light-menu-bg; + } + + .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-sub, + .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-toggle { + color: $navbar-light-color; + } + + .menu-text { + color: $navbar-light-active-color; + } + + .menu-header { + color: $navbar-light-color; + } + + hr, + .menu-divider, + .menu-inner > .menu-item.open > .menu-sub::before { + border-color: $menu-light-border-color !important; + } + + .menu-inner > .menu-header::before, + .menu-block::before { + background-color: $navbar-light-disabled-color; + } + + .menu-inner > .menu-item.open .menu-item.open > .menu-toggle::before { + background-color: $menu-light-border-color; + } + + .menu-inner > .menu-item.open .menu-item.active > .menu-link::before { + background-color: $navbar-light-active-color; + } + + .ps__thumb-y { + background: $navbar-light-color !important; + } +} + +.menu-dark { + color: $navbar-dark-color; + + .menu-link, + .menu-horizontal-prev, + .menu-horizontal-next { + color: $navbar-dark-color; + + &:hover, + &:focus { + color: $navbar-dark-hover-color; + } + + &.active { + color: $navbar-dark-active-color; + } + } + + .menu-item.disabled .menu-link { + color: $navbar-dark-disabled-color !important; + } + + .menu-item.open:not(.menu-item-closing) > .menu-toggle, + .menu-item.active > .menu-link { + color: $navbar-dark-active-color; + } + + .menu-item.active > .menu-link:not(.menu-toggle) { + background: $menu-dark-menu-bg; + } + + .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-sub, + .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-toggle { + color: $navbar-dark-color; + } + + .menu-text { + color: $navbar-dark-active-color; + } + + .menu-header { + color: $navbar-dark-color; + } + + hr, + .menu-divider, + .menu-inner > .menu-item.open > .menu-sub::before { + border-color: $menu-dark-border-color !important; + } + + .menu-inner > .menu-header::before, + .menu-block::before { + background-color: $navbar-dark-disabled-color; + } + + .menu-inner > .menu-item.open .menu-item.open > .menu-toggle::before { + background-color: $menu-dark-border-color; + } + + .menu-inner > .menu-item.open .menu-item.active > .menu-link::before { + background-color: $navbar-dark-active-color; + } + + .ps__thumb-y { + background: $navbar-dark-color !important; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_mixins.scss b/src/modules/Resources/assets/vendor/scss/_components/_mixins.scss new file mode 100644 index 0000000..4c4241c --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_mixins.scss @@ -0,0 +1,9 @@ +@import 'mixins/navbar'; +@import 'mixins/footer'; +@import 'mixins/menu'; +@import 'mixins/avatar'; +@import 'mixins/text-divider'; +@import 'mixins/timeline'; +@import 'mixins/treeview'; +@import 'mixins/switch'; +@import 'mixins/misc'; diff --git a/src/modules/Resources/assets/vendor/scss/_components/_switch.scss b/src/modules/Resources/assets/vendor/scss/_components/_switch.scss new file mode 100644 index 0000000..dbb4ed6 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_switch.scss @@ -0,0 +1,239 @@ +// Switches +// ******************************************************************************* + +.switch { + margin-right: $switch-spacer-x; + position: relative; + vertical-align: middle; + margin-bottom: 0; + display: inline-block; + border-radius: $switch-border-radius; + cursor: pointer; + + @include template-switch-size-base( + '', + $switch-width, + $switch-height, + $switch-font-size, + $switch-label-font-size, + $switch-label-line-height, + $switch-inner-spacer + ); + + @include rtl-style { + margin-left: $switch-spacer-x; + margin-right: 0; + } +} + +// Input +// ******************************************************************************* + +.switch-input { + opacity: 0; + position: absolute; + padding: 0; + margin: 0; + z-index: -1; +} + +// Toggle slider +// ******************************************************************************* + +.switch-toggle-slider { + position: absolute; + overflow: hidden; + border-radius: $switch-border-radius; + background: $switch-off-bg; + color: $switch-off-color; + transition-duration: 0.2s; + transition-property: left, right, background, box-shadow; + cursor: pointer; + user-select: none; + box-shadow: $form-switch-box-shadow; + &::after { + top: 50%; + transform: translateY(-50%); + } +} + +// Label switch +// ******************************************************************************* + +.switch-label { + display: inline-block; + font-weight: 400; + color: $switch-label-color; + position: relative; + cursor: default; +} + +// Checked / Unchecked states +.switch-off, +.switch-on { + height: 100%; + width: 100%; + text-align: center; + position: absolute; + top: 0; + transition-duration: 0.2s; + transition-property: left, right; +} + +.switch-on { + left: -100%; + + @include rtl-style { + left: auto; + right: -100%; + } + + .switch-input:not(:checked) ~ .switch-toggle-slider & { + color: transparent; + } +} + +.switch-off { + left: 0; + + @include rtl-style { + right: 0; + left: auto; + } +} + +// Checked state +.switch-input:checked ~ .switch-toggle-slider { + .switch-on { + left: 0; + + @include rtl-style { + right: 0; + left: auto; + } + } + + .switch-off { + left: 100%; + color: transparent; + + @include rtl-style { + right: 100%; + left: auto; + } + } +} + +// Toggler +// ******************************************************************************* + +.switch-toggle-slider::after { + content: ''; + position: absolute; + left: 0; + display: block; + border-radius: 999px; + background: $switch-holder-bg; + box-shadow: $switch-holder-shadow; + transition-duration: 0.2s; + transition-property: left, right, background; + + @include rtl-style { + right: 0; + left: auto; + } +} + +// Stacked switches +// ******************************************************************************* + +.switches-stacked { + @include clearfix; + + .switch { + display: block; + @include ltr-style { + margin-right: 0; + } + @include rtl-style { + margin-left: 0; + } + &:not(:last-child) { + margin-bottom: $switch-spacer-y; + } + } +} + +// Square +// ******************************************************************************* + +.switch-square, +.switch-square .switch-toggle-slider { + @if $enable-rounded { + border-radius: $switch-square-border-radius; + } @else { + border-radius: 0; + } +} + +.switch-square .switch-toggle-slider::after { + @if $enable-rounded { + border-radius: calc(#{$switch-square-border-radius} - 2px); + } @else { + border-radius: 0; + } +} + +// Disabled +// ******************************************************************************* + +.switch-input:disabled { + ~ .switch-toggle-slider { + opacity: $switch-disabled-opacity; + } + + ~ .switch-label { + color: $switch-label-disabled-color; + } +} + +// Switch Sizes +// ******************************************************************************* + +@include template-switch-size( + 'sm', + $switch-width-sm, + $switch-height-sm, + $switch-font-size, + $switch-label-font-size-sm, + $switch-label-line-height-sm, + $switch-inner-spacer-sm +); +@include template-switch-size( + 'lg', + $switch-width-lg, + $switch-height-lg, + $switch-font-size, + $switch-label-font-size-lg, + $switch-label-line-height-lg +); + +// Variations +// ******************************************************************************* + +@each $color, $value in $theme-colors { + @if $color != primary and $color != light { + @include template-switch-variant('.switch-#{$color}', $value); + } +} + +// Validation states +// ******************************************************************************* + +.switch .valid-feedback, +.switch .invalid-feedback { + padding-left: $switch-gutter; +} + +@include template-switch-validation-state('valid', $form-feedback-valid-color); +@include template-switch-validation-state('invalid', $form-feedback-invalid-color); diff --git a/src/modules/Resources/assets/vendor/scss/_components/_text-divider.scss b/src/modules/Resources/assets/vendor/scss/_components/_text-divider.scss new file mode 100644 index 0000000..95101d8 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_text-divider.scss @@ -0,0 +1,180 @@ +// Divider +// ******************************************************************************* + +@import '../../scss/_custom-variables/libs'; + +.divider { + display: block; + text-align: center; + margin: $divider-margin-y $divider-margin-x; + overflow: hidden; + white-space: nowrap; + + .divider-text { + position: relative; + display: inline-block; + font-size: $divider-font-size; + padding: $divider-text-padding-y $divider-text-padding-x; + color: $divider-text-color; + + i { + font-size: $divider-icon-size; + } + + &:before, + &:after { + content: ''; + position: absolute; + top: 50%; + width: 100vw; + border-top: 1px solid $divider-color; + } + + &:before { + right: 100%; + } + + &:after { + left: 100%; + } + } + &.text-start { + .divider-text { + padding-left: 0; + } + } + &.text-end { + .divider-text { + padding-right: 0; + } + } + &.text-start-center { + .divider-text { + left: -25%; + } + } + &.text-end-center { + .divider-text { + right: -25%; + } + } + // Dotted Divider + &.divider-dotted .divider-text:before, + &.divider-dotted .divider-text:after, + &.divider-dotted:before, + &.divider-dotted:after { + border-style: dotted; + border-width: 0 1px 1px; + border-color: $divider-color; + } + + // Dashed Divider + &.divider-dashed .divider-text:before, + &.divider-dashed .divider-text:after, + &.divider-dashed:before, + &.divider-dashed:after { + border-style: dashed; + border-width: 0 1px 1px; + border-color: $divider-color; + } + + // For Vertical Divider + &.divider-vertical { + position: relative; + display: flex; + align-items: center; + justify-content: center; + height: 100%; + margin: unset; + &:before, + &:after { + content: ''; + position: absolute; + left: 48%; + border-left: 1px solid $divider-color; + } + + &:before { + bottom: 50%; + top: 0; + } + + &:after { + top: 50%; + bottom: 0; + } + + // Dashed Vertical Divider + &.divider-dashed { + &:before, + &:after { + border-width: 1px 1px 1px 0; + } + } + + // Dotted Vertical Divider + &.divider-dotted { + &:before, + &:after { + border-width: 1px 1px 1px 0; + } + } + + // For Vertical Divider text + .divider-text { + background-color: $card-bg; + z-index: 1; + padding: 0.5125rem; + &:before, + &:after { + content: unset; + } + + // For card statistics Sales Overview divider + .badge-divider-bg { + padding: $divider-text-padding-x - 0.687rem $divider-text-padding-x - 0.748rem; + border-radius: 50%; + font-size: $divider-font-size - 0.1875rem; + background-color: $gray-50; + color: $text-muted; + } + } + } +} + +// RTL +@include rtl-only { + .divider { + &.text-start-center { + .divider-text { + right: -25%; + left: auto; + } + } + &.text-end-center { + .divider-text { + left: -25%; + right: auto; + } + } + &.text-start { + .divider-text { + padding-right: 0; + padding-left: $divider-text-padding-x; + } + } + &.text-end { + .divider-text { + padding-left: 0; + padding-right: $divider-text-padding-x; + } + } + } +} + +// For Contextual Colors +@each $color, $value in $theme-colors { + @if $color !=primary and $color !=light { + @include template-text-divider-variant('.divider-#{$color}', $value); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_timeline.scss b/src/modules/Resources/assets/vendor/scss/_components/_timeline.scss new file mode 100644 index 0000000..96157d4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_timeline.scss @@ -0,0 +1,363 @@ +// Timeline +// ******************************************************************************* + +@import '../../scss/_custom-variables/libs'; + +.timeline { + position: relative; + height: 100%; + width: 100%; + padding: 0; + list-style: none; + + .timeline-header { + display: flex; + justify-content: space-between; + align-items: center; + flex-direction: row; + > *:first-child { + margin-right: 0.5rem; + } + } + // End Indicator + .timeline-end-indicator { + position: absolute; + bottom: -1.35rem; + left: -0.65rem; + + i { + font-size: $timeline-end-indicator-font-size; + color: $timeline-border-color; + } + } + + // Timeline Item + .timeline-item { + position: relative; + padding-left: 1.4rem; + + .timeline-event { + position: relative; + width: 100%; + min-height: $timeline-item-min-height; + background-color: $timeline-item-bg-color; + border-radius: $timeline-item-border-radius; + padding: $timeline-item-padding-y $timeline-item-padding-x $timeline-item-padding-y - 0.1625; + + .timeline-event-time { + position: absolute; + top: 1.2rem; + font-size: $timeline-event-time-size; + color: $timeline-event-time-color; + } + } + // Timeline Point Indicator + + .timeline-indicator, + .timeline-indicator-advanced { + position: absolute; + left: -1rem; + top: 0.64rem; + z-index: 2; + height: $timeline-indicator-size; + width: $timeline-indicator-size; + display: flex; + align-items: center; + justify-content: center; + text-align: center; + border-radius: 50%; + } + + .timeline-indicator { + box-shadow: 0 0 0 10px $body-bg; + } + + //For advanced Timeline Indicator Background + .timeline-indicator-advanced { + background-color: $card-bg; + top: 0; + } + + .timeline-point { + position: absolute; + left: -0.38rem; + top: 0; + z-index: 2; + display: block; + height: $timeline-point-size; + width: $timeline-point-size; + border-radius: 50%; + background-color: $timeline-point-color; + box-shadow: 0 0 0 10px $card-bg; + } + + // Transparent Timeline Item + &.timeline-item-transparent { + .timeline-event { + top: -0.9rem; + background-color: transparent; + + @include ltr-style { + padding-left: 0; + } + + &.timeline-event-shadow { + padding-left: 2rem; + } + } + } + } + + // Timeline outline + &.timeline-outline { + .timeline-item { + .timeline-point { + outline: unset; + background-color: $card-bg !important; + border: 2px solid $primary; + } + } + } + // Timeline Center + &.timeline-center { + .timeline-end-indicator { + bottom: -1.4rem; + left: 50%; + margin-left: 0.55rem; + } + + .timeline-item { + width: 50%; + clear: both; + &.timeline-item-left, + &:nth-of-type(odd):not(.timeline-item-left):not(.timeline-item-right) { + float: left; + padding-left: 0; + padding-right: 2.25rem; + padding-bottom: 2.5rem; + border-left: 0; + border-right: 1px solid $timeline-border-color; + .timeline-event { + .timeline-event-time { + right: -10.2rem; + } + } + + .timeline-point { + left: 100%; + } + } + + &.timeline-item-right, + &:nth-of-type(even):not(.timeline-item-left):not(.timeline-item-right) { + float: right; + right: 1px; + padding-left: 2.25rem; + padding-bottom: 2.5rem; + border-left: 1px solid $timeline-border-color; + + .timeline-event { + .timeline-event-time { + left: -10.2rem; + } + .timeline-point { + left: 0; + } + } + } + + .timeline-point { + left: 50%; + margin-left: -0.6875rem; + } + .timeline-point-indicator { + left: 50%; + margin-left: -0.3125rem; + } + } + } + + // To remove arrows (visible while switching tabs) in widgets + &.timeline-advance { + .timeline-item { + .timeline-event { + &:before, + &:after { + border: transparent; + } + } + } + } +} + +// LTR only +@include ltr-only { + .timeline:not(.timeline-center) { + padding-left: 0.5rem; + } + .timeline-item { + border-left: 1px solid $timeline-border-color; + } +} + +// RTL +@include rtl-only { + .timeline:not(.timeline-center) { + padding-right: 0.5rem; + .timeline-item { + border-right: 1px solid $timeline-border-color; + } + + .timeline-end-indicator { + left: auto; + right: -0.75rem; + } + + .timeline-item { + padding-left: 0; + padding-right: 2rem; + border-right: 1px solid $timeline-border-color; + + &.timeline-item-transparent { + .timeline-event { + padding-right: 0; + } + } + + .timeline-point { + right: -0.38rem; + left: auto; + } + .timeline-indicator { + right: -0.75rem; + left: auto; + } + .timeline-indicator-advanced { + right: -1rem; + left: auto; + } + } + } +} + +@include media-breakpoint-up(md) { + .timeline.timeline-center .timeline-item { + &.timeline-item-left, + &:nth-of-type(odd):not(.timeline-item-left):not(.timeline-item-right) { + .timeline-indicator { + left: calc(100% - calc(#{$timeline-indicator-size}/ 2)); + } + } + } +} +// To Change Timeline Center's Alignment om small Screen + +@include media-breakpoint-down(md) { + .timeline { + &.timeline-center { + .timeline-end-indicator { + left: -2px; + } + + .timeline-item { + border-right: 0 !important; + left: 1rem; + &:not(:last-child) { + border-left: 1px solid $timeline-border-color !important; + } + float: left !important; + width: 100%; + padding-left: 3rem !important; + padding-right: 1.5rem !important; + + .timeline-event { + .timeline-event-time { + top: -1.7rem; + left: 0 !important; + right: auto !important; + } + } + .timeline-point { + left: -0.7rem !important; + margin-left: 0 !important; + } + .timeline-point-indicator { + left: 0 !important; + margin-left: -0.3125rem !important; + } + } + } + } + // RTL: Timeline Center's Alignment om small Screen + @include rtl-only { + .timeline { + &.timeline-center { + .timeline-item { + border-left: 0 !important; + right: 1rem !important; + &:not(:last-child) { + border-right: 1px solid $timeline-border-color !important; + } + } + + .timeline-item { + float: right !important; + width: 100%; + padding-right: 3.5rem !important; + padding-left: 1.5rem !important; + .timeline-event { + .timeline-event-time { + top: -1.2rem; + right: 0 !important; + left: auto !important; + } + } + .timeline-point { + right: -0.7rem !important; + margin-right: 0 !important; + } + } + } + } + } +} + +@include media-breakpoint-down(md) { + .timeline .timeline-item .timeline-indicator, + .timeline .timeline-item .timeline-indicator-advanced { + @include rtl-style { + left: auto; + right: -0.6875rem; + } + } + + @include rtl-only { + .timeline-center { + .timeline-item { + padding-left: 0; + padding-right: 3rem; + } + } + } +} +@include media-breakpoint-down(sm) { + .timeline { + .timeline-header { + flex-direction: column; + align-items: flex-start; + } + } +} +// For Contextual Colors +@each $color, $value in $theme-colors { + @if $color !=primary and $color !=light { + @include template-timeline-point-variant( + '.timeline-point-#{$color}', + if($color== 'dark' and $dark-style, $light, $value) + ); + @include template-timeline-indicator-variant( + '.timeline-indicator-#{$color}', + if($color== 'dark' and $dark-style, $light, $value) + ); + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/_variables-dark.scss b/src/modules/Resources/assets/vendor/scss/_components/_variables-dark.scss new file mode 100644 index 0000000..745cb60 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_variables-dark.scss @@ -0,0 +1,25 @@ +// Dark Layout Variables + +// ! _variable-dark.scss file overrides _variable.scss file. + +// Avatar +// ******************************************************************************* +$avatar-bg: #373b50 !default; // (C) + +// Menu +// ******************************************************************************* +$menu-horizontal-box-shadow: 0px 1px 4px 0px rgba($shadow-bg, 0.1) !default; + +// switch +// ******************************************************************************* +$switch-off-color: rgba-to-hex($gray-600, $rgba-to-hex-bg) !default; +$switch-off-bg: rgba-to-hex(rgba($base, 0.1), $rgba-to-hex-bg) !default; +$switch-off-border: rgba-to-hex(rgba($base, 0.1), $rgba-to-hex-bg) !default; +// Timeline +// ******************************************************************************* +$timeline-border-color: rgba-to-hex(rgba($base, 0.12), $rgba-to-hex-bg) !default; +$timeline-event-time-color: $body-color !default; + +// Text Divider +// ******************************************************************************* +$divider-color: $border-color !default; diff --git a/src/modules/Resources/assets/vendor/scss/_components/_variables.scss b/src/modules/Resources/assets/vendor/scss/_components/_variables.scss new file mode 100644 index 0000000..a3a9479 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/_variables.scss @@ -0,0 +1,168 @@ +// Common +// ******************************************************************************* + +$ui-star-size: 1.1em !default; +$ui-stars-spacer: -0.1em !default; +$ui-star-filled-color: $yellow !default; + +// Navbar (custom navbar) +// ******************************************************************************* +$navbar-height: 3.5rem !default; +$navbar-suggestion-width: 100% !default; +$navbar-suggestion-height: 28rem !default; +$navbar-suggestion-border-radius: $border-radius !default; +$navbar-dropdown-width: 22rem !default; +$navbar-dropdown-content-height: 24.08rem !default; +$navbar-notifications-dropdown-item-padding-y: 0.75rem !default; +$navbar-notifications-dropdown-item-padding-x: 1rem !default; + +// Menu +// ******************************************************************************* + +$menu-width: 16.25rem !default; +$menu-collapsed-width: 4.375rem !default; +$menu-collapsed-layout-breakpoint: xl !default; + +$menu-font-size: $font-size-base !default; + +$menu-item-spacer: 0.375rem !default; + +$menu-vertical-link-margin-x: 0.75rem !default; +$menu-link-spacer-x: 0.5rem !default; + +$menu-vertical-link-padding-y: 0.5rem !default; +$menu-vertical-link-padding-x: 0.75rem !default; +$menu-vertical-menu-link-padding-y: 0.5rem !default; +$menu-vertical-menu-level-spacer: 0.5rem !default; + +$menu-vertical-header-margin-y: 0.5rem !default; +$menu-vertical-header-margin-x: 1.25rem !default; + +$menu-horizontal-spacer-x: 0.375rem !default; +$menu-horizontal-item-spacer: 0.25rem !default; +$menu-horizontal-link-padding-y: 0.5rem !default; +$menu-horizontal-link-padding-x: 1rem !default; +$menu-horizontal-menu-link-padding-y: 0.5rem !default; +$menu-horizontal-menu-level-spacer: 2.75rem !default; +$menu-horizontal-box-shadow: 0px 1px 4px 0px rgba($black, 0.1) !default; + +$menu-sub-width: $menu-width !default; +$menu-control-width: 2.25rem !default; +$menu-control-arrow-size: 0.5rem !default; + +$menu-icon-expanded-width: 1.375rem !default; +$menu-icon-expanded-left-spacer: 2.25rem !default; +$menu-icon-expanded-font-size: 1.375rem !default; +$menu-icon-expanded-spacer: 0.5rem !default; + +$menu-animation-duration: 0.3s !default; +$menu-max-levels: 5 !default; + +$menu-dark-border-color: rgba(255, 255, 255, 0.2) !default; +$menu-dark-menu-bg: rgba(0, 0, 0, 0.06) !default; +$menu-light-border-color: rgba(0, 0, 0, 0.06) !default; +$menu-light-menu-bg: rgba(0, 0, 0, 0.05) !default; + +// Custom Options +// ******************************************************************************* + +$custom-option-padding: 1.067em !default; +$custom-option-cursor: pointer !default; +$custom-option-border-color: $border-color !default; +$custom-option-border-width: 1px !default; +$custom-option-image-border-width: 2px !default; +$custom-option-border-hover-color: $input-border-hover-color !default; + +// Switches +// ******************************************************************************* + +$switch-font-size: 0.625rem !default; +$switch-border-radius: 30rem !default; + +$switch-width: 2.5rem !default; +$switch-width-sm: 1.875rem !default; +$switch-width-lg: 3.25rem !default; + +$switch-height: 1.35rem !default; +$switch-height-sm: 1.125rem !default; +$switch-height-lg: 1.75rem !default; + +$switch-label-font-size: $font-size-base !default; +$switch-label-font-size-sm: $font-size-xs !default; +$switch-label-font-size-lg: $font-size-lg !default; + +$switch-label-line-height: 1.4 !default; +$switch-label-line-height-sm: 1.6 !default; +$switch-label-line-height-lg: 1.47 !default; + +$switch-spacer-x: 0.75rem !default; +$switch-spacer-y: 0.75rem !default; +$switch-gutter: 0.5rem !default; +$switch-inner-spacer: 0.25rem !default; +$switch-inner-spacer-sm: 0.17rem !default; + +$switch-square-border-radius: $border-radius !default; + +$switch-label-color: $headings-color !default; +$switch-label-disabled-color: $text-muted !default; +$switch-disabled-opacity: 0.45 !default; + +$switch-off-color: $gray-400 !default; +$switch-off-bg: rgba-to-hex($gray-100, $rgba-to-hex-bg) !default; +$switch-off-border: rgba-to-hex($gray-100, $rgba-to-hex-bg) !default; +$switch-holder-bg: $white !default; +$switch-holder-shadow: $box-shadow-xs !default; +$switch-focus-box-shadow: $input-btn-focus-box-shadow !default; + +// Avatars +// ******************************************************************************* + +$avatar-size-xl: 4rem !default; +$avatar-size-lg: 3.5rem !default; +$avatar-size-md: 3rem !default; +$avatar-size: 2.5rem !default; // Default +$avatar-size-sm: 2rem !default; +$avatar-size-xs: 1.5rem !default; + +$avatar-initial-xl: 1.875rem !default; +$avatar-initial-lg: 1.5rem !default; +$avatar-initial-md: 1.125rem !default; +$avatar-initial: $font-size-base !default; +$avatar-initial-sm: 0.8125rem !default; +$avatar-initial-xs: 0.625rem !default; + +$avatar-group-border: $card-bg !default; +$avatar-bg: #eeedf0 !default; // (C) + +// Timeline +// ******************************************************************************* + +$timeline-border-color: $border-color !default; + +$timeline-indicator-size: 2rem !default; +$timeline-point-size: 0.75rem !default; +$timeline-point-color: $primary !default; +$timeline-point-indicator-color: $primary !default; +$timeline-end-indicator-font-size: 1.5rem !default; +$timeline-item-min-height: 4rem !default; +$timeline-item-padding-x: 0 !default; +$timeline-item-padding-y: 0.5rem !default; +$timeline-item-bg-color: $card-bg !default; +$timeline-item-border-radius: $border-radius !default; + +$timeline-event-time-size: 0.85rem !default; +$timeline-event-time-color: $text-muted !default; + +// Text Divider +// ******************************************************************************* +$divider-color: $gray-200 !default; + +$divider-margin-y: 1rem !default; +$divider-margin-x: 0 !default; + +$divider-text-padding-y: 0rem !default; +$divider-text-padding-x: 1rem !default; + +$divider-font-size: $font-size-base !default; +$divider-text-color: $headings-color !default; +$divider-icon-size: 1.25rem !default; diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_app-brand.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_app-brand.scss new file mode 100644 index 0000000..bc83dc5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_app-brand.scss @@ -0,0 +1,29 @@ +// Within menu +@mixin template-app-brand-collapsed() { + .app-brand { + width: $menu-collapsed-width; + } + + .app-brand-logo, + .app-brand-link, + .app-brand-text { + margin-right: auto; + margin-left: auto; + } + + .app-brand-logo ~ .app-brand-text, + .app-brand .layout-menu-toggle { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + opacity: 0; + } + + .app-brand-img { + display: none; + } + + .app-brand-img-collapsed { + display: block; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_avatar.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_avatar.scss new file mode 100644 index 0000000..2941376 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_avatar.scss @@ -0,0 +1,22 @@ +// Avatar +// ******************************************************************************* + +@mixin template-avatar-style($height, $width, $font-size, $status-indicator-position: 2px) { + width: $width; + height: $height; + + .avatar-initial { + font-size: $font-size; + } + + &.avatar-online, + &.avatar-offline, + &.avatar-away, + &.avatar-busy { + &:after { + width: $width * 0.2; + height: $height * 0.2; + right: $status-indicator-position; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_footer.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_footer.scss new file mode 100644 index 0000000..c3e9959 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_footer.scss @@ -0,0 +1,47 @@ +// Footer +// ******************************************************************************* + +@mixin template-footer-style($parent, $bg, $color: null, $active-color: null, $border: null) { + $colors: get-navbar-prop($bg, $active-color, $color, $border); + + #{$parent} { + color: map-get($colors, color); + .layout-footer-fixed .layout-horizontal & { + background-color: map-get($colors, bg) !important; + } + + .layout-footer-fixed .layout-wrapper:not(.layout-horizontal) & { + .footer-container { + background-color: map-get($colors, bg) !important; + } + } + + .footer-link { + color: map-get($colors, color); + + &:hover, + &:focus { + color: map-get($colors, active-color); + } + + &.disabled { + color: map-get($colors, disabled-color) !important; + } + } + + .footer-text { + color: map-get($colors, active-color); + } + + .show > .footer-link, + .active > .footer-link, + .footer-link.show, + .footer-link.active { + color: map-get($colors, active-color); + } + + hr { + border-color: map-get($colors, border); + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_menu.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_menu.scss new file mode 100644 index 0000000..afe903f --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_menu.scss @@ -0,0 +1,133 @@ +// Menu +// ******************************************************************************* + +@mixin template-menu-style($parent, $bg, $color: null, $active-color: null, $border: null, $active-bg: null) { + $colors: get-navbar-prop($bg, $active-color, $color, $border); + $contrast-percent: map-get($colors, contrast-percent); + + @if not $active-bg { + $active-bg: rgba-to-hex( + rgba(map-get($colors, bg), 1 - if($contrast-percent < 0.75, 0.025, 0.05)), + if($contrast-percent > 0.25, #fff, #000) + ); + } + + $menu-active-bg: linear-gradient(270deg, rgba($active-bg, 0.7) 0%, $active-bg 100%); + $menu-active-bg-rtl: linear-gradient(-270deg, rgba($active-bg, 0.7) 0%, $active-bg 100%); + $horizontal-active-bg: rgba-to-hex(rgba($active-bg, 0.16), $bg); + + #{$parent} { + background-color: map-get($colors, bg) !important; + &.menu-horizontal { + background-color: rgba(map-get($colors, bg), 0.95) !important; + } + color: map-get($colors, color); + + .menu-link, + .menu-horizontal-prev, + .menu-horizontal-next { + color: map-get($colors, color); + &:hover, + &:focus { + color: map-get($colors, active-color); + } + + &.active { + color: map-get($colors, active-color); + } + } + .menu-toggle::after { + color: map-get($colors, color); + } + + .menu-item.disabled .menu-link, + .menu-horizontal-prev.disabled, + .menu-horizontal-next.disabled { + color: map-get($colors, disabled-color) !important; + } + + .menu-item.open:not(.menu-item-closing) > .menu-toggle, + .menu-item.active > .menu-link { + color: map-get($colors, active-color); + } + + //vertical menu active item bg color + &.menu-vertical .menu-item.active > .menu-link:not(.menu-toggle) { + background: $menu-active-bg; + box-shadow: 0px 2px 6px 0px rgba($active-bg, 0.3); + color: color-contrast($active-bg) !important; + &.menu-toggle::after { + color: color-contrast($active-bg) !important; + } + @if $rtl-support { + [dir='rtl'] & { + background: $menu-active-bg-rtl !important; + } + } + } + + //- + &.menu-horizontal { + .menu-inner > .menu-item.active > .menu-link.menu-toggle { + background: $menu-active-bg; + color: color-contrast($active-bg) !important; + box-shadow: 0px 2px 6px 0px rgba($active-bg, 0.3); + &.menu-toggle::after { + color: color-contrast($active-bg) !important; + } + @if $rtl-support { + [dir='rtl'] & { + background: $menu-active-bg-rtl; + box-shadow: 0px 2px 6px 0px rgba($active-bg, 0.3); + color: color-contrast($active-bg) !important; + } + } + } + + .menu-inner .menu-item:not(.menu-item-closing) > .menu-sub, + .menu-inner .menu-item.open > .menu-toggle { + background: $bg; + } + + .menu-item.active > .menu-link:not(.menu-toggle) { + background: $horizontal-active-bg; + color: $active-bg !important; + } + } + .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-sub, + .menu-inner > .menu-item.menu-item-closing .menu-item.open .menu-toggle { + background: transparent; + color: color-contrast($active-bg); + } + + .menu-inner-shadow { + background: linear-gradient($bg 41%, rgba($bg, 0.11) 95%, rgba($bg, 0)); + } + + .menu-text { + color: map-get($colors, active-color); + } + + .menu-header { + color: map-get($colors, muted-color); + } + + hr, + .menu-divider, + .menu-inner > .menu-item.open > .menu-sub::before { + border-color: map-get($colors, border) !important; + } + + .menu-block::before { + background-color: map-get($colors, muted-color); + } + + .ps__thumb-y, + .ps__rail-y.ps--clicking > .ps__thumb-y { + background: rgba( + map-get($colors, active-color), + if($contrast-percent > 0.75, map-get($colors, opacity) - 0.4, map-get($colors, opacity) - 0.2) + ) !important; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_misc.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_misc.scss new file mode 100644 index 0000000..f45340d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_misc.scss @@ -0,0 +1,6 @@ +// SVG Color +@mixin template-svg-color($background) { + .svg-illustration svg { + fill: $background; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_navbar.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_navbar.scss new file mode 100644 index 0000000..907493c --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_navbar.scss @@ -0,0 +1,90 @@ +// Navbar +// ******************************************************************************* + +@mixin template-navbar-style($parent, $bg, $color: null, $active-color: null, $border: null) { + $colors: get-navbar-prop($bg, $active-color, $color, $border); + + #{$parent} { + background-color: rgba(map-get($colors, bg), 0.88) !important; + color: map-get($colors, color); + + .navbar-brand, + .navbar-brand a { + color: map-get($colors, active-color); + + &:hover, + &:focus { + color: map-get($colors, active-color); + } + } + + // Navbar search color + .navbar-search-wrapper { + .navbar-search-icon, + .search-input { + color: map-get($colors, color); + } + } + .search-input-wrapper { + .search-input, + .search-toggler { + background-color: $bg !important; + color: map-get($colors, color); + } + } + + .navbar-nav { + > .nav-link, + > .nav-item > .nav-link, + > .nav > .nav-item > .nav-link { + color: map-get($colors, color); + + &:hover, + &:focus { + color: map-get($colors, active-color); + } + + &.disabled { + color: map-get($colors, disabled-color) !important; + } + } + + .show > .nav-link, + .active > .nav-link, + .nav-link.show, + .nav-link.active { + color: map-get($colors, active-color); + } + } + + .navbar-toggler { + color: map-get($colors, color); + border-color: map-get($colors, border); + } + + .navbar-toggler-icon { + background-image: if( + map-get($colors, contrast-percent) > 0.75, + $navbar-light-toggler-icon-bg, + $navbar-dark-toggler-icon-bg + ); + } + + .navbar-text { + color: map-get($colors, color); + + a { + color: map-get($colors, active-color); + + &:hover, + &:focus { + color: map-get($colors, active-color); + } + } + } + + hr { + border-color: map-get($colors, border); + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_switch.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_switch.scss new file mode 100644 index 0000000..a5b5339 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_switch.scss @@ -0,0 +1,179 @@ +// * Switches +// ******************************************************************************* + +@mixin template-switch-size-base( + $size, + $width, + $height, + $font-size, + $form-label-font-size, + $label-line-height, + $inner-spacer +) { + min-height: $height; + + font-size: $form-label-font-size; + line-height: $label-line-height; + + $delta: 0; + $line-height-computed: $form-label-font-size * $label-line-height; + .switch-label:first-child { + padding-right: $switch-gutter; + } + .switch-input ~ .switch-label { + padding-left: $width + $switch-gutter; + } + + .switch-toggle-slider { + width: $width; + height: $height - ($delta * 2); + font-size: $font-size; + line-height: $height; + border: 1px solid transparent; + + i { + position: relative; + font-size: $form-label-font-size; + @if ($size== 'lg') { + top: -2px; + } @else if ($size== 'sm') { + top: -2px; + } @else { + top: -1.35px; + } + } + + @if ($line-height-computed>$height) { + top: (($line-height-computed - $height) * 0.5) + $delta; + } @else { + top: 50%; + transform: translateY(-50%); + } + } + + .switch-label { + @if ($line-height-computed < $height) { + top: ($height - $line-height-computed) * 0.5; + } @else { + top: 0; + } + } + + .switch-input:checked ~ .switch-toggle-slider::after { + left: $width - $height - 0.1; + } + + .switch-toggle-slider::after { + margin-left: $inner-spacer; + width: ceil(rem-to-px($height - $inner-spacer * 2)); + height: ceil(rem-to-px($height - $inner-spacer * 2)); + } + + .switch-on { + padding-left: $inner-spacer; + padding-right: $height - $inner-spacer; + } + + .switch-off { + padding-left: $height - $inner-spacer; + padding-right: $inner-spacer; + } + + @if $rtl-support { + [dir='rtl'] & .switch-label { + padding-right: $width + $switch-gutter; + padding-left: 0; + } + [dir='rtl'] & .switch-input:checked ~ .switch-toggle-slider::after { + left: auto; + right: $width - $height - 0.15; + } + + [dir='rtl'] & .switch-toggle-slider { + &::after { + margin-left: 0; + margin-right: $inner-spacer; + } + } + + [dir='rtl'] & .switch-on { + padding-left: $height - $inner-spacer; + padding-right: $inner-spacer; + } + + [dir='rtl'] & .switch-off { + padding-left: $inner-spacer; + padding-right: $height - $inner-spacer; + } + } +} + +// Switch size +@mixin template-switch-size( + $size, + $width, + $height, + $font-size, + $form-label-font-size, + $label-line-height, + $inner-spacer: $switch-inner-spacer +) { + .switch-#{$size} { + @include template-switch-size-base( + $size, + $width, + $height, + $font-size, + $form-label-font-size, + $label-line-height, + $inner-spacer + ); + } +} + +// Switch variant +@mixin template-switch-variant($parent, $background, $color: null) { + $selector: if($parent== '', '', '#{$parent}.switch'); + $color: if($color, $color, color-contrast($background)); + + #{$selector} .switch-input:checked ~ .switch-toggle-slider { + background: $background; + color: $color; + box-shadow: 0 2px 6px 0 rgba($background, 0.3); + } +} + +// Switch theme +@mixin template-switch-theme($parent, $background, $color: null) { + @include template-switch-variant($parent, $background, $color); +} + +// Switch validation +@mixin template-switch-validation-state($state, $color) { + .switch-input { + //BS & jQuery validation + .was-validated &:#{$state}, + &.invalid, + //jq + &.is-#{$state} { + ~ .switch-label { + color: $color; + } + + ~ .#{$state}-feedback, + ~ .#{$state}-tooltip { + display: block; + } + + ~ .switch-toggle-slider { + border: 1px solid $color !important; + } + + &:checked ~ .switch-toggle-slider { + background: $color; + color: color-contrast($color); + box-shadow: 0 2px 6px 0 rgba($color, 0.3); + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_text-divider.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_text-divider.scss new file mode 100644 index 0000000..cd67b7e --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_text-divider.scss @@ -0,0 +1,17 @@ +// Text Divider +// ******************************************************************************* + +@mixin template-text-divider-variant($divider-color, $background) { + $divider-selector: if($divider-color== '', '', '#{$divider-color}'); + .divider { + &#{$divider-selector} { + &.divider-vertical, + .divider-text { + &:before, + &:after { + border-color: $background; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_timeline.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_timeline.scss new file mode 100644 index 0000000..5067c84 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_timeline.scss @@ -0,0 +1,33 @@ +// Timeline +// ******************************************************************************* + +// Timeline point +@mixin template-timeline-point-variant($point-color, $background) { + .timeline { + #{$point-color} { + background-color: $background !important; + outline: 3px solid rgba($background, 0.12); + } + + // Timeline-outline styles + &.timeline-outline { + #{$point-color} { + border: 2px solid $background !important; + } + } + } +} + +@mixin template-timeline-indicator-variant($indicator-color, $background) { + $color: $background; + $background: rgba-to-hex(rgba($background, 0.16), $rgba-to-hex-bg); + + .timeline { + #{$indicator-color} { + background-color: $background; + i { + color: $color !important; + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_components/mixins/_treeview.scss b/src/modules/Resources/assets/vendor/scss/_components/mixins/_treeview.scss new file mode 100644 index 0000000..081a8c4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_components/mixins/_treeview.scss @@ -0,0 +1,30 @@ +// Treeview +// ******************************************************************************* + +// Treeview click +@mixin template-treeview-clicked-bg($background) { + .jstree-default { + .jstree-wholerow-hovered, + .jstree-hovered { + background: $component-hover-bg; + color: $component-hover-color; + } + .jstree-wholerow-clicked, + .jstree-clicked { + background: $component-hover-color; + color: $white; + } + } + .jstree-default-dark { + .jstree-wholerow-hovered, + .jstree-hovered { + background: $component-hover-bg; + color: $component-hover-color; + } + .jstree-wholerow-clicked, + .jstree-clicked { + background: $component-hover-color; + color: $white; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_bootstrap-extended-dark.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_bootstrap-extended-dark.scss new file mode 100644 index 0000000..29b6f8f --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_bootstrap-extended-dark.scss @@ -0,0 +1,6 @@ +// =================================================================================================================== +// ? TIP: It is recommended to use this file for overriding bootstrap extended dark variables (_bootstrap-extended/_variables-dark.scss). +// Copy and paste variables as needed, modify their values, and remove the !default flag. +// =================================================================================================================== + +// $success: #f0f000 !default; diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_bootstrap-extended.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_bootstrap-extended.scss new file mode 100644 index 0000000..e6dedd5 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_bootstrap-extended.scss @@ -0,0 +1,7 @@ +// =================================================================================================================== +// ? TIP: It is recommended to use this file for overriding bootstrap extended variables (_bootstrap-extended/_variables.scss). +// Copy and paste variables as needed, modify their values, and remove the !default flag. +// =================================================================================================================== + +// $font-size-root: 14px !default; +// $success: #00ff00 !default; diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_components-dark.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_components-dark.scss new file mode 100644 index 0000000..706c14e --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_components-dark.scss @@ -0,0 +1,5 @@ +// ========================================================================================================== +// ? TIP: It is recommended to use this file for overriding component dark variables (_components/_variables-dark.scss). +// Copy and paste variables as needed, modify their values, and remove the !default flag. +// ========================================================================================================== +// $menu-width: 18rem !default; diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_components.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_components.scss new file mode 100644 index 0000000..e6230c4 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_components.scss @@ -0,0 +1,6 @@ +// ================================================================================================ +// ? TIP: It is recommended to use this file for overriding component variables (_components/_variables.scss). +// Copy and paste variables as needed, modify their values, and remove the !default flag. +// ================================================================================================ + +// $menu-width: 14rem !default; diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_libs.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_libs.scss new file mode 100644 index 0000000..0235932 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_libs.scss @@ -0,0 +1,8 @@ +// ================================================================================================ +// ? TIP: It is recommended to use this file for overriding any library variables from (libs/) folder. +// Copy and paste variables as needed, modify their values, and remove the !default flag. +// ================================================================================================ + +@import 'support'; + +// $flatpickr-content-padding: 0.5rem; \ No newline at end of file diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_pages.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_pages.scss new file mode 100644 index 0000000..f72a574 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_pages.scss @@ -0,0 +1,8 @@ +// ================================================================================================ +// ? TIP: It is recommended to use this file for overriding any pages variables from the (pages/) folder. +// Copy and paste variables as needed, modify their values, and remove the !default flag. +// ================================================================================================ + +@import 'support'; + +// $calender-sidebar-width: 20rem; \ No newline at end of file diff --git a/src/modules/Resources/assets/vendor/scss/_custom-variables/_support.scss b/src/modules/Resources/assets/vendor/scss/_custom-variables/_support.scss new file mode 100644 index 0000000..93cde5c --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_custom-variables/_support.scss @@ -0,0 +1,51 @@ +$enable-light-style: true; +$enable-dark-style: true; +$enable-rtl-support: true; + +@mixin app-ltr($has-child: true) { + @if $enable-rtl-support { + @if $has-child { + html:not([dir='rtl']) & { + @content; + } + } @else { + html:not([dir='rtl']) { + @content; + } + } + } @else { + @content; + } +} + +@mixin app-ltr-style() { + @if $enable-rtl-support { + &:not([dir='rtl']) { + @content; + } + } @else { + @content; + } +} + +@mixin app-rtl($has-child: true) { + @if $enable-rtl-support { + @if $has-child { + [dir='rtl'] & { + @content; + } + } @else { + [dir='rtl'] { + @content; + } + } + } +} + +@mixin app-rtl-style() { + @if $enable-rtl-support { + &[dir='rtl'] { + @content; + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_theme/_common.scss b/src/modules/Resources/assets/vendor/scss/_theme/_common.scss new file mode 100644 index 0000000..09a66bf --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_theme/_common.scss @@ -0,0 +1,75 @@ +// Theme mixin +// ******************************************************************************* + +@mixin template-common-theme($background, $color: null) { + @include text-variant('.text-primary', $background); + @include bg-variant('.bg-primary', $background); + @include bg-label-variant('.bg-label-primary', $background); + @include bg-label-hover-variant('.bg-label-hover-primary', $background); + @include bg-gradient-variant('.bg-gradient-primary', $background); + @include bg-glow-variant('.bg-primary', $background); + @include template-pagination-theme($background, $color); + @include template-pagination-outline-variant('.pagination-outline-primary', $background); + @include template-progress-bar-theme($background, $color); + @include template-progress-shadow-theme('.progress-bar', $background); + @include template-modal-onboarding-theme($background, $color); + @include template-list-group-theme($background, $color); + @include template-list-group-timeline-variant('.list-group-timeline-primary', $background); + @include template-alert-variant('.alert-primary', $background); + @include template-alert-outline-variant('.alert-outline-primary', $background); + @include template-alert-solid-variant('.alert-solid-primary', $background); + @include template-tooltip-variant( + '.tooltip-primary, .tooltip-primary > .tooltip, .ngb-tooltip-primary + ngb-tooltip-window', + $background, + $color + ); + @include template-popover-variant( + '.popover-primary, .popover-primary > .popover, .ngb-popover-primary + ngb-popover-window', + $background, + $color + ); + + // Need to add shift-color as BS5 updated with table variant colors like this + + @include template-table-variant('primary', shift-color($background, $table-bg-scale)); + @include template-button-variant('.btn-primary', $background, $color); + @include template-button-label-variant('.btn-label-primary', $background, $color); + @include template-button-text-variant('.btn-text-primary', $background, $color); + @include template-button-outline-variant('.btn-outline-primary', $background, $color); + @include template-dropdown-theme(rgba-to-hex(rgba($background, 0.16), $card-bg), $background); + @include template-nav-theme($background, $color); + @include template-form-control-theme($background); + @include template-form-check-theme($background, $color); + @include template-form-switch-theme($background); + @include template-file-input-theme($background); + + @include template-switch-variant('', $background, $color); // For default switch + @include template-switch-variant('.switch-primary', $background, $color); + + @include template-timeline-point-variant('.timeline-point-primary', $background); + @include template-timeline-indicator-variant('.timeline-indicator-primary', $background); + @include template-text-divider-variant('.divider-primary', $background); + + @include template-navbar-style('.navbar.bg-primary', $background); + @include template-menu-style('.menu.bg-primary', $background); + @include template-footer-style('.footer.bg-primary', $background); + @include template-float-label-theme($background); + @include template-svg-color($background); + @include template-treeview-clicked-bg($background); + @include template-card-border-shadow-variant('.card-border-shadow-primary', $background); + @include template-card-hover-border-variant('.card-hover-border-primary', $background); + + html:not([dir='rtl']) .border-primary, + html[dir='rtl'] .border-primary { + border-color: $background !important; + } + a { + color: $background; + &:hover { + color: tint-color($background, 10%); + } + } + .fill-primary { + fill: $background; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/_theme/_libs.scss b/src/modules/Resources/assets/vendor/scss/_theme/_libs.scss new file mode 100644 index 0000000..68d8c88 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_theme/_libs.scss @@ -0,0 +1,75 @@ +// Imports +// ******************************************************************************* + +@import '../../libs/nouislider/mixins'; +@import '../../libs/select2/mixins'; + +@import '../../libs/tagify/mixins'; +@import '../../libs/datatables-responsive-bs5/mixins'; +@import '../../libs/bootstrap-select/mixins'; +@import '../../libs/bootstrap-datepicker/mixins'; +@import '../../libs/flatpickr/mixins'; +@import '../../libs/bootstrap-daterangepicker/mixins'; +@import '../../libs/jquery-timepicker/mixins'; +@import '../../libs/quill/mixins'; +@import '../../libs/typeahead-js/mixins'; +@import '../../libs/dropzone/mixins'; +@import '../../libs/swiper/mixins'; +@import '../../libs/spinkit/mixins'; +@import '../../libs/plyr/mixins'; +@import '../../libs/fullcalendar/mixins'; +@import '../../libs/sweetalert2/mixins'; +@import '../../libs/pickr/mixins'; +@import '../../libs/shepherd/mixins'; +@import '../../libs/bs-stepper/mixins'; + +// Theme mixin +// ******************************************************************************* + +@mixin template-libs-theme($background, $color: null) { + @include nouislider-theme($background); + @include select2-theme($background, $color); + @include tagify-theme($background); + @include bs-datatables-theme($background); + @include bs-select-theme($background, $color); + @include bs-datepicker-theme($background, $color); + @include flatpickr-theme($background, $color); + @include bs-daterangepicker-theme($background, $color); + @include timepicker-theme($background, $color); + @include quill-theme($background); + @include typeahead-theme($background, $color); + @include dropzone-theme($background); + @include swiper-theme($background); + @include spinkit-theme($background); + @include plyr-theme($background, $color); + @include fullcalendar-theme($background, $color); + @include sweetalert2-theme($background, $color); + @include colorPicker-theme($background); + @include icon-theme($background); + @include tour-theme($background); + @include bs-stepper-theme($background); +} + +@mixin template-libs-dark-theme($background, $color: null) { + @include nouislider-theme($background); + @include select2-theme($background, $color); + @include tagify-theme($background); + @include bs-datatables-theme($background); + @include bs-select-theme($background, $color); + @include bs-datepicker-dark-theme($background, $color); + @include flatpickr-dark-theme($background, $color); + @include bs-daterangepicker-dark-theme($background, $color); + @include timepicker-theme($background, $color); + @include quill-theme($background); + @include typeahead-theme($background, $color); + @include dropzone-theme($background); + @include swiper-theme($background); + @include spinkit-theme($background); + @include plyr-theme($background, $color); + @include fullcalendar-theme($background, $color); + @include sweetalert2-dark-theme($background, $color); + @include colorPicker-theme($background); + @include icon-theme($background); // ToDo: placement of mixin + @include tour-theme($background); + @include bs-stepper-theme($background); +} diff --git a/src/modules/Resources/assets/vendor/scss/_theme/_pages.scss b/src/modules/Resources/assets/vendor/scss/_theme/_pages.scss new file mode 100644 index 0000000..b98f5e2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_theme/_pages.scss @@ -0,0 +1,10 @@ +// Page mixins +// ******************************************************************************* + +@import '../pages/mixins'; + +@mixin template-pages-theme($background, $color: null) { + // include page related mixins + @include app-chat-theme($background); + @include front-theme($background); +} diff --git a/src/modules/Resources/assets/vendor/scss/_theme/_theme.scss b/src/modules/Resources/assets/vendor/scss/_theme/_theme.scss new file mode 100644 index 0000000..3cf16bb --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/_theme/_theme.scss @@ -0,0 +1,103 @@ +// ? Theme related styles common styles + +@import '../_components/include'; + +// Space above detached navbar (vertical layout only) +.layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-page:before { + content: ''; + width: 100%; + height: calc($spacer + $navbar-height); + position: fixed; + top: 0px; + z-index: 10; +} + +.bg-menu-theme { + // Sub menu item link bullet + .menu-sub > .menu-item > .menu-link:before { + content: '\ea6b'; + font-family: 'tabler-icons'; + position: absolute; + font-size: 0.75rem; + font-weight: bold; + } + &.menu-vertical { + .menu-sub > .menu-item > .menu-link:before { + left: 1.1rem; + @include rtl-style { + right: 1.1rem; + left: inherit; + } + } + .menu-sub > .menu-item .menu-link .menu-icon { + display: none; + } + } + &.menu-horizontal { + .menu-inner > .menu-item > .menu-sub > .menu-item > .menu-link { + @include ltr-style { + padding-left: $menu-horizontal-link-padding-x; + } + @include rtl-style { + padding-right: $menu-horizontal-link-padding-x; + } + &:before { + content: ''; + } + } + } + // Sub menu item link bullet + .menu-sub > .menu-item > .menu-link:before { + // For horizontal layout + .layout-horizontal & { + left: 1.1rem; + @include rtl-style { + right: 1.1rem; + left: inherit; + } + } + } + + .menu-inner .menu-item .menu-link { + .layout-wrapper:not(.layout-horizontal) & { + border-radius: $border-radius; + } + } + .menu-inner > .menu-item > .menu-link { + .layout-horizontal & { + border-radius: $border-radius; + } + } + + .menu-inner > { + // Spacing and Box-shadow only for horizontal menu above lg screen + @include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .menu-item { + .layout-horizontal & { + margin: $menu-vertical-header-margin-y 0; + &:not(:first-child) { + margin-inline-start: calc($menu-item-spacer / 2); + } + &:not(:last-child) { + margin-inline-end: calc($menu-item-spacer / 2); + } + } + } + } + .menu-item.active:before { + .layout-wrapper:not(.layout-horizontal) & { + content: ''; + position: absolute; + right: 0; + width: 0.25rem; + height: 2.6845rem; + border-radius: $border-radius 0 0 $border-radius; + @include rtl-style { + left: 0; + right: inherit; + border-radius: 0 $border-radius $border-radius 0; + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/core-dark.scss b/src/modules/Resources/assets/vendor/scss/core-dark.scss new file mode 100644 index 0000000..7233d20 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/core-dark.scss @@ -0,0 +1,4 @@ +@import 'bootstrap-dark'; +@import 'bootstrap-extended-dark'; +@import 'components-dark'; +@import 'colors-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/core.scss b/src/modules/Resources/assets/vendor/scss/core.scss new file mode 100644 index 0000000..dae0761 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/core.scss @@ -0,0 +1,4 @@ +@import 'bootstrap'; +@import 'bootstrap-extended'; +@import 'components'; +@import 'colors'; diff --git a/src/modules/Resources/assets/vendor/scss/pages/_mixins.scss b/src/modules/Resources/assets/vendor/scss/pages/_mixins.scss new file mode 100644 index 0000000..87ce6d2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/pages/_mixins.scss @@ -0,0 +1,78 @@ +/* +* Pages Mixins +*/ +@import '../../scss/_bootstrap-extended/functions'; + +@mixin icon-theme($color) { + .icon-card.active { + outline: 1px solid $color; + i, + svg { + color: $color; + } + } +} + +// App Chat +@mixin app-chat-theme($color) { + $chat-item-active-bg: $color; + .app-chat { + .sidebar-body { + .chat-contact-list { + li { + &.active { + background: $chat-item-active-bg; + } + } + } + } + .app-chat-history { + .chat-history { + .chat-message { + &.chat-message-right { + .chat-message-text { + background-color: $color !important; + } + } + } + } + } + } +} + +@mixin front-theme($color) { + // Navbar --------------------- + .navbar { + &.landing-navbar { + .navbar-nav { + .show > .nav-link, + .active > .nav-link, + .nav-link.show, + .nav-link.active, + .nav-link:hover { + color: $color !important; + i { + color: $color !important; + } + } + } + } + } + + // Landing page --------------------- + // Useful features + .landing-features { + .features-icon-wrapper { + .features-icon-box { + .features-icon { + border: 2px solid rgba($color, 0.2); + } + &:hover { + .features-icon { + background-color: rgba($color, 0.05); + } + } + } + } + } +} diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-dark.scss new file mode 100644 index 0000000..dfcafed --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../bootstrap-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-extended-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-extended-dark.scss new file mode 100644 index 0000000..5c6845f --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-extended-dark.scss @@ -0,0 +1,9 @@ +$rtl-support: true; + +@import '../bootstrap-extended-dark'; + +// RTL Utilities +@include rtl-only { + @import '../_bootstrap-extended/utilities-rtl'; + @import 'bootstrap/scss/utilities/api'; +} diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-extended.scss b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-extended.scss new file mode 100644 index 0000000..75241f0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap-extended.scss @@ -0,0 +1,9 @@ +$rtl-support: true; + +@import '../bootstrap-extended'; + +// RTL Utilities +@include rtl-only { + @import '../_bootstrap-extended/utilities-rtl'; + @import 'bootstrap/scss/utilities/api'; +} diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap.scss b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap.scss new file mode 100644 index 0000000..c75052d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_bootstrap.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../bootstrap'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_colors-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/_colors-dark.scss new file mode 100644 index 0000000..4b2b6c9 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_colors-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../colors-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_colors.scss b/src/modules/Resources/assets/vendor/scss/rtl/_colors.scss new file mode 100644 index 0000000..af0e47c --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_colors.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../colors'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_components-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/_components-dark.scss new file mode 100644 index 0000000..127f242 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_components-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../components-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/_components.scss b/src/modules/Resources/assets/vendor/scss/rtl/_components.scss new file mode 100644 index 0000000..ca89bee --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/_components.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../components'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/core-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/core-dark.scss new file mode 100644 index 0000000..7233d20 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/core-dark.scss @@ -0,0 +1,4 @@ +@import 'bootstrap-dark'; +@import 'bootstrap-extended-dark'; +@import 'components-dark'; +@import 'colors-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/core.scss b/src/modules/Resources/assets/vendor/scss/rtl/core.scss new file mode 100644 index 0000000..dae0761 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/core.scss @@ -0,0 +1,4 @@ +@import 'bootstrap'; +@import 'bootstrap-extended'; +@import 'components'; +@import 'colors'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-bordered-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-bordered-dark.scss new file mode 100644 index 0000000..08cba94 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-bordered-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-bordered-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-bordered.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-bordered.scss new file mode 100644 index 0000000..d25ce87 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-bordered.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-bordered'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-default-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-default-dark.scss new file mode 100644 index 0000000..b8e63c3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-default-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-default-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-default.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-default.scss new file mode 100644 index 0000000..a4fe4c1 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-default.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-default'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-raspberry-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-raspberry-dark.scss new file mode 100644 index 0000000..252b50f --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-raspberry-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-raspberry-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-raspberry.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-raspberry.scss new file mode 100644 index 0000000..596f938 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-raspberry.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-raspberry'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-semi-dark-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-semi-dark-dark.scss new file mode 100644 index 0000000..c7b6339 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-semi-dark-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-semi-dark-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/rtl/theme-semi-dark.scss b/src/modules/Resources/assets/vendor/scss/rtl/theme-semi-dark.scss new file mode 100644 index 0000000..d1fbb1d --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/rtl/theme-semi-dark.scss @@ -0,0 +1,3 @@ +$rtl-support: true; + +@import '../theme-semi-dark'; diff --git a/src/modules/Resources/assets/vendor/scss/theme-bordered-dark.scss b/src/modules/Resources/assets/vendor/scss/theme-bordered-dark.scss new file mode 100644 index 0000000..dcaa37a --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-bordered-dark.scss @@ -0,0 +1,343 @@ +@import './_components/include-dark'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #7367f0; + +body { + background: $card-bg; +} + +.bg-body { + background: $body-bg !important; +} + +.dropdown-menu, +.popover, +.toast, +.flatpickr-calendar:not(.app-calendar-sidebar .flatpickr-calendar), +.datepicker.datepicker-inline, +.datepicker.datepicker-inline table, +.daterangepicker, +.pcr-app, +.ui-timepicker-wrapper, +.twitter-typeahead .tt-menu, +.tagify__dropdown, +.swal2-popup, +.select2-dropdown, +.select2-container--default .select2-dropdown.select2-dropdown--above, +.shepherd-element, +.menu-horizontal .menu-inner > .menu-item.open .menu-sub, +div.dataTables_wrapper .dt-button-collection { + outline: none; + box-shadow: none !important; + border: 1px solid $border-color !important; +} + +.flatpickr-days, +.flatpickr-time { + border-width: 0 !important; +} + +// Bootstrap select > double border fix +.dropdown-menu .dropdown-menu { + border: none !important; +} +.datepicker.datepicker-inline { + width: fit-content; + border-radius: $border-radius; +} +.apexcharts-canvas .apexcharts-tooltip, +.modal-content, +.offcanvas, +div.dataTables_wrapper .dt-button-collection > div[role='menu'] { + box-shadow: none !important; +} +.modal-content { + & { + border: $border-width solid $border-color !important; + } +} +.offcanvas.offcanvas-start, +.offcanvas.offcanvas-end, +.offcanvas.offcanvas-top, +.offcanvas.offcanvas-bottom { + border-width: $border-width; +} +.select2-dropdown { + border-color: $border-color !important; +} +.bs-popover-start > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='left'] > .popover-arrow::before { + border-left-color: $border-color !important; + right: -1px; +} +.bs-popover-end > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='right'] > .popover-arrow::before { + border-right-color: $border-color !important; + left: -1px; +} +.bs-popover-top > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='top'] > .popover-arrow::before { + border-top-color: $border-color !important; + bottom: -1px; +} +.bs-popover-bottom > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='bottom'] > .popover-arrow::before { + border-bottom-color: $border-color !important; + top: -1px; +} + +@include template-common-theme($primary-color); +@include template-libs-dark-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); +.layout-navbar, +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.navbar-detached { + border: 1px solid $border-color; + box-shadow: none; +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($card-bg, 70%) 44%, rgba($card-bg, 43%) 73%, rgba($card-bg, 0%)); + -webkit-mask: linear-gradient($card-bg, $card-bg 18%, transparent 100%); + mask: linear-gradient($card-bg, $card-bg 18%, transparent 100%); +} +.layout-horizontal { + .layout-navbar { + box-shadow: 0 1px 0 $border-color; + } + .layout-page .menu-horizontal { + box-shadow: none; + border-bottom: 1px solid $border-color; + } +} + +// Menu +// --------------------------------------------------------------------------- +@include template-menu-style( + '.bg-menu-theme', + $card-bg, + $color: $headings-color, + $active-color: $headings-color, + $active-bg: $primary-color +); + +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-75; + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-50; + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: $body-color !important; + } +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .layout-menu { + box-shadow: 0 0 0 1px $border-color; + } +} + +.layout-menu-horizontal { + box-shadow: 0 -1px 0 $border-color inset; +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.content-footer .footer-container { + .layout-footer-fixed .layout-wrapper:not(.layout-horizontal) & { + border: 1px solid $border-color; + border-bottom: 0; + } +} +.content-footer { + .layout-horizontal & { + border-top: 1px solid $border-color; + } +} + +// Component styles +// --------------------------------------------------------------------------- + +// card +.card:not(.card-group .card), +.card-group { + box-shadow: none; + border: $border-width solid $card-border-color; +} +// card border-shadow variant +.card { + &[class*='card-border-shadow-'] { + &:hover { + box-shadow: none !important; + } + } +} + +//Accordion +.accordion { + &:not(.accordion-custom-button):not(.accordion-arrow-left) { + .accordion-item { + border: $accordion-border-width solid $accordion-border-color; + } + } + .accordion-item { + box-shadow: none !important; + } +} + +// Tabs +.nav-tabs-shadow { + box-shadow: none !important; + border: 1px solid $border-color !important; + border-radius: $border-radius; +} +.nav-pills:not(.card-header-pills) { + ~ .tab-content { + border: 1px solid $border-color !important; + @include border-radius($border-radius); + box-shadow: none; + } +} +.nav-align-top .nav-tabs { + @include border-top-radius($border-radius); + ~ .tab-content { + box-shadow: none; + border-top-width: 0 !important; + @include border-bottom-radius($border-radius); + } +} +.nav-align-bottom .nav-tabs { + @include border-bottom-radius($border-radius); + ~ .tab-content { + box-shadow: none; + border-bottom-width: 0 !important; + @include border-top-radius($border-radius); + } +} +.nav-align-left .nav-tabs { + @include ltr-style { + @include border-start-radius($border-radius); + } + @include rtl-style { + @include border-end-radius($border-radius); + } + ~ .tab-content { + box-shadow: none; + @include ltr-style { + border-left-width: 0 !important; + @include border-end-radius($border-radius); + } + @include rtl-style { + border-right-width: 0 !important; + @include border-start-radius($border-radius); + } + } +} +.nav-align-right .nav-tabs { + @include ltr-style { + @include border-end-radius($border-radius); + } + @include rtl-style { + @include border-start-radius($border-radius); + } + ~ .tab-content { + box-shadow: none; + @include ltr-style { + border-right-width: 0 !important; + @include border-start-radius($border-radius); + } + @include rtl-style { + border-left-width: 0 !important; + @include border-end-radius($border-radius); + } + } +} + +//Kanban-item +.kanban-item { + box-shadow: none !important; + border: $border-width solid $card-border-color; +} + +// default form wizard style + +.bs-stepper:not(.wizard-modern) { + box-shadow: none !important; + border: 1px solid $border-color; + border-radius: $card-border-radius; + .modal .modal-body & { + border-width: 0; + } +} + +// modern form wizard style + +.bs-stepper.wizard-modern { + .bs-stepper-content { + box-shadow: none !important; + border: 1px solid $border-color; + border-radius: $card-border-radius; + } +} +// file upload (dropzone) +.dark-style .dz-preview { + box-shadow: none; + border: 1px solid $border-color; +} + +// timeline +.timeline { + .timeline-item { + .timeline-indicator, + .timeline-indicator-advanced { + box-shadow: 0 0 0 10px $card-bg; + } + } +} + +// App email rear card border effect +.app-email { + .app-email-view { + .email-card-last { + &:before { + border: 1px solid $border-color; + } + + &:after { + border: 1px solid $border-color; + } + } + } +} + +// authentication +.authentication-wrapper .authentication-bg { + border-inline-start: 1px solid $border-color; +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-bordered.scss b/src/modules/Resources/assets/vendor/scss/theme-bordered.scss new file mode 100644 index 0000000..2676efc --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-bordered.scss @@ -0,0 +1,343 @@ +@import './_components/include'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #7367f0; +$body-bg: #f8f7fa; + +body { + background: $card-bg; +} + +.bg-body { + background: $body-bg !important; +} + +.dropdown-menu, +.popover, +.toast, +.flatpickr-calendar:not(.app-calendar-sidebar .flatpickr-calendar), +.datepicker.datepicker-inline, +.datepicker.datepicker-inline table, +.daterangepicker, +.pcr-app, +.ui-timepicker-wrapper, +.twitter-typeahead .tt-menu, +.tagify__dropdown, +.swal2-popup, +.select2-dropdown, +.select2-container--default .select2-dropdown.select2-dropdown--above, +.shepherd-element, +.menu-horizontal .menu-inner > .menu-item.open .menu-sub, +div.dataTables_wrapper .dt-button-collection { + outline: none; + box-shadow: none !important; + border: 1px solid $border-color !important; +} + +.flatpickr-days, +.flatpickr-time { + border-width: 0 !important; +} + +// Bootstrap select > double border fix +.dropdown-menu .dropdown-menu { + border: none !important; +} +.datepicker.datepicker-inline { + width: fit-content; + border-radius: $border-radius; +} +.apexcharts-canvas .apexcharts-tooltip, +.modal-content, +.offcanvas, +div.dataTables_wrapper .dt-button-collection > div[role='menu'] { + box-shadow: none !important; +} +.modal-content { + & { + border: $border-width solid $border-color !important; + } +} +.offcanvas.offcanvas-start, +.offcanvas.offcanvas-end, +.offcanvas.offcanvas-top, +.offcanvas.offcanvas-bottom { + border-width: $border-width; +} +.select2-dropdown { + border-color: $border-color !important; +} +.bs-popover-start > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='left'] > .popover-arrow::before { + border-left-color: $border-color !important; + right: -1px; +} +.bs-popover-end > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='right'] > .popover-arrow::before { + border-right-color: $border-color !important; + left: -1px; +} +.bs-popover-top > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='top'] > .popover-arrow::before { + border-top-color: $border-color !important; + bottom: -1px; +} +.bs-popover-bottom > .popover-arrow::before, +.bs-popover-auto[data-popper-placement^='bottom'] > .popover-arrow::before { + border-bottom-color: $border-color !important; + top: -1px; +} + +@include template-common-theme($primary-color); +@include template-libs-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- + +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); +.layout-navbar, +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.navbar-detached { + border: 1px solid $border-color; + box-shadow: none; +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($card-bg, 70%) 44%, rgba($card-bg, 43%) 73%, rgba($card-bg, 0%)); + -webkit-mask: linear-gradient($card-bg, $card-bg 18%, transparent 100%); + mask: linear-gradient($card-bg, $card-bg 18%, transparent 100%); +} +.layout-horizontal { + .layout-navbar { + box-shadow: 0 1px 0 $border-color; + } + .layout-page .menu-horizontal { + box-shadow: none; + border-bottom: 1px solid $border-color; + } +} + +// Menu +// --------------------------------------------------------------------------- + +@include template-menu-style( + '.bg-menu-theme', + $card-bg, + $color: $headings-color, + $active-color: $headings-color, + $active-bg: $primary-color +); + +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-75; + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-50; + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: $body-color !important; + } +} + +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .layout-menu { + box-shadow: 0 0 0 1px $border-color; + } +} + +.layout-menu-horizontal { + box-shadow: 0 -1px 0 $border-color inset; +} + +// timeline +.timeline { + .timeline-item { + .timeline-indicator, + .timeline-indicator-advanced { + box-shadow: 0 0 0 10px $card-bg; + } + } +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.content-footer .footer-container { + .layout-footer-fixed .layout-wrapper:not(.layout-horizontal) & { + border: 1px solid $border-color; + border-bottom: 0; + } +} +.layout-horizontal .bg-footer-theme { + border-top: 1px solid $border-color; +} + +// Component styles +// --------------------------------------------------------------------------- + +// card +.card:not(.card-group .card), +.card-group { + box-shadow: none; + border: $border-width solid $card-border-color; +} +// card border-shadow variant +.card { + &[class*='card-border-shadow-'] { + &:hover { + box-shadow: none !important; + } + } +} + +//Accordion +.accordion { + &:not(.accordion-custom-button):not(.accordion-arrow-left) { + .accordion-item { + border: $accordion-border-width solid $accordion-border-color; + } + } + .accordion-item { + box-shadow: none !important; + } +} + +// Tabs +.nav-tabs-shadow { + box-shadow: none !important; + border: 1px solid $border-color !important; + border-radius: $border-radius; +} +.nav-pills:not(.card-header-pills) { + ~ .tab-content { + border: 1px solid $border-color !important; + @include border-radius($border-radius); + box-shadow: none; + } +} +.nav-align-top .nav-tabs { + @include border-top-radius($border-radius); + ~ .tab-content { + box-shadow: none; + border-top-width: 0 !important; + @include border-bottom-radius($border-radius); + } +} +.nav-align-bottom .nav-tabs { + @include border-bottom-radius($border-radius); + ~ .tab-content { + box-shadow: none; + border-bottom-width: 0 !important; + @include border-top-radius($border-radius); + } +} +.nav-align-left .nav-tabs { + @include ltr-style { + @include border-start-radius($border-radius); + } + @include rtl-style { + @include border-end-radius($border-radius); + } + ~ .tab-content { + box-shadow: none; + @include ltr-style { + border-left-width: 0 !important; + @include border-end-radius($border-radius); + } + @include rtl-style { + border-right-width: 0 !important; + @include border-start-radius($border-radius); + } + } +} +.nav-align-right .nav-tabs { + @include ltr-style { + @include border-end-radius($border-radius); + } + @include rtl-style { + @include border-start-radius($border-radius); + } + ~ .tab-content { + box-shadow: none; + @include ltr-style { + border-right-width: 0 !important; + @include border-start-radius($border-radius); + } + @include rtl-style { + border-left-width: 0 !important; + @include border-end-radius($border-radius); + } + } +} + +//Kanban-item +.kanban-item { + box-shadow: none !important; + border: $border-width solid $card-border-color; +} +// default form wizard style +.bs-stepper:not(.wizard-modern) { + box-shadow: none !important; + border: 1px solid $border-color; + border-radius: $card-border-radius; + .modal .modal-body & { + border-width: 0; + } +} + +// modern form wizard style + +.bs-stepper.wizard-modern { + .bs-stepper-content { + box-shadow: none !important; + border: 1px solid $border-color; + border-radius: $card-border-radius; + } +} +// file upload (dropzone) +.light-style .dz-preview { + box-shadow: none; + border: 1px solid $border-color; +} + +// App email rear card border effect + +.app-email { + .app-email-view { + .email-card-last { + &:before { + border: 1px solid $border-color; + } + + &:after { + border: 1px solid $border-color; + } + } + } +} + +// authentication +.authentication-wrapper .authentication-bg { + border-inline-start: 1px solid $border-color; +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-default-dark.scss b/src/modules/Resources/assets/vendor/scss/theme-default-dark.scss new file mode 100644 index 0000000..b2478e0 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-default-dark.scss @@ -0,0 +1,94 @@ +@import './_components/include-dark'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #7367f0; + +body { + background: $body-bg; +} + +.bg-body { + background: $body-bg !important; +} + +@include template-common-theme($primary-color); +@include template-libs-dark-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- + +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); + +.layout-navbar { + box-shadow: 0 0 10px $border-color; + backdrop-filter: saturate(200%) blur(6px); +} +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.layout-horizontal .layout-navbar { + box-shadow: 0 1px 0 $border-color; +} +.navbar-detached { + box-shadow: $box-shadow-sm; +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($body-bg, 70%) 44%, rgba($body-bg, 43%) 73%, rgba($body-bg, 0%)); + -webkit-mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); + mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); +} + +// Menu +// --------------------------------------------------------------------------- + +@include template-menu-style( + '.bg-menu-theme', + $card-bg, + $color: $headings-color, + $active-color: $headings-color, + $border: transparent, + $active-bg: $primary-color +); +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .bg-menu-theme { + box-shadow: $box-shadow-sm; + } +} +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-75; + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-50; + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: $body-color !important; + } +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container, +.layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer { + box-shadow: $box-shadow; +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-default.scss b/src/modules/Resources/assets/vendor/scss/theme-default.scss new file mode 100644 index 0000000..27b48d3 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-default.scss @@ -0,0 +1,93 @@ +@import './_components/include'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #7367f0; +$body-bg: #f8f7fa; + +body { + background: $body-bg; +} + +.bg-body { + background: $body-bg !important; +} + +@include template-common-theme($primary-color); +@include template-libs-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); + +.layout-navbar { + box-shadow: 0 0 10px $border-color; + backdrop-filter: saturate(200%) blur(6px); +} +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.layout-horizontal .layout-navbar { + box-shadow: 0 1px 0 $border-color; +} +.navbar-detached { + box-shadow: $box-shadow-sm; +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($body-bg, 70%) 44%, rgba($body-bg, 43%) 73%, rgba($body-bg, 0%)); + -webkit-mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); + mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); +} + +// Menu +// --------------------------------------------------------------------------- +@include template-menu-style( + '.bg-menu-theme', + $card-bg, + $color: $headings-color, + $active-color: $headings-color, + $border: transparent, + $active-bg: $primary-color +); +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .bg-menu-theme { + box-shadow: $box-shadow-sm; + } +} +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-75; + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-50; + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: $body-color !important; + } +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container, +.layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer { + box-shadow: $box-shadow; +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-raspberry-dark.scss b/src/modules/Resources/assets/vendor/scss/theme-raspberry-dark.scss new file mode 100644 index 0000000..2f852d2 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-raspberry-dark.scss @@ -0,0 +1,136 @@ +@import './_components/include-dark'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #e30b5c; + +body { + background: $body-bg; +} + +.bg-body { + background: $body-bg !important; +} + +@include template-common-theme($primary-color); +@include template-libs-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- + +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); + +.layout-navbar { + box-shadow: 0 1px 0 $border-color; + backdrop-filter: saturate(200%) blur(6px); +} +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.navbar-detached { + box-shadow: 0 0 0.375rem 0.25rem rgba($black, 0.15); +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($body-bg, 70%) 44%, rgba($body-bg, 43%) 73%, rgba($body-bg, 0%)); + -webkit-mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); + mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); +} +.layout-horizontal .layout-navbar { + box-shadow: 0 1px 0 $border-color; +} + +// Menu +// --------------------------------------------------------------------------- + +@include template-menu-style( + '.bg-menu-theme', + $card-bg, + $color: $headings-color, + $active-color: $body-color, + $active-bg: $primary-color +); + +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-75; + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: $gray-50; + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: $body-color !important; + } +} + +.layout-menu { + box-shadow: 0 0 0 1px $border-color; +} + +.layout-menu-horizontal { + box-shadow: 0 -1px 0 $border-color inset; +} + +.timeline .timeline-item .timeline-event:after { + content: ''; +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container, +.layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer { + box-shadow: $box-shadow; +} +// Component styles +// --------------------------------------------------------------------------- + +// card +.card { + box-shadow: none; + border: $border-width solid $card-border-color; +} + +// Accordion +.accordion { + .accordion-item { + border-top: $accordion-border-width solid $accordion-border-color; + } +} + +// default form wizard style + +.bs-stepper:not(.wizard-modern) { + border: 1px solid $border-color; + border-radius: $card-border-radius; + .modal .modal-body & { + border-width: 0; + } +} + +// modern form wizard style + +.bs-stepper.wizard-modern { + .bs-stepper-content { + box-shadow: none !important; + border: 1px solid $border-color; + border-radius: $card-border-radius; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-raspberry.scss b/src/modules/Resources/assets/vendor/scss/theme-raspberry.scss new file mode 100644 index 0000000..8b07048 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-raspberry.scss @@ -0,0 +1,137 @@ +@import './_components/include'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #e30b5c; +$body-bg: #f8f7fa; + +body { + background: $body-bg; +} + +.bg-body { + background: $body-bg !important; +} + +@include template-common-theme($primary-color); +@include template-libs-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- + +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); + +.layout-navbar { + box-shadow: 0 1px 0 $border-color; + backdrop-filter: saturate(200%) blur(6px); +} +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.navbar-detached { + box-shadow: 0 0 0.375rem 0.25rem rgba(rgba-to-hex($gray-500, $rgba-to-hex-bg), 0.15); +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($body-bg, 70%) 44%, rgba($body-bg, 43%) 73%, rgba($body-bg, 0%)); + -webkit-mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); + mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); +} +.layout-horizontal .layout-navbar { + box-shadow: 0 1px 0 $border-color; +} + +// Menu +// --------------------------------------------------------------------------- + +@include template-menu-style( + '.bg-menu-theme', + $card-bg, + $color: $headings-color, + $active-color: $headings-color, + $active-bg: $primary-color +); + +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: rgba-to-hex(rgba($black, 0.08), $rgba-to-hex-bg); + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: rgba-to-hex(rgba($black, 0.06), $rgba-to-hex-bg); + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: $body-color !important; + } +} + +.layout-menu { + box-shadow: 0 0 0 1px $border-color; +} + +.layout-menu-horizontal { + box-shadow: 0 -1px 0 $border-color inset; +} + +.timeline .timeline-item .timeline-event:after { + content: ''; +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container, +.layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer { + box-shadow: $box-shadow; +} +// Component styles +// --------------------------------------------------------------------------- + +// card +.card { + box-shadow: none; + border: $border-width solid $card-border-color; +} + +// Accordion +.accordion { + .accordion-item { + border-top: $accordion-border-width solid $accordion-border-color; + } +} + +// default form wizard style + +.bs-stepper:not(.wizard-modern) { + border: 1px solid $border-color; + border-radius: $card-border-radius; + .modal .modal-body & { + border-width: 0; + } +} + +// modern form wizard style + +.bs-stepper.wizard-modern { + .bs-stepper-content { + box-shadow: none !important; + border: 1px solid $border-color; + border-radius: $card-border-radius; + } +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-semi-dark-dark.scss b/src/modules/Resources/assets/vendor/scss/theme-semi-dark-dark.scss new file mode 100644 index 0000000..eb51502 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-semi-dark-dark.scss @@ -0,0 +1,87 @@ +@import './_components/include-dark'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #7367f0; + +body { + background: $body-bg; +} + +.bg-body { + background: $body-bg !important; +} + +@include template-common-theme($primary-color); +@include template-libs-dark-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); +.layout-navbar { + box-shadow: 0 1px 0 $border-color; + backdrop-filter: saturate(200%) blur(6px); +} +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.navbar-detached { + box-shadow: 0 0.125rem 0.5rem 0 rgba($shadow-bg, 0.18); +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($body-bg, 70%) 44%, rgba($body-bg, 43%) 73%, rgba($body-bg, 0%)); + -webkit-mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); + mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); +} + +// Menu +// --------------------------------------------------------------------------- +@include template-menu-style( + '.bg-menu-theme', + #2f3349, + $color: #cfcce4, + $active-color: $white, + $active-bg: $primary-color +); +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .bg-menu-theme { + box-shadow: 0px 2px 8px 0px rgba(#131120, 0.18); + } +} +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: rgba(#e1def5, 0.08); + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: rgba(#e1def5, 0.06); + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: rgba(#e1def5, 0.7) !important; + } +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container, +.layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer { + box-shadow: $box-shadow; +} diff --git a/src/modules/Resources/assets/vendor/scss/theme-semi-dark.scss b/src/modules/Resources/assets/vendor/scss/theme-semi-dark.scss new file mode 100644 index 0000000..e135b10 --- /dev/null +++ b/src/modules/Resources/assets/vendor/scss/theme-semi-dark.scss @@ -0,0 +1,89 @@ +@import './_components/include'; +@import './_theme/common'; +@import './_theme/libs'; +@import './_theme/pages'; +@import './_theme/_theme'; + +$primary-color: #7367f0; +$body-bg: #f8f7fa; + +body { + background: $body-bg; +} + +.bg-body { + background: $body-bg !important; +} + +@include template-common-theme($primary-color); +@include template-libs-theme($primary-color); +@include template-pages-theme($primary-color); + +// Navbar +// --------------------------------------------------------------------------- +@include template-navbar-style('.bg-navbar-theme', $card-bg, $color: $headings-color, $active-color: $headings-color); + +.layout-navbar { + box-shadow: 0 1px 0 $border-color; + backdrop-filter: saturate(200%) blur(6px); +} +.menu-horizontal { + backdrop-filter: saturate(200%) blur(6px); +} +.navbar-detached { + box-shadow: 0 0.125rem 0.5rem 0 rgba($black, 0.12); +} +.layout-navbar-fixed .layout-page:before { + backdrop-filter: saturate(200%) blur(10px); + background: linear-gradient(180deg, rgba($body-bg, 70%) 44%, rgba($body-bg, 43%) 73%, rgba($body-bg, 0%)); + -webkit-mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); + mask: linear-gradient($body-bg, $body-bg 18%, transparent 100%); +} + +// Menu +// --------------------------------------------------------------------------- +@include template-menu-style( + '.bg-menu-theme', + #2f3349, + $color: #cfcce4, + $active-color: $white, + $active-bg: $primary-color +); +@include media-breakpoint-up($menu-collapsed-layout-breakpoint) { + .bg-menu-theme { + box-shadow: 0px 2px 8px 0px rgba(#131120, 0.12); + } +} +.bg-menu-theme { + .menu-inner { + .menu-item { + &.open, + &.active { + > .menu-link.menu-toggle { + &, + .layout-menu-hover.layout-menu-collapsed & { + background: rgba(#e1def5, 0.08); + } + } + } + &:not(.active) > .menu-link:hover { + html:not(.layout-menu-collapsed) &, + .layout-menu-hover.layout-menu-collapsed & { + background: rgba(#e1def5, 0.06); + } + } + } + } + .menu-inner .menu-sub .menu-item:not(.active) > .menu-link::before { + color: rgba(#e1def5, 0.7) !important; + } +} + +// Footer +// --------------------------------------------------------------------------- +@include template-footer-style('.bg-footer-theme', $card-bg, $color: $primary-color, $active-color: $primary-color); + +.layout-footer-fixed .layout-wrapper:not(.layout-horizontal) .content-footer .footer-container, +.layout-footer-fixed .layout-wrapper.layout-horizontal .content-footer { + box-shadow: $box-shadow; +} diff --git a/src/modules/Resources/css/app.css b/src/modules/Resources/css/app.css new file mode 100644 index 0000000..6cf2721 --- /dev/null +++ b/src/modules/Resources/css/app.css @@ -0,0 +1,353 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +.menu-horizontal-wrapper > .menu-inner > .menu-item:last-child { + padding-right: 70px; +} + +.bg-menu-theme.menu-horizontal .menu-sub .menu-sub > .menu-item .menu-link .menu-icon { + display: none; +} + +.user-nav .user-name { + letter-spacing: 0.03rem; + font-weight: 600; +} +.user-nav .user-email { + letter-spacing: 0.05rem; + font-size: smaller; + font-weight: 100; +} + +.app-brand-logo.demo { + height: inherit; +} + +.app-brand-text { + flex-shrink: 1 !important; +} + +.nav-tabs .nav-link, +.nav-pills .nav-link { + text-transform: inherit !important; +} + +.image-wrapper-16x16 { + width: 28px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; + padding: 5px; +} +.image-wrapper-16x16 img { + width: 16px; + height: 16px; + display: block; +} + +.image-wrapper-76x76 { + width: 92px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; + padding: 5px; +} +.image-wrapper-76x76 img { + width: 76px; + height: 76px; + display: block; +} + +.image-wrapper-120x120 { + width: 140px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-120x120 img { + width: 120px; + height: 120px; + display: block; +} + +.image-wrapper-152x152 { + width: 172px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-152x152 img { + width: 152px; + height: 152px; + display: block; +} + +.image-wrapper-180x180 { + width: 202px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-180x180 img { + width: 180px; + height: 180px; + display: block; +} + +.image-wrapper-192x192 { + width: 214px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-192x192 img { + width: 192px; + height: 192px; + display: block; +} + +.image-wrapper-380x380 { + width: 396px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + align-items: center; + display: flex; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-380x380 img { + width: 380px; + height: 380px; + display: block; +} + +.image-wrapper-520x520 { + width: 536px; + aspect-ratio: 1/1; /* Proporción 1:1 para que sea cuadrado */ + align-items: center; + display: flex; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-520x520 img { + width: 520px; + height: 520px; + display: block; +} + +/* +.dark-style .layout-navbar .navbar-dropdown.dropdown-shortcuts .dropdown-shortcuts-item.active { + background-color: #3a3d53; +} +.light-style .layout-navbar .navbar-dropdown.dropdown-shortcuts .dropdown-shortcuts-item.active { + background-color: #f3f2f3; +} + +.max-w-full { + max-width: 100%; +} + + +.collapse { + visibility: initial; +} + +#admin-crm--view-520x520 .nav-pills .nav-link { + text-transform: none; +} +#admin-crm--view-520x520 .nav-tabs .nav-link { + text-transform: none; + padding-top: 13px; + padding-bottom: 13px; +} + +html.light-style .fixed-table-container { + background-color: white; +} +html.dark-style .fixed-table-container { + background-color: #202332; +} + +.form-floating > label { + border: none !important; +} + +.form-control:read-only:not(.flatpickr-input) { + color: #acaab1; + background-color: #f3f2f3; + border-color: #cdccd0; + opacity: 1; +} + +.dark-style .fixed-columns, +.dark-style .fixed-columns-right { + background-color: #25293c !important; +} + +.bootstrap-table .acction-buttons .footer-actions { + margin-top: 10px; + margin-bottom: 10px; + display: flex; + justify-content: flex-start; + align-items: center; +} + +.mini-dropzone .dz-message:before { + top: 2rem !important; +} +.mini-dropzone .dz-message { + margin: 6rem 0 2rem !important; +} +.dz-preview { + margin-bottom: 38px; +} + +.image-wrapper-16x16 { + max-width: 36px; + aspect-ratio: 1/1; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-16x16 img { + max-width: 16px; + max-height: 16px; + display: block; +} + +.image-wrapper-76x76 { + max-width: 96px; + aspect-ratio: 1/1; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-76x76 img { + max-width: 76px; + max-height: 76px; + display: block; +} + +.image-wrapper-120x120 { + max-width: 140px; + aspect-ratio: 1/1; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-120x120 img { + max-width: 120px; + max-height: 120px; + display: block; +} + +.image-wrapper-152x152 { + max-width: 172px; + aspect-ratio: 1/1; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-152x152 img { + max-width: 152px; + max-height: 152px; + display: block; +} + +.image-wrapper-180x180 { + max-width: 200px; + aspect-ratio: 1/1; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-180x180 img { + max-width: 180px; + max-height: 180px; + display: block; +} + +.image-wrapper-192x192 { + max-width: 202px; + aspect-ratio: 1/1; + display: flex; + align-items: center; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-192x192 img { + max-width: 192px; + max-height: 192px; + display: block; +} + +.image-wrapper-380x380 { + max-width: 400px; + aspect-ratio: 1/1; + align-items: center; + display: flex; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-380x380 img { + max-width: 380px; + max-height: 380px; + display: block; +} + +.image-wrapper-520x520 { + max-width: 540px; + aspect-ratio: 1/1; + align-items: center; + display: flex; + justify-content: center; + border: 1px solid #eee; +} +.image-wrapper-520x520 img { + max-width: 520px; + max-height: 520px; + display: block; +} + +.custom-option-item-check { + position: absolute; + clip: rect(0, 0, 0, 0); +} + +.custom-options-checkable { + --bs-gutter-x: 1rem !important; +} +.custom-options-checkable .custom-option-item { + width: 100%; + cursor: pointer; + border-radius: 0.42rem; + color: #82868b; + background-color: rgba(130, 134, 139, 0.06); + border: 1px solid #ebe9f1; +} +.custom-option-item-check:checked + .custom-option-item { + color: #175cc3; + background-color: rgba(23, 92, 195, 0.12); + border-color: #175cc3; +} +.custom-options-checkable .custom-option-item span { + margin: 0 auto; +} +*/ diff --git a/src/modules/Resources/js/_class/FormCustomListener.js b/src/modules/Resources/js/_class/FormCustomListener.js new file mode 100644 index 0000000..3fa0fda --- /dev/null +++ b/src/modules/Resources/js/_class/FormCustomListener.js @@ -0,0 +1,247 @@ +export default class FormCustomListener { + constructor(config = {}) { + const defaultConfig = { + formSelector: '.form-custom-listener', // Selector para formularios + buttonSelectors: [], // Selectores específicos para botones + callbacks: [], // Callbacks correspondientes a los botones específicos + allowedInputTags: ['INPUT', 'SELECT', 'TEXTAREA'], // Tags permitidos para cambios + validationConfig: null, // Nueva propiedad para la configuración de validación + dispatchOnSubmit: null // Callback Livewire para disparar al enviar el formulario + }; + + this.config = { ...defaultConfig, ...config }; + + // Aseguramos que los métodos que dependen de `this` estén vinculados al contexto correcto + this.defaultButtonHandler = this.defaultButtonHandler.bind(this); + this.formValidationInstance = null; + + this.initForms(); + } + + /** + * Inicializa los formularios encontrados en el DOM. + */ + initForms() { + const forms = document.querySelectorAll(this.config.formSelector); + + if (forms.length === 0) { + console.error(`No se encontraron formularios con el selector ${this.config.formSelector}.`); + return; + } + + forms.forEach(form => { + if (form.dataset.initialized === 'true') { + console.warn(`Formulario ya inicializado: ${form}`); + return; + } + + this.initFormEvents(form); + + // Si se pasó configuración de validación, inicialízala + if (this.config.validationConfig) { + this.initializeValidation(form); + } + + form.dataset.initialized = 'true'; // Marcar formulario como inicializado + }); + } + + /** + * Configura los eventos para un formulario individual. + * @param {HTMLElement} form - El formulario que será manejado. + */ + initFormEvents(form) { + const buttons = this.getButtons(form); + + buttons.forEach(({ button, callback }, index) => { + if (button) { + button.addEventListener('click', () => { + this.handleButtonClick(index, form, buttons, callback); + }); + } + }); + + form.addEventListener('input', event => + this.handleInputChange( + event, + form, + buttons.map(b => b.button) + ) + ); + } + + /** + * Obtiene los botones y sus callbacks según la configuración. + * @param {HTMLElement} form - El formulario del cual obtener botones. + * @returns {Array} Array de objetos con { button, callback }. + */ + getButtons(form) { + const buttons = []; + + this.config.buttonSelectors.forEach((selector, index) => { + const buttonList = Array.from(form.querySelectorAll(selector)); + const callback = this.config.callbacks[index]; + + buttonList.forEach(button => { + buttons.push({ button, callback }); + }); + }); + + return buttons; + } + + /** + * Maneja los cambios en los campos de entrada. + * @param {Event} event - El evento del cambio. + * @param {HTMLElement} form - El formulario actual. + * @param {HTMLElement[]} buttons - Array de botones en el formulario. + */ + handleInputChange(event, form, buttons) { + const target = event.target; + + if (['INPUT', 'SELECT', 'TEXTAREA'].includes(target.tagName)) { + this.toggleButtonsState(buttons, true); + } + } + + /** + * Maneja el clic en un botón específico. + * @param {number} index - Índice del botón. + * @param {HTMLElement} form - El formulario actual. + * @param {Array} buttons - Array de objetos { button, callback }. + * @param {function|null} callback - Callback definido para el botón. + */ + handleButtonClick(index, form, buttons, callback) { + if (typeof callback === 'function') { + callback( + form, + buttons[index].button, + buttons.map(b => b.button) + ); + } else { + this.defaultButtonHandler( + form, + buttons[index].button, + buttons.map(b => b.button) + ); + } + } + + /** + * Maneja la acción cuando el formulario es válido. + * Este método puede ser sobreescrito para personalizar el comportamiento. + */ + handleFormValid(form) { + console.log('Formulario válido'); + + // Ejecutar callback opcional (si lo proporcionaste) + if (typeof this.config.handleValidForm === 'function') { + this.config.handleValidForm(form); + } else if (this.config.dispatchOnSubmit) { + this.handleValidForm(form); + } else { + form.submit(); + } + } + + /** + * Método que maneja la acción cuando el formulario es válido. + * Al ser un método de la clase, no necesitamos usar bind. + */ + handleValidForm(form) { + const saveButton = form.querySelector('#save_website_button'); + const allButtons = Array.from(form.querySelectorAll('.btn')); + + this.toggleButtonsState(allButtons, false); // Deshabilitar todos los botones + this.toggleFormFields(form, false); // Deshabilitar todos los campos del formulario + this.setButtonLoadingState(saveButton, true); // Poner en estado de carga al botón anfitrión + + // Enviar la solicitud de Livewire correspondiente al enviar el formulario + Livewire.dispatch(this.config.dispatchOnSubmit); + } + + /** + * Manejador por defecto para los botones. + * @param {HTMLElement} form - El formulario actual. + * @param {HTMLElement} hostButton - El botón anfitrión que disparó el evento. + * @param {HTMLElement[]} allButtons - Todos los botones relevantes del formulario. + */ + defaultButtonHandler(form, hostButton, allButtons) { + this.toggleButtonsState(allButtons, false); // Deshabilitar todos los botones + this.toggleFormFields(form, false); // Deshabilitar todos los campos del formulario + this.setButtonLoadingState(hostButton, true); // Poner en estado de carga al botón anfitrión + } + + /** + * Deshabilita o habilita los campos del formulario. + * @param {HTMLElement} form - El formulario actual. + * @param {boolean} isEnabled - Si los campos deben habilitarse. + */ + toggleFormFields(form, isEnabled) { + form.querySelectorAll('input, select, textarea').forEach(field => { + field.disabled = !isEnabled; + }); + } + + /** + * Habilita o deshabilita los botones. + * @param {HTMLElement[]} buttons - Array de botones. + * @param {boolean} isEnabled - Si los botones deben habilitarse. + */ + toggleButtonsState(buttons, isEnabled) { + buttons.forEach(button => { + if (button) button.disabled = !isEnabled; + }); + } + + /** + * Cambia el estado de carga de un botón. + * @param {HTMLElement} button - Botón que se manejará. + * @param {boolean} isLoading - Si el botón está en estado de carga. + */ + setButtonLoadingState(button, isLoading) { + if (!button) return; + + const loadingText = button.getAttribute('data-loading-text'); + if (loadingText && isLoading) { + button.setAttribute('data-original-text', button.innerHTML); + button.innerHTML = loadingText; + button.disabled = true; + } else if (!isLoading) { + button.innerHTML = button.getAttribute('data-original-text') || button.innerHTML; + button.disabled = false; + } + } + + /** + * Inicializa la validación del formulario con la configuración proporcionada. + * @param {HTMLElement} form - El formulario que va a ser validado. + */ + initializeValidation(form) { + if (this.config.validationConfig) { + this.formValidationInstance = FormValidation.formValidation(form, this.config.validationConfig).on( + 'core.form.valid', + () => this.handleFormValid(form) + ); + } + } + + reloadValidation() { + const form = document.querySelector(this.config.formSelector); + + // Verificar si el formulario existe y si la validación está inicializada + if (form && this.formValidationInstance) { + try { + // En lugar de destruir la validación, simplemente reiniciamos la validación. + this.formValidationInstance.resetForm(); // Resetear el formulario, limpiando los errores + + // Reinicializar la validación con la configuración actual + this.initializeValidation(form); + } catch (error) { + console.error('Error al reiniciar la validación:', error); + } + } else { + console.warn('Formulario no encontrado o instancia de validación no disponible.'); + } + } +} diff --git a/src/modules/Resources/js/_class/LivewireNotification.js b/src/modules/Resources/js/_class/LivewireNotification.js new file mode 100644 index 0000000..a0239b2 --- /dev/null +++ b/src/modules/Resources/js/_class/LivewireNotification.js @@ -0,0 +1,190 @@ +export default class LivewireNotification { + constructor(config = {}) { + const defaultConfig = { + notificationTimeout: 6000, // Tiempo predeterminado para las notificaciones + onNotificationShown: null, // Callback al mostrar una notificación + onNotificationRemoved: null, // Callback al eliminar una notificación + onNotificationClosed: null // Callback al cerrar una notificación mediante botón + }; + + this.config = { ...defaultConfig, ...config }; + this.initLivewireNotification(); + } + + /** + * Inicializa la escucha de notificaciones desde Livewire. + */ + initLivewireNotification() { + // Mostrar notificación almacenada después de la recarga + const storedNotification = localStorage.getItem('pendingNotification'); + + if (storedNotification) { + const event = JSON.parse(storedNotification); + this.showStoredNotification(event); + localStorage.removeItem('pendingNotification'); // Limpiar después de mostrar + } + + // Escuchar nuevas notificaciones desde Livewire + Livewire.on('notification', event => { + if (event.deferReload) { + // Guardar la notificación en localStorage para mostrar después de la recarga + localStorage.setItem('pendingNotification', JSON.stringify(event)); + + window.location.reload(); + } else { + // Mostrar la notificación inmediatamente + this.showNotification(event); + } + }); + } + + /** + * Método para emitir notificaciones desde JavaScript. + * @param {Object} options - Opciones de la notificación. + * @param {Function} callback - Callback opcional que se ejecutará después de mostrar la notificación. + * @param {number} customTimeout - Timeout personalizado (opcional). + */ + emitNotification(options, callback, customTimeout) { + const event = { + target: options.target || 'body', + message: options.message || 'Notificación', + type: options.type || 'info', + deferReload: options.deferReload || false, + notificationTimeout: customTimeout || options.notificationTimeout || this.config.notificationTimeout // Usar el timeout personalizado o el predeterminado + }; + + // Mostrar la notificación + this.showNotification(event); + + // Ejecutar callback si está definido + if (typeof callback === 'function') { + callback(event); + } + } + + /** + * Muestra una notificación almacenada. + * @param {Object} event - Datos del evento de notificación. + */ + showStoredNotification(event) { + this.showNotification(event); + } + + /** + * Muestra una notificación. + * @param {Object} event - Datos del evento de notificación. + */ + showNotification(event) { + const targetElement = document.querySelector(event.target); + + if (!targetElement) { + console.error(`Target ${event.target} no encontrado. Mostrando en el contenedor global.`); + + this.showInGlobalContainer(event); + return; + } + + // Crear un contenedor para notificaciones si no existe + if (!targetElement.querySelector('.notification-container')) { + const container = document.createElement('div'); + + container.className = 'notification-container'; + targetElement.appendChild(container); + } + + const notificationContainer = targetElement.querySelector('.notification-container'); + const notificationElement = this.renderNotification(notificationContainer, event); + + // Callback opcional al mostrar la notificación + if (typeof this.config.onNotificationShown === 'function') { + this.config.onNotificationShown(notificationElement, event); + } + + // Configurar el timeout para eliminar la notificación + this.setNotificationTimeout(notificationElement, event); + + // Configurar el evento para el botón de cierre + this.setupCloseButton(notificationElement, event); + } + + /** + * Renderiza una notificación en el contenedor global (body). + * @param {Object} event - Datos del evento de notificación. + */ + showInGlobalContainer(event) { + const globalContainer = document.body; + if (!globalContainer.querySelector('.notification-container')) { + const container = document.createElement('div'); + + container.className = 'notification-container'; + globalContainer.appendChild(container); + } + + const notificationContainer = globalContainer.querySelector('.notification-container'); + const notificationElement = this.renderNotification(notificationContainer, event); + + if (typeof this.config.onNotificationShown === 'function') { + this.config.onNotificationShown(notificationElement, event); + } + + this.setNotificationTimeout(notificationElement, event); + this.setupCloseButton(notificationElement, event); + } + + /** + * Renderiza una notificación en el contenedor. + * @param {HTMLElement} container - Contenedor de notificaciones. + * @param {Object} event - Evento de notificación con tipo y mensaje. + * @returns {HTMLElement} - Elemento de la notificación recién creada. + */ + renderNotification(container, event) { + const notificationElement = document.createElement('div'); + + notificationElement.className = `alert alert-${event.type} alert-dismissible fade show`; + notificationElement.role = 'alert'; + notificationElement.innerHTML = `${event.message} `; + + container.appendChild(notificationElement); + + return notificationElement; + } + + /** + * Configura un timeout para limpiar una notificación específica. + * @param {HTMLElement} notificationElement - Elemento de la notificación. + * @param {Object} event - Evento asociado a la notificación. + */ + setNotificationTimeout(notificationElement, event) { + const timeout = event.notificationTimeout || this.config.notificationTimeout; + + setTimeout(() => { + if (notificationElement && notificationElement.parentElement) { + notificationElement.remove(); + + // Callback opcional al eliminar la notificación + if (typeof this.config.onNotificationRemoved === 'function') { + this.config.onNotificationRemoved(notificationElement, event); + } + } + }, timeout); + } + + /** + * Configura el cierre manual de una notificación mediante el botón "Cerrar". + * @param {HTMLElement} notificationElement - Elemento de la notificación. + * @param {Object} event - Evento asociado a la notificación. + */ + setupCloseButton(notificationElement, event) { + const closeButton = notificationElement.querySelector('.btn-close'); + if (closeButton) { + closeButton.addEventListener('click', () => { + notificationElement.remove(); + + // Callback opcional al cerrar la notificación manualmente + if (typeof this.config.onNotificationClosed === 'function') { + this.config.onNotificationClosed(notificationElement, event); + } + }); + } + } +} diff --git a/src/modules/Resources/js/_class/SenderResponseForm.js b/src/modules/Resources/js/_class/SenderResponseForm.js new file mode 100644 index 0000000..7071604 --- /dev/null +++ b/src/modules/Resources/js/_class/SenderResponseForm.js @@ -0,0 +1,220 @@ +export default class SenderResponseForm { + constructor(config = {}) { + const defaultConfig = { + formSenderResponseId: 'mail-sender-response-settings-card', + replyToMethodId: 'reply_to_method', + saveSenderResponseButtonId: 'save_sender_response_button', + cancelButtonId: 'cancel_sender_response_button' + }; + + this.config = { ...defaultConfig, ...config }; + this.formSenderResponse = null; + this.smtpReplyToMethod = null; + this.saveButton = null; + this.cancelButton = null; + + this.init(); // Inicializa el formulario + } + + // Método para inicializar el formulario + init() { + try { + // Obtener elementos esenciales + this.formSenderResponse = document.getElementById(this.config.formSenderResponseId); + this.smtpReplyToMethod = document.getElementById(this.config.replyToMethodId); + this.saveButton = document.getElementById(this.config.saveSenderResponseButtonId); + this.cancelButton = document.getElementById(this.config.cancelButtonId); + + // Asignar eventos + this.formSenderResponse.addEventListener('input', event => this.handleInput(event)); + this.smtpReplyToMethod.addEventListener('change', () => this.handleToggleReplyToMethod()); + this.cancelButton.addEventListener('click', () => this.handleCancel()); + + // Inicializar validación del formulario + this.initializeFormValidation(this.formSenderResponse, this.senderResponsValidateConfig, () => { + this.handleFormValid(); + }); + + // Disparar el evento 'change' en el método de respuesta + setTimeout(() => this.smtpReplyToMethod.dispatchEvent(new Event('change')), 0); + } catch (error) { + console.error('Error al inicializar el formulario de respuesta:', error); + } + } + + /** + * Método de recarga parcial + * Este método restablece la validación y los eventos sin destruir la instancia. + */ + reload() { + try { + // Vuelve a inicializar la validación del formulario + this.initializeFormValidation(this.formSenderResponse, this.senderResponsValidateConfig, () => { + this.handleFormValid(); + }); + + // Vuelve a agregar los eventos (si es necesario, depende de tu lógica) + this.smtpReplyToMethod.dispatchEvent(new Event('change')); + } catch (error) { + console.error('Error al recargar el formulario:', error); + } + } + + /** + * Maneja el evento de entrada en el formulario. + * @param {Event} event - Evento de entrada. + */ + handleInput(event) { + const target = event.target; + + if (['INPUT', 'SELECT', 'TEXTAREA'].includes(target.tagName)) { + this.toggleButtonsState(this.formSenderResponse, true); // Habilitar botones + } + } + + /** + * Muestra u oculta el campo de correo personalizado según el método de respuesta seleccionado. + * @param {HTMLElement} smtpReplyToMethod - Elemento select del método de respuesta. + */ + handleToggleReplyToMethod() { + const emailCustomDiv = document.querySelector('.email-custom-div'); + + if (emailCustomDiv) { + emailCustomDiv.style.display = Number(this.smtpReplyToMethod.value) === 3 ? 'block' : 'none'; + } + } + + /** + * Cancels the sender response form submission. + * This method disables the form buttons, disables all form fields, + * and sets the cancel button to a loading state. + * + * @returns {void} + */ + handleCancel() { + this.disableFormFields(this.formSenderResponse); + this.toggleButtonsState(this.formSenderResponse, false); + this.setButtonLoadingState(this.cancelButton, true); + } + + /** + * Inicializa la validación del formulario. + * @param {HTMLElement} form - El formulario. + * @param {Object} config - Configuración de validación. + * @param {Function} onValidCallback - Callback cuando el formulario es válido. + */ + initializeFormValidation(form, config, onValidCallback) { + return FormValidation.formValidation(form, config).on('core.form.valid', onValidCallback); + } + + /** + * Maneja la acción cuando el formulario es válido. + */ + handleFormValid() { + this.disableFormFields(this.formSenderResponse); + this.toggleButtonsState(this.formSenderResponse, false); + this.setButtonLoadingState(this.saveButton, true); + + Livewire.dispatch('saveMailSenderResponseSettings'); + } + + /** + * Deshabilita todos los campos del formulario. + * @param {HTMLElement} form - El formulario. + */ + disableFormFields(form) { + form.querySelectorAll('input, select, textarea').forEach(field => { + field.disabled = true; + }); + } + + /** + * Habilita o deshabilita los botones dentro del formulario. + * @param {HTMLElement} form - El formulario. + * @param {boolean} state - Estado de habilitación. + */ + toggleButtonsState(form, state) { + form.querySelectorAll('button').forEach(button => { + button.disabled = !state; + }); + } + + /** + * Configura el estado de carga de un botón. + * @param {HTMLElement} button - El botón. + * @param {boolean} isLoading - Si el botón está en estado de carga. + */ + setButtonLoadingState(button, isLoading) { + const loadingText = button.getAttribute('data-loading-text'); + + if (loadingText && isLoading) { + button.innerHTML = loadingText; + } else { + button.innerHTML = button.getAttribute('data-original-text') || button.innerHTML; + } + } + + senderResponsValidateConfig = { + fields: { + from_address: { + validators: { + notEmpty: { + message: 'El correo electrónico de salida es obligatorio.' + }, + emailAddress: { + message: 'Por favor, introduce un correo electrónico válido.' + } + } + }, + from_name: { + validators: { + notEmpty: { + message: 'El nombre del remitente es obligatorio.' + } + } + }, + reply_to_method: { + validators: { + notEmpty: { + message: 'El método de respuesta es obligatorio.' + } + } + }, + reply_to_email: { + validators: { + callback: { + message: 'El correo electrónico de respuesta es obligatorio.', + callback: function (input) { + if (Number(document.getElementById('reply_to_method').value) === 3) { + return input.value.trim() !== '' && /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(input.value); + } + return true; + } + } + } + }, + reply_to_name: { + validators: { + callback: { + message: 'El nombre de respuesta es obligatorio.', + callback: function (input) { + if (Number(document.getElementById('reply_to_method').value) === 3) { + return input.value.trim() !== ''; + } + return true; + } + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }; +} diff --git a/src/modules/Resources/js/_class/SmtpSettingsForm.js b/src/modules/Resources/js/_class/SmtpSettingsForm.js new file mode 100644 index 0000000..8704bf1 --- /dev/null +++ b/src/modules/Resources/js/_class/SmtpSettingsForm.js @@ -0,0 +1,239 @@ +export default class SmtpSettingsForm { + constructor(config = {}) { + const defaultConfig = { + formSmtpSettingsSelector: '#mail-smtp-settings-card', + changeSmtpSettingsId: 'change_smtp_settings', + testSmtpConnectionButtonId: 'test_smtp_connection_button', + saveSmtpConnectionButtonId: 'save_smtp_connection_button', + cancelSmtpConnectionButtonId: 'cancel_smtp_connection_button' + }; + + this.config = { ...defaultConfig, ...config }; + this.formSmtpSettings = null; + this.changeSmtpSettingsCheckbox = null; + this.testButton = null; + this.saveButton = null; + this.cancelButton = null; + this.validator = null; + + this.init(); + } + + /** + * Inicializa el formulario de configuración SMTP. + */ + init() { + try { + // Obtener elementos esenciales + this.formSmtpSettings = document.querySelector(this.config.formSmtpSettingsSelector); + this.notificationArea = this.formSmtpSettings.querySelector(this.config.notificationAreaSelector); + this.changeSmtpSettingsCheckbox = document.getElementById(this.config.changeSmtpSettingsId); + this.testButton = document.getElementById(this.config.testSmtpConnectionButtonId); + this.saveButton = document.getElementById(this.config.saveSmtpConnectionButtonId); + this.cancelButton = document.getElementById(this.config.cancelSmtpConnectionButtonId); + + // Asignar eventos + this.changeSmtpSettingsCheckbox.addEventListener('change', event => this.handleCheckboxChange(event)); + this.testButton.addEventListener('click', event => this.handleTestConnection(event)); + this.cancelButton.addEventListener('click', () => this.handleCancel()); + + // Inicializar validación del formulario + this.validator = FormValidation.formValidation(this.formSmtpSettings, this.smtpSettingsFormValidateConfig); + } catch (error) { + console.error('Error al inicializar el formulario SMTP:', error); + } + } + + /** + * Método de recarga parcial + * Este método restablece la validación y los eventos sin destruir la instancia. + */ + reload() { + try { + // Inicializar validación del formulario + this.validator = FormValidation.formValidation(this.formSmtpSettings, this.smtpSettingsFormValidateConfig); + } catch (error) { + console.error('Error al recargar el formulario:', error); + } + } + + /** + * Maneja el cambio en la casilla "Cambiar configuración SMTP". + * @param {Event} event - Evento de cambio. + */ + handleCheckboxChange(event) { + const isEnabled = event.target.checked; + + this.toggleFieldsState(['host', 'port', 'encryption', 'username', 'password'], isEnabled); + + this.testButton.disabled = false; + this.saveButton.disabled = true; + this.cancelButton.disabled = false; + + if (!isEnabled) { + Livewire.dispatch('loadSettings'); + } + } + + /** + * Maneja el clic en el botón "Probar conexión". + * @param {Event} event - Evento de clic. + */ + handleTestConnection(event) { + event.preventDefault(); + + this.validator.resetForm(); + + this.validator.validate().then(status => { + if (status === 'Valid') { + this.disableFormFields(this.formSmtpSettings); + this.toggleButtonsState(this.formSmtpSettings, false); + this.setButtonLoadingState(this.testButton, true); + + Livewire.dispatch('testSmtpConnection'); + } + }); + } + + /** + * Maneja la cancelación de cambios en la configuración SMTP. + */ + handleCancel() { + this.disableFormFields(this.formSmtpSettings); + this.toggleButtonsState(this.formSmtpSettings, false); + this.setButtonLoadingState(this.cancelButton, true); + + Livewire.dispatch('loadSettings'); + } + + /** + * Habilita o deshabilita los campos del formulario. + * @param {Array} fields - IDs de los campos a actualizar. + * @param {boolean} isEnabled - Estado de habilitación. + */ + toggleFieldsState(fields, isEnabled) { + fields.forEach(id => { + const field = document.getElementById(id); + + if (field) field.disabled = !isEnabled; + }); + } + + /** + * Deshabilita todos los campos del formulario. + * @param {HTMLElement} form - El formulario. + */ + disableFormFields(form) { + form.querySelectorAll('input, select, textarea').forEach(field => { + field.disabled = true; + }); + } + + /** + * Habilita o deshabilita los botones dentro del formulario. + * @param {HTMLElement} form - El formulario. + * @param {boolean} state - Estado de habilitación. + */ + toggleButtonsState(form, state) { + form.querySelectorAll('button').forEach(button => { + button.disabled = !state; + }); + } + + /** + * Configura el estado de carga de un botón. + * @param {HTMLElement} button - El botón. + * @param {boolean} isLoading - Si el botón está en estado de carga. + */ + setButtonLoadingState(button, isLoading) { + const loadingText = button.getAttribute('data-loading-text'); + + if (loadingText && isLoading) { + button.innerHTML = loadingText; + } else { + button.innerHTML = button.getAttribute('data-original-text') || button.innerHTML; + } + } + + smtpSettingsFormValidateConfig = { + fields: { + host: { + validators: { + callback: { + message: 'El servidor SMTP es obligatorio.', + callback: function (input) { + // Ejecutar la validación solo si 'change_smtp_settings' está marcado + if (document.getElementById('change_smtp_settings').checked) { + return input.value.trim() !== ''; + } + return true; // No validar si no está marcado + } + } + } + }, + port: { + validators: { + callback: { + message: 'El puerto SMTP es obligatorio.', + callback: function (input) { + if (document.getElementById('change_smtp_settings').checked) { + return ( + input.value.trim() !== '' && + /^\d+$/.test(input.value) && + input.value >= 1 && + input.value <= 65535 + ); + } + return true; + } + } + } + }, + encryption: { + validators: { + callback: { + message: 'La encriptación es obligatoria.', + callback: function (input) { + if (document.getElementById('change_smtp_settings').checked) { + return input.value.trim() !== ''; + } + return true; + } + } + } + }, + username: { + validators: { + callback: { + message: 'El usuario SMTP es obligatorio.', + callback: function (input) { + if (document.getElementById('change_smtp_settings').checked) { + return input.value.trim().length >= 6; + } + return true; + } + } + } + }, + password: { + validators: { + callback: { + message: 'Por favor, introduzca su contraseña.', + callback: function (input) { + if (document.getElementById('change_smtp_settings').checked) { + return input.value.trim().length >= 5; + } + return true; + } + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ rowSelector: '.fv-row' }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }; +} diff --git a/src/modules/Resources/js/_class/WebsiteLegalSettingsForm.js b/src/modules/Resources/js/_class/WebsiteLegalSettingsForm.js new file mode 100644 index 0000000..3731643 --- /dev/null +++ b/src/modules/Resources/js/_class/WebsiteLegalSettingsForm.js @@ -0,0 +1,252 @@ +export default class WebsiteLegalSettingsForm { + constructor(config = {}) { + const defaultConfig = { + contentId: 'website-legal-settings-card', + forms: { + 'legal_terminos_y_condiciones-nav': { + enabledCheckboxId: 'legal_terminos_y_condiciones-enabled', + quillSelector: '#legal_terminos_y_condiciones-content', + quillPlaceholder: 'Ingrese los términos y condiciones' + }, + 'legal_aviso_de_privacidad-nav': { + enabledCheckboxId: 'legal_aviso_de_privacidad-enabled', + quillSelector: '#legal_aviso_de_privacidad-content', + quillPlaceholder: 'Ingrese los aviso de privacidad' + }, + 'legal_politica_de_devoluciones-nav': { + enabledCheckboxId: 'legal_politica_de_devoluciones-enabled', + quillSelector: '#legal_politica_de_devoluciones-content', + quillPlaceholder: 'Ingrese los política de devoluciones y reembolsos' + }, + 'legal_politica_de_envios-nav': { + enabledCheckboxId: 'legal_politica_de_envios-enabled', + quillSelector: '#legal_politica_de_envios-content', + quillPlaceholder: 'Ingrese los política de envíos' + }, + 'legal_politica_de_cookies-nav': { + enabledCheckboxId: 'legal_politica_de_cookies-enabled', + quillSelector: '#legal_politica_de_cookies-content', + quillPlaceholder: 'Ingrese los política de cookies' + }, + 'legal_autorizaciones_y_licencias-nav': { + enabledCheckboxId: 'legal_autorizaciones_y_licencias-enabled', + quillSelector: '#legal_autorizaciones_y_licencias-content', + quillPlaceholder: 'Ingrese los autorizaciones y licencias' + }, + 'legal_informacion_comercial-nav': { + enabledCheckboxId: 'legal_informacion_comercial-enabled', + quillSelector: '#legal_informacion_comercial-content', + quillPlaceholder: 'Ingrese los información comercial' + }, + 'legal_consentimiento_para_el_login_de_terceros-nav': { + enabledCheckboxId: 'legal_consentimiento_para_el_login_de_terceros-enabled', + quillSelector: '#legal_consentimiento_para_el_login_de_terceros-content', + quillPlaceholder: 'Ingrese los consentimiento para el login de terceros' + }, + 'legal_leyendas_de_responsabilidad-nav': { + enabledCheckboxId: 'legal_leyendas_de_responsabilidad-enabled', + quillSelector: '#legal_leyendas_de_responsabilidad-content', + quillPlaceholder: 'Ingrese los leyendas de responsabilidad' + } + }, + saveButtonId: 'save-button', + cancelButtonId: 'cancel-button', + notificationAreaSelector: '.notification-container' + }; + + this.config = { ...defaultConfig, ...config }; + + this.content = null; + this.saveButton = null; + this.cancelButton = null; + this.notificationArea = null; + this.currentFormKey = null; + this.quillInstances = {}; // Almacenar instancias de Quill + this.editState = {}; + + this.init(); + } + + init() { + this.content = document.getElementById(this.config.contentId); + this.saveButton = document.getElementById(this.config.saveButtonId); + this.cancelButton = document.getElementById(this.config.cancelButtonId); + this.notificationArea = this.content.querySelector(this.config.notificationAreaSelector); + + // Puntero para rastrear si un formulario ha sido editado + this.editState = Object.keys(this.config.forms).reduce((state, key) => { + state[key] = false; // Inicializar todos los formularios como no editados + return state; + }, {}); + + this.switchToForm(Object.keys(this.config.forms)[0]); // Cargar el primer formulario + + this.saveButton.addEventListener('click', () => this.handleSave()); + this.cancelButton.addEventListener('click', () => this.handleCancel()); + } + + reload() { + const currentFormKey = this.currentFormKey; + + if (currentFormKey) { + const quillInstance = this.quillInstances[currentFormKey]; + const { quillSelector, enabledCheckboxId } = this.config.forms[currentFormKey]; + const quillContainer = document.querySelector(quillSelector); + const checkbox = document.getElementById(enabledCheckboxId); + const textarea = document.getElementById(`${currentFormKey.replace('-nav', '')}-textarea`); + + quillInstance.root.innerHTML = textarea.value; + + // Agregar eventos + checkbox.addEventListener('change', () => + this.handleCheckboxChange(checkbox, quillContainer, currentFormKey) + ); + + const isEnabled = checkbox.checked; + + quillInstance.enable(isEnabled); // Sincronizar habilitación con el checkbox + } + } + + switchToForm(formKey) { + if (!this.config.forms[formKey]) return; + + this.currentFormKey = formKey; + const { quillSelector, quillPlaceholder, enabledCheckboxId } = this.config.forms[formKey]; + const quillContainer = document.querySelector(quillSelector); + const checkbox = document.getElementById(enabledCheckboxId); + + // Si la instancia de Quill no existe, inicialízala + if (!this.quillInstances[formKey]) { + this.quillInstances[formKey] = new Quill(quillSelector, { + placeholder: quillPlaceholder, + modules: { toolbar: this.getToolbar() }, + theme: 'snow' + }); + + // Escuchar cambios en el editor + quillContainer.__quill = this.quillInstances[formKey]; + + this.quillInstances[formKey].on( + 'text-change', + this.debounce(() => this.handleContentChange(formKey), 300) + ); + + setTimeout(() => { + const isEnabled = checkbox.checked; + + quillContainer.__quill.enable(isEnabled); // Sincronizar habilitación con el checkbox + }); + } + + this.toggleButtonsState(this.editState[this.currentFormKey]); + + // Asignar evento al checkbox (asegura no duplicar eventos) + if (!checkbox.dataset.bound) { + checkbox.addEventListener('change', () => this.handleCheckboxChange(checkbox, quillContainer, formKey)); + checkbox.dataset.bound = true; // Marcar como manejado + } + } + + handleContentChange(formKey) { + // Marcar el formulario como editado + this.editState[formKey] = true; + + // Habilitar botones + this.toggleButtonsState(true); + } + + handleCheckboxChange(checkbox, quillContainer, formKey) { + const isEnabled = checkbox.checked; + + if (quillContainer.__quill) { + quillContainer.__quill.enable(isEnabled); // Habilitar o deshabilitar el editor + + if (isEnabled) { + quillContainer.__quill.focus(); // Hacer focus si está habilitado + } + } + + // Marcar el formulario como editado + this.editState[formKey] = true; + this.toggleButtonsState(true); + } + + handleSave() { + const quillInstance = this.quillInstances[this.currentFormKey]; + const textarea = document.getElementById(`${this.currentFormKey.replace('-nav', '-textarea')}`); + + // Deshabilitar el estado de edición + this.editState[this.currentFormKey] = false; + + //this.disableFormFields(this.content); + this.toggleButtonsState(false); + this.setButtonLoadingState(true); + + // Actualizar el contenido del textarea para sincronizar con Livewire + textarea.value = quillInstance.root.innerHTML; + + // Simular el evento 'input' para actualizar el contenido en el textarea + textarea.dispatchEvent(new Event('input', { bubbles: true })); + + // Emitir el evento de guardar en Livewire + Livewire.dispatch('saveLegal'); + } + + handleCancel() { + // Restablecer el estado de edición del formulario actual + this.editState[this.currentFormKey] = false; + + //this.disableFormFields(); + this.toggleButtonsState(false); + } + + disableFormFields(content) { + content.querySelectorAll('input, select, textarea').forEach(field => { + field.disabled = true; + }); + + if (this.fullEditor) { + this.fullEditor.enable(false); // Deshabilitar el editor + } + } + + toggleButtonsState(state) { + this.saveButton.disabled = !state; + this.cancelButton.disabled = !state; + } + + setButtonLoadingState(isLoading) { + const loadingText = this.saveButton.getAttribute('data-loading-text'); + + if (loadingText && isLoading) { + this.saveButton.innerHTML = loadingText; + } else { + this.saveButton.innerHTML = this.saveButton.getAttribute('data-original-text') || this.saveButton.innerHTML; + } + } + + debounce(func, wait) { + let timeout; + + return function (...args) { + const context = this; + + clearTimeout(timeout); + + timeout = setTimeout(() => func.apply(context, args), wait); + }; + } + + getToolbar() { + return [ + [{ font: [] }, { size: [] }], + ['bold', 'italic', 'underline', 'strike'], + [{ color: [] }, { background: [] }], + [{ script: 'super' }, { script: 'sub' }], + [{ header: '1' }, { header: '2' }], + [{ list: 'ordered' }, { list: 'bullet' }, { indent: '-1' }, { indent: '+1' }], + ['link', 'clean'] + ]; + } +} diff --git a/src/modules/Resources/js/admin-settings/admin-settings-scripts.js b/src/modules/Resources/js/admin-settings/admin-settings-scripts.js new file mode 100644 index 0000000..6067f87 --- /dev/null +++ b/src/modules/Resources/js/admin-settings/admin-settings-scripts.js @@ -0,0 +1,29 @@ +import LivewireNotification from '../_class/LivewireNotification'; +import FormCustomListener from '../_class/FormCustomListener'; + +const notification = new LivewireNotification(); + +new FormCustomListener({ + buttonSelectors: ['.btn-save', '.btn-cancel', '.btn-reset'] // Selectores para botones +}); + +Livewire.on('clearLocalStoregeTemplateCustomizer', event => { + const _deleteCookie = name => { + document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;'; + }; + + const pattern = 'templateCustomizer-'; + + // Iterar sobre todas las claves en localStorage + Object.keys(localStorage).forEach(key => { + if (key.startsWith(pattern)) { + localStorage.removeItem(key); + } + }); + + _deleteCookie('admin-mode'); + _deleteCookie('admin-colorPref'); + _deleteCookie('colorPref'); + _deleteCookie('theme'); + _deleteCookie('direction'); +}); diff --git a/src/modules/Resources/js/admin-settings/smtp-settings-scripts.js b/src/modules/Resources/js/admin-settings/smtp-settings-scripts.js new file mode 100644 index 0000000..e822ce4 --- /dev/null +++ b/src/modules/Resources/js/admin-settings/smtp-settings-scripts.js @@ -0,0 +1,27 @@ +import LivewireNotification from '../_class/LivewireNotification'; +import SmtpSettingsForm from '../_class/SmtpSettingsForm'; +import SenderResponseForm from '../_class/SenderResponseForm'; + +new LivewireNotification(); + +window.smtpSettingsForm = new SmtpSettingsForm(); +window.senderResponseForm = new SenderResponseForm(); + +Livewire.hook('morphed', ({ component }) => { + switch (component.name) { + case 'mail-smtp-settings': + if (window.smtpSettingsForm) { + window.smtpSettingsForm.reload(); // Recarga el formulario sin destruir la instancia + } + break; + + case 'mail-sender-response-settings': + if (window.senderResponseForm) { + window.senderResponseForm.reload(); // Recarga el formulario sin destruir la instancia + } + break; + + default: + break; + } +}); diff --git a/src/modules/Resources/js/app.js b/src/modules/Resources/js/app.js new file mode 100644 index 0000000..cda08dd --- /dev/null +++ b/src/modules/Resources/js/app.js @@ -0,0 +1,9 @@ +import './bootstrap'; +/* + Add custom scripts here +*/ +import.meta.glob([ + '../assets/img/**', + // '../assets/json/**', + '../assets/vendor/fonts/**' +]); diff --git a/src/modules/Resources/js/auth/app-access-permission.js b/src/modules/Resources/js/auth/app-access-permission.js new file mode 100644 index 0000000..e2ccac8 --- /dev/null +++ b/src/modules/Resources/js/auth/app-access-permission.js @@ -0,0 +1,206 @@ +/** + * App user list (jquery) + */ + +'use strict'; + +$(function () { + var dataTablePermissions = $('.datatables-permissions'), + dt_permission, + userList = baseUrl + 'app/user/list'; + // Users List datatable + if (dataTablePermissions.length) { + dt_permission = dataTablePermissions.DataTable({ + ajax: assetsPath + 'json/permissions-list.json', // JSON file to add data + columns: [ + // columns according to JSON + { data: '' }, + { data: 'id' }, + { data: 'name' }, + { data: 'assigned_to' }, + { data: 'created_date' }, + { data: '' } + ], + columnDefs: [ + { + // For Responsive + className: 'control', + orderable: false, + searchable: false, + responsivePriority: 2, + targets: 0, + render: function (data, type, full, meta) { + return ''; + } + }, + { + targets: 1, + searchable: false, + visible: false + }, + { + // Name + targets: 2, + render: function (data, type, full, meta) { + var $name = full['name']; + return '' + $name + ''; + } + }, + { + // User Role + targets: 3, + orderable: false, + render: function (data, type, full, meta) { + var $assignedTo = full['assigned_to'], + $output = ''; + var roleBadgeObj = { + Admin: 'Administrator', + Manager: 'Manager', + Users: 'Users', + Support: 'Support', + Restricted: + 'Restricted User' + }; + for (var i = 0; i < $assignedTo.length; i++) { + var val = $assignedTo[i]; + $output += roleBadgeObj[val]; + } + return '' + $output + ''; + } + }, + { + // remove ordering from Name + targets: 4, + orderable: false, + render: function (data, type, full, meta) { + var $date = full['created_date']; + return '' + $date + ''; + } + }, + { + // Actions + targets: -1, + searchable: false, + title: 'Actions', + orderable: false, + render: function (data, type, full, meta) { + return ( + '
' + + '' + + '' + + '' + + '
' + ); + } + } + ], + order: [[1, 'asc']], + dom: + '<"row mx-1"' + + '<"col-sm-12 col-md-3" l>' + + '<"col-sm-12 col-md-9"<"dt-action-buttons text-xl-end text-lg-start text-md-end text-start d-flex align-items-center justify-content-md-end justify-content-center flex-wrap"<"me-4 mt-n6 mt-md-0"f>B>>' + + '>t' + + '<"row"' + + '<"col-sm-12 col-md-6"i>' + + '<"col-sm-12 col-md-6"p>' + + '>', + language: { + sLengthMenu: 'Show _MENU_', + search: '', + searchPlaceholder: 'Search Permissions', + paginate: { + next: '', + previous: '' + } + }, + // Buttons with Dropdown + buttons: [ + { + text: 'Add Permission', + className: 'add-new btn btn-primary mb-6 mb-md-0 waves-effect waves-light', + attr: { + 'data-bs-toggle': 'modal', + 'data-bs-target': '#addPermissionModal' + }, + init: function (api, node, config) { + $(node).removeClass('btn-secondary'); + } + } + ], + // For responsive popup + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.modal({ + header: function (row) { + var data = row.data(); + return 'Details of ' + data['name']; + } + }), + type: 'column', + renderer: function (api, rowIdx, columns) { + var data = $.map(columns, function (col, i) { + return col.title !== '' // ? Do not show row in modal popup if title is blank (for check box) + ? '' + + '' + + col.title + + ':' + + ' ' + + '' + + col.data + + '' + + '' + : ''; + }).join(''); + + return data ? $('').append(data) : false; + } + } + }, + initComplete: function () { + // Adding role filter once table initialized + this.api() + .columns(3) + .every(function () { + var column = this; + var select = $( + '' + ) + .appendTo('.user_role') + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + column.search(val ? '^' + val + '$' : '', true, false).draw(); + }); + + column + .data() + .unique() + .sort() + .each(function (d, j) { + select.append(''); + }); + }); + } + }); + } + + // Delete Record + $('.datatables-permissions tbody').on('click', '.delete-record', function () { + dt_permission.row($(this).parents('tr')).remove().draw(); + }); + + // Filter form control to default size + // ? setTimeout used for multilingual table initialization + setTimeout(() => { + $('.dataTables_filter .form-control').removeClass('form-control-sm'); + $('.dataTables_length .form-select').removeClass('form-select-sm'); + $('.dataTables_info').addClass('ms-n1'); + $('.dataTables_paginate').addClass('me-n1'); + }, 300); +}); diff --git a/src/modules/Resources/js/auth/app-access-roles.js b/src/modules/Resources/js/auth/app-access-roles.js new file mode 100644 index 0000000..0568330 --- /dev/null +++ b/src/modules/Resources/js/auth/app-access-roles.js @@ -0,0 +1,428 @@ +/** + * App user list + */ + +'use strict'; + +// Datatable (jquery) +$(function () { + var dtUserTable = $('.datatables-users'), + dt_User, + statusObj = { + 1: { title: 'Pending', class: 'bg-label-warning' }, + 2: { title: 'Active', class: 'bg-label-success' }, + 3: { title: 'Inactive', class: 'bg-label-secondary' } + }; + + var userView = baseUrl + 'app/user/view/account'; + + // Users List datatable + if (dtUserTable.length) { + var dtUser = dtUserTable.DataTable({ + ajax: assetsPath + 'json/user-list.json', // JSON file to add data + columns: [ + // columns according to JSON + { data: 'id' }, + { data: 'id' }, + { data: 'full_name' }, + { data: 'role' }, + { data: 'current_plan' }, + { data: 'billing' }, + { data: 'status' }, + { data: '' } + ], + columnDefs: [ + { + // For Responsive + className: 'control', + orderable: false, + searchable: false, + responsivePriority: 2, + targets: 0, + render: function (data, type, full, meta) { + return ''; + } + }, + { + // For Checkboxes + targets: 1, + orderable: false, + checkboxes: { + selectAllRender: '' + }, + render: function () { + return ''; + }, + searchable: false + }, + { + // User full name and email + targets: 2, + responsivePriority: 4, + render: function (data, type, full, meta) { + var $name = full['full_name'], + $email = full['email'], + $image = full['avatar']; + if ($image) { + // For Avatar image + var $output = + 'Avatar'; + } else { + // For Avatar badge + var stateNum = Math.floor(Math.random() * 6); + var states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary']; + var $state = states[stateNum], + $name = full['full_name'], + $initials = $name.match(/\b\w/g) || []; + $initials = (($initials.shift() || '') + ($initials.pop() || '')).toUpperCase(); + $output = '' + $initials + ''; + } + // Creates full output for row + var $row_output = + '
' + + '
' + + '
' + + $output + + '
' + + '
' + + '
' + + '' + + $name + + '' + + '@' + + $email + + '' + + '
' + + '
'; + return $row_output; + } + }, + { + // User Role + targets: 3, + render: function (data, type, full, meta) { + var $role = full['role']; + var roleBadgeObj = { + Subscriber: '', + Author: '', + Maintainer: '', + Editor: '', + Admin: '' + }; + return ( + "" + + roleBadgeObj[$role] + + $role + + '' + ); + } + }, + { + // Plans + targets: 4, + render: function (data, type, full, meta) { + var $plan = full['current_plan']; + + return '' + $plan + ''; + } + }, + { + // User Status + targets: 6, + render: function (data, type, full, meta) { + var $status = full['status']; + + return ( + '' + + statusObj[$status].title + + '' + ); + } + }, + { + // Actions + targets: -1, + title: 'Actions', + searchable: false, + orderable: false, + render: function (data, type, full, meta) { + return ( + '
' + + '' + + '' + + '' + + '' + + '
' + ); + } + } + ], + order: [[2, 'desc']], + dom: + '<"row"' + + '<"col-md-2">' + + '<"col-md-10"<"dt-action-buttons text-xl-end text-lg-start text-md-end text-start d-flex align-items-center justify-content-end flex-md-row flex-column mb-6 mb-md-0"fB>>' + + '>t' + + '<"row"' + + '<"col-sm-12 col-md-6"i>' + + '<"col-sm-12 col-md-6"p>' + + '>', + language: { + sLengthMenu: 'Show _MENU_', + search: '', + searchPlaceholder: 'Search User', + paginate: { + next: '', + previous: '' + } + }, + buttons: [ + { + extend: 'collection', + className: + 'btn btn-label-secondary dropdown-toggle me-4 waves-effect waves-light border-left-0 border-right-0 rounded', + text: ' Export', + buttons: [ + { + extend: 'print', + text: 'Print', + className: 'dropdown-item', + exportOptions: { + columns: [3, 4, 5, 6, 7], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + }, + customize: function (win) { + //customize print view for dark + $(win.document.body) + .css('color', config.colors.headingColor) + .css('border-color', config.colors.borderColor) + .css('background-color', config.colors.bodyBg); + $(win.document.body) + .find('table') + .addClass('compact') + .css('color', 'inherit') + .css('border-color', 'inherit') + .css('background-color', 'inherit'); + } + }, + { + extend: 'csv', + text: 'Csv', + className: 'dropdown-item', + exportOptions: { + columns: [3, 4, 5, 6, 7], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + }, + { + extend: 'excel', + text: 'Excel', + className: 'dropdown-item', + exportOptions: { + columns: [3, 4, 5, 6, 7], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + }, + { + extend: 'pdf', + text: 'Pdf', + className: 'dropdown-item', + exportOptions: { + columns: [3, 4, 5, 6, 7], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + }, + { + extend: 'copy', + text: 'Copy', + className: 'dropdown-item', + exportOptions: { + columns: [3, 4, 5, 6, 7], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + } + ] + }, + { + text: 'Add new role', + className: 'btn btn-primary waves-effect waves-light rounded border-left-0 border-right-0', + attr: { + 'data-bs-toggle': 'modal', + 'data-bs-target': '#addRoleModal' + } + } + ], + // For responsive popup + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.modal({ + header: function (row) { + var data = row.data(); + return 'Details of ' + data['full_name']; + } + }), + type: 'column', + renderer: function (api, rowIdx, columns) { + var data = $.map(columns, function (col, i) { + return col.title !== '' // ? Do not show row in modal popup if title is blank (for check box) + ? '' + + ' ' + + '' + + '' + : ''; + }).join(''); + + return data ? $('
' + + col.title + + ':' + + '' + + col.data + + '
').append(data) : false; + } + } + }, + initComplete: function () { + // Adding role filter once table initialized + this.api() + .columns(3) + .every(function () { + var column = this; + var select = $( + '' + ) + .appendTo('.user_role') + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + column.search(val ? '^' + val + '$' : '', true, false).draw(); + }); + + column + .data() + .unique() + .sort() + .each(function (d, j) { + select.append(''); + }); + }); + } + }); + } + // Delete Record + $('.datatables-users tbody').on('click', '.delete-record', function () { + dtUser.row($(this).parents('tr')).remove().draw(); + }); + + // Filter form control to default size + // ? setTimeout used for multilingual table initialization + setTimeout(() => { + $('.dataTables_filter .form-control').removeClass('form-control-sm'); + $('.dataTables_length .form-select').removeClass('form-select-sm'); + }, 300); + $('.dataTables_filter').addClass('ms-n4 me-4 mt-0 mt-md-6'); +}); + +(function () { + // On edit role click, update text + var roleEditList = document.querySelectorAll('.role-edit-modal'), + roleAdd = document.querySelector('.add-new-role'), + roleTitle = document.querySelector('.role-title'); + + roleAdd.onclick = function () { + roleTitle.innerHTML = 'Add New Role'; // reset text + }; + if (roleEditList) { + roleEditList.forEach(function (roleEditEl) { + roleEditEl.onclick = function () { + roleTitle.innerHTML = 'Edit Role'; // reset text + }; + }); + } +})(); diff --git a/src/modules/Resources/js/auth/app-user-list.js b/src/modules/Resources/js/auth/app-user-list.js new file mode 100644 index 0000000..4d00b93 --- /dev/null +++ b/src/modules/Resources/js/auth/app-user-list.js @@ -0,0 +1,533 @@ +/** + * Page User List + */ + +'use strict'; + +// Datatable (jquery) +$(function () { + let borderColor, bodyBg, headingColor; + + if (isDarkStyle) { + borderColor = config.colors_dark.borderColor; + bodyBg = config.colors_dark.bodyBg; + headingColor = config.colors_dark.headingColor; + } else { + borderColor = config.colors.borderColor; + bodyBg = config.colors.bodyBg; + headingColor = config.colors.headingColor; + } + + // Variable declaration for table + var dt_user_table = $('.datatables-users'), + select2 = $('.select2'), + userView = baseUrl + 'app/user/view/account', + statusObj = { + 1: { title: 'Pending', class: 'bg-label-warning' }, + 2: { title: 'Active', class: 'bg-label-success' }, + 3: { title: 'Inactive', class: 'bg-label-secondary' } + }; + + if (select2.length) { + var $this = select2; + $this.wrap('
').select2({ + placeholder: 'Select Country', + dropdownParent: $this.parent() + }); + } + + // Users datatable + if (dt_user_table.length) { + var dt_user = dt_user_table.DataTable({ + ajax: assetsPath + 'json/user-list.json', // JSON file to add data + columns: [ + // columns according to JSON + { data: 'id' }, + { data: 'id' }, + { data: 'full_name' }, + { data: 'role' }, + { data: 'current_plan' }, + { data: 'billing' }, + { data: 'status' }, + { data: 'action' } + ], + columnDefs: [ + { + // For Responsive + className: 'control', + searchable: false, + orderable: false, + responsivePriority: 2, + targets: 0, + render: function (data, type, full, meta) { + return ''; + } + }, + { + // For Checkboxes + targets: 1, + orderable: false, + checkboxes: { + selectAllRender: '' + }, + render: function () { + return ''; + }, + searchable: false + }, + { + // User full name and email + targets: 2, + responsivePriority: 4, + render: function (data, type, full, meta) { + var $name = full['full_name'], + $email = full['email'], + $image = full['avatar']; + if ($image) { + // For Avatar image + var $output = + 'Avatar'; + } else { + // For Avatar badge + var stateNum = Math.floor(Math.random() * 6); + var states = ['success', 'danger', 'warning', 'info', 'primary', 'secondary']; + var $state = states[stateNum], + $name = full['full_name'], + $initials = $name.match(/\b\w/g) || []; + $initials = (($initials.shift() || '') + ($initials.pop() || '')).toUpperCase(); + $output = '' + $initials + ''; + } + // Creates full output for row + var $row_output = + '
' + + '
' + + '
' + + $output + + '
' + + '
' + + '
' + + '' + + $name + + '' + + '' + + $email + + '' + + '
' + + '
'; + return $row_output; + } + }, + { + // User Role + targets: 3, + render: function (data, type, full, meta) { + var $role = full['role']; + var roleBadgeObj = { + Subscriber: '', + Author: '', + Maintainer: '', + Editor: '', + Admin: '' + }; + return ( + "" + + roleBadgeObj[$role] + + $role + + '' + ); + } + }, + { + // Plans + targets: 4, + render: function (data, type, full, meta) { + var $plan = full['current_plan']; + + return '' + $plan + ''; + } + }, + { + // User Status + targets: 6, + render: function (data, type, full, meta) { + var $status = full['status']; + + return ( + '' + + statusObj[$status].title + + '' + ); + } + }, + { + // Actions + targets: -1, + title: 'Actions', + searchable: false, + orderable: false, + render: function (data, type, full, meta) { + return ( + '
' + + '' + + '' + + '' + + '' + + '
' + ); + } + } + ], + order: [[2, 'desc']], + dom: + '<"row"' + + '<"col-md-2"<"ms-n2"l>>' + + '<"col-md-10"<"dt-action-buttons text-xl-end text-lg-start text-md-end text-start d-flex align-items-center justify-content-end flex-md-row flex-column mb-6 mb-md-0 mt-n6 mt-md-0"fB>>' + + '>t' + + '<"row"' + + '<"col-sm-12 col-md-6"i>' + + '<"col-sm-12 col-md-6"p>' + + '>', + language: { + sLengthMenu: '_MENU_', + search: '', + searchPlaceholder: 'Search User', + paginate: { + next: '', + previous: '' + } + }, + // Buttons with Dropdown + buttons: [ + { + extend: 'collection', + className: 'btn btn-label-secondary dropdown-toggle mx-4 waves-effect waves-light', + text: 'Export', + buttons: [ + { + extend: 'print', + text: 'Print', + className: 'dropdown-item', + exportOptions: { + columns: [1, 2, 3, 4, 5], + // prevent avatar to be print + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + }, + customize: function (win) { + //customize print view for dark + $(win.document.body) + .css('color', headingColor) + .css('border-color', borderColor) + .css('background-color', bodyBg); + $(win.document.body) + .find('table') + .addClass('compact') + .css('color', 'inherit') + .css('border-color', 'inherit') + .css('background-color', 'inherit'); + } + }, + { + extend: 'csv', + text: 'Csv', + className: 'dropdown-item', + exportOptions: { + columns: [1, 2, 3, 4, 5], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + }, + { + extend: 'excel', + text: 'Excel', + className: 'dropdown-item', + exportOptions: { + columns: [1, 2, 3, 4, 5], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + }, + { + extend: 'pdf', + text: 'Pdf', + className: 'dropdown-item', + exportOptions: { + columns: [1, 2, 3, 4, 5], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + }, + { + extend: 'copy', + text: 'Copy', + className: 'dropdown-item', + exportOptions: { + columns: [1, 2, 3, 4, 5], + // prevent avatar to be display + format: { + body: function (inner, coldex, rowdex) { + if (inner.length <= 0) return inner; + var el = $.parseHTML(inner); + var result = ''; + $.each(el, function (index, item) { + if (item.classList !== undefined && item.classList.contains('user-name')) { + result = result + item.lastChild.firstChild.textContent; + } else if (item.innerText === undefined) { + result = result + item.textContent; + } else result = result + item.innerText; + }); + return result; + } + } + } + } + ] + }, + { + text: 'Add New User', + className: 'add-new btn btn-primary waves-effect waves-light', + attr: { + 'data-bs-toggle': 'offcanvas', + 'data-bs-target': '#offcanvasAddUser' + } + } + ], + // For responsive popup + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.modal({ + header: function (row) { + var data = row.data(); + return 'Details of ' + data['full_name']; + } + }), + type: 'column', + renderer: function (api, rowIdx, columns) { + var data = $.map(columns, function (col, i) { + return col.title !== '' // ? Do not show row in modal popup if title is blank (for check box) + ? '' + + ' ' + + '' + + '' + : ''; + }).join(''); + + return data ? $('
' + + col.title + + ':' + + '' + + col.data + + '
').append(data) : false; + } + } + }, + initComplete: function () { + // Adding role filter once table initialized + this.api() + .columns(3) + .every(function () { + var column = this; + var select = $( + '' + ) + .appendTo('.user_role') + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + column.search(val ? '^' + val + '$' : '', true, false).draw(); + }); + + column + .data() + .unique() + .sort() + .each(function (d, j) { + select.append(''); + }); + }); + // Adding plan filter once table initialized + this.api() + .columns(4) + .every(function () { + var column = this; + var select = $( + '' + ) + .appendTo('.user_plan') + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + column.search(val ? '^' + val + '$' : '', true, false).draw(); + }); + + column + .data() + .unique() + .sort() + .each(function (d, j) { + select.append(''); + }); + }); + // Adding status filter once table initialized + this.api() + .columns(6) + .every(function () { + var column = this; + var select = $( + '' + ) + .appendTo('.user_status') + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + column.search(val ? '^' + val + '$' : '', true, false).draw(); + }); + + column + .data() + .unique() + .sort() + .each(function (d, j) { + select.append( + '' + ); + }); + }); + } + }); + } + + // Delete Record + $('.datatables-users tbody').on('click', '.delete-record', function () { + dt_user.row($(this).parents('tr')).remove().draw(); + }); + + // Filter form control to default size + // ? setTimeout used for multilingual table initialization + setTimeout(() => { + $('.dataTables_filter .form-control').removeClass('form-control-sm'); + $('.dataTables_length .form-select').removeClass('form-select-sm'); + }, 300); +}); + +// Validation & Phone mask +(function () { + const phoneMaskList = document.querySelectorAll('.phone-mask'), + addNewUserForm = document.getElementById('addNewUserForm'); + + // Phone Number + if (phoneMaskList) { + phoneMaskList.forEach(function (phoneMask) { + new Cleave(phoneMask, { + phone: true, + phoneRegionCode: 'US' + }); + }); + } + // Add New User Form Validation + const fv = FormValidation.formValidation(addNewUserForm, { + fields: { + userFullname: { + validators: { + notEmpty: { + message: 'Please enter fullname ' + } + } + }, + userEmail: { + validators: { + notEmpty: { + message: 'Please enter your email' + }, + emailAddress: { + message: 'The value is not a valid email address' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + eleValidClass: '', + rowSelector: function (field, ele) { + // field is the field name & ele is the field element + return '.mb-6'; + } + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); +})(); diff --git a/src/modules/Resources/js/auth/app-user-view-account.js b/src/modules/Resources/js/auth/app-user-view-account.js new file mode 100644 index 0000000..82f49dd --- /dev/null +++ b/src/modules/Resources/js/auth/app-user-view-account.js @@ -0,0 +1,222 @@ +/** + * App User View - Account (jquery) + */ + +$(function () { + 'use strict'; + + // Variable declaration for table + var dt_invoice_table = $('.datatable-invoice'); + + // Invoice datatable + // -------------------------------------------------------------------- + if (dt_invoice_table.length) { + var dt_invoice = dt_invoice_table.DataTable({ + ajax: assetsPath + 'json/invoice-list.json', // JSON file to add data + columns: [ + // columns according to JSON + { data: '' }, + { data: 'invoice_id' }, + { data: 'invoice_status' }, + { data: 'total' }, + { data: 'issued_date' }, + { data: 'action' } + ], + columnDefs: [ + { + // For Responsive + className: 'control', + responsivePriority: 2, + targets: 0, + render: function (data, type, full, meta) { + return ''; + } + }, + { + // Invoice ID + targets: 1, + render: function (data, type, full, meta) { + var $invoice_id = full['invoice_id']; + // Creates full output for row + var $row_output = '#' + $invoice_id + ''; + return $row_output; + } + }, + { + // Invoice status + targets: 2, + render: function (data, type, full, meta) { + var $invoice_status = full['invoice_status'], + $due_date = full['due_date'], + $balance = full['balance']; + var roleBadgeObj = { + Sent: '', + Draft: + '', + 'Past Due': + '', + 'Partial Payment': + '', + Paid: '', + Downloaded: + '' + }; + return ( + " Balance: ' + + $balance + + '
Due Date: ' + + $due_date + + "
'>" + + roleBadgeObj[$invoice_status] + + '' + ); + } + }, + { + // Total Invoice Amount + targets: 3, + render: function (data, type, full, meta) { + var $total = full['total']; + return '$' + $total; + } + }, + { + // Actions + targets: -1, + title: 'Actions', + orderable: false, + render: function (data, type, full, meta) { + return ( + '
' + + '' + + '' + + '
' + + '' + + '' + + '
' + + '
' + ); + } + } + ], + order: [[1, 'desc']], + dom: + '<"row mx-6"' + + '<"col-sm-6 col-12 d-flex align-items-center justify-content-center justify-content-sm-start mt-6 mt-sm-0"<"invoice-head-label">>' + + '<"col-sm-6 col-12 d-flex justify-content-center justify-content-md-end align-items-baseline"<"dt-action-buttons d-flex justify-content-center flex-md-row align-items-baseline gap-2"lB>>' + + '>t' + + '<"row mx-4"' + + '<"col-sm-12 col-xxl-6 text-center text-xxl-start pb-md-2 pb-xxl-0"i>' + + '<"col-sm-12 col-xxl-6 d-md-flex justify-content-xxl-end justify-content-center"p>' + + '>', + language: { + sLengthMenu: 'Show _MENU_', + search: '', + searchPlaceholder: 'Search Invoice', + paginate: { + next: '', + previous: '' + } + }, + // Buttons with Dropdown + buttons: [ + { + extend: 'collection', + className: 'btn btn-label-secondary dropdown-toggle float-sm-end mb-3 mb-sm-0 waves-effect waves-light', + text: 'Export', + buttons: [ + { + extend: 'print', + text: 'Print', + className: 'dropdown-item', + exportOptions: { columns: [1, 2, 3, 4] } + }, + { + extend: 'csv', + text: 'Csv', + className: 'dropdown-item', + exportOptions: { columns: [1, 2, 3, 4] } + }, + { + extend: 'excel', + text: 'Excel', + className: 'dropdown-item', + exportOptions: { columns: [1, 2, 3, 4] } + }, + { + extend: 'pdf', + text: 'Pdf', + className: 'dropdown-item', + exportOptions: { columns: [1, 2, 3, 4] } + }, + { + extend: 'copy', + text: 'Copy', + className: 'dropdown-item', + exportOptions: { columns: [1, 2, 3, 4] } + } + ] + } + ], + // For responsive popup + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.modal({ + header: function (row) { + var data = row.data(); + return 'Details of ' + data['full_name']; + } + }), + type: 'column', + renderer: function (api, rowIdx, columns) { + var data = $.map(columns, function (col, i) { + return col.title !== '' // ? Do not show row in modal popup if title is blank (for check box) + ? '' + + ' ' + + '' + + '' + : ''; + }).join(''); + + return data ? $('
' + + col.title + + ':' + + '' + + col.data + + '
').append(data) : false; + } + } + } + }); + $('div.invoice-head-label').html('
Invoice List
'); + } + // On each datatable draw, initialize tooltip + dt_invoice_table.on('draw.dt', function () { + var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); + var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { + return new bootstrap.Tooltip(tooltipTriggerEl, { + boundary: document.body + }); + }); + }); + + // Delete Record + $('.datatable-invoice tbody').on('click', '.delete-record', function () { + dt_invoice.row($(this).parents('tr')).remove().draw(); + }); + // Filter form control to default size + // ? setTimeout used for multilingual table initialization + setTimeout(() => { + $('.dataTables_filter .form-control').removeClass('form-control-sm'); + $('.dataTables_length .form-select').removeClass('form-select-sm'); + }, 300); +}); diff --git a/src/modules/Resources/js/auth/app-user-view-billing.js b/src/modules/Resources/js/auth/app-user-view-billing.js new file mode 100644 index 0000000..212b396 --- /dev/null +++ b/src/modules/Resources/js/auth/app-user-view-billing.js @@ -0,0 +1,57 @@ +/** + * App User View - Billing + */ + +'use strict'; + +(function () { + // Cancel Subscription alert + const cancelSubscription = document.querySelector('.cancel-subscription'); + + // Alert With Functional Confirm Button + if (cancelSubscription) { + cancelSubscription.onclick = function () { + Swal.fire({ + text: 'Are you sure you would like to cancel your subscription?', + icon: 'warning', + showCancelButton: true, + confirmButtonText: 'Yes', + customClass: { + confirmButton: 'btn btn-primary me-2 waves-effect waves-light', + cancelButton: 'btn btn-label-secondary waves-effect waves-light' + }, + buttonsStyling: false + }).then(function (result) { + if (result.value) { + Swal.fire({ + icon: 'success', + title: 'Unsubscribed!', + text: 'Your subscription cancelled successfully.', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } else if (result.dismiss === Swal.DismissReason.cancel) { + Swal.fire({ + title: 'Cancelled', + text: 'Unsubscription Cancelled!!', + icon: 'error', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } + }); + }; + } + + // On edit address click, update text of add address modal + const addressEdit = document.querySelector('.edit-address'), + addressTitle = document.querySelector('.address-title'), + addressSubTitle = document.querySelector('.address-subtitle'); + + addressEdit.onclick = function () { + addressTitle.innerHTML = 'Edit Address'; // reset text + addressSubTitle.innerHTML = 'Edit your current address'; + }; +})(); diff --git a/src/modules/Resources/js/auth/app-user-view-security.js b/src/modules/Resources/js/auth/app-user-view-security.js new file mode 100644 index 0000000..fa0e1ed --- /dev/null +++ b/src/modules/Resources/js/auth/app-user-view-security.js @@ -0,0 +1,63 @@ +/** + * App User View - Security + */ + +'use strict'; + +(function () { + const formChangePass = document.querySelector('#formChangePassword'); + + // Form validation for Change password + if (formChangePass) { + const fv = FormValidation.formValidation(formChangePass, { + fields: { + newPassword: { + validators: { + notEmpty: { + message: 'Please enter new password' + }, + stringLength: { + min: 8, + message: 'Password must be more than 8 characters' + } + } + }, + confirmPassword: { + validators: { + notEmpty: { + message: 'Please confirm new password' + }, + identical: { + compare: function () { + return formChangePass.querySelector('[name="newPassword"]').value; + }, + message: 'The password and its confirm are not the same' + }, + stringLength: { + min: 8, + message: 'Password must be more than 8 characters' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.form-password-toggle' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } +})(); diff --git a/src/modules/Resources/js/auth/app-user-view.js b/src/modules/Resources/js/auth/app-user-view.js new file mode 100644 index 0000000..60b1d23 --- /dev/null +++ b/src/modules/Resources/js/auth/app-user-view.js @@ -0,0 +1,89 @@ +/** + * App User View - Suspend User Script + */ +'use strict'; + +(function () { + const suspendUser = document.querySelector('.suspend-user'); + + // Suspend User javascript + if (suspendUser) { + suspendUser.onclick = function () { + Swal.fire({ + title: 'Are you sure?', + text: "You won't be able to revert user!", + icon: 'warning', + showCancelButton: true, + confirmButtonText: 'Yes, Suspend user!', + customClass: { + confirmButton: 'btn btn-primary me-2 waves-effect waves-light', + cancelButton: 'btn btn-label-secondary waves-effect waves-light' + }, + buttonsStyling: false + }).then(function (result) { + if (result.value) { + Swal.fire({ + icon: 'success', + title: 'Suspended!', + text: 'User has been suspended.', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } else if (result.dismiss === Swal.DismissReason.cancel) { + Swal.fire({ + title: 'Cancelled', + text: 'Cancelled Suspension :)', + icon: 'error', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } + }); + }; + } + + //? Billing page have multiple buttons + // Cancel Subscription alert + const cancelSubscription = document.querySelectorAll('.cancel-subscription'); + + // Alert With Functional Confirm Button + if (cancelSubscription) { + cancelSubscription.forEach(btnCancle => { + btnCancle.onclick = function () { + Swal.fire({ + text: 'Are you sure you would like to cancel your subscription?', + icon: 'warning', + showCancelButton: true, + confirmButtonText: 'Yes', + customClass: { + confirmButton: 'btn btn-primary me-2 waves-effect waves-light', + cancelButton: 'btn btn-label-secondary waves-effect waves-light' + }, + buttonsStyling: false + }).then(function (result) { + if (result.value) { + Swal.fire({ + icon: 'success', + title: 'Unsubscribed!', + text: 'Your subscription cancelled successfully.', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } else if (result.dismiss === Swal.DismissReason.cancel) { + Swal.fire({ + title: 'Cancelled', + text: 'Unsubscription Cancelled!!', + icon: 'error', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } + }); + }; + }); + } +})(); diff --git a/src/modules/Resources/js/auth/modal-add-new-address.js b/src/modules/Resources/js/auth/modal-add-new-address.js new file mode 100644 index 0000000..5ca25dd --- /dev/null +++ b/src/modules/Resources/js/auth/modal-add-new-address.js @@ -0,0 +1,73 @@ +/** + * Add New Address + */ + +'use strict'; + +// Select2 (jquery) +$(function () { + const select2 = $('.select2'); + + // Select2 Country + if (select2.length) { + select2.each(function () { + var $this = $(this); + $this.wrap('
').select2({ + placeholder: 'Select value', + dropdownParent: $this.parent() + }); + }); + } +}); + +// Add New Address form validation +document.addEventListener('DOMContentLoaded', function () { + (function () { + // initCustomOptionCheck on modal show to update the custom select + let addNewAddress = document.getElementById('addNewAddress'); + addNewAddress.addEventListener('show.bs.modal', function (event) { + // Init custom option check + window.Helpers.initCustomOptionCheck(); + }); + + FormValidation.formValidation(document.getElementById('addNewAddressForm'), { + fields: { + modalAddressFirstName: { + validators: { + notEmpty: { + message: 'Please enter your first name' + }, + regexp: { + regexp: /^[a-zA-Zs]+$/, + message: 'The first name can only consist of alphabetical' + } + } + }, + modalAddressLastName: { + validators: { + notEmpty: { + message: 'Please enter your last name' + }, + regexp: { + regexp: /^[a-zA-Zs]+$/, + message: 'The last name can only consist of alphabetical' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-add-new-cc.js b/src/modules/Resources/js/auth/modal-add-new-cc.js new file mode 100644 index 0000000..41bfe4d --- /dev/null +++ b/src/modules/Resources/js/auth/modal-add-new-cc.js @@ -0,0 +1,107 @@ +/** + * Add new credit card + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + // Variables + const creditCardMask = document.querySelector('.credit-card-mask'), + expiryDateMask = document.querySelector('.expiry-date-mask'), + cvvMask = document.querySelector('.cvv-code-mask'), + btnReset = document.querySelector('.btn-reset'); + let cleave; + + // Credit Card + function initCleave() { + if (creditCardMask) { + cleave = new Cleave(creditCardMask, { + creditCard: true, + onCreditCardTypeChanged: function (type) { + if (type != '' && type != 'unknown') { + document.querySelector('.card-type').innerHTML = + ''; + } else { + document.querySelector('.card-type').innerHTML = ''; + } + } + }); + } + } + + // Init cleave on show modal (To fix the cc image issue) + let addNewCCModal = document.getElementById('addNewCCModal'); + addNewCCModal.addEventListener('show.bs.modal', function (event) { + initCleave(); + }); + + // Expiry Date Mask + if (expiryDateMask) { + new Cleave(expiryDateMask, { + date: true, + delimiter: '/', + datePattern: ['m', 'y'] + }); + } + + // CVV + if (cvvMask) { + new Cleave(cvvMask, { + numeral: true, + numeralPositiveOnly: true + }); + } + + // Credit card form validation + FormValidation.formValidation(document.getElementById('addNewCCForm'), { + fields: { + modalAddCard: { + validators: { + notEmpty: { + message: 'Please enter your credit card number' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + //* Move the error message out of the `input-group` element + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }).on('plugins.message.displayed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + //* Move the error message out of the `input-group` element + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement.parentElement); + } + }); + + // reset card image on click of cancel + btnReset.addEventListener('click', function (e) { + // blank '.card-type' innerHTML to remove image + document.querySelector('.card-type').innerHTML = ''; + // destroy cleave and init again on modal open + cleave.destroy(); + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-add-permission.js b/src/modules/Resources/js/auth/modal-add-permission.js new file mode 100644 index 0000000..b76feaa --- /dev/null +++ b/src/modules/Resources/js/auth/modal-add-permission.js @@ -0,0 +1,35 @@ +/** + * Add Permission Modal JS + */ + +'use strict'; + +// Add permission form validation +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + FormValidation.formValidation(document.getElementById('addPermissionForm'), { + fields: { + modalPermissionName: { + validators: { + notEmpty: { + message: 'Please enter permission name' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-add-role.js b/src/modules/Resources/js/auth/modal-add-role.js new file mode 100644 index 0000000..af4c8fe --- /dev/null +++ b/src/modules/Resources/js/auth/modal-add-role.js @@ -0,0 +1,44 @@ +/** + * Add new role Modal JS + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + // add role form validation + FormValidation.formValidation(document.getElementById('addRoleForm'), { + fields: { + modalRoleName: { + validators: { + notEmpty: { + message: 'Please enter role name' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + + // Select All checkbox click + const selectAll = document.querySelector('#selectAll'), + checkboxList = document.querySelectorAll('[type="checkbox"]'); + selectAll.addEventListener('change', t => { + checkboxList.forEach(e => { + e.checked = t.target.checked; + }); + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-edit-cc.js b/src/modules/Resources/js/auth/modal-edit-cc.js new file mode 100644 index 0000000..5b5c254 --- /dev/null +++ b/src/modules/Resources/js/auth/modal-edit-cc.js @@ -0,0 +1,79 @@ +/** + * Edit credit card + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + const editCreditCardMaskEdit = document.querySelector('.credit-card-mask-edit'), + editExpiryDateMaskEdit = document.querySelector('.expiry-date-mask-edit'), + editCVVMaskEdit = document.querySelector('.cvv-code-mask-edit'); + + // Credit Card + if (editCreditCardMaskEdit) { + new Cleave(editCreditCardMaskEdit, { + creditCard: true, + onCreditCardTypeChanged: function (type) { + if (type != '' && type != 'unknown') { + document.querySelector('.card-type-edit').innerHTML = + ''; + } else { + document.querySelector('.card-type-edit').innerHTML = ''; + } + } + }); + } + + // Expiry Date MaskEdit + if (editExpiryDateMaskEdit) { + new Cleave(editExpiryDateMaskEdit, { + date: true, + delimiter: '/', + datePattern: ['m', 'y'] + }); + } + + // CVV MaskEdit + if (editCVVMaskEdit) { + new Cleave(editCVVMaskEdit, { + numeral: true, + numeralPositiveOnly: true + }); + } + + // Credit card form validation + FormValidation.formValidation(document.getElementById('editCCForm'), { + fields: { + modalEditCard: { + validators: { + notEmpty: { + message: 'Please enter your credit card number' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + //* Move the error message out of the `input-group` element + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-edit-permission.js b/src/modules/Resources/js/auth/modal-edit-permission.js new file mode 100644 index 0000000..ee06c49 --- /dev/null +++ b/src/modules/Resources/js/auth/modal-edit-permission.js @@ -0,0 +1,35 @@ +/** + * Edit Permission Modal JS + */ + +'use strict'; + +// Edit permission form validation +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + FormValidation.formValidation(document.getElementById('editPermissionForm'), { + fields: { + editPermissionName: { + validators: { + notEmpty: { + message: 'Please enter permission name' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-sm-9' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-edit-user.js b/src/modules/Resources/js/auth/modal-edit-user.js new file mode 100644 index 0000000..1edcb67 --- /dev/null +++ b/src/modules/Resources/js/auth/modal-edit-user.js @@ -0,0 +1,103 @@ +/** + * Edit User + */ + +'use strict'; + +// Select2 (jquery) +$(function () { + const select2 = $('.select2'); + + // Select2 Country + if (select2.length) { + select2.each(function () { + var $this = $(this); + $this.wrap('
').select2({ + placeholder: 'Select value', + dropdownParent: $this.parent() + }); + }); + } +}); + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + // variables + const modalEditUserTaxID = document.querySelector('.modal-edit-tax-id'); + const modalEditUserPhone = document.querySelector('.phone-number-mask'); + + // Prefix + if (modalEditUserTaxID) { + new Cleave(modalEditUserTaxID, { + prefix: 'TIN', + blocks: [3, 3, 3, 4], + uppercase: true + }); + } + + // Phone Number Input Mask + if (modalEditUserPhone) { + new Cleave(modalEditUserPhone, { + phone: true, + phoneRegionCode: 'US' + }); + } + + // Edit user form validation + FormValidation.formValidation(document.getElementById('editUserForm'), { + fields: { + modalEditUserFirstName: { + validators: { + notEmpty: { + message: 'Please enter your first name' + }, + regexp: { + regexp: /^[a-zA-Zs]+$/, + message: 'The first name can only consist of alphabetical' + } + } + }, + modalEditUserLastName: { + validators: { + notEmpty: { + message: 'Please enter your last name' + }, + regexp: { + regexp: /^[a-zA-Zs]+$/, + message: 'The last name can only consist of alphabetical' + } + } + }, + modalEditUserName: { + validators: { + notEmpty: { + message: 'Please enter your username' + }, + stringLength: { + min: 6, + max: 30, + message: 'The name must be more than 6 and less than 30 characters long' + }, + regexp: { + regexp: /^[a-zA-Z0-9 ]+$/, + message: 'The name can only consist of alphabetical, number and space' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/modal-enable-otp.js b/src/modules/Resources/js/auth/modal-enable-otp.js new file mode 100644 index 0000000..767edf2 --- /dev/null +++ b/src/modules/Resources/js/auth/modal-enable-otp.js @@ -0,0 +1,53 @@ +/** + * Enable OTP + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + const phoneMask = document.querySelector('.phone-number-otp-mask'); + + // Phone Number Input Mask + if (phoneMask) { + new Cleave(phoneMask, { + phone: true, + phoneRegionCode: 'US' + }); + } + + // Enable OTP form validation + FormValidation.formValidation(document.getElementById('enableOTPForm'), { + fields: { + modalEnableOTPPhone: { + validators: { + notEmpty: { + message: 'Please enter your mobile number' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-12' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + //* Move the error message out of the `input-group` element + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + })(); +}); diff --git a/src/modules/Resources/js/auth/pages-account-settings-account.js b/src/modules/Resources/js/auth/pages-account-settings-account.js new file mode 100644 index 0000000..1a2b0c7 --- /dev/null +++ b/src/modules/Resources/js/auth/pages-account-settings-account.js @@ -0,0 +1,189 @@ +/** + * Account Settings - Account + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + const formAccSettings = document.querySelector('#formAccountSettings'), + deactivateAcc = document.querySelector('#formAccountDeactivation'), + deactivateButton = deactivateAcc.querySelector('.deactivate-account'); + + // Form validation for Add new record + if (formAccSettings) { + const fv = FormValidation.formValidation(formAccSettings, { + fields: { + firstName: { + validators: { + notEmpty: { + message: 'Please enter first name' + } + } + }, + lastName: { + validators: { + notEmpty: { + message: 'Please enter last name' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.col-md-6' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } + + if (deactivateAcc) { + const fv = FormValidation.formValidation(deactivateAcc, { + fields: { + accountActivation: { + validators: { + notEmpty: { + message: 'Please confirm you want to delete account' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + fieldStatus: new FormValidation.plugins.FieldStatus({ + onStatusChanged: function (areFieldsValid) { + areFieldsValid + ? // Enable the submit button + // so user has a chance to submit the form again + deactivateButton.removeAttribute('disabled') + : // Disable the submit button + deactivateButton.setAttribute('disabled', 'disabled'); + } + }), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } + + // Deactivate account alert + const accountActivation = document.querySelector('#accountActivation'); + + // Alert With Functional Confirm Button + if (deactivateButton) { + deactivateButton.onclick = function () { + if (accountActivation.checked == true) { + Swal.fire({ + text: 'Are you sure you would like to deactivate your account?', + icon: 'warning', + showCancelButton: true, + confirmButtonText: 'Yes', + customClass: { + confirmButton: 'btn btn-primary me-2 waves-effect waves-light', + cancelButton: 'btn btn-label-secondary waves-effect waves-light' + }, + buttonsStyling: false + }).then(function (result) { + if (result.value) { + Swal.fire({ + icon: 'success', + title: 'Deleted!', + text: 'Your file has been deleted.', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } else if (result.dismiss === Swal.DismissReason.cancel) { + Swal.fire({ + title: 'Cancelled', + text: 'Deactivation Cancelled!!', + icon: 'error', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } + }); + } + }; + } + + // CleaveJS validation + + const phoneNumber = document.querySelector('#phoneNumber'), + zipCode = document.querySelector('#zipCode'); + // Phone Mask + if (phoneNumber) { + new Cleave(phoneNumber, { + phone: true, + phoneRegionCode: 'US' + }); + } + + // Pincode + if (zipCode) { + new Cleave(zipCode, { + delimiter: '', + numeral: true + }); + } + + // Update/reset user image of account page + let accountUserImage = document.getElementById('uploadedAvatar'); + const fileInput = document.querySelector('.account-file-input'), + resetFileInput = document.querySelector('.account-image-reset'); + + if (accountUserImage) { + const resetImage = accountUserImage.src; + fileInput.onchange = () => { + if (fileInput.files[0]) { + accountUserImage.src = window.URL.createObjectURL(fileInput.files[0]); + } + }; + resetFileInput.onclick = () => { + fileInput.value = ''; + accountUserImage.src = resetImage; + }; + } + })(); +}); + +// Select2 (jquery) +$(function () { + var select2 = $('.select2'); + // For all Select2 + if (select2.length) { + select2.each(function () { + var $this = $(this); + $this.wrap('
'); + $this.select2({ + dropdownParent: $this.parent() + }); + }); + } +}); diff --git a/src/modules/Resources/js/auth/pages-account-settings-billing.js b/src/modules/Resources/js/auth/pages-account-settings-billing.js new file mode 100644 index 0000000..317f502 --- /dev/null +++ b/src/modules/Resources/js/auth/pages-account-settings-billing.js @@ -0,0 +1,194 @@ +/** + * Account Settings - Billing & Plans + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + const creditCardMask = document.querySelector('.credit-card-mask'), + expiryDateMask = document.querySelector('.expiry-date-mask'), + CVVMask = document.querySelector('.cvv-code-mask'); + + // Credit Card + if (creditCardMask) { + new Cleave(creditCardMask, { + creditCard: true, + onCreditCardTypeChanged: function (type) { + if (type != '' && type != 'unknown') { + document.querySelector('.card-type').innerHTML = + ''; + } else { + document.querySelector('.card-type').innerHTML = ''; + } + } + }); + } + + // Expiry Date Mask + if (expiryDateMask) { + new Cleave(expiryDateMask, { + date: true, + delimiter: '/', + datePattern: ['m', 'y'] + }); + } + + // CVV Mask + if (CVVMask) { + new Cleave(CVVMask, { + numeral: true, + numeralPositiveOnly: true + }); + } + + const formAccSettings = document.getElementById('formAccountSettings'), + mobileNumber = document.querySelector('.mobile-number'), + zipCode = document.querySelector('.zip-code'), + creditCardForm = document.getElementById('creditCardForm'); + + // Form validation + if (formAccSettings) { + const fv = FormValidation.formValidation(formAccSettings, { + fields: { + companyName: { + validators: { + notEmpty: { + message: 'Please enter company name' + } + } + }, + billingEmail: { + validators: { + notEmpty: { + message: 'Please enter billing email' + }, + emailAddress: { + message: 'Please enter valid email address' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.col-sm-6' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + } + + // Credit card form validation + if (creditCardForm) { + FormValidation.formValidation(creditCardForm, { + fields: { + paymentCard: { + validators: { + notEmpty: { + message: 'Please enter your credit card number' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + //* Move the error message out of the `input-group` element + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } + + // Cancel Subscription alert + const cancelSubscription = document.querySelector('.cancel-subscription'); + + // Alert With Functional Confirm Button + if (cancelSubscription) { + cancelSubscription.onclick = function () { + Swal.fire({ + text: 'Are you sure you would like to cancel your subscription?', + icon: 'warning', + showCancelButton: true, + confirmButtonText: 'Yes', + customClass: { + confirmButton: 'btn btn-primary me-2 waves-effect waves-light', + cancelButton: 'btn btn-label-secondary waves-effect waves-light' + }, + buttonsStyling: false + }).then(function (result) { + if (result.value) { + Swal.fire({ + icon: 'success', + title: 'Unsubscribed!', + text: 'Your subscription cancelled successfully.', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } else if (result.dismiss === Swal.DismissReason.cancel) { + Swal.fire({ + title: 'Cancelled', + text: 'Unsubscription Cancelled!!', + icon: 'error', + customClass: { + confirmButton: 'btn btn-success waves-effect waves-light' + } + }); + } + }); + }; + } + // CleaveJS validation + + // Phone Mask + if (mobileNumber) { + new Cleave(mobileNumber, { + phone: true, + phoneRegionCode: 'US' + }); + } + + // Pincode + if (zipCode) { + new Cleave(zipCode, { + delimiter: '', + numeral: true + }); + } + })(); +}); + +// Select2 (jquery) +$(function () { + var select2 = $('.select2'); + + // Select2 + if (select2.length) { + select2.each(function () { + var $this = $(this); + $this.wrap('
'); + $this.select2({ + dropdownParent: $this.parent() + }); + }); + } +}); diff --git a/src/modules/Resources/js/auth/pages-account-settings-security.js b/src/modules/Resources/js/auth/pages-account-settings-security.js new file mode 100644 index 0000000..f7f8a5d --- /dev/null +++ b/src/modules/Resources/js/auth/pages-account-settings-security.js @@ -0,0 +1,125 @@ +/** + * Account Settings - Security + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + const formChangePass = document.querySelector('#formAccountSettings'), + formApiKey = document.querySelector('#formAccountSettingsApiKey'); + + // Form validation for Change password + if (formChangePass) { + const fv = FormValidation.formValidation(formChangePass, { + fields: { + currentPassword: { + validators: { + notEmpty: { + message: 'Please current password' + }, + stringLength: { + min: 8, + message: 'Password must be more than 8 characters' + } + } + }, + newPassword: { + validators: { + notEmpty: { + message: 'Please enter new password' + }, + stringLength: { + min: 8, + message: 'Password must be more than 8 characters' + } + } + }, + confirmPassword: { + validators: { + notEmpty: { + message: 'Please confirm new password' + }, + identical: { + compare: function () { + return formChangePass.querySelector('[name="newPassword"]').value; + }, + message: 'The password and its confirm are not the same' + }, + stringLength: { + min: 8, + message: 'Password must be more than 8 characters' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.col-md-6' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } + + // Form validation for API key + if (formApiKey) { + const fvApi = FormValidation.formValidation(formApiKey, { + fields: { + apiKey: { + validators: { + notEmpty: { + message: 'Please enter API key name' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + // Submit the form when all fields are valid + // defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } + })(); +}); + +// Select2 (jquery) +$(function () { + var select2 = $('.select2'); + + // Select2 API Key + if (select2.length) { + select2.each(function () { + var $this = $(this); + $this.wrap('
'); + $this.select2({ + dropdownParent: $this.parent() + }); + }); + } +}); diff --git a/src/modules/Resources/js/auth/pages-auth-multisteps.js b/src/modules/Resources/js/auth/pages-auth-multisteps.js new file mode 100644 index 0000000..9934fcf --- /dev/null +++ b/src/modules/Resources/js/auth/pages-auth-multisteps.js @@ -0,0 +1,305 @@ +/** + * Page auth register multi-steps + */ + +'use strict'; + +// Select2 (jquery) +$(function () { + var select2 = $('.select2'); + + // select2 + if (select2.length) { + select2.each(function () { + var $this = $(this); + $this.wrap('
'); + $this.select2({ + placeholder: 'Select an country', + dropdownParent: $this.parent() + }); + }); + } +}); + +// Multi Steps Validation +// -------------------------------------------------------------------- +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + const stepsValidation = document.querySelector('#multiStepsValidation'); + if (typeof stepsValidation !== undefined && stepsValidation !== null) { + // Multi Steps form + const stepsValidationForm = stepsValidation.querySelector('#multiStepsForm'); + // Form steps + const stepsValidationFormStep1 = stepsValidationForm.querySelector('#accountDetailsValidation'); + const stepsValidationFormStep2 = stepsValidationForm.querySelector('#personalInfoValidation'); + const stepsValidationFormStep3 = stepsValidationForm.querySelector('#billingLinksValidation'); + // Multi steps next prev button + const stepsValidationNext = [].slice.call(stepsValidationForm.querySelectorAll('.btn-next')); + const stepsValidationPrev = [].slice.call(stepsValidationForm.querySelectorAll('.btn-prev')); + + const multiStepsExDate = document.querySelector('.multi-steps-exp-date'), + multiStepsCvv = document.querySelector('.multi-steps-cvv'), + multiStepsMobile = document.querySelector('.multi-steps-mobile'), + multiStepsPincode = document.querySelector('.multi-steps-pincode'), + multiStepsCard = document.querySelector('.multi-steps-card'); + + // Expiry Date Mask + if (multiStepsExDate) { + new Cleave(multiStepsExDate, { + date: true, + delimiter: '/', + datePattern: ['m', 'y'] + }); + } + + // CVV + if (multiStepsCvv) { + new Cleave(multiStepsCvv, { + numeral: true, + numeralPositiveOnly: true + }); + } + + // Mobile + if (multiStepsMobile) { + new Cleave(multiStepsMobile, { + phone: true, + phoneRegionCode: 'US' + }); + } + + // Pincode + if (multiStepsPincode) { + new Cleave(multiStepsPincode, { + delimiter: '', + numeral: true + }); + } + + // Credit Card + if (multiStepsCard) { + new Cleave(multiStepsCard, { + creditCard: true, + onCreditCardTypeChanged: function (type) { + if (type != '' && type != 'unknown') { + document.querySelector('.card-type').innerHTML = + ''; + } else { + document.querySelector('.card-type').innerHTML = ''; + } + } + }); + } + + let validationStepper = new Stepper(stepsValidation, { + linear: true + }); + + // Account details + const multiSteps1 = FormValidation.formValidation(stepsValidationFormStep1, { + fields: { + multiStepsUsername: { + validators: { + notEmpty: { + message: 'Please enter username' + }, + stringLength: { + min: 6, + max: 30, + message: 'The name must be more than 6 and less than 30 characters long' + }, + regexp: { + regexp: /^[a-zA-Z0-9 ]+$/, + message: 'The name can only consist of alphabetical, number and space' + } + } + }, + multiStepsEmail: { + validators: { + notEmpty: { + message: 'Please enter email address' + }, + emailAddress: { + message: 'The value is not a valid email address' + } + } + }, + multiStepsPass: { + validators: { + notEmpty: { + message: 'Please enter password' + } + } + }, + multiStepsConfirmPass: { + validators: { + notEmpty: { + message: 'Confirm Password is required' + }, + identical: { + compare: function () { + return stepsValidationFormStep1.querySelector('[name="multiStepsPass"]').value; + }, + message: 'The password and its confirm are not the same' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: '.col-sm-6' + }), + autoFocus: new FormValidation.plugins.AutoFocus(), + submitButton: new FormValidation.plugins.SubmitButton() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }).on('core.form.valid', function () { + // Jump to the next step when all fields in the current step are valid + validationStepper.next(); + }); + + // Personal info + const multiSteps2 = FormValidation.formValidation(stepsValidationFormStep2, { + fields: { + multiStepsFirstName: { + validators: { + notEmpty: { + message: 'Please enter first name' + } + } + }, + multiStepsAddress: { + validators: { + notEmpty: { + message: 'Please enter your address' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: function (field, ele) { + // field is the field name + // ele is the field element + switch (field) { + case 'multiStepsFirstName': + return '.col-sm-6'; + case 'multiStepsAddress': + return '.col-md-12'; + default: + return '.row'; + } + } + }), + autoFocus: new FormValidation.plugins.AutoFocus(), + submitButton: new FormValidation.plugins.SubmitButton() + } + }).on('core.form.valid', function () { + // Jump to the next step when all fields in the current step are valid + validationStepper.next(); + }); + + // Social links + const multiSteps3 = FormValidation.formValidation(stepsValidationFormStep3, { + fields: { + multiStepsCard: { + validators: { + notEmpty: { + message: 'Please enter card number' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + // Use this for enabling/changing valid/invalid class + // eleInvalidClass: '', + eleValidClass: '', + rowSelector: function (field, ele) { + // field is the field name + // ele is the field element + switch (field) { + case 'multiStepsCard': + return '.col-md-12'; + + default: + return '.col-dm-6'; + } + } + }), + autoFocus: new FormValidation.plugins.AutoFocus(), + submitButton: new FormValidation.plugins.SubmitButton() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }).on('core.form.valid', function () { + // You can submit the form + // stepsValidationForm.submit() + // or send the form data to server via an Ajax request + // To make the demo simple, I just placed an alert + alert('Submitted..!!'); + }); + + stepsValidationNext.forEach(item => { + item.addEventListener('click', event => { + // When click the Next button, we will validate the current step + switch (validationStepper._currentIndex) { + case 0: + multiSteps1.validate(); + break; + + case 1: + multiSteps2.validate(); + break; + + case 2: + multiSteps3.validate(); + break; + + default: + break; + } + }); + }); + + stepsValidationPrev.forEach(item => { + item.addEventListener('click', event => { + switch (validationStepper._currentIndex) { + case 2: + validationStepper.previous(); + break; + + case 1: + validationStepper.previous(); + break; + + case 0: + + default: + break; + } + }); + }); + } + })(); +}); diff --git a/src/modules/Resources/js/auth/pages-auth-two-steps.js b/src/modules/Resources/js/auth/pages-auth-two-steps.js new file mode 100644 index 0000000..0939acb --- /dev/null +++ b/src/modules/Resources/js/auth/pages-auth-two-steps.js @@ -0,0 +1,83 @@ +/** + * Page auth two steps + */ + +'use strict'; + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + let maskWrapper = document.querySelector('.numeral-mask-wrapper'); + + for (let pin of maskWrapper.children) { + pin.onkeyup = function (e) { + // Check if the key pressed is a number (0-9) + if (/^\d$/.test(e.key)) { + // While entering value, go to next + if (pin.nextElementSibling) { + if (this.value.length === parseInt(this.attributes['maxlength'].value)) { + pin.nextElementSibling.focus(); + } + } + } else if (e.key === 'Backspace') { + // While deleting entered value, go to previous + if (pin.previousElementSibling) { + pin.previousElementSibling.focus(); + } + } + }; + // Prevent the default behavior for the minus key + pin.onkeypress = function (e) { + if (e.key === '-') { + e.preventDefault(); + } + }; + } + + const twoStepsForm = document.querySelector('#twoStepsForm'); + + // Form validation for Add new record + if (twoStepsForm) { + const fv = FormValidation.formValidation(twoStepsForm, { + fields: { + otp: { + validators: { + notEmpty: { + message: 'Please enter otp' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.mb-6' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + + defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + }); + + const numeralMaskList = twoStepsForm.querySelectorAll('.numeral-mask'); + const keyupHandler = function () { + let otpFlag = true, + otpVal = ''; + numeralMaskList.forEach(numeralMaskEl => { + if (numeralMaskEl.value === '') { + otpFlag = false; + twoStepsForm.querySelector('[name="otp"]').value = ''; + } + otpVal = otpVal + numeralMaskEl.value; + }); + if (otpFlag) { + twoStepsForm.querySelector('[name="otp"]').value = otpVal; + } + }; + numeralMaskList.forEach(numeralMaskEle => { + numeralMaskEle.addEventListener('keyup', keyupHandler); + }); + } + })(); +}); diff --git a/src/modules/Resources/js/auth/pages-auth.js b/src/modules/Resources/js/auth/pages-auth.js new file mode 100644 index 0000000..9627b75 --- /dev/null +++ b/src/modules/Resources/js/auth/pages-auth.js @@ -0,0 +1,112 @@ +('use strict'); + +const formAuthentication = document.querySelector('#formAuthentication'); + +document.addEventListener('DOMContentLoaded', function (e) { + (function () { + // Form validation for Add new record + if (formAuthentication) { + const fv = FormValidation.formValidation(formAuthentication, { + fields: { + username: { + validators: { + notEmpty: { + message: 'Por favor, introduzca su nombre de usuario' + }, + stringLength: { + min: 6, + message: 'El nombre de usuario debe tener más de 6 caracteres' + } + } + }, + email: { + validators: { + notEmpty: { + message: 'Por favor, introduzca su correo electrónico' + }, + emailAddress: { + message: 'Por favor, introduzca una dirección de correo electrónico válida' + } + } + }, + 'email-username': { + validators: { + notEmpty: { + message: 'Por favor, introduzca su correo electrónico / nombre de usuario' + }, + stringLength: { + min: 6, + message: 'El nombre de usuario debe tener más de 6 caracteres' + } + } + }, + password: { + validators: { + notEmpty: { + message: 'Por favor, introduzca su contraseña' + }, + stringLength: { + min: 6, + message: 'La contraseña debe tener más de 6 caracteres' + } + } + }, + 'confirm-password': { + validators: { + notEmpty: { + message: 'Confirme la contraseña' + }, + identical: { + compare: function () { + return formAuthentication.querySelector('[name="password"]').value; + }, + message: 'La contraseña y su confirmación no son iguales' + }, + stringLength: { + min: 6, + message: 'La contraseña debe tener más de 6 caracteres' + } + } + }, + terms: { + validators: { + notEmpty: { + message: 'Acepte los términos y condiciones' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + + defaultSubmit: new FormValidation.plugins.DefaultSubmit(), + autoFocus: new FormValidation.plugins.AutoFocus() + }, + init: instance => { + instance.on('plugins.message.placed', function (e) { + if (e.element.parentElement.classList.contains('input-group')) { + e.element.parentElement.insertAdjacentElement('afterend', e.messageElement); + } + }); + } + }); + } + + // Two Steps Verification + const numeralMask = document.querySelectorAll('.numeral-mask'); + + // Verification masking + if (numeralMask.length) { + numeralMask.forEach(e => { + new Cleave(e, { + numeral: true + }); + }); + } + })(); +}); diff --git a/src/modules/Resources/js/bootstrap.js b/src/modules/Resources/js/bootstrap.js new file mode 100644 index 0000000..5f1390b --- /dev/null +++ b/src/modules/Resources/js/bootstrap.js @@ -0,0 +1,4 @@ +import axios from 'axios'; +window.axios = axios; + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; diff --git a/src/modules/Resources/js/cache-manager/cache-scripts.js b/src/modules/Resources/js/cache-manager/cache-scripts.js new file mode 100644 index 0000000..1521436 --- /dev/null +++ b/src/modules/Resources/js/cache-manager/cache-scripts.js @@ -0,0 +1,102 @@ +import LivewireNotification from '../_class/LivewireNotification'; +import FormCustomListener from '../_class/FormCustomListener'; + +// Inicializar notificaciones globales +const notification = new LivewireNotification(); + +// Inicializar listener para estadísticas de cache +new FormCustomListener({ + buttonSelectors: ['.btn-clear-cache', '.btn-reload-cache-stats'] +}); + +// Inicializar listener para funciones de cache +new FormCustomListener({ + formSelector: '#cache-functions-card', + buttonSelectors: ['.btn', '.btn-config-cache', '.btn-cache-routes'], + callbacks: [ + null, // Callback por defecto para .btn + (form, button) => { + // Emitir notificación de carga + notification.emitNotification({ + target: '#cache-functions-card .notification-container', + message: 'Generando cache de configuraciones de Laravel...', + type: 'warning' + }); + + // Generar cache de configuraciones mediante una petición AJAX + fetch('/admin/cache/config/cache', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content') + }, + body: JSON.stringify({}) + }) + .then(response => { + if (!response.ok) { + throw new Error('Error al generar el cache de configuraciones'); + } + return response.json(); + }) + .then(() => { + // Emitir notificación de éxito con recarga diferida + notification.emitNotification({ + target: '#cache-functions-card .notification-container', + message: 'Se ha cacheado la configuración de Laravel...', + type: 'success', + deferReload: true + }); + }) + .catch(error => { + // Emitir notificación de error + notification.emitNotification({ + target: '#cache-functions-card .notification-container', + message: `Error: ${error.message}`, + type: 'danger' + }); + console.error('Error al generar el cache:', error); + }); + }, + (form, button) => { + // Emitir notificación de carga + notification.emitNotification({ + target: '#cache-functions-card .notification-container', + message: 'Generando cache de rutas de Laravel...', + type: 'warning' + }); + + // Recargar estadísticas de cache mediante una petición AJAX + fetch('/admin/cache/route/cache', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content') + } + }) + .then(response => { + if (!response.ok) { + throw new Error('Error al recargar las estadísticas de cache'); + } + return response.json(); + }) + .then(() => { + // Emitir notificación de éxito con recarga diferida + notification.emitNotification({ + target: '#cache-functions-card .notification-container', + message: 'Se han cacheado las rutas de Laravel...', + type: 'success', + deferReload: true + }); + }) + .catch(error => { + // Emitir notificación de error + notification.emitNotification({ + target: '#cache-functions-card .notification-container', + message: `Error: ${error.message}`, + type: 'danger' + }); + console.error('Error al recargar las estadísticas:', error); + }); + } + ] +}); diff --git a/src/modules/Resources/js/rbac/permissions-scripts.js b/src/modules/Resources/js/rbac/permissions-scripts.js new file mode 100644 index 0000000..cff3fe1 --- /dev/null +++ b/src/modules/Resources/js/rbac/permissions-scripts.js @@ -0,0 +1,197 @@ +/** + * App user list (jquery) + */ + +'use strict'; + +$(function () { + var dataTablePermissions = $('.datatables-permissions'), + dt_permission, + userList = baseUrl + 'app/user/list'; + + // Users List datatable + if (dataTablePermissions.length) { + dt_permission = dataTablePermissions.DataTable({ + ajax: window.location.href, + columns: [ + // columns according to JSON + { data: '' }, + { data: 'id' }, + { data: 'name' }, + { data: 'assigned_to' }, + { data: 'created_date' }, + { data: '' } + ], + columnDefs: [ + { + // For Responsive + className: 'control', + orderable: false, + searchable: false, + responsivePriority: 2, + targets: 0, + render: function (data, type, full, meta) { + return ''; + } + }, + { + targets: 1, + searchable: false, + visible: false + }, + { + // Name + targets: 2, + render: function (data, type, full, meta) { + var $name = full['name']; + return '' + $name + ''; + } + }, + { + // User Role + targets: 3, + orderable: false, + render: function (data, type, full, meta) { + var $assignedTo = full['assigned_to'], + $output = ''; + var roleBadgeObj = { + Admin: + 'Administrator', + Manager: + 'Manager', + Users: + 'Users', + Support: + 'Support', + Restricted: + 'Restricted User' + }; + for (var i = 0; i < $assignedTo.length; i++) { + var val = $assignedTo[i]; + $output += roleBadgeObj[val]; + } + return '' + $output + ''; + } + }, + { + // remove ordering from Name + targets: 4, + orderable: false, + render: function (data, type, full, meta) { + var $date = full['created_date']; + return '' + $date + ''; + } + }, + { + // Actions + targets: -1, + searchable: false, + title: 'Actions', + orderable: false, + render: function (data, type, full, meta) { + return ( + '
' + + '' + + '' + + '' + + '
' + ); + } + } + ], + order: [[1, 'asc']], + dom: + '<"row mx-1"' + + '<"col-sm-12 col-md-3" l>' + + '<"col-sm-12 col-md-9"<"dt-action-buttons text-xl-end text-lg-start text-md-end text-start d-flex align-items-center justify-content-md-end justify-content-center flex-wrap"<"me-4 mt-n6 mt-md-0"f>B>>' + + '>t' + + '<"row"' + + '<"col-sm-12 col-md-6"i>' + + '<"col-sm-12 col-md-6"p>' + + '>', + language: $.fn.dataTable.ext.datatable_spanish_default, + // Buttons with Dropdown + buttons: [], + // For responsive popup + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.modal({ + header: function (row) { + var data = row.data(); + return 'Details of ' + data['name']; + } + }), + type: 'column', + renderer: function (api, rowIdx, columns) { + var data = $.map(columns, function (col, i) { + return col.title !== '' // ? Do not show row in modal popup if title is blank (for check box) + ? '' + + ' ' + + '' + + '' + : ''; + }).join(''); + + return data ? $('
' + + col.title + + ':' + + '' + + col.data + + '
').append(data) : false; + } + } + }, + initComplete: function () { + // Adding role filter once table initialized + this.api() + .columns(3) + .every(function () { + var column = this; + var select = $( + '' + ) + .appendTo('.user_role') + .on('change', function () { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + column.search(val ? '^' + val + '$' : '', true, false).draw(); + }); + + column + .data() + .unique() + .sort() + .each(function (d, j) { + select.append(''); + }); + }); + } + }); + } + + // Delete Record + $('.datatables-permissions tbody').on('click', '.delete-record', function () { + dt_permission.row($(this).parents('tr')).remove().draw(); + }); + + // Filter form control to default size + // ? setTimeout used for multilingual table initialization + setTimeout(() => { + $('.dataTables_filter .form-control').removeClass('form-control-sm'); + $('.dataTables_length .form-select').removeClass('form-select-sm'); + $('.dataTables_info').addClass('ms-n1'); + $('.dataTables_paginate').addClass('me-n1'); + }, 300); +}); diff --git a/src/modules/Resources/js/rbac/roles-scripts.js b/src/modules/Resources/js/rbac/roles-scripts.js new file mode 100644 index 0000000..e09f31e --- /dev/null +++ b/src/modules/Resources/js/rbac/roles-scripts.js @@ -0,0 +1,10 @@ +import LivewireNotification from '../_class/LivewireNotification'; +import WebsiteLegalSettingsForm from '../_class/WebsiteLegalSettingsForm'; + +new LivewireNotification(); + +window.WebsiteLegalSettingsForm = new WebsiteLegalSettingsForm(); + +Livewire.hook('morphed', () => { + window.WebsiteLegalSettingsForm.reload(); +}); diff --git a/src/modules/Resources/js/website-settings/legal-settings-scripts.js b/src/modules/Resources/js/website-settings/legal-settings-scripts.js new file mode 100644 index 0000000..e09f31e --- /dev/null +++ b/src/modules/Resources/js/website-settings/legal-settings-scripts.js @@ -0,0 +1,10 @@ +import LivewireNotification from '../_class/LivewireNotification'; +import WebsiteLegalSettingsForm from '../_class/WebsiteLegalSettingsForm'; + +new LivewireNotification(); + +window.WebsiteLegalSettingsForm = new WebsiteLegalSettingsForm(); + +Livewire.hook('morphed', () => { + window.WebsiteLegalSettingsForm.reload(); +}); diff --git a/src/modules/Resources/js/website-settings/website-settings-scripts.js b/src/modules/Resources/js/website-settings/website-settings-scripts.js new file mode 100644 index 0000000..fd34867 --- /dev/null +++ b/src/modules/Resources/js/website-settings/website-settings-scripts.js @@ -0,0 +1,590 @@ +import LivewireNotification from '../_class/LivewireNotification'; +import FormCustomListener from '../_class/FormCustomListener'; + +new LivewireNotification(); + +// Inicializar formularios de ajustes de sitio web +window.WebsiteSettingsForm = new FormCustomListener({ + formSelector: '#website-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [ + () => {} // Deshabilitar callback para #save_website_button + ], + dispatchOnSubmit: 'saveWebsiteSettings', + validationConfig: { + fields: { + website_title: { + validators: { + stringLength: { + min: 2, + max: 50, + message: 'El título debe tener entre 2 y 50 caracteres.' + } + } + }, + website_description: { + validators: { + stringLength: { + max: 160, + message: 'La descripción no puede exceder los 160 caracteres.' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de favicon +new FormCustomListener({ + formSelector: '#website-favicon-settings-card', + buttonSelectors: ['.btn'] +}); + +// Inicializar formularios de ajustes de logo de imagen +new FormCustomListener({ + formSelector: '#website-image-logo-settings-card', + buttonSelectors: ['.btn'] +}); + +// Inicializar formularios de ajustes de social media +window.SocialSettingsForm = new FormCustomListener({ + formSelector: '#website-social-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveSocialSettings', + validationConfig: { + fields: { + social_whatsapp: { + validators: { + callback: { + message: 'Por favor, introduce un número de teléfono válido para México.', + callback: function (input) { + // Si el campo está vacío, no hacemos validación + if (input.value.trim() === '') { + return true; // Permitir vacío + } + + // Si no está vacío, validamos el formato del número + const cleanValue = input.value.replace(/\D/g, ''); + const regex = /^[1-9]\d{9}$/; // Exactamente 10 dígitos + + return regex.test(cleanValue); // Valida solo si hay un número + } + } + } + }, + social_whatsapp_message: { + validators: { + stringLength: { + max: 500, + message: 'El mensaje no puede exceder los 500 caracteres.' + }, + callback: { + message: 'El mensaje es obligatorio.', + callback: function (input) { + // Obtener el valor de 'social_whatsapp' + const whatsappNumber = document.querySelector('#social_whatsapp').value.trim(); + + // Si 'social_whatsapp' tiene un valor, entonces el mensaje es obligatorio + if (whatsappNumber !== '') { + return input.value.trim() !== ''; // El mensaje no puede estar vacío + } + + return true; // Si 'social_whatsapp' está vacío, no validamos 'social_whatsapp_message' + } + } + } + }, + social_facebook: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_instagram: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_linkedin: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_tiktok: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_x_twitter: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_google: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_pinterest: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_youtube: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + }, + social_vimeo: { + validators: { + uri: { + message: 'Por favor, introduce una URL válida.' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de Formularios de contacto +window.ContactFormSettingsForm = new FormCustomListener({ + formSelector: '#website-contact-form-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveContactFormSettings', + validationConfig: { + fields: { + // Validación para correo electrónico de recepción + contact_form_email: { + validators: { + emailAddress: { + message: 'Por favor, introduce un correo electrónico válido.' + }, + notEmpty: { + message: 'El correo electrónico es obligatorio.' + } + } + }, + // Validación para correo electrónico con copia + contact_form_email_cc: { + validators: { + emailAddress: { + message: 'Por favor, introduce un correo electrónico válido.' + }, + // Validación personalizada para comparar ambos correos electrónicos + callback: { + message: 'Los correos electrónicos deben ser diferentes.', + callback: function (input) { + const email = document.querySelector('#contact_form_email').value.trim(); + const emailCC = input.value.trim(); + + // Si ambos correos son iguales, la validación falla + if (email === emailCC) { + return false; // Los correos son iguales, por lo que la validación falla + } + + return true; // Si son diferentes, la validación pasa + } + } + } + }, + // Validación para el asunto del formulario de contacto + contact_form_subject: { + validators: { + stringLength: { + max: 60, + message: 'El título del correo no puede exceder los 60 caracteres.' + }, + notEmpty: { + message: 'El título del correo es obligatorio.' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de información de contacto +window.ContactInfoSettingsForm = new FormCustomListener({ + formSelector: '#website-contact-info-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveContactInfoSettings', + validationConfig: { + fields: { + // Validación para número telefónico + contact_phone_number: { + validators: { + callback: { + message: 'Por favor, introduce un número de teléfono válido para México.', + callback: function (input) { + // Si el campo está vacío, no hacemos validación + if (input.value.trim() === '') { + return true; // Permitir vacío + } + + // Si no está vacío, validamos el formato del número + const cleanValue = input.value.replace(/\D/g, ''); + const regex = /^[1-9]\d{9}$/; // Exactamente 10 dígitos + + return regex.test(cleanValue); // Valida solo si hay un número + } + } + } + }, + // Validación para extensión telefónica (opcional, pero solo si contact_phone_number tiene valor) + contact_phone_number_ext: { + validators: { + stringLength: { + max: 10, + message: 'La extensión no debe exceder los 10 caracteres.' + }, + callback: { + message: 'La extensión requiere de ingresar un número telefónico.', + callback: function (input) { + // Obtener el valor de 'contact_phone_number' + const phoneNumber = document.querySelector('#contact_phone_number')?.value.trim(); + + // Si el número telefónico tiene valor, entonces la extensión es obligatoria + if (phoneNumber !== '') { + // Si la extensión está vacía, la validación falla + return true; // Permitir vacío + } + + // Si no se ha ingresado un número telefónico, la extensión no debe tener valor + return input.value.trim() === ''; + } + } + } + }, + // Validación para correo electrónico de contacto (opcional) + contact_email: { + validators: { + emailAddress: { + message: 'Por favor, introduce un correo electrónico válido.' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de ubicación +window.LocationSettingsForm = new FormCustomListener({ + formSelector: '#website-location-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveLocationSettings', + validationConfig: { + fields: { + // Validación para dirección (No obligatorio, máximo 160 caracteres) + contact_direccion: { + validators: { + stringLength: { + max: 160, + message: 'La dirección no puede exceder los 160 caracteres.' + } + } + }, + // Validación para horario (No obligatorio, máximo 160 caracteres) + contact_horario: { + validators: { + stringLength: { + max: 160, + message: 'El horario no puede exceder los 160 caracteres.' + } + } + }, + // Validación para latitud (No obligatorio, pero debe ser un número si se ingresa) + contact_location_lat: { + validators: { + numeric: { + message: 'La latitud debe ser un número.' + }, + callback: { + message: 'La latitud es obligatoria si se ingresa longitud.', + callback: function (input) { + // Obtener el valor de longitud + const longitude = document.querySelector('#contact_location_lng')?.value.trim(); + + // Si longitud tiene un valor, entonces latitud es obligatorio + if (longitude !== '') { + return input.value.trim() !== ''; // La latitud no puede estar vacía + } + + return true; // Si longitud está vacío, no se valida latitud + } + } + } + }, + // Validación para longitud (No obligatorio, pero debe ser un número si se ingresa) + contact_location_lng: { + validators: { + numeric: { + message: 'La longitud debe ser un número.' + }, + callback: { + message: 'La longitud es obligatoria si se ingresa latitud.', + callback: function (input) { + // Obtener el valor de latitud + const latitude = document.querySelector('#contact_location_lat')?.value.trim(); + + // Si latitud tiene un valor, entonces longitud es obligatorio + if (latitude !== '') { + return input.value.trim() !== ''; // La longitud no puede estar vacía + } + + return true; // Si latitud está vacío, no se valida longitud + } + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de chat +window.ChatSettingsForm = new FormCustomListener({ + formSelector: '#website-chat-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveChatSettings', + validationConfig: { + fields: { + chat_whatsapp_number: { + validators: { + callback: { + message: 'Por favor, introduce un número de teléfono válido para México.', + callback: function (input) { + // Obtener el proveedor directamente dentro de la validación + const provider = document.querySelector('#chat_provider')?.value; + + // Validar solo si el proveedor es WhatsApp + if (provider !== 'whatsapp') return true; + + const cleanValue = input.value.replace(/\D/g, ''); + const regex = /^[1-9]\d{9}$/; // Exactamente 10 dígitos + + return regex.test(cleanValue); + } + }, + notEmpty: { + message: 'El número de teléfono es obligatorio.', + enabled: () => { + // Obtener el proveedor directamente dentro de la validación + const provider = document.querySelector('#chat_provider')?.value; + + return provider === 'whatsapp'; // Habilita solo si es WhatsApp + } + } + } + }, + chat_whatsapp_message: { + validators: { + stringLength: { + max: 500, + message: 'El mensaje no puede exceder los 500 caracteres.' + }, + notEmpty: { + message: 'El mensaje es obligatorio.', + enabled: () => { + // Obtener el proveedor directamente dentro de la validación + const provider = document.querySelector('#chat_provider')?.value; + + return provider === 'whatsapp'; // Habilita solo si es WhatsApp + } + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de análisis de datos +window.AnalyticsSettingsForm = new FormCustomListener({ + formSelector: '#website-analytics-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveAnalyticsSettings', + validationConfig: { + fields: { + google_analytics_id: { + validators: { + callback: { + message: 'ID de medición de Google Analytics no tienen un formato válido.', + callback: function (input) { + if (document.getElementById('google_analytics_enabled').checked) { + return input.value.trim() !== ''; + } + return true; + } + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Inicializar formularios de ajustes de plantilla de sitio web +window.TemplateSettingsForm = new FormCustomListener({ + formSelector: '#website-template-settings-card', + buttonSelectors: ['.btn-save', '.btn-cancel'], + callbacks: [() => {}], + dispatchOnSubmit: 'saveTemplateSettings', + validationConfig: { + fields: { + website_tpl_footer_text: { + validators: { + stringLength: { + max: 50, + message: 'El mensaje no puede exceder los 50 caracteres.' + } + } + } + }, + plugins: { + trigger: new FormValidation.plugins.Trigger(), + bootstrap5: new FormValidation.plugins.Bootstrap5({ + eleValidClass: '', + rowSelector: '.fv-row' + }), + submitButton: new FormValidation.plugins.SubmitButton(), + autoFocus: new FormValidation.plugins.AutoFocus() + } + } +}); + +// Recargar validación de formularios al morphear componentes +Livewire.hook('morphed', ({ component }) => { + switch (component.name) { + case 'website-settings': + if (window.WebsiteSettingsForm) { + window.WebsiteSettingsForm.reloadValidation(); + } + break; + + case 'website-social-settings': + if (window.SocialSettingsForm) { + window.SocialSettingsForm.reloadValidation(); + } + break; + + case 'website-contact-info-settings': + if (window.ContactInfoSettingsForm) { + window.ContactInfoSettingsForm.reloadValidation(); + } + break; + + case 'website-contact-form-settings': + if (window.ContactFormSettingsForm) { + window.ContactFormSettingsForm.reloadValidation(); + } + break; + + case 'website-location-settings': + if (window.LocationSettingsForm) { + window.LocationSettingsForm.reloadValidation(); + } + break; + + case 'website-chat-settings': + if (window.ChatSettingsForm) { + window.ChatSettingsForm.reloadValidation(); + } + break; + + case 'website-analytics-settings': + if (window.AnalyticsSettingsForm) { + window.AnalyticsSettingsForm.reloadValidation(); + } + break; + + case 'website-template-settings': + if (window.TemplateSettingsForm) { + window.TemplateSettingsForm.reloadValidation(); + } + break; + + default: + break; + } +}); diff --git a/src/modules/Resources/scss/auth/page-auth.scss b/src/modules/Resources/scss/auth/page-auth.scss new file mode 100644 index 0000000..00dc08e --- /dev/null +++ b/src/modules/Resources/scss/auth/page-auth.scss @@ -0,0 +1,169 @@ +// * Authentication +// ******************************************************************************* + +@use '../../assets/vendor/scss/_bootstrap-extended/include' as light; +@use '../../assets/vendor/scss/_bootstrap-extended/include-dark' as dark; +@import '../../assets/vendor/scss/_custom-variables/pages'; + +$authentication-1-inner-max-width: 460px !default; + +.authentication-wrapper { + display: flex; + flex-basis: 100%; + min-height: 100vh; + width: 100%; + + .authentication-inner { + width: 100%; + } + + &.authentication-basic { + align-items: center; + justify-content: center; + .card-body { + padding: 3rem; + @include light.media-breakpoint-down(sm) { + padding: 2rem; + } + } + } + + &.authentication-cover { + align-items: flex-start; + .authentication-inner { + height: 100%; + margin: auto 0; + + @include light.media-breakpoint-down(lg) { + height: 100vh; + } + // authentication cover background styles + .auth-cover-bg { + width: 100%; + height: 100vh; + position: relative; + + // authentication cover illustration height + .auth-illustration { + max-height: 65%; + max-width: 65%; + z-index: 1; + } + } + + // authentication cover platform bg styles + .platform-bg { + position: absolute; + width: 100%; + bottom: 0%; + left: 0%; + height: 35%; + } + + // authentication multisteps styles + .auth-multisteps-bg-height { + height: 100vh; + + // z-index for illustration + & > img:first-child { + z-index: 1; + } + } + } + } + + &.authentication-basic .authentication-inner { + max-width: $authentication-1-inner-max-width; + position: relative; + &:before { + @include light.media-breakpoint-down(sm) { + display: none; + } + width: 238px; + height: 233px; + content: ' '; + position: absolute; + top: -35px; + left: -45px; + background-image: url("data:image/svg+xml,%3Csvg width='239' height='234' viewBox='0 0 239 234' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='88.5605' y='0.700195' width='149' height='149' rx='19.5' stroke='%237367F0' stroke-opacity='0.16'/%3E%3Crect x='0.621094' y='33.761' width='200' height='200' rx='10' fill='%237367F0' fill-opacity='0.08'/%3E%3C/svg%3E%0A"); + } + &:after { + @include light.media-breakpoint-down(sm) { + display: none; + } + width: 180px; + height: 180px; + content: ' '; + position: absolute; + z-index: -1; + bottom: -30px; + right: -56px; + background-image: url("data:image/svg+xml,%3Csvg width='181' height='181' viewBox='0 0 181 181' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Crect x='1.30469' y='1.44312' width='178' height='178' rx='19' stroke='%237367F0' stroke-opacity='0.16' stroke-width='2' stroke-dasharray='8 8'/%3E%3Crect x='22.8047' y='22.9431' width='135' height='135' rx='10' fill='%237367F0' fill-opacity='0.08'/%3E%3C/svg%3E"); + } + } + + // For two-steps auth + .auth-input-wrapper .auth-input { + max-width: 50px; + padding-left: 0.4rem; + padding-right: 0.4rem; + font-size: light.$large-font-size; + } +} + +// authentication multisteps responsive styles +@media (max-height: 636px) { + .auth-multisteps-bg-height { + height: 100% !important; + } +} + +// Two-steps auth responsive style +@include light.media-breakpoint-down(sm) { + .authentication-wrapper { + .auth-input-wrapper .auth-input { + font-size: light.$h5-font-size; + } + } +} + +// Two Steps Verification +// ? Used for validation specific style as we have validated hidden field +#twoStepsForm { + .fv-plugins-bootstrap5-row-invalid .form-control { + border-color: light.$form-feedback-invalid-color; + border-width: light.$input-focus-border-width; + } +} +@include light.media-breakpoint-down(sm) { + .numeral-mask-wrapper .numeral-mask { + padding: 0 !important; + } + .numeral-mask { + margin-inline: 1px !important; + } +} + +// Light Layout +@if $enable-light-style { + .light-style { + .authentication-wrapper .authentication-bg { + background-color: light.$white; + } + .auth-cover-bg-color { + background-color: light.$body-bg; + } + } +} + +// Dark Layout +@if $enable-dark-style { + .dark-style { + .authentication-wrapper .authentication-bg { + background-color: dark.$card-bg; + } + .auth-cover-bg-color { + background-color: dark.$body-bg; + } + } +} diff --git a/src/modules/Resources/scss/auth/page-misc.scss b/src/modules/Resources/scss/auth/page-misc.scss new file mode 100644 index 0000000..e7c1693 --- /dev/null +++ b/src/modules/Resources/scss/auth/page-misc.scss @@ -0,0 +1,34 @@ +@use '../../assets/vendor/scss/_bootstrap-extended/include'; + +.misc-wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + min-height: calc(100vh - 1.5rem * 2); + text-align: center; +} +// Misc Image Wrapper +.misc-bg-wrapper { + position: relative; + img { + position: absolute; + bottom: 0; + left: 0; + right: 0; + width: 100%; + z-index: -1; + } +} + +// media query for width +@media (max-width: 1499.98px) { + // All Misc Pages + .misc-bg-wrapper img { + height: 250px; + } + // Under Maintenance + .misc-under-maintenance-bg-wrapper img { + height: 270px !important; + } +} diff --git a/src/modules/Resources/scss/auth/page-profile.scss b/src/modules/Resources/scss/auth/page-profile.scss new file mode 100644 index 0000000..51087a3 --- /dev/null +++ b/src/modules/Resources/scss/auth/page-profile.scss @@ -0,0 +1,66 @@ +// * Help center +// ******************************************************************************* + +@use '../../assets/vendor/scss/_bootstrap-extended/include' as light; +@use '../../assets/vendor/scss/_bootstrap-extended/include-dark' as dark; +@import '../../assets/vendor/scss/_custom-variables/pages'; + +$user-profile-banner-size: 250px !default; +$user-profile-banner-sm-size: 150px !default; +$user-image-size: 120px !default; +$user-image-sm-size: 100px !default; + +.user-profile-header-banner { + img { + width: 100%; + object-fit: cover; + height: $user-profile-banner-size; + } +} +.user-profile-header { + margin-top: -2rem; + .user-profile-img { + border: 5px solid; + width: $user-image-size; + } +} + +//Light style +@if $enable-light-style { + .light-style { + .user-profile-header .user-profile-img { + border-color: light.$white; + } + } +} + +//Dark style +@if $enable-dark-style { + .dark-style { + .user-profile-header .user-profile-img { + border-color: dark.$card-bg; + } + } +} + +// Datatable search margin +.dataTables_wrapper { + .card-header .dataTables_filter label { + margin-top: 0 !important; + margin-bottom: 0 !important; + } +} + +// Responsive style +@include light.media-breakpoint-down(md) { + .user-profile-header-banner { + img { + height: $user-profile-banner-sm-size; + } + } + .user-profile-header { + .user-profile-img { + width: $user-image-sm-size; + } + } +} diff --git a/src/modules/Resources/scss/auth/page-user-view.scss b/src/modules/Resources/scss/auth/page-user-view.scss new file mode 100644 index 0000000..c4f73cf --- /dev/null +++ b/src/modules/Resources/scss/auth/page-user-view.scss @@ -0,0 +1,104 @@ +// * Help center +// ******************************************************************************* + +@use '../../assets/vendor/scss/_bootstrap-extended/include' as light; +@use '../../assets/vendor/scss/_bootstrap-extended/include-dark' as dark; +@import '../../assets/vendor/scss/_custom-variables/pages'; + +.user-card { + .user-info-title { + min-width: 100px; + } +} + +.card.primary-shadow { + box-shadow: 0 0.125rem 0.375rem 0 rgba(light.$primary, 0.3) !important; +} +// Light style +@if $enable-light-style { + .light-style { + @include light.media-breakpoint-up(xl) { + .user-card { + .border-container-lg { + border-right: 1px solid light.$border-color; + } + } + @include app-rtl-style() { + .user-card { + .border-container-lg { + border-right: 0; + border-left: 1px solid light.$border-color; + } + } + } + } + @include light.media-breakpoint-down(xl) { + .user-card { + .border-container-lg { + padding-bottom: 1rem; + } + } + } + @include light.media-breakpoint-up(sm) { + .user-card { + .border-container { + border-right: 1px solid light.$border-color; + } + } + .timeline { + .break-text { + width: calc(100% - 90px); + } + } + @include app-rtl-style() { + .user-card { + .border-container { + border-right: 0; + border-left: 1px solid light.$border-color; + } + } + } + } + } +} + +// Dark style +@if $enable-dark-style { + .dark-style { + @include dark.media-breakpoint-up(lg) { + .user-card { + .border-container-lg { + border-right: 1px solid dark.$border-color; + } + } + @include app-rtl-style() { + .user-card { + .border-container-lg { + border-right: 0; + border-left: 1px solid dark.$border-color; + } + } + } + } + @include dark.media-breakpoint-up(sm) { + .user-card { + .border-container { + border-right: 1px solid dark.$border-color; + } + } + .timeline { + .break-text { + width: calc(100% - 90px); + } + } + @include app-rtl-style() { + .user-card { + .border-container { + border-right: 0; + border-left: 1px solid dark.$border-color; + } + } + } + } + } +} diff --git a/src/modules/Resources/scss/user/page-account-settings.scss b/src/modules/Resources/scss/user/page-account-settings.scss new file mode 100644 index 0000000..c6abbe1 --- /dev/null +++ b/src/modules/Resources/scss/user/page-account-settings.scss @@ -0,0 +1,16 @@ +// * Account Settings +// ******************************************************************************* + +@import '../../assets/vendor/scss/_custom-variables/pages'; +@import '../../assets/vendor/scss/_bootstrap-extended/include'; + +.api-key-actions { + position: absolute !important; + top: 0.75rem; + @include app-ltr() { + right: 0.5rem; + } + @include app-rtl() { + left: 0.5rem; + } +} diff --git a/src/modules/Resources/views/admin-settings/smtp-settings.blade.php b/src/modules/Resources/views/admin-settings/smtp-settings.blade.php new file mode 100644 index 0000000..d98b1de --- /dev/null +++ b/src/modules/Resources/views/admin-settings/smtp-settings.blade.php @@ -0,0 +1,36 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Servidor de correo SMTP') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite('modules/Admin/Resources/js/admin-settings/smtp-settings-scripts.js') +@endsection + +@section('content') +
+
+
+ @livewire('mail-smtp-settings') +
+
+
+
+ @livewire('mail-sender-response-settings') +
+
+
+@endsection diff --git a/src/modules/Resources/views/admin-settings/webapp-general-settings.blade.php b/src/modules/Resources/views/admin-settings/webapp-general-settings.blade.php new file mode 100644 index 0000000..de01ae4 --- /dev/null +++ b/src/modules/Resources/views/admin-settings/webapp-general-settings.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Ajustes generales') + +@section('page-script') + @vite('modules/Admin/Resources/js/admin-settings/admin-settings-scripts.js') +@endsection + +@section('content') +
+
+ +
+ @livewire('application-settings') +
+
+
+ +
+ @livewire('general-settings') +
+
+
+ +
+ @livewire('interface-settings') +
+
+
+@endsection diff --git a/src/modules/Resources/views/auth/auth-register-multisteps.blade.php b/src/modules/Resources/views/auth/auth-register-multisteps.blade.php new file mode 100644 index 0000000..df03b9b --- /dev/null +++ b/src/modules/Resources/views/auth/auth-register-multisteps.blade.php @@ -0,0 +1,356 @@ +@php +$customizerHidden = 'customizer-hide'; +$configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Multi Steps Sign-up - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/bs-stepper/bs-stepper.scss', + 'modules/Admin/Resources/assets/vendor/libs/bootstrap-select/bootstrap-select.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/bs-stepper/bs-stepper.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/auth/pages-auth-multisteps.js' +]) +@endsection + +@section('content') +
+ + + + {{ config('_var.templateName') }} + + +
+ + +
+ auth-register-multisteps + + auth-register-multisteps +
+ + + +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+

Account Information

+

Enter Your Account Details

+
+
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+
+ +
+
+

Personal Information

+

Enter Your Personal Information

+
+
+
+ + +
+
+ + +
+
+ +
+ US (+1) + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+
+

Select Plan

+

Select plan as per your requirement

+
+ +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+ +
+

Payment Information

+

Enter your card information

+
+ +
+
+ +
+ + +
+
+
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ + +
+
+ +
+ +
+
+
+
+ +
+
+ + +@endsection diff --git a/src/modules/Resources/views/auth/auth-two-steps-basic.blade.php b/src/modules/Resources/views/auth/auth-two-steps-basic.blade.php new file mode 100644 index 0000000..9f91713 --- /dev/null +++ b/src/modules/Resources/views/auth/auth-two-steps-basic.blade.php @@ -0,0 +1,86 @@ +@php +$customizerHidden = 'customizer-hide'; +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Two Steps Verifications Basic - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js', + 'modules/Admin/Resources/js/auth/pages-auth-two-steps.js' +]) +@endsection + +@section('content') +
+
+ +
+
+ + + +

Two Step Verification 💬

+

+ We sent a verification code to your mobile. Enter the code from the mobile in the field below. + ******1234 +

+

Type your 6 digit security code

+
+
+
+ + + + + + +
+ + +
+ +
Didn't get the code? + + Resend + +
+ +
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/auth-two-steps-cover.blade.php b/src/modules/Resources/views/auth/auth-two-steps-cover.blade.php new file mode 100644 index 0000000..4a34836 --- /dev/null +++ b/src/modules/Resources/views/auth/auth-two-steps-cover.blade.php @@ -0,0 +1,96 @@ +@php +$customizerHidden = 'customizer-hide'; +$configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Two Steps Verifications Cover - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js', + 'modules/Admin/Resources/js/auth/pages-auth-two-steps.js' +]) +@endsection + +@section('content') +
+ + + + {{ config('_var.templateName') }} + + +
+ + +
+
+ auth-two-steps-cover + + auth-two-steps-cover +
+
+ + + +
+
+

Two Step Verification 💬

+

+ We sent a verification code to your mobile. Enter the code from the mobile in the field below. + ******1234 +

+

Type your 6 digit security code

+
+
+
+ + + + + + +
+ + +
+ +
Didn't get the code? + + Resend + +
+ +
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/auth-verify-email-basic.blade.php b/src/modules/Resources/views/auth/auth-verify-email-basic.blade.php new file mode 100644 index 0000000..52bf0fa --- /dev/null +++ b/src/modules/Resources/views/auth/auth-verify-email-basic.blade.php @@ -0,0 +1,47 @@ +@php +$customizerHidden = 'customizer-hide'; +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Verify Email Basic - Pages') + +@section('page-style') + +@vite('modules/Admin/Resources/scss/auth/page-auth.scss') +@endsection + +@section('content') +
+
+ +
+
+ + + +

Verify your email ✉️

+

+ Account activation link sent to your email address: hello@example.com Please follow the link inside to continue. +

+ + Skip for now + +

Didn't get the mail? + + Resend + +

+
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/auth-verify-email-cover.blade.php b/src/modules/Resources/views/auth/auth-verify-email-cover.blade.php new file mode 100644 index 0000000..6234c7f --- /dev/null +++ b/src/modules/Resources/views/auth/auth-verify-email-cover.blade.php @@ -0,0 +1,57 @@ +@php +$customizerHidden = 'customizer-hide'; +$configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Verify Email Cover - Pages') + +@section('page-style') + +@vite('modules/Admin/Resources/scss/auth/page-auth.scss') +@endsection + +@section('content') +
+ + + + {{ config('_var.templateName') }} + + +
+ + +
+
+ auth-verify-email-cover + + auth-verify-email-cover +
+
+ + + +
+
+

Verify your email ✉️

+

+ Account activation link sent to your email address: hello@example.com Please follow the link inside to continue. +

+ + Skip for now + +

Didn't get the mail? + + Resend + +

+
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/forgot-password-basic.blade.php b/src/modules/Resources/views/auth/forgot-password-basic.blade.php new file mode 100644 index 0000000..699fead --- /dev/null +++ b/src/modules/Resources/views/auth/forgot-password-basic.blade.php @@ -0,0 +1,97 @@ +@php + $customizerHidden = 'customizer-hide'; +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Recuperar Contraseña') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+
+
+ +
+
+ + + + +

¿Olvidaste tu Contraseña? 🔒

+

Ingresa tu correo electrónico y te enviaremos instrucciones para restablecer tu contraseña

+ + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @csrf +
+ + + @error('email') +
+ {{ $message }} +
+ @enderror +
+ + + + +
+
+ +
+
+
+@endsection diff --git a/src/modules/Resources/views/auth/forgot-password-cover.blade.php b/src/modules/Resources/views/auth/forgot-password-cover.blade.php new file mode 100644 index 0000000..2819c7b --- /dev/null +++ b/src/modules/Resources/views/auth/forgot-password-cover.blade.php @@ -0,0 +1,104 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Recuperar Contraseña') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+ + + + {{ $_admin['app_name'] }} + + +
+ + +
+
+ Ilustración de recuperación de contraseña + + Fondo de recuperación de contraseña +
+
+ + + +
+
+

¿Olvidaste tu Contraseña? 🔒

+

Ingresa tu correo electrónico y te enviaremos instrucciones para restablecer tu contraseña

+ + @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @csrf +
+ + + @error('email') +
+ {{ $message }} +
+ @enderror +
+ + + + +
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/login-basic.blade.php b/src/modules/Resources/views/auth/login-basic.blade.php new file mode 100644 index 0000000..e2dd081 --- /dev/null +++ b/src/modules/Resources/views/auth/login-basic.blade.php @@ -0,0 +1,133 @@ +@php +use Laravel\Fortify\Features; + + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Iniciar sesión') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+
+
+ +
+
+ + + +

¡Bienvenido a {{ $_admin['app_name'] }}! 👋

+

Inicie sesión en su cuenta y comience la aventura

+ +
+ @csrf +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ @error('password') + + {{ $message }} + + @enderror +
+
+
+
+ + +
+ @if (Features::enabled(Features::resetPasswords())) + +

¿Olvidaste tu contraseña?

+
+ @endif +
+
+
+ +
+ + +

+ @if (Features::enabled(Features::registration())) + ¿Nuevo en nuestra plataforma? + + Crea una cuenta + + @endif +

+ +
+
o
+
+ + +
+
+
+
+
+@endsection diff --git a/src/modules/Resources/views/auth/login-cover.blade.php b/src/modules/Resources/views/auth/login-cover.blade.php new file mode 100644 index 0000000..ce0b47a --- /dev/null +++ b/src/modules/Resources/views/auth/login-cover.blade.php @@ -0,0 +1,139 @@ +@php +use Laravel\Fortify\Features; + + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Iniciar sesión') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+ + + + {{ $_admin['app_name'] }} + + +
+ +
+
+ auth-login-cover + auth-login-cover +
+
+ + + +
+
+

¡Bienvenido a {{ $_admin['app_name'] }}! 👋

+

Inicie sesión en su cuenta y comience la aventura

+ +
+ @csrf +
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ @error('password') + + {{ $message }} + + @enderror +
+
+
+
+ + +
+ @if (Features::enabled(Features::resetPasswords())) + +

¿Olvidaste tu contraseña?

+
+ @endif +
+
+ + + +

+ @if (Features::enabled(Features::registration())) + ¿Nuevo en nuestra plataforma? + + Crea una cuenta + + @endif +

+ +
+
o
+
+ + +
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/register-basic.blade.php b/src/modules/Resources/views/auth/register-basic.blade.php new file mode 100644 index 0000000..a05ea22 --- /dev/null +++ b/src/modules/Resources/views/auth/register-basic.blade.php @@ -0,0 +1,151 @@ +@php + $customizerHidden = 'customizer-hide'; +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Registro de usuarios') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+
+
+ + +
+
+ + + +

Empieza tu aventura 🚀

+

¡Gestiona tu aplicación de manera sencilla y divertida!

+ +
+ @csrf +
+ + + @error('name') + + {{ $message }} + + @enderror +
+
+ + + @error('email') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ @error('password') + + {{ $message }} + + @enderror +
+
+ +
+ + +
+ @error('password_confirmation') + + {{ $message }} + + @enderror +
+ +
+
+
+ + + @error('terms') + + {{ $message }} + + @enderror +
+
+ + + +

+ ¿Ya tienes una cuenta? + + Inicia sesión + +

+ +
+
o
+
+ + +
+
+ +
+
+
+@endsection diff --git a/src/modules/Resources/views/auth/register-cover.blade.php b/src/modules/Resources/views/auth/register-cover.blade.php new file mode 100644 index 0000000..38477f7 --- /dev/null +++ b/src/modules/Resources/views/auth/register-cover.blade.php @@ -0,0 +1,132 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Registro de usuarios') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+ + + + {{ $_admin['app_name'] }} + + + +
+ +
+
+ registro-cubierta + registro-cubierta +
+
+ + + +
+
+

Empieza tu aventura 🚀

+

Gestiona tu aplicación de manera sencilla y divertida.

+ + +
+ @csrf +
+ + +
+
+ + +
+
+ +
+ + +
+
+
+ +
+ + +
+
+ +
+ +
+ + + +

+ ¿Ya tienes una cuenta? + + Iniciar sesión + +

+ +
+
o
+
+ + +
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/auth/reset-password-basic.blade.php b/src/modules/Resources/views/auth/reset-password-basic.blade.php new file mode 100644 index 0000000..62560d1 --- /dev/null +++ b/src/modules/Resources/views/auth/reset-password-basic.blade.php @@ -0,0 +1,130 @@ +@php + $customizerHidden = 'customizer-hide'; +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Restablecer Contraseña') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+
+
+ +
+
+ + + +

Restablecer Contraseña 🔒

+

Tu nueva contraseña debe ser diferente de las contraseñas utilizadas anteriormente

+ +
+ @csrf + + {{-- Token de restablecimiento de contraseña --}} + + +
+ + + + @error('email') +
+ {{ $message }} +
+ @enderror +
+ +
+ +
+ + + + @error('password') +
+ {{ $message }} +
+ @enderror +
+
+ +
+ +
+ + +
+
+ + + + + +
+
+ +
+
+
+@endsection diff --git a/src/modules/Resources/views/auth/reset-password-cover.blade.php b/src/modules/Resources/views/auth/reset-password-cover.blade.php new file mode 100644 index 0000000..61ece9b --- /dev/null +++ b/src/modules/Resources/views/auth/reset-password-cover.blade.php @@ -0,0 +1,137 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Restablecer Contraseña') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('page-style') + @vite([ + 'modules/Admin/Resources/scss/auth/page-auth.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endsection + +@section('page-script') + @vite([ + 'modules/Admin/Resources/js/auth/pages-auth.js' + ]) +@endsection + +@section('content') +
+ + + + {{ $_admin['app_name'] }} + + +
+ + +
+
+ Ilustración de restablecimiento de contraseña + Fondo de restablecimiento de contraseña +
+
+ + + +
+
+

Restablecer Contraseña 🔒

+

Tu nueva contraseña debe ser diferente de las contraseñas utilizadas anteriormente

+ +
+ @csrf + + {{-- Token de restablecimiento de contraseña --}} + + +
+ + + + @error('email') +
+ {{ $message }} +
+ @enderror +
+ +
+ +
+ + + + @error('password') +
+ {{ $message }} +
+ @enderror +
+
+ +
+ +
+ + +
+
+ + + + + +
+
+ +
+
+@endsection diff --git a/src/modules/Resources/views/cache-manager/index.blade.php b/src/modules/Resources/views/cache-manager/index.blade.php new file mode 100644 index 0000000..cf3a3ef --- /dev/null +++ b/src/modules/Resources/views/cache-manager/index.blade.php @@ -0,0 +1,41 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Ajustes de caché') + +@section('page-script') + @vite('modules/Admin/Resources/js/cache-manager/cache-scripts.js') +@endsection + +@section('content') +
+
+
+ @livewire('cache-stats') +
+
+ @livewire('session-stats') +
+
+
+
+ @livewire('cache-functions') +
+
+ @if($configCache['redisInUse']) +
+
+ @livewire('redis-stats') +
+
+ @endif + @if($configCache['memcachedInUse']) +
+
+ @livewire('memcached-stats') +
+
+ @endif +
+
+
+@endsection diff --git a/src/modules/Resources/views/errors/400.blade.php b/src/modules/Resources/views/errors/400.blade.php new file mode 100644 index 0000000..fee1a5d --- /dev/null +++ b/src/modules/Resources/views/errors/400.blade.php @@ -0,0 +1,38 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', '400 Bad Request') + +@section('page-style') + + @vite(['/modules/Admin/Resources/scss/auth/page-misc.scss']) +@endsection + +@section('content') + +
+
+

400

+

Solicitud incorrecta ⚠️

+

+ @if (!empty($exception->getMessage())) + {{ __($exception->getMessage()) }} + @else + {{ __('errors.bad_request') }} + @endif +

+ Regresar al inicio +
+ page-misc-error +
+
+
+
+ page-misc-error +
+ +@endsection diff --git a/src/modules/Resources/views/errors/401.blade.php b/src/modules/Resources/views/errors/401.blade.php new file mode 100644 index 0000000..80d8498 --- /dev/null +++ b/src/modules/Resources/views/errors/401.blade.php @@ -0,0 +1,38 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', '401 Unauthorized') + +@section('page-style') + + @vite(['/modules/Admin/Resources/scss/auth/page-misc.scss']) +@endsection + +@section('content') + +
+
+

401

+

¡No estás autorizado! 🔐

+

+ @if (!empty($exception->getMessage())) + {{ __($exception->getMessage()) }} + @else + {{ __('errors.unauthorized') }} + @endif +

+ Regresar al inicio +
+ page-misc-not-authorized +
+
+
+
+ page-misc-not-authorized +
+ +@endsection diff --git a/src/modules/Resources/views/errors/403.blade.php b/src/modules/Resources/views/errors/403.blade.php new file mode 100644 index 0000000..91616c3 --- /dev/null +++ b/src/modules/Resources/views/errors/403.blade.php @@ -0,0 +1,38 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', '403 Forbidden') + +@section('page-style') + + @vite(['/modules/Admin/Resources/scss/auth/page-misc.scss']) +@endsection + +@section('content') + +
+
+

403

+

¡No estás autorizado! 🔐

+

+ @if (!empty($exception->getMessage())) + {{ __($exception->getMessage()) }} + @else + {{ __('errors.forbidden') }} + @endif +

+ Regresar al inicio +
+ page-misc-not-authorized +
+
+
+
+ page-misc-not-authorized +
+ +@endsection diff --git a/src/modules/Resources/views/errors/404.blade.php b/src/modules/Resources/views/errors/404.blade.php new file mode 100644 index 0000000..b85fe42 --- /dev/null +++ b/src/modules/Resources/views/errors/404.blade.php @@ -0,0 +1,34 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', '404 Not Found') + +@section('page-style') + + @vite(['/modules/Admin/Resources/scss/auth/page-misc.scss']) +@endsection + +@section('content') + +
+
+

404

+

Página no encontrada ⚠️

+

+ {{ __('errors.page_not_found') }} +

+ Regresar al inicio +
+ page-misc-error +
+
+
+
+ page-misc-error +
+ +@endsection diff --git a/src/modules/Resources/views/layouts/vuexy/blankLayout.blade.php b/src/modules/Resources/views/layouts/vuexy/blankLayout.blade.php new file mode 100644 index 0000000..d055c58 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/blankLayout.blade.php @@ -0,0 +1,17 @@ +@isset($pageConfigs) +{!! Helper::updatePageConfig($pageConfigs) !!} +@endisset +@php +$configData = Helper::appClasses(); + +/* Display elements */ +$customizerHidden = ($customizerHidden ?? ''); +@endphp + +@extends('admin::layouts.vuexy.commonMaster' ) + +@section('layoutContent') + + @yield('content') + +@endsection diff --git a/src/modules/Resources/views/layouts/vuexy/commonMaster.blade.php b/src/modules/Resources/views/layouts/vuexy/commonMaster.blade.php new file mode 100644 index 0000000..d7c4ab4 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/commonMaster.blade.php @@ -0,0 +1,56 @@ + +@php +use Illuminate\Support\Facades\Route; + +$menuFixed = ($configData['layout'] === 'vertical') ? ($menuFixed ?? '') : (($configData['layout'] === 'front') ? '' : $configData['headerType']); +$navbarType = ($configData['layout'] === 'vertical') ? ($configData['navbarType'] ?? '') : (($configData['layout'] === 'front') ? 'layout-navbar-fixed': ''); +$isFront = ($isFront ?? '') == true ? 'Front' : ''; +$contentLayout = (isset($container) ? (($container === 'container-xxl') ? "layout-compact" : "layout-wide") : ""); +@endphp + + + + + + + + + + + + + + + + + + + + + + @include('admin::layouts.vuexy.sections.styles' . $isFront) + + + + @include('admin::layouts.vuexy.sections.scriptsIncludes' . $isFront) + + + + @yield('layoutContent') + + + + + @include('admin::layouts.vuexy.sections.scripts' . $isFront) + + diff --git a/src/modules/Resources/views/layouts/vuexy/contentNavbarLayout.blade.php b/src/modules/Resources/views/layouts/vuexy/contentNavbarLayout.blade.php new file mode 100644 index 0000000..f3d30f8 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/contentNavbarLayout.blade.php @@ -0,0 +1,91 @@ +@isset($pageConfigs) +{!! Helper::updatePageConfig($pageConfigs) !!} +@endisset +@php +$configData = Helper::appClasses(); +@endphp +@extends('admin::layouts.vuexy.commonMaster' ) + +@php +/* Display elements */ +$contentNavbar = ($contentNavbar ?? true); +$containerNav = ($containerNav ?? 'container-xxl'); +$isNavbar = ($isNavbar ?? true); +$isMenu = ($isMenu ?? true); +$isFlex = ($isFlex ?? false); +$isFooter = ($isFooter ?? true); +$customizerHidden = ($customizerHidden ?? ''); + +/* HTML Classes */ +$navbarDetached = 'navbar-detached'; +$menuFixed = (isset($configData['menuFixed']) ? $configData['menuFixed'] : ''); +if(isset($navbarType)) { + $configData['navbarType'] = $navbarType; +} +$navbarType = (isset($configData['navbarType']) ? $configData['navbarType'] : ''); +$footerFixed = (isset($configData['footerFixed']) ? $configData['footerFixed'] : ''); +$menuCollapsed = (isset($configData['menuCollapsed']) ? $configData['menuCollapsed'] : ''); + +/* Content classes */ +$container = (isset($configData['contentLayout']) && $configData['contentLayout'] === 'compact') ? 'container-xxl' : 'container-fluid'; +@endphp + +@section('layoutContent') +
+
+ + @if ($isMenu) + @include('admin::layouts.vuexy.sections.menu.verticalMenu') + @endif + + + +
+ + + @if ($isNavbar) + @include('admin::layouts.vuexy.sections.navbar.navbar') + @endif + + + + +
+ + + @if ($isFlex) +
+ @else +
+ @endif + + + @include('admin::layouts.vuexy.sections.content.breadcrumbs') + + + @yield('content') + +
+ + + + @if ($isFooter) + @include('admin::layouts.vuexy.sections.footer.footer') + @endif + +
+
+ +
+ +
+ + @if ($isMenu) + +
+ @endif + +
+
+ + @endsection diff --git a/src/modules/Resources/views/layouts/vuexy/horizontalLayout.blade.php b/src/modules/Resources/views/layouts/vuexy/horizontalLayout.blade.php new file mode 100644 index 0000000..3154439 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/horizontalLayout.blade.php @@ -0,0 +1,89 @@ +@isset($pageConfigs) + {!! Helper::updatePageConfig($pageConfigs) !!} +@endisset +@php + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.commonMaster' ) + +@php + $menuHorizontal = true; + $navbarFull = true; + + /* Display elements */ + $isNavbar = ($isNavbar ?? true); + $isMenu = ($isMenu ?? true); + $isFlex = ($isFlex ?? false); + $isFooter = ($isFooter ?? true); + $customizerHidden = ($customizerHidden ?? ''); + + /* HTML Classes */ + $menuFixed = (isset($configData['menuFixed']) ? $configData['menuFixed'] : ''); + $navbarType = (isset($configData['navbarType']) ? $configData['navbarType'] : ''); + $footerFixed = (isset($configData['footerFixed']) ? $configData['footerFixed'] : ''); + $menuCollapsed = (isset($configData['menuCollapsed']) ? $configData['menuCollapsed'] : ''); + + /* Content classes */ + $container = ($configData['contentLayout'] === 'compact') ? 'container-xxl' : 'container-fluid'; + $containerNav = ($configData['contentLayout'] === 'compact') ? 'container-xxl' : 'container-fluid'; +@endphp + +@section('layoutContent') +
+
+ + + @if ($isNavbar) + @include('admin::layouts.vuexy.sections.navbar.navbar') + @endif + + + + +
+ + +
+ + @if ($isMenu) + @include('admin::layouts.vuexy.sections.menu.horizontalMenu') + @endif + + + @if ($isFlex) +
+ @else +
+ @endif + + @include('admin::layouts.vuexy.sections.content.breadcrumbs') + + + @yield('content') + +
+ + + + @if ($isFooter) + @include('admin::layouts.vuexy.sections.footer.footer') + @endif + +
+
+ +
+ +
+ + + @if ($isMenu) + +
+ @endif + +
+
+ + @endsection diff --git a/src/modules/Resources/views/layouts/vuexy/layoutMaster.blade.php b/src/modules/Resources/views/layouts/vuexy/layoutMaster.blade.php new file mode 100644 index 0000000..ec7f44f --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/layoutMaster.blade.php @@ -0,0 +1,16 @@ +@isset($pageConfigs) + {!! Helper::updatePageConfig($pageConfigs) !!} +@endisset +@php + $configData = Helper::appClasses(); +@endphp + +@isset($configData["layout"]) + @include((( $configData["layout"] === 'horizontal') + ? 'admin::layouts.vuexy.horizontalLayout' + : (( $configData["layout"] === 'blank') + ? 'admin::layouts.vuexy.blankLayout' + : (($configData["layout"] === 'front') + ? 'admin::layouts.vuexy.layoutFront' + : 'admin::layouts.vuexy.contentNavbarLayout') ))) +@endisset diff --git a/src/modules/Resources/views/layouts/vuexy/sections/content/breadcrumbs.blade.php b/src/modules/Resources/views/layouts/vuexy/sections/content/breadcrumbs.blade.php new file mode 100644 index 0000000..4fca10d --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/sections/content/breadcrumbs.blade.php @@ -0,0 +1,21 @@ + +@if($vuexyBreadcrumbs) + +@endif + diff --git a/src/modules/Resources/views/layouts/vuexy/sections/footer/footer.blade.php b/src/modules/Resources/views/layouts/vuexy/sections/footer/footer.blade.php new file mode 100644 index 0000000..31e088d --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/sections/footer/footer.blade.php @@ -0,0 +1,23 @@ +@php + $containerFooter = (isset($configData['contentLayout']) && $configData['contentLayout'] === 'compact') ? 'container-xxl' : 'container-fluid'; +@endphp + + + + diff --git a/src/modules/Resources/views/layouts/vuexy/sections/menu/horizontalMenu.blade.php b/src/modules/Resources/views/layouts/vuexy/sections/menu/horizontalMenu.blade.php new file mode 100644 index 0000000..93dfb36 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/sections/menu/horizontalMenu.blade.php @@ -0,0 +1,28 @@ +@php + $configData = Helper::appClasses(); +@endphp + + + + diff --git a/src/modules/Resources/views/layouts/vuexy/sections/menu/submenu.blade.php b/src/modules/Resources/views/layouts/vuexy/sections/menu/submenu.blade.php new file mode 100644 index 0000000..ffc9e07 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/sections/menu/submenu.blade.php @@ -0,0 +1,18 @@ + diff --git a/src/modules/Resources/views/layouts/vuexy/sections/menu/verticalMenu.blade.php b/src/modules/Resources/views/layouts/vuexy/sections/menu/verticalMenu.blade.php new file mode 100644 index 0000000..1e5e3cd --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/sections/menu/verticalMenu.blade.php @@ -0,0 +1,51 @@ +@php + $configData = Helper::appClasses(); +@endphp + + diff --git a/src/modules/Resources/views/layouts/vuexy/sections/navbar/navbar.blade.php b/src/modules/Resources/views/layouts/vuexy/sections/navbar/navbar.blade.php new file mode 100644 index 0000000..9c0bb00 --- /dev/null +++ b/src/modules/Resources/views/layouts/vuexy/sections/navbar/navbar.blade.php @@ -0,0 +1,233 @@ +@php +use Illuminate\Support\Facades\Auth; +use Illuminate\Support\Facades\Route; +$containerNav = ($configData['contentLayout'] === 'compact') ? 'container-xxl' : 'container-fluid'; +$navbarDetached = ($navbarDetached ?? ''); +@endphp + + +@if(isset($navbarDetached) && $navbarDetached == 'navbar-detached') +
+ + + + + + + + + + {{-- Caché General --}} + + + + + + + + {{-- Configuración --}} + + + + + + + + {{-- Rutas --}} + + + + + + + + {{-- Vistas --}} + + + + + + + + {{-- Eventos --}} + + + + + + + + + {{-- Optimización --}} + + + + + + + + {{-- Resets de Autenticación --}} + + + + + + + + {{-- Tokens de restablecimiento --}} + + + + + + + +
TipoEstadoDetallesAcción
Caché general + + {{ is_numeric($cacheCounts['general']) ? $cacheCounts['general'] : 'Error' }} + + Elementos almacenados + +
Configuración + + {{ $cacheCounts['config'] ? 'Habilitada' : 'No habilitada' }} + + {{ $cacheCounts['config'] ? 'Caché de configuración activa' : 'No se encontró caché de configuración' }} + + +
Rutas + + {{ $cacheCounts['routes'] ? 'Habilitada' : 'No habilitada' }} + + {{ $cacheCounts['routes'] ? 'Caché de rutas activa' : 'No se encontró caché de rutas' }} + + +
Vistas + + {{ $cacheCounts['views'] }} + + Vistas compiladas en el sistema + + +
Eventos + + {{ $cacheCounts['events'] ? 'Habilitada' : 'No habilitada' }} + + {{ $cacheCounts['events'] ? 'Caché de eventos activa' : 'No se encontró caché de eventos' }} + + +
OptimizaciónN/AEliminación de cacde de archivos optimizados, eventos, compilados, configuración, rutas y vistas. + +
Roles y permisosN/AGestión de roles y permisos (Spatie Permission) + +
Tokens de restablecimientoN/AEliminación de tokens de restablecimiento + +
+ + + +
+ {{-- Botones --}} +
+
+ +
+
+ {{-- Notifications --}} +
+
+ + diff --git a/src/modules/Resources/views/livewire/cache/cache-stats.blade.php b/src/modules/Resources/views/livewire/cache/cache-stats.blade.php new file mode 100644 index 0000000..e26f45c --- /dev/null +++ b/src/modules/Resources/views/livewire/cache/cache-stats.blade.php @@ -0,0 +1,105 @@ +
+
+ {{-- Form Card --}} +
+
+
Gestión de Caché
+
+ + + + + + + @if(in_array($cacheConfig['cache']['default'], ['database', 'memcached', 'redis'])) + + + + + + + + + @endif + + @if(in_array($cacheConfig['cache']['default'], ['database', 'redis'])) + + + + + @endif + + @if(in_array($cacheConfig['cache']['default'], ['database', 'memcached', 'redis'])) + + + + + @endif + + @if($cacheConfig['cache']['default'] == 'file') + + + + + @endif + + @if($cacheConfig['cache']['default'] == 'database') + + + + + @endif + + + + + + + + + + + +
Driver{{ $cacheConfig['cache']['default'] }}
Versión + @if($cacheConfig['cache']['default'] == 'database') + {{ $cacheConfig['driver'][$cacheConfig['database']['default']]['version'] }} + @else + {{ $cacheConfig['driver'][$cacheConfig['cache']['default']]['version'] }} + @endif +
Servidor{{ $cacheConfig['cache']['host'] }}
Base de datos + @if ($cacheConfig['cache']['default'] == 'database') + {{ $cacheConfig['database']['connections'][$cacheConfig['database']['default']]['database'] }} + @else + {{ $cacheConfig['database']['redis']['cache']['database'] }} + @endif +
Prefijo{{ $cacheConfig['cache']['prefix'] }}
Ubicación de la Caché{{ $cacheConfig['cache']['stores']['file']['path'] }}
Tabla de Caché{{ $cacheConfig['cache']['stores']['database']['table'] }}
Cantidad de Elementos{{ $cacheStats['item_count'] }}
Espacio Utilizado{{ $cacheStats['memory_usage'] }}
+
+
+
+
+ {{-- Botones --}} +
+
+ @if($cacheConfig['cache']['default'] != 'memcached') + + @endif + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/cache/memcached-stats.blade.php b/src/modules/Resources/views/livewire/cache/memcached-stats.blade.php new file mode 100644 index 0000000..eb566b4 --- /dev/null +++ b/src/modules/Resources/views/livewire/cache/memcached-stats.blade.php @@ -0,0 +1,121 @@ +
+
+
+
+
Estadísticas de Memcached
+ @foreach ($memcachedStats as $stat) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Versión de Memcached{{ $stat['version'] }}
Libevent{{ $stat['libevent'] }}
Servidor{{ $stat['server'] }}
Puerto TCP{{ $stat['tcp_port'] }}
Conexiones máximas{{ $stat['max_connections'] }}
Conexiones totales{{ $stat['total_connections'] }}
Conexiones rechazadas{{ $stat['rejected_connections'] }}
Memoria máxima{{ number_format($stat['limit_maxbytes'] / 1024 / 1024, 2) }} MB
Comandos GET ejecutados{{ $stat['cmd_get'] }}
Comandos SET ejecutados{{ $stat['cmd_set'] }}
GET exitosos{{ $stat['get_hits'] }}
GET fallidos{{ $stat['get_misses'] }}
Claves expulsadas{{ $stat['evictions'] }}
Megabytes leídos{{ number_format($stat['bytes_read'] / 1024 / 1024, 2) }} MB
Megabytes escritos{{ number_format($stat['bytes_written'] / 1024 / 1024, 2) }} MB
Total de objetos{{ $stat['total_items'] }}
+ + + + + + + + + + + + + + + +
Claves almacenadas{{ $stat['curr_items'] }}
Memoria usada + + {{ number_format($stat['bytes'] / 1024 / 1024, 2) }} MB + +
Tiempo de actividad{{ gmdate('H\h i\m s\s', $stat['uptime']) }}
+ @endforeach +
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/cache/redis-stats.blade.php b/src/modules/Resources/views/livewire/cache/redis-stats.blade.php new file mode 100644 index 0000000..fe98a49 --- /dev/null +++ b/src/modules/Resources/views/livewire/cache/redis-stats.blade.php @@ -0,0 +1,144 @@ +
+
+
+
+
Estadísticas de Redis
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Versión de Redis{{ $redisStats['redis_version'] }}
Servidor{{ $redisStats['server'] }}
Puerto TCP{{ $redisStats['tcp_port'] }}
Clientes conectados{{ $redisStats['connected_clients'] }}
Clientes bloqueados{{ $redisStats['blocked_clients'] }}
Pico máximo de memoria utilizada + @if ($redisStats['maxmemory'] > 0) + {{-- Usar maxmemory si está configurado --}} + + {{ $redisStats['used_memory_peak_human'] }} + + @else + {{-- Usar total_system_memory si maxmemory no está configurado --}} + + {{ $redisStats['used_memory_peak_human'] }} + + @endif +
Memoria total del sistema{{ $redisStats['total_system_memory_human'] }}
Límite máximo de memoria + @if ($redisStats['maxmemory'] > 0) + {{ $redisStats['maxmemory_human'] }} + @else + Sin límite configurado + @endif +
Total de conexiones recibidas{{ $redisStats['total_connections_received'] }}
Total de comandos procesados{{ $redisStats['total_commands_processed'] }}
Política de uso de memoria{{ $redisStats['maxmemory_policy'] }}
Rol del servidor{{ $redisStats['role'] }}
+ + + + + + + @isset ($redisStats['databases']['default']['database']) + + + + + @endisset + @isset ($redisStats['databases']['cache']['database']) + + + + + @endisset + @isset ($redisStats['databases']['sessions']['database']) + + + + + @endisset + + + + + + + + + +
Claves almacenadas{{ $redisStats['keys'] }}
Base de datos general de Redis{{ $redisStats['databases']['default']['database'] }}
Base de datos de caché{{ $redisStats['databases']['cache']['database'] }}
Base de datos de sesiones{{ $redisStats['databases']['sessions']['database'] }}
Memoria usada + @if ($redisStats['maxmemory'] > 0) + {{-- Usar maxmemory si está configurado --}} + + {{ $redisStats['used_memory_human'] }} + + @else + {{-- Usar total_system_memory si maxmemory no está configurado --}} + + {{ $redisStats['used_memory_human'] }} + + @endif +
Tiempo de actividad{{ $redisStats['uptime'] }}
+
+
+
+
+
+ {{-- Botones --}} +
+
+ +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/cache/session-stats.blade.php b/src/modules/Resources/views/livewire/cache/session-stats.blade.php new file mode 100644 index 0000000..cf8f365 --- /dev/null +++ b/src/modules/Resources/views/livewire/cache/session-stats.blade.php @@ -0,0 +1,121 @@ +
+
+
+
+
Configuraciones de Sesiones
+
+
+ + + + + + + @if(in_array($cacheConfig['session']['driver'], ['database', 'memcached', 'redis'])) + + + + + + + + + @endif + + @if(in_array($cacheConfig['session']['driver'], ['database', 'redis'])) + + + + + @endif + @if($cacheConfig['session']['driver'] == 'database') + + + + + @endif + @if ($cacheConfig['session']['driver'] === 'file') + + + + + @endif + + + + + + + + + + + {{-- Mostrar solo si el driver utiliza cookies --}} + @if (in_array($cacheConfig['session']['driver'], ['cookie', 'database', 'redis'])) + + + + + + + + + + + + + + + + + + + + + @endif + @if($cacheConfig['session']['driver'] != 'memcached') + + + + + @endif + +
Driver{{ $cacheConfig['session']['driver'] }}
Versión + @if($cacheConfig['session']['driver'] == 'database') + {{ $cacheConfig['driver'][$cacheConfig['database']['default']]['version'] }} + @else + {{ $cacheConfig['driver'][$cacheConfig['session']['driver']]['version'] }} + @endif +
Servidor{{ $cacheConfig['session']['host'] }}
Base de datos{{ $cacheConfig['session']['database'] }}
Tabla de sessiones{{ $cacheConfig['session']['table'] }}
Ubicación de las sesiones{{ $cacheConfig['session']['files'] }}
Tiempo de vida (Minutos){{ $cacheConfig['session']['lifetime'] }}
Encriptación habilitada{{ $cacheConfig['session']['encrypt'] ? 'Sí' : 'No' }}
Nombre de la cookie{{ $cacheConfig['session']['cookie'] ?? 'No especificado' }}
Path de la Cookie{{ $cacheConfig['session']['path'] }}
Dominio de las sesiones{{ $cacheConfig['session']['domain'] ?? 'No especificado' }}
Cookies seguras{{ $cacheConfig['session']['secure'] ? 'Sí' : 'No' }}
Cookies solo HTTPS{{ $cacheConfig['session']['http_only'] ? 'Sí' : 'No' }}
Sesiones{{ $sessionStats['session_count'] }}
+
+
+
+
+ @if($cacheConfig['session']['driver'] != 'memcached') +
+ {{-- Botones --}} +
+
+ @if($cacheConfig['cache']['default'] != 'memcached') + + @endif + +
+
+ {{-- Notifications --}} +
+
+ @endif +
+
diff --git a/src/modules/Resources/views/livewire/rbac/permissions-index.blade.php b/src/modules/Resources/views/livewire/rbac/permissions-index.blade.php new file mode 100644 index 0000000..851983f --- /dev/null +++ b/src/modules/Resources/views/livewire/rbac/permissions-index.blade.php @@ -0,0 +1,152 @@ + +
+
+ + + + + + + + + + + +
NombreAsignado aCreadoActions
+
+
+ + + + + document.addEventListener('DOMContentLoaded', function() { + $(document).ready(function() { + // Datatable + var dt_permission = $('.datatables-permissions') + .DataTable({ + ajax: '{{ url()->current() }}', + columns: [ + // columns according to JSON + {data: ''}, + {data: 'id'}, + {data: 'name'}, + {data: 'assigned_to'}, + {data: 'created_at'}, + //{data: ''} + ], + columnDefs: [ + { + // For Responsive + className: 'control', + orderable: false, + searchable: false, + responsivePriority: 2, + targets: 0, + render: function(data, type, full, meta) { + return ''; + } + }, + { + targets: 1, + searchable: false, + visible: false + }, + { + // Name + targets: 2, + render: function(data, type, full, meta) { + return "" + data + "
" + + '' + (typeof(full['sub_group']) == 'string'? full['sub_group']: '') + ""; + } + }, + { + // assigned_to + targets: 3, + orderable: false, + render: function(data, type, full, meta) { + var $assignedTo = full['assigned_to'], + $output = '', + roleBadgeObj = ; + + for (var i = 0; i < $assignedTo.length; i++) { + var val = $assignedTo[i]; + + $output += roleBadgeObj[val]; + } + + return $output; + } + }, + { + // Created at + targets: 4, + orderable: false + }, + ], + order: [ + [1, 'asc'] + ], + dom: + '<"row mx-1"' + + '<"col-sm-12 col-md-3" l>' + + '<"col-sm-12 col-lg-9"<"dt-action-buttons d-flex align-items-center justify-content-lg-end justify-content-center flex-md-nowrap flex-wrap"<"me-1"f><"user_role mt-50 width-200 me-1">B>>' + + '>t' + + '<"row mx-2"' + + '<"col-sm-12 col-md-6"i>' + + '<"col-sm-12 col-md-6"p>' + + '>', + language: $.fn.dataTable.ext.datatable_spanish_default, + // Buttons with Dropdown + buttons: [], + // For responsive popup + responsive: { + details: { + display: $.fn.dataTable.Responsive.display.modal({ + header: function(row) { + var data = row.data(); + + return 'Detalles del permiso'; + } + }), + type: 'column', + renderer: function(api, rowIdx, columns) { + var data = $.map(columns, function(col, i) { + return col.title !== ''? // ? Do not show row in modal popup if title is blank (for check box) + '' + + '' + col.name + ':' + ' ' + + '' + col.data + '' + + '' : + ''; + }).join(''); + + return data ? $('').append(data) : false; + } + } + }, + + initComplete: function() { + // Adding role filter once table initialized + this.api() + .columns(3) + .every(function() { + var column = this; + + var select = $('{!! $roles_html_select !!}') + .appendTo('.user_role') + .on('change', function() { + var val = $.fn.dataTable.util.escapeRegex($(this).val()); + + column.search(val? val: '', true, false).draw(); + }); + }); + } + }); + + }); + }); + +*/ + +?> diff --git a/src/modules/Resources/views/livewire/rbac/role-cards.blade.php b/src/modules/Resources/views/livewire/rbac/role-cards.blade.php new file mode 100644 index 0000000..7b616a4 --- /dev/null +++ b/src/modules/Resources/views/livewire/rbac/role-cards.blade.php @@ -0,0 +1,347 @@ +
+

Un rol proporciona acceso a menús y funciones predefinidas para que, según el rol asignado por un administrador, el usuario tener acceso a lo que necesite.

+ + +
+ @foreach($roles as $role) +
+
+
+
+
Total {{ $role->users->count() }} usuario{{ $role->users->count() == 1? '': 's' }}
+
    + @foreach($role->users->take(10) as $user) +
  • + Avatar +
  • + @endforeach +
+
+
+
+

{{ $role->name }}

+ Style: {{ $role->style }} +
+
+ + + + @can('system.roles.edit') + @if ($role->name != 'SuperAdmin' && $role->name != 'Admin') + + + + @endif + @endcan + @can('system.roles.create') + + + + @endcan + @can('system.roles.delete') + @if ($role->name != 'SuperAdmin' && $role->name != 'Admin') + + + + @endif + @endcan +
+
+
+
+
+ @endforeach + @can('system.roles.create') +
+
+
+
+
+ add-new-roles +
+
+
+
+ +

Agregar rol, si no existe

+
+
+
+
+
+ @endcan +
+ + + + @include('admin::roles._form_modal') + @include('admin::roles._delete_modal') + +
+ +@push('page-script') + +@endpush diff --git a/src/modules/Resources/views/livewire/users/user-count.blade.php b/src/modules/Resources/views/livewire/users/user-count.blade.php new file mode 100644 index 0000000..8c2bd0e --- /dev/null +++ b/src/modules/Resources/views/livewire/users/user-count.blade.php @@ -0,0 +1,60 @@ +
+
+
+
+
+
+
+
+

{{ $enabled }}

+
+

Usuarios activos

+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+

{{ $disabled }}

+
+

Usuarios suspendidos

+
+
+ + + +
+
+
+
+
+
+
+
+
+
+
+

{{ $total }}

+
+

Total de usuarios

+
+
+ + + +
+
+
+
+
+
diff --git a/src/modules/Resources/views/livewire/users/user-table.blade.php b/src/modules/Resources/views/livewire/users/user-table.blade.php new file mode 100644 index 0000000..a8678c9 --- /dev/null +++ b/src/modules/Resources/views/livewire/users/user-table.blade.php @@ -0,0 +1,708 @@ +
+
{!! $indexAlert !!}
+ + +
+
+
+ + + + + + + + + + + +
IdUsuarioRolesEstatusCreadoAcciones
+ + + + +
+
+
{{ $modalTitle }}
+ +
+
+
+ + +
+ +
+ + +
+
+
+
+ +
+ + +
+
+
+
+ +
+ + + +
+
+
+
+ + +
+
+ +
+ + +
+
+
+ +
+ +
+ +
+ +
+ + + +
+
+
+ + + + + + +@section('page-script') + +@endsection diff --git a/src/modules/Resources/views/livewire/website-settings/analytics-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/analytics-settings.blade.php new file mode 100644 index 0000000..6de226c --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/analytics-settings.blade.php @@ -0,0 +1,57 @@ +
+
+
+
+
Google Analytics
+ +
+ + Habilitar Google Analytics + +
+
+ +
+ + +
+ @error("google_analytics_id") + {{ $message }} + @enderror +
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/chat-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/chat-settings.blade.php new file mode 100644 index 0000000..7a30d8b --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/chat-settings.blade.php @@ -0,0 +1,58 @@ +
+
+
+
+
Chat
+
+ + +
+
+
WhatsApp
+
+ + + @error("chat_whatsapp_number") + {{ $message }} + @enderror +
+
+ + + @error("chat_whatsapp_message") + {{ $message }} + @enderror +
+
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/contact-form-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/contact-form-settings.blade.php new file mode 100644 index 0000000..8834f82 --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/contact-form-settings.blade.php @@ -0,0 +1,55 @@ +
+
+
+
+
Formulario de contacto
+
+ + + @error("contact_form_email") + {{ $message }} + @enderror +
+
+ + + @error("contact_form_email_cc") + {{ $message }} + @enderror +
+
+ + + @error("contact_form_subject") + {{ $message }} + @enderror +
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/contact-info-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/contact-info-settings.blade.php new file mode 100644 index 0000000..d66560b --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/contact-info-settings.blade.php @@ -0,0 +1,55 @@ +
+
+
+
+
Información de contacto
+
+ + + @error("contact_phone_number") + {{ $message }} + @enderror +
+
+ + + @error("contact_phone_number_ext") + {{ $message }} + @enderror +
+
+ + + @error("contact_email") + {{ $message }} + @enderror +
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/favicon-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/favicon-settings.blade.php new file mode 100644 index 0000000..b9d276f --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/favicon-settings.blade.php @@ -0,0 +1,91 @@ +
+
+
+
+
Icono de página
+
+ + @error('upload_image_favicon') + {{ $message }} + @enderror +
+
+
+
+
+ +
+ Navegadores web (16x16) +
+
+
+
+
+ +
+ iPad sin Retina (76x76) +
+
+
+
+
+ +
+ iPhone (120x120) +
+
+
+
+
+ +
+ iPad (152x152) +
+
+
+
+
+ +
+ iPhone con Retina HD (180x180) +
+
+
+
+
+ +
+ Android y otros dispositivos móviles (192x192) +
+
+
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/image-logo-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/image-logo-settings.blade.php new file mode 100644 index 0000000..506643e --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/image-logo-settings.blade.php @@ -0,0 +1,58 @@ +
+
+
+
+
Logotipo claro
+
+ + @error('upload_image_logo') + {{ $message }} + @enderror +
+
+
+ +
+
+
Logotipo obscuro
+
+ + @error('upload_image_logo_dark') + {{ $message }} + @enderror +
+
+
+ +
+
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/legal-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/legal-settings.blade.php new file mode 100644 index 0000000..028cf8f --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/legal-settings.blade.php @@ -0,0 +1,80 @@ +
+ +
diff --git a/src/modules/Resources/views/livewire/website-settings/location-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/location-settings.blade.php new file mode 100644 index 0000000..4b0bb53 --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/location-settings.blade.php @@ -0,0 +1,64 @@ +
+
+
+
+
Ubicación y Horarios
+
+ + + @error("contact_direccion") + {{ $message }} + @enderror +
+
+ + + @error("contact_horario") + {{ $message }} + @enderror +
+
+
+ + + @error("contact_location_lat") + {{ $message }} + @enderror +
+
+ + + @error("contact_location_lng") + {{ $message }} + @enderror +
+
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/social-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/social-settings.blade.php new file mode 100644 index 0000000..87278fa --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/social-settings.blade.php @@ -0,0 +1,119 @@ +
+
+
+
+
Redes sociales
+
+
+
+ +
+ + +
+ @error("social_whatsapp") + {{ $message }} + @enderror +
+
+ + @error("social_whatsapp_message") + {{ $message }} + @enderror +
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+ +
+ + +
+
+
+
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/template-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/template-settings.blade.php new file mode 100644 index 0000000..c97d37e --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/template-settings.blade.php @@ -0,0 +1,49 @@ +
+
+
+
+
Porto Template 12.0.0
+
+ + Mostrar personalizador de estilos + +
+
+ + + @error("website_tpl_footer_text") + {{ $message }} + @enderror +
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/livewire/website-settings/website-settings.blade.php b/src/modules/Resources/views/livewire/website-settings/website-settings.blade.php new file mode 100644 index 0000000..cedab3d --- /dev/null +++ b/src/modules/Resources/views/livewire/website-settings/website-settings.blade.php @@ -0,0 +1,60 @@ +
+
+
+
+
Sitio Web
+
+ + + @error('website_title') + {{ $message }} + @enderror +
+
+ + + @error('website_description') + {{ $message }} + @enderror +
+
+
+
+ {{-- Botones --}} +
+
+ + +
+
+ {{-- Notifications --}} +
+
+
+
diff --git a/src/modules/Resources/views/notifications/email.blade.php b/src/modules/Resources/views/notifications/email.blade.php new file mode 100644 index 0000000..5f78317 --- /dev/null +++ b/src/modules/Resources/views/notifications/email.blade.php @@ -0,0 +1,65 @@ + +{{-- Imagen con URL o Base64 --}} +@if (! empty($image)) +{{ config('app.name') }} +@endif + +{{-- Greeting --}} +@if (! empty($greeting)) +# {{ $greeting }} +@else +@if ($level === 'error') +# @lang('Whoops!') +@else +# @lang('Hello!') +@endif +@endif + +{{-- Intro Lines --}} +@foreach ($introLines as $line) +{{ $line }} + +@endforeach + +{{-- Action Button --}} +@isset($actionText) + $level, + default => 'primary', + }; +?> + +{{ $actionText }} + +@endisset + +{{-- Outro Lines --}} +@foreach ($outroLines as $line) +{{ $line }} + +@endforeach + +{{-- Salutation --}} +@if (! empty($salutation)) +{{ $salutation }} +@else +@lang('Regards,')
+{{ config('app.name') }} +@endif + +{{-- Subcopy --}} +@isset($actionText) + +@lang( + "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\n". + 'into your web browser:', + [ + 'actionText' => $actionText, + ] +) [{{ $displayableActionUrl }}]({{ $actionUrl }}) + +@endisset +
diff --git a/src/modules/Resources/views/pages/about.blade.php b/src/modules/Resources/views/pages/about.blade.php new file mode 100644 index 0000000..58bb2ae --- /dev/null +++ b/src/modules/Resources/views/pages/about.blade.php @@ -0,0 +1,9 @@ +@php + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('content') + +@endsection diff --git a/src/modules/Resources/views/pages/comingsoon.blade.php b/src/modules/Resources/views/pages/comingsoon.blade.php new file mode 100644 index 0000000..31bcd4c --- /dev/null +++ b/src/modules/Resources/views/pages/comingsoon.blade.php @@ -0,0 +1,37 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Muy pronto!') + +@section('page-style') + @vite(['/modules/Admin/Resources/scss/auth/page-misc.scss']) +@endsection + +@section('content') + +
+
+

Lanzaremos pronto 🚀

+

Nuestro sitio web se inaugurará pronto. ¡Regístrese para recibir una notificación cuando esté listo!

+
+
+
+ + +
+
+
+
+ page-misc-launching-soon +
+
+
+
+ page-misc-coming-soon +
+ +@endsection diff --git a/src/modules/Resources/views/pages/home.blade.php b/src/modules/Resources/views/pages/home.blade.php new file mode 100644 index 0000000..73f96be --- /dev/null +++ b/src/modules/Resources/views/pages/home.blade.php @@ -0,0 +1,47 @@ +@php + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('content') +

Covirsa Soluciones en Tecnología

+

Para mayor información al respecto consulta la documentación.

+ + @php + use Illuminate\Support\Facades\Auth; + + // Obtener el usuario autenticado + $user = Auth::user(); + + echo '
';
+            if ($user) {
+                // Imprimir información del usuario
+                echo "Usuario: {$user->name}\n";
+                echo "Email: {$user->email}\n\n";
+
+                // Obtener todos los roles del usuario
+                $roles = $user->roles;
+
+                // Iterar sobre los roles del usuario
+                foreach ($roles as $role) {
+                    echo "Rol: {$role->name}\n";
+
+                    // Obtener todos los permisos del rol
+                    $permissions = $role->permissions;
+
+                    // Imprimir los permisos del rol
+                    foreach ($permissions as $permission) {
+                        echo " - Permiso: {$permission->name}\n";
+                    }
+
+                    echo "\n";
+                }
+
+            } else {
+                echo "Usuario no autenticado\n";
+            }
+        echo '
'; + @endphp + +@endsection diff --git a/src/modules/Resources/views/pages/under-maintenance.blade.php b/src/modules/Resources/views/pages/under-maintenance.blade.php new file mode 100644 index 0000000..fb36b6e --- /dev/null +++ b/src/modules/Resources/views/pages/under-maintenance.blade.php @@ -0,0 +1,30 @@ +@php + $customizerHidden = 'customizer-hide'; + $configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', '¡En mantenimiento!') + +@section('page-style') + @vite(['/modules/Admin/Resources/scss/auth/page-misc.scss']) +@endsection + +@section('content') + +
+
+

¡En mantenimiento! 🚧

+

Disculpe las molestias, pero estamos realizando tareas de mantenimiento en estos momentos.

+ Regresar al inicio +
+ page-misc-under-maintenance +
+
+
+
+ page-misc-under-maintenance +
+ +@endsection diff --git a/src/modules/Resources/views/permissions/index.blade.php b/src/modules/Resources/views/permissions/index.blade.php new file mode 100644 index 0000000..ad4e1d3 --- /dev/null +++ b/src/modules/Resources/views/permissions/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Permisos del sistema') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss', + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + ]) +@endsection + +@section('page-script') + @vite('modules/Admin/Resources/js/rbac/permissions-scripts.js') +@endsection + + +@section('content') + @livewire('permissions-index') +@endsection diff --git a/src/modules/Resources/views/roles/_delete_modal.blade.php b/src/modules/Resources/views/roles/_delete_modal.blade.php new file mode 100644 index 0000000..4a4c62c --- /dev/null +++ b/src/modules/Resources/views/roles/_delete_modal.blade.php @@ -0,0 +1,25 @@ + + + diff --git a/src/modules/Resources/views/roles/_form_modal.blade.php b/src/modules/Resources/views/roles/_form_modal.blade.php new file mode 100644 index 0000000..aa60cea --- /dev/null +++ b/src/modules/Resources/views/roles/_form_modal.blade.php @@ -0,0 +1,116 @@ + + + diff --git a/src/modules/Resources/views/roles/index.blade.php b/src/modules/Resources/views/roles/index.blade.php new file mode 100644 index 0000000..c6f4d48 --- /dev/null +++ b/src/modules/Resources/views/roles/index.blade.php @@ -0,0 +1,21 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Roles de usuarios') + +@push('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss', + ]) +@endpush + +@push('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + ]) +@endpush + +@section('content') + @livewire('role-card') +@endsection diff --git a/src/modules/Resources/views/user/app-access-permission.blade.php b/src/modules/Resources/views/user/app-access-permission.blade.php new file mode 100644 index 0000000..648a86b --- /dev/null +++ b/src/modules/Resources/views/user/app-access-permission.blade.php @@ -0,0 +1,57 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Permission - Apps') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss', +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + ]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/app-access-permission.js', + 'modules/Admin/Resources/js/modal-add-permission.js', + 'modules/Admin/Resources/js/modal-edit-permission.js', + ]) +@endsection + +@section('content') + + + +
+
+ + + + + + + + + + + +
NameAssigned ToCreated DateActions
+
+
+ + + +@include('_partials/_modals/modal-add-permission') +@include('_partials/_modals/modal-edit-permission') + +@endsection diff --git a/src/modules/Resources/views/user/app-access-roles.blade.php b/src/modules/Resources/views/user/app-access-roles.blade.php new file mode 100644 index 0000000..4209b86 --- /dev/null +++ b/src/modules/Resources/views/user/app-access-roles.blade.php @@ -0,0 +1,239 @@ +@php +$configData = Helper::appClasses(); +@endphp + +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Roles - Apps') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + ]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + ]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/app-access-roles.js', + 'modules/Admin/Resources/js/modal-add-role.js', + ]) +@endsection + +@section('content') +

Roles List

+ +

A role provided access to predefined menus and features so that depending on
assigned role an administrator can have access to what user needs.

+ +
+
+
+
+
+
Total 4 users
+
    +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + Avatar +
  • +
+
+
+
+
Administrator
+ Edit Role +
+ +
+
+
+
+
+
+
+
+
Total 7 users
+
    +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + +4 +
  • +
+
+
+
+
Manager
+ Edit Role +
+ +
+
+
+
+
+
+
+
+
Total 5 users
+
    +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + +2 +
  • +
+
+
+
+
Users
+ Edit Role +
+ +
+
+
+
+
+
+
+
+
Total 3 users
+
    +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + +3 +
  • +
+
+
+
+
Support
+ Edit Role +
+ +
+
+
+
+
+
+
+
+
Total 2 users
+
    +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + Avatar +
  • +
  • + +7 +
  • +
+
+
+
+
Restricted User
+ Edit Role +
+ +
+
+
+
+
+
+
+
+
+ add-new-roles +
+
+
+
+ +

Add new role,
if it doesn't exist.

+
+
+
+
+
+
+

Total users with their roles

+

Find all of your company’s administrator accounts and their associate roles.

+
+
+ +
+
+ + + + + + + + + + + + + +
UserRolePlanBillingStatusActions
+
+
+ +
+
+ + + +@include('_partials/_modals/modal-add-role') + +@endsection diff --git a/src/modules/Resources/views/user/app-user-list.blade.php b/src/modules/Resources/views/user/app-user-list.blade.php new file mode 100644 index 0000000..56c55b2 --- /dev/null +++ b/src/modules/Resources/views/user/app-user-list.blade.php @@ -0,0 +1,226 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'User List - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/moment/moment.js', + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js' +]) +@endsection + +@section('page-script') +@vite('modules/Admin/Resources/js/app-user-list.js') +@endsection + +@section('content') + +
+
+
+
+
+
+ Session +
+

21,459

+

(+29%)

+
+ Total Users +
+
+ + + +
+
+
+
+
+
+
+
+
+
+ Paid Users +
+

4,567

+

(+18%)

+
+ Last week analytics +
+
+ + + +
+
+
+
+
+
+
+
+
+
+ Active Users +
+

19,860

+

(-14%)

+
+ Last week analytics +
+
+ + + +
+
+
+
+
+
+
+
+
+
+ Pending Users +
+

237

+

(+42%)

+
+ Last week analytics +
+
+ + + +
+
+
+
+
+
+ +
+
+
Filters
+
+
+
+
+
+
+
+ + + + + + + + + + + + + +
UserRolePlanBillingStatusActions
+
+ +
+
+
Add User
+ +
+
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + +
+
+
+
+ +@endsection diff --git a/src/modules/Resources/views/user/app-user-view-account.blade.php b/src/modules/Resources/views/user/app-user-view-account.blade.php new file mode 100644 index 0000000..0085164 --- /dev/null +++ b/src/modules/Resources/views/user/app-user-view-account.blade.php @@ -0,0 +1,307 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'User View - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/animate-css/animate.scss', + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/scss/pages/page-user-view.scss' +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/moment/moment.js', + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/modal-edit-user.js', + 'modules/Admin/Resources/js/app-user-view.js', + 'modules/Admin/Resources/js/app-user-view-account.js', + 'modules/Admin/Resources/js/auth/pages-profile.js' +]) +@endsection + +@section('content') +
+ +
+ +
+
+
+
+ User avatar + +
+
+
+
+
+
+ +
+
+
+
1.23k
+ Task Done +
+
+
+
+
+ +
+
+
+
568
+ Project Done +
+
+
+
Details
+
+
    +
  • + Username: + @violet.dev +
  • +
  • + Email: + vafgot@vultukir.org +
  • +
  • + Status: + Active +
  • +
  • + Role: + Author +
  • +
  • + Tax id: + Tax-8965 +
  • +
  • + Contact: + (123) 456-7890 +
  • +
  • + Languages: + French +
  • +
  • + Country: + England +
  • +
+
+ Edit + Suspend +
+
+
+
+ + +
+
+
+ Standard +
+ $ +

99

+ month +
+
+
    +
  • 10 Users
  • +
  • Up to 10 GB storage
  • +
  • Basic Support
  • +
+
+ Days + 26 of 30 Days +
+
+
+
+ 4 days remaining +
+ +
+
+
+ +
+ + + + +
+ + + + + +
+
+ + + + + + + + + + + + +
ProjectLeaderTeamProgressAction
+
+
+ + + +
+
User Activity Timeline
+
+
    +
  • + +
    +
    +
    12 Invoices have been paid
    + 12 min ago +
    +

    + Invoices have been paid to the company +

    +
    +
    + img + invoices.pdf +
    +
    +
    +
  • +
  • + +
    +
    +
    Client Meeting
    + 45 min ago +
    +

    + Project meeting with john @10:15am +

    +
    +
    +
    + Avatar +
    +
    +

    Lester McCarthy (Client)

    + CEO of {{ config('_var.creatorName') }} +
    +
    +
    +
    +
  • +
  • + +
    +
    +
    Create a new project for client
    + 2 Day Ago +
    +

    + 6 team members in a project +

    +
      +
    • +
      +
        +
      • + Avatar +
      • +
      • + Avatar +
      • +
      • + Avatar +
      • +
      • + +3 +
      • +
      +
      +
    • +
    +
    +
  • +
+
+
+ + + +
+
+ + + + + + + + + + + +
#StatusTotalIssued DateAction
+
+
+ +
+ +
+ + +@include('_partials/_modals/modal-edit-user') +@include('_partials/_modals/modal-upgrade-plan') + +@endsection diff --git a/src/modules/Resources/views/user/app-user-view-billing.blade.php b/src/modules/Resources/views/user/app-user-view-billing.blade.php new file mode 100644 index 0000000..57f870f --- /dev/null +++ b/src/modules/Resources/views/user/app-user-view-billing.blade.php @@ -0,0 +1,345 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'User View - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-style') +@vite('modules/Admin/Resources/assets/vendor/scss/pages/page-user-view.scss') +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/modal-edit-user.js', + 'modules/Admin/Resources/js/modal-edit-cc.js', + 'modules/Admin/Resources/js/modal-add-new-cc.js', + 'modules/Admin/Resources/js/modal-add-new-address.js', + 'modules/Admin/Resources/js/app-user-view.js', + 'modules/Admin/Resources/js/app-user-view-billing.js' +]) +@endsection + +@section('content') +
+ +
+ +
+
+
+
+ User avatar + +
+
+
+
+
+
+ +
+
+
+
1.23k
+ Task Done +
+
+
+
+
+ +
+
+
+
568
+ Project Done +
+
+
+
Details
+
+
    +
  • + Username: + @violet.dev +
  • +
  • + Email: + vafgot@vultukir.org +
  • +
  • + Status: + Active +
  • +
  • + Role: + Author +
  • +
  • + Tax id: + Tax-8965 +
  • +
  • + Contact: + (123) 456-7890 +
  • +
  • + Languages: + French +
  • +
  • + Country: + England +
  • +
+
+ Edit + Suspend +
+
+
+
+ + +
+
+
+ Standard +
+ $ +

99

+ month +
+
+
    +
  • 10 Users
  • +
  • Up to 10 GB storage
  • +
  • Basic Support
  • +
+
+ Days + 26 of 30 Days +
+
+
+
+ 4 days remaining +
+ +
+
+
+ +
+ + + + +
+ + + + + +
+
Current Plan
+
+
+
+
+
Your Current Plan is Basic
+

A simple start for everyone

+
+
+
Active until Dec 09, 2021
+

We will send you a notification upon Subscription expiration

+
+
+
$199 Per Month Popular
+

Standard plan for small to medium businesses

+
+
+
+ +
+
+
Days
+
26 of 30 Days
+
+
+
+
+ Your plan requires update +
+
+
+ + +
+
+
+
+ + + +
+
+
Payment Methods
+
+ +
+
+
+
+
+
+
+ Master Card +
+
Kaith Morrison
+ Popular +
+ ∗∗∗∗ ∗∗∗∗ ∗∗∗∗ 9856 +
+
+
+ + +
+ Card expires at 12/24 +
+
+
+
+
+
+ Master Card +
Tom McBride
+ ∗∗∗∗ ∗∗∗∗ ∗∗∗∗ 6542 +
+
+
+ + +
+ Card expires at 02/24 +
+
+
+
+
+
+ Visa Card +
+
Mildred Wagner
+ Expired +
+ ∗∗∗∗ ∗∗∗∗ ∗∗∗∗ 5896 +
+
+
+ + +
+ Card expires at 08/20 +
+
+
+
+
+
+ + + +
+
+
Billing Address
+
+ +
+
+
+
+
+
+
Company Name:
+
Kelly Group
+ +
Billing Email:
+
user@ex.com
+ +
Tax ID:
+
TAX-357378
+ +
VAT Number:
+
SDF754K77
+ +
Billing Address:
+
100 Water Plant
Avenue, Building 1303
Wake Island
+
+
+
+
+
Contact:
+
+1 (605) 977-32-65
+ +
Country:
+
Wake Island
+ +
State:
+
Capholim
+ +
Zipcode:
+
403114
+
+
+
+
+
+ + +
+ +
+ + +@include('_partials/_modals/modal-edit-user') +@include('_partials/_modals/modal-edit-cc') +@include('_partials/_modals/modal-add-new-address') +@include('_partials/_modals/modal-add-new-cc') +@include('_partials/_modals/modal-upgrade-plan') + + +@endsection diff --git a/src/modules/Resources/views/user/app-user-view-connections.blade.php b/src/modules/Resources/views/user/app-user-view-connections.blade.php new file mode 100644 index 0000000..119072c --- /dev/null +++ b/src/modules/Resources/views/user/app-user-view-connections.blade.php @@ -0,0 +1,345 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'User View - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite('modules/Admin/Resources/assets/vendor/scss/pages/page-user-view.scss') +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/modal-edit-user.js', + 'modules/Admin/Resources/js/app-user-view.js' +]) +@endsection + +@section('content') +
+ +
+ +
+
+
+
+ User avatar + +
+
+
+
+
+
+ +
+
+
+
1.23k
+ Task Done +
+
+
+
+
+ +
+
+
+
568
+ Project Done +
+
+
+
Details
+
+
    +
  • + Username: + @violet.dev +
  • +
  • + Email: + vafgot@vultukir.org +
  • +
  • + Status: + Active +
  • +
  • + Role: + Author +
  • +
  • + Tax id: + Tax-8965 +
  • +
  • + Contact: + (123) 456-7890 +
  • +
  • + Languages: + French +
  • +
  • + Country: + England +
  • +
+
+ Edit + Suspend +
+
+
+
+ + +
+
+
+ Standard +
+ $ +

99

+ month +
+
+
    +
  • 10 Users
  • +
  • Up to 10 GB storage
  • +
  • Basic Support
  • +
+
+ Days + 26 of 30 Days +
+
+
+
+ 4 days remaining +
+ +
+
+
+ +
+ + + + +
+ + + + +
+
+
Connected Accounts
+

Display content from your connected accounts on your site

+
+
+
+
+ google +
+
+
+
Google
+ Calendar and contacts +
+
+
+ +
+
+
+
+
+
+ slack +
+
+
+
Slack
+ Communication +
+
+
+ +
+
+
+
+
+
+ github +
+
+
+
Github
+ Manage your Git repositories +
+
+
+ +
+
+
+
+
+
+ mailchimp +
+
+
+
Mailchimp
+ Email marketing service +
+
+
+ +
+
+
+
+
+
+ asana +
+
+
+
Asana
+ Communication +
+
+
+ +
+
+
+
+
+
+ + + +
+
+
Social Accounts
+

Display content from social accounts on your site

+
+
+
+
+ facebook +
+
+
+
Facebook
+ Not Connected +
+
+ +
+
+
+ + +
+
+ dribbble +
+
+
+
Dribbble
+ Not Connected +
+
+ +
+
+
+
+
+ behance +
+
+
+
Behance
+ Not Connected +
+
+ +
+
+
+
+
+
+ +
+ + +@include('_partials/_modals/modal-edit-user') +@include('_partials/_modals/modal-upgrade-plan') + +@endsection diff --git a/src/modules/Resources/views/user/app-user-view-notifications.blade.php b/src/modules/Resources/views/user/app-user-view-notifications.blade.php new file mode 100644 index 0000000..bd76f63 --- /dev/null +++ b/src/modules/Resources/views/user/app-user-view-notifications.blade.php @@ -0,0 +1,277 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'User View - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite('modules/Admin/Resources/assets/vendor/scss/pages/page-user-view.scss') +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/modal-edit-user.js', + 'modules/Admin/Resources/js/app-user-view.js' +]) +@endsection + +@section('content') +
+ +
+ +
+
+
+
+ User avatar + +
+
+
+
+
+
+ +
+
+
+
1.23k
+ Task Done +
+
+
+
+
+ +
+
+
+
568
+ Project Done +
+
+
+
Details
+
+
    +
  • + Username: + @violet.dev +
  • +
  • + Email: + vafgot@vultukir.org +
  • +
  • + Status: + Active +
  • +
  • + Role: + Author +
  • +
  • + Tax id: + Tax-8965 +
  • +
  • + Contact: + (123) 456-7890 +
  • +
  • + Languages: + French +
  • +
  • + Country: + England +
  • +
+
+ Edit + Suspend +
+
+
+
+ + +
+
+
+ Standard +
+ $ +

99

+ month +
+
+
    +
  • 10 Users
  • +
  • Up to 10 GB storage
  • +
  • Basic Support
  • +
+
+ Days + 26 of 30 Days +
+
+
+
+ 4 days remaining +
+ +
+
+
+ +
+ + + + +
+ + + + + +
+ +
+
Notifications
+ Change to notification settings, the user will get the update +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TypeEmailBrowserApp
New for you +
+ +
+
+
+ +
+
+
+ +
+
Account activity +
+ +
+
+
+ +
+
+
+ +
+
A new browser used to sign in +
+ +
+
+
+ +
+
+
+ +
+
A new device is linked +
+ +
+
+
+ +
+
+
+ +
+
+
+
+ + +
+ +
+ +
+ +
+ + +@include('_partials/_modals/modal-edit-user') +@include('_partials/_modals/modal-upgrade-plan') + + +@endsection diff --git a/src/modules/Resources/views/user/app-user-view-security.blade.php b/src/modules/Resources/views/user/app-user-view-security.blade.php new file mode 100644 index 0000000..7b4eaec --- /dev/null +++ b/src/modules/Resources/views/user/app-user-view-security.blade.php @@ -0,0 +1,280 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'User View - Pages') + +@section('vendor-style') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' +]) +@endsection + +@section('page-style') +@vite('modules/Admin/Resources/assets/vendor/scss/pages/page-user-view.scss') +@endsection + +@section('vendor-script') +@vite([ + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' +]) +@endsection + +@section('page-script') +@vite([ + 'modules/Admin/Resources/js/modal-edit-user.js', + 'modules/Admin/Resources/js/modal-enable-otp.js', + 'modules/Admin/Resources/js/app-user-view.js', + 'modules/Admin/Resources/js/app-user-view-security.js' +]) +@endsection + +@section('content') +
+ +
+ +
+
+
+
+ User avatar + +
+
+
+
+
+
+ +
+
+
+
1.23k
+ Task Done +
+
+
+
+
+ +
+
+
+
568
+ Project Done +
+
+
+
Details
+
+
    +
  • + Username: + @violet.dev +
  • +
  • + Email: + vafgot@vultukir.org +
  • +
  • + Status: + Active +
  • +
  • + Role: + Author +
  • +
  • + Tax id: + Tax-8965 +
  • +
  • + Contact: + (123) 456-7890 +
  • +
  • + Languages: + French +
  • +
  • + Country: + England +
  • +
+
+ Edit + Suspend +
+
+
+
+ + +
+
+
+ Standard +
+ $ +

99

+ month +
+
+
    +
  • 10 Users
  • +
  • Up to 10 GB storage
  • +
  • Basic Support
  • +
+
+ Days + 26 of 30 Days +
+
+
+
+ 4 days remaining +
+ +
+
+
+ +
+ + + + +
+ + + + + +
+
Change Password
+
+
+ +
+
+ +
+ + +
+
+ +
+ +
+ + +
+
+
+ +
+
+
+
+
+ + + +
+
+
Two-steps verification
+ Keep your account secure with authentication step. +
+
+
SMS
+
+
+ + + +
+
+

Two-factor authentication adds an additional layer of security to your account by requiring more than just a password to log in. + Learn more. +

+
+
+ + + +
+
Recent Devices
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserDeviceLocationRecent Activities
Chrome on WindowsHP Spectre 360Switzerland10, July 2021 20:07
Chrome on iPhoneiPhone 12xAustralia13, July 2021 10:10
Chrome on AndroidOneplus 9 ProDubai14, July 2021 15:15
Chrome on MacOSApple iMacIndia16, July 2021 16:17
+
+
+ +
+ +
+ + +@include('_partials/_modals/modal-edit-user') +@include('_partials/_modals/modal-enable-otp') +@include('_partials/_modals/modal-upgrade-plan') + + +@endsection diff --git a/src/modules/Resources/views/users/index.blade.php b/src/modules/Resources/views/users/index.blade.php new file mode 100644 index 0000000..7429b10 --- /dev/null +++ b/src/modules/Resources/views/users/index.blade.php @@ -0,0 +1,34 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Usuarios') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/moment/moment.js', + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/datatables-lang/datatable-lang-es.js', + ]) +@endsection + +@section('content') +
+ @livewire('user-count') + @livewire('user-table') +
+@endsection diff --git a/src/modules/Resources/views/users/show.blade.php b/src/modules/Resources/views/users/show.blade.php new file mode 100644 index 0000000..f60ca31 --- /dev/null +++ b/src/modules/Resources/views/users/show.blade.php @@ -0,0 +1,214 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Usuario | ' . $user->name) + +@push('vendor-style') + {{-- Page Css files --}} + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-responsive-bs5/responsive.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/datatables-buttons-bs5/buttons.bootstrap5.scss', + 'modules/Admin/Resources/assets/vendor/libs/animate-css/animate.scss', + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.scss', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.scss', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endpush + +@push('page-style') + {{-- Page Css files --}} + @vite([ + 'modules/Admin/Resources/assets/vendor/scss/pages/page-user-view.scss' + ]) +@endpush + +@section('content') + +@endsection + +@push('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/moment/moment.js', + 'modules/Admin/Resources/assets/vendor/libs/datatables-bs5/datatables-bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/sweetalert2/sweetalert2.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave.js', + 'modules/Admin/Resources/assets/vendor/libs/cleavejs/cleave-phone.js', + 'modules/Admin/Resources/assets/vendor/libs/select2/select2.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js' + ]) +@endpush + +@push('page-script') + @vite([ + 'modules/Admin/Resources/assets/js/modal-edit-user.js', + 'modules/Admin/Resources/assets/js/app-user-view.js', + 'modules/Admin/Resources/assets/js/app-user-view-account.js', + 'modules/Admin/Resources/assets/js/pages-profile.js' + ]) +@endpush diff --git a/src/modules/Resources/views/users/user-settings.blade.php b/src/modules/Resources/views/users/user-settings.blade.php new file mode 100644 index 0000000..88262f1 --- /dev/null +++ b/src/modules/Resources/views/users/user-settings.blade.php @@ -0,0 +1,7 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Configuraciones de cuenta | ' . $user->name) + +@section('content') + +@endsection diff --git a/src/modules/Resources/views/website-settings/general-settings-index.blade.php b/src/modules/Resources/views/website-settings/general-settings-index.blade.php new file mode 100644 index 0000000..1aeff1e --- /dev/null +++ b/src/modules/Resources/views/website-settings/general-settings-index.blade.php @@ -0,0 +1,114 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Ajustes generales') + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/form-validation.scss' + ]) +@endsection + +@section('vendor-script') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/popular.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/bootstrap5.js', + 'modules/Admin/Resources/assets/vendor/libs/@form-validation/auto-focus.js', + ]) +@endsection + +@section('page-script') + @vite('modules/Admin/Resources/js/website-settings/website-settings-scripts.js') +@endsection + +@section('content') + +@endsection diff --git a/src/modules/Resources/views/website-settings/legal-index.blade.php b/src/modules/Resources/views/website-settings/legal-index.blade.php new file mode 100644 index 0000000..ceeef63 --- /dev/null +++ b/src/modules/Resources/views/website-settings/legal-index.blade.php @@ -0,0 +1,28 @@ +@extends('admin::layouts.vuexy.layoutMaster') + +@section('title', 'Avisos legales') + + +@section('vendor-style') + @vite([ + 'modules/Admin/Resources/assets/vendor/libs/quill/typography.scss', + //'modules/Admin/Resources/assets/vendor/libs/quill/katex.scss', + 'modules/Admin/Resources/assets/vendor/libs/quill/editor.scss' + ]) +@endsection + + +@section('vendor-script') + @vite([ + //'modules/Admin/Resources/assets/vendor/libs/quill/katex.js', + 'modules/Admin/Resources/assets/vendor/libs/quill/quill.js' + ]) +@endsection + +@section('page-script') + @vite('modules/Admin/Resources/js/website-settings/legal-settings-scripts.js') +@endsection + +@section('content') + @livewire('website-legal-settings') +@endsection diff --git a/src/modules/routes.php b/src/modules/routes.php new file mode 100644 index 0000000..f8a78ea --- /dev/null +++ b/src/modules/routes.php @@ -0,0 +1,75 @@ +name('admin.')->middleware(['auth', 'admin.settings'])->group(function () { + // Rutas de HomeController + Route::controller(HomeController::class)->group(function () { + Route::get('/', 'index')->name('home.index'); + Route::get('acerca-de', 'about')->name('about.index'); + Route::get('muy-pronto', 'comingsoon')->name('comingsoon.index'); + Route::get('bajo-mantenimiento', 'underMaintenance')->name('under-maintenance.index'); + }); + + // Rutas de UserController + Route::controller(UserController::class)->prefix('usuario')->name('user.profile.')->group(function () { + Route::get('perfil', 'edit')->name('edit'); + Route::patch('perfil', 'update')->name('update'); + Route::delete('perfil', 'destroy')->name('destroy'); + Route::get('avatar', 'generateAvatar')->name('avatar'); + }); + + // Rutas de UserController + Route::resource('sistema/usuarios', UserController::class)->names('system.users'); + + Route::controller(UserController::class)->group(function () { + Route::post('usuarios/usuarios/{user}/update', 'updateAjax')->name('system.users.update-ajax'); + Route::get('usuario/configuraciones-de-cuenta', 'userSettings')->name('system.user-settings.index'); + }); + + + // Rutas de RoleController + Route::controller(RoleController::class)->prefix('sistema/rbac/roles')->name('system.roles.')->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('ajax/check-unique-name', 'checkUniqueRoleName')->name('check-unique-name'); + }); + + // Rutas de PermissionController + Route::controller(PermissionController::class)->prefix('sistema/rbac/permisos')->name('system.permissions.')->group(function () { + Route::get('/', 'index')->name('index'); + Route::get('/ajax/check-unique-name', 'checkUniquePermissionName')->name('check-unique-name'); + }); + + + // Rutas de AdminController + Route::controller(AdminController::class)->group(function () { + Route::post('quicklinks-update', 'quickLinksUpdate')->name('system.quicklinks-navbar.update'); + Route::get('ajustes/aplicacion/ajustes-generales', 'generalSettings')->name('webapp.general-settings.index'); + Route::get('ajustes/aplicacion/servidor-de-correo-smtp', 'smtpSettings')->name('webapp.smtp-settings.index'); + }); + + Route::controller(CacheController::class)->group(function () { + Route::get('ajustes/aplicacion/ajustes-de-cache', 'cacheManager')->name('webapp.cache-manager.index'); + Route::post('cache/config/cache', 'generateConfigCache'); + Route::post('cache/route/cache', 'generateRouteCache'); + }); + + // Rutas de WebsiteSettingController + Route::controller(WebsiteSettingController::class)->group(function () { + Route::get('ajustes/website/ajustes-generales', 'generalSettings')->name('website.general-settings.index'); + Route::get('ajustes/website/avisos-legales', 'legal')->name('website.legal.index'); + }); +}); + +// Rutas públicas sin autenticación +Route::prefix('admin')->name('admin.')->group(function () { + Route::get('search-navbar', [AdminController::class, 'searchNavbar'])->name('system.search-navbar.index'); +});