From 57e22aaf589fcded6f7eb508330c0ebfb35d6124 Mon Sep 17 00:00:00 2001 From: Andrey Date: Wed, 24 Jan 2024 22:56:54 +0300 Subject: [PATCH] initial project --- .editorconfig | 15 + .env.example | 52 + .gitattributes | 5 + .gitignore | 31 + .htaccess | 18 + .styleci.yml | 13 + CHANGELOG for v1.x.x.md | 832 ++++ CODE_OF_CONDUCT.md | 76 + LICENSE | 20 + README.md | 131 + app/Console/Kernel.php | 42 + app/Exceptions/Handler.php | 41 + app/Http/Controllers/Controller.php | 13 + app/Http/Kernel.php | 67 + app/Http/Middleware/Authenticate.php | 21 + app/Http/Middleware/EncryptCookies.php | 17 + .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 32 + app/Http/Middleware/TrimStrings.php | 19 + app/Http/Middleware/TrustHosts.php | 20 + app/Http/Middleware/TrustProxies.php | 28 + app/Http/Middleware/VerifyCsrfToken.php | 18 + app/Models/User.php | 43 + app/Providers/AppServiceProvider.php | 28 + app/Providers/AuthServiceProvider.php | 28 + app/Providers/BroadcastServiceProvider.php | 21 + app/Providers/EventServiceProvider.php | 32 + app/Providers/RouteServiceProvider.php | 63 + artisan | 53 + bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + composer.json | 91 + config/app.php | 296 ++ config/auth.php | 105 + config/breadcrumbs.php | 75 + config/broadcasting.php | 64 + config/cache.php | 106 + config/concord.php | 22 + config/cors.php | 62 + config/database.php | 147 + config/debugbar.php | 275 ++ config/dompdf.php | 284 ++ config/excel.php | 332 ++ config/filesystems.php | 72 + config/flare.php | 80 + config/hashing.php | 52 + config/ignition.php | 214 + config/logging.php | 104 + config/mail.php | 130 + config/queue.php | 89 + config/repository.php | 246 + config/sanctum.php | 65 + config/services.php | 33 + config/session.php | 201 + config/tinker.php | 50 + config/view.php | 36 + database/.gitignore | 2 + database/factories/UserFactory.php | 47 + ..._08_19_000000_create_failed_jobs_table.php | 36 + ...01_create_personal_access_tokens_table.php | 36 + ...rsonal_access_tokens_expires_at_column.php | 35 + database/seeders/DatabaseSeeder.php | 23 + docker/7.4/Dockerfile | 62 + docker/7.4/php.ini | 4 + docker/7.4/start-container | 17 + docker/7.4/supervisord.conf | 14 + docker/8.0/Dockerfile | 64 + docker/8.0/php.ini | 4 + docker/8.0/start-container | 17 + docker/8.0/supervisord.conf | 14 + docker/8.1/Dockerfile | 63 + docker/8.1/php.ini | 4 + docker/8.1/start-container | 17 + docker/8.1/supervisord.conf | 14 + docker/8.2/Dockerfile | 63 + docker/8.2/php.ini | 4 + docker/8.2/start-container | 17 + docker/8.2/supervisord.conf | 14 + lang/en/auth.php | 20 + lang/en/pagination.php | 19 + lang/en/passwords.php | 22 + lang/en/validation.php | 152 + package.json | 18 + packages/Webkul/Activity/composer.json | 28 + .../Activity/src/Contracts/Activity.php | 7 + .../Webkul/Activity/src/Contracts/File.php | 7 + .../Activity/src/Contracts/Participant.php | 7 + ...1_05_12_150329_create_activities_table.php | 41 + ..._15_151855_create_activity_files_table.php | 37 + ...453_create_activity_participants_table.php | 39 + ...dd_location_column_in_activities_table.php | 32 + .../Webkul/Activity/src/Models/Activity.php | 69 + .../Activity/src/Models/ActivityProxy.php | 10 + packages/Webkul/Activity/src/Models/File.php | 59 + .../Webkul/Activity/src/Models/FileProxy.php | 10 + .../Activity/src/Models/Participant.php | 52 + .../Activity/src/Models/ParticipantProxy.php | 10 + .../src/Providers/ActivityServiceProvider.php | 29 + .../src/Providers/ModuleServiceProvider.php | 14 + .../src/Repositories/ActivityRepository.php | 99 + .../src/Repositories/FileRepository.php | 68 + .../Repositories/ParticipantRepository.php | 18 + packages/Webkul/Admin/.gitignore | 3 + packages/Webkul/Admin/composer.json | 35 + packages/Webkul/Admin/package.json | 34 + .../Admin/publishable/assets/css/admin.css | 1 + .../assets/images/activities-active-icon.svg | 5 + .../assets/images/activities-icon.svg | 5 + .../assets/images/attribute-icon.svg | 37 + .../assets/images/avatar-dark-icon.svg | 6 + .../publishable/assets/images/avatar-icon.svg | 5 + .../images/calendar-line-active-icon.svg | 6 + .../assets/images/calendar-line-icon.svg | 6 + .../publishable/assets/images/call-icon.svg | 5 + .../assets/images/dashboard-active-icon.svg | 5 + .../assets/images/dashboard-icon.svg | 5 + .../assets/images/dollar-circle-icon.svg | 6 + .../publishable/assets/images/drag-icon.svg | 4 + .../assets/images/ellipsis-icon.svg | 6 + .../publishable/assets/images/email-icon.svg | 5 + .../assets/images/email-send-icon.svg | 5 + .../assets/images/email-template-icon.svg | 66 + .../assets/images/emails-active-icon.svg | 5 + .../publishable/assets/images/emails-icon.svg | 5 + .../assets/images/empty-bar-icon.svg | 4 + .../assets/images/empty-bar-vertical-icon.svg | 4 + .../assets/images/empty-kanban-icon.svg | 10 + .../assets/images/empty-state-icon.svg | 11 + .../assets/images/empty-table-icon.svg | 22 + .../assets/images/error-illustraton.svg | 24 + .../images/favicon/android-icon-144x144.png | Bin 0 -> 3914 bytes .../images/favicon/android-icon-192x192.png | Bin 0 -> 3518 bytes .../images/favicon/android-icon-36x36.png | Bin 0 -> 1576 bytes .../images/favicon/android-icon-48x48.png | Bin 0 -> 1578 bytes .../images/favicon/android-icon-72x72.png | Bin 0 -> 1884 bytes .../images/favicon/android-icon-96x96.png | Bin 0 -> 2249 bytes .../images/favicon/apple-icon-114x114.png | Bin 0 -> 3450 bytes .../images/favicon/apple-icon-120x120.png | Bin 0 -> 3333 bytes .../images/favicon/apple-icon-144x144.png | Bin 0 -> 3914 bytes .../images/favicon/apple-icon-152x152.png | Bin 0 -> 4737 bytes .../images/favicon/apple-icon-180x180.png | Bin 0 -> 5895 bytes .../images/favicon/apple-icon-57x57.png | Bin 0 -> 2135 bytes .../images/favicon/apple-icon-60x60.png | Bin 0 -> 2105 bytes .../images/favicon/apple-icon-72x72.png | Bin 0 -> 1884 bytes .../images/favicon/apple-icon-76x76.png | Bin 0 -> 2103 bytes .../images/favicon/apple-icon-precomposed.png | Bin 0 -> 4092 bytes .../assets/images/favicon/apple-icon.png | Bin 0 -> 4092 bytes .../assets/images/favicon/browserconfig.xml | 11 + .../assets/images/favicon/favicon-16x16.png | Bin 0 -> 1136 bytes .../assets/images/favicon/favicon-32x32.png | Bin 0 -> 1317 bytes .../assets/images/favicon/favicon-96x96.png | Bin 0 -> 2249 bytes .../assets/images/favicon/favicon.ico | Bin 0 -> 1150 bytes .../assets/images/favicon/manifest.json | 41 + .../assets/images/favicon/ms-icon-144x144.png | Bin 0 -> 3914 bytes .../assets/images/favicon/ms-icon-150x150.png | Bin 0 -> 4718 bytes .../assets/images/favicon/ms-icon-310x310.png | Bin 0 -> 13305 bytes .../assets/images/favicon/ms-icon-70x70.png | Bin 0 -> 2055 bytes .../publishable/assets/images/file-icon.svg | 5 + .../publishable/assets/images/group-icon.svg | 20 + .../images/layout-column-line-active-icon.svg | 5 + .../assets/images/layout-column-line-icon.svg | 5 + .../publishable/assets/images/lead-icon.svg | 10 + .../assets/images/leads-active-icon.svg | 3 + .../publishable/assets/images/leads-icon.svg | 3 + .../Admin/publishable/assets/images/logo.svg | 10 + .../publishable/assets/images/lunch-icon.svg | 5 + .../publishable/assets/images/mail-icon.svg | 7 + .../assets/images/meeting-icon.svg | 5 + .../publishable/assets/images/note-icon.svg | 5 + .../assets/images/organization-icon.svg | 28 + .../publishable/assets/images/person-icon.svg | 10 + .../assets/images/phone-active-icon.svg | 5 + .../publishable/assets/images/phone-icon.svg | 5 + .../assets/images/pipeline-icon.svg | 27 + .../assets/images/product-icon.svg | 14 + .../assets/images/products-active-icon.svg | 5 + .../assets/images/products-icon.svg | 5 + .../assets/images/quotation-icon.svg | 26 + .../publishable/assets/images/role-icon.svg | 31 + .../assets/images/settings-active-icon.svg | 5 + .../assets/images/settings-icon.svg | 5 + .../publishable/assets/images/source-icon.svg | 69 + .../publishable/assets/images/sprite-main.svg | 132 + .../assets/images/table-line-active-icon.svg | 6 + .../assets/images/table-line-icon.svg | 6 + .../publishable/assets/images/tag-icon.svg | 23 + .../assets/images/tools-active-icon.svg | 6 + .../publishable/assets/images/tools-icon.svg | 6 + .../publishable/assets/images/type-icon.svg | 43 + .../publishable/assets/images/user-icon.svg | 13 + .../assets/images/workflow-icon.svg | 76 + .../Admin/publishable/assets/js/admin.js | 2 + .../assets/js/admin.js.LICENSE.txt | 56 + .../js/tinyMCE/plugins/advlist/plugin.min.js | 1 + .../js/tinyMCE/plugins/anchor/plugin.min.js | 1 + .../js/tinyMCE/plugins/autolink/plugin.min.js | 1 + .../tinyMCE/plugins/autoresize/plugin.min.js | 1 + .../js/tinyMCE/plugins/autosave/plugin.min.js | 1 + .../js/tinyMCE/plugins/bbcode/plugin.min.js | 1 + .../js/tinyMCE/plugins/charmap/plugin.min.js | 1 + .../js/tinyMCE/plugins/code/plugin.min.js | 1 + .../tinyMCE/plugins/codesample/css/prism.css | 139 + .../tinyMCE/plugins/codesample/plugin.min.js | 1 + .../tinyMCE/plugins/contextmenu/plugin.min.js | 1 + .../plugins/directionality/plugin.min.js | 1 + .../plugins/emoticons/img/smiley-cool.gif | Bin 0 -> 354 bytes .../plugins/emoticons/img/smiley-cry.gif | Bin 0 -> 329 bytes .../emoticons/img/smiley-embarassed.gif | Bin 0 -> 331 bytes .../emoticons/img/smiley-foot-in-mouth.gif | Bin 0 -> 342 bytes .../plugins/emoticons/img/smiley-frown.gif | Bin 0 -> 340 bytes .../plugins/emoticons/img/smiley-innocent.gif | Bin 0 -> 336 bytes .../plugins/emoticons/img/smiley-kiss.gif | Bin 0 -> 338 bytes .../plugins/emoticons/img/smiley-laughing.gif | Bin 0 -> 343 bytes .../emoticons/img/smiley-money-mouth.gif | Bin 0 -> 321 bytes .../plugins/emoticons/img/smiley-sealed.gif | Bin 0 -> 323 bytes .../plugins/emoticons/img/smiley-smile.gif | Bin 0 -> 344 bytes .../emoticons/img/smiley-surprised.gif | Bin 0 -> 338 bytes .../emoticons/img/smiley-tongue-out.gif | Bin 0 -> 328 bytes .../emoticons/img/smiley-undecided.gif | Bin 0 -> 337 bytes .../plugins/emoticons/img/smiley-wink.gif | Bin 0 -> 350 bytes .../plugins/emoticons/img/smiley-yell.gif | Bin 0 -> 336 bytes .../tinyMCE/plugins/emoticons/plugin.min.js | 1 + .../js/tinyMCE/plugins/fullpage/plugin.min.js | 1 + .../tinyMCE/plugins/fullscreen/plugin.min.js | 1 + .../js/tinyMCE/plugins/help/img/logo.png | Bin 0 -> 23101 bytes .../js/tinyMCE/plugins/help/plugin.min.js | 1 + .../js/tinyMCE/plugins/hr/plugin.min.js | 1 + .../js/tinyMCE/plugins/image/plugin.min.js | 1 + .../tinyMCE/plugins/imagetools/plugin.min.js | 2 + .../tinyMCE/plugins/importcss/plugin.min.js | 1 + .../plugins/insertdatetime/plugin.min.js | 1 + .../plugins/legacyoutput/plugin.min.js | 1 + .../js/tinyMCE/plugins/link/plugin.min.js | 1 + .../js/tinyMCE/plugins/lists/plugin.min.js | 1 + .../js/tinyMCE/plugins/media/plugin.min.js | 1 + .../js/tinyMCE/plugins/mention/plugin.js | 416 ++ .../js/tinyMCE/plugins/mention/plugin.min.js | 414 ++ .../plugins/mention/plugin.min.js.real | 1 + .../tinyMCE/plugins/nonbreaking/plugin.min.js | 1 + .../tinyMCE/plugins/noneditable/plugin.min.js | 1 + .../tinyMCE/plugins/pagebreak/plugin.min.js | 1 + .../js/tinyMCE/plugins/paste/plugin.min.js | 1 + .../js/tinyMCE/plugins/preview/plugin.min.js | 1 + .../js/tinyMCE/plugins/print/plugin.min.js | 1 + .../js/tinyMCE/plugins/save/plugin.min.js | 1 + .../plugins/searchreplace/plugin.min.js | 1 + .../plugins/spellchecker/plugin.min.js | 1 + .../js/tinyMCE/plugins/tabfocus/plugin.min.js | 1 + .../js/tinyMCE/plugins/table/plugin.min.js | 2 + .../js/tinyMCE/plugins/template/plugin.min.js | 1 + .../tinyMCE/plugins/textcolor/plugin.min.js | 1 + .../tinyMCE/plugins/textpattern/plugin.min.js | 1 + .../js/tinyMCE/plugins/toc/plugin.min.js | 1 + .../plugins/visualblocks/css/visualblocks.css | 154 + .../plugins/visualblocks/plugin.min.js | 1 + .../tinyMCE/plugins/visualchars/plugin.min.js | 1 + .../tinyMCE/plugins/wordcount/plugin.min.js | 1 + .../skins/lightgray/content.inline.min.css | 1 + .../tinyMCE/skins/lightgray/content.min.css | 1 + .../skins/lightgray/fonts/tinymce-small.eot | Bin 0 -> 9492 bytes .../skins/lightgray/fonts/tinymce-small.svg | 117 + .../skins/lightgray/fonts/tinymce-small.ttf | Bin 0 -> 9304 bytes .../skins/lightgray/fonts/tinymce-small.woff | Bin 0 -> 9380 bytes .../tinyMCE/skins/lightgray/fonts/tinymce.eot | Bin 0 -> 17572 bytes .../tinyMCE/skins/lightgray/fonts/tinymce.svg | 245 + .../tinyMCE/skins/lightgray/fonts/tinymce.ttf | Bin 0 -> 17408 bytes .../skins/lightgray/fonts/tinymce.woff | Bin 0 -> 17484 bytes .../js/tinyMCE/skins/lightgray/img/anchor.gif | Bin 0 -> 53 bytes .../js/tinyMCE/skins/lightgray/img/loader.gif | Bin 0 -> 2608 bytes .../js/tinyMCE/skins/lightgray/img/object.gif | Bin 0 -> 152 bytes .../js/tinyMCE/skins/lightgray/img/trans.gif | Bin 0 -> 43 bytes .../js/tinyMCE/skins/lightgray/skin.min.css | 1 + .../js/tinyMCE/themes/inlite/theme.min.js | 1 + .../js/tinyMCE/themes/modern/theme.min.js | 1 + .../assets/js/tinyMCE/tinymce.min.js | 16 + .../publishable/assets/mix-manifest.json | 89 + packages/Webkul/Admin/src/Bouncer.php | 38 + packages/Webkul/Admin/src/Config/acl.php | 430 ++ .../src/Config/attribute_entity_types.php | 28 + .../Admin/src/Config/attribute_lookups.php | 44 + .../Webkul/Admin/src/Config/core_config.php | 21 + .../Admin/src/Config/dashboard_cards.php | 90 + packages/Webkul/Admin/src/Config/menu.php | 209 + .../DataGrids/Activity/ActivityDataGrid.php | 309 ++ .../Contact/OrganizationDataGrid.php | 135 + .../src/DataGrids/Contact/PersonDataGrid.php | 155 + .../Admin/src/DataGrids/Lead/LeadDataGrid.php | 372 ++ .../src/DataGrids/Mail/EmailDataGrid.php | 150 + .../src/DataGrids/Product/ProductDataGrid.php | 107 + .../src/DataGrids/Quote/QuoteDataGrid.php | 271 ++ .../DataGrids/Setting/AttributeDataGrid.php | 176 + .../Setting/EmailTemplateDataGrid.php | 80 + .../src/DataGrids/Setting/GroupDataGrid.php | 80 + .../DataGrids/Setting/PipelineDataGrid.php | 97 + .../src/DataGrids/Setting/RoleDataGrid.php | 92 + .../src/DataGrids/Setting/SourceDataGrid.php | 72 + .../src/DataGrids/Setting/TagDataGrid.php | 156 + .../src/DataGrids/Setting/TypeDataGrid.php | 72 + .../src/DataGrids/Setting/UserDataGrid.php | 146 + .../DataGrids/Setting/WorkflowDataGrid.php | 72 + ..._view_permission_column_in_users_table.php | 32 + ...closed_date_column_in_attributes_table.php | 45 + .../src/Database/Seeders/AttributeSeeder.php | 486 ++ .../src/Database/Seeders/DatabaseSeeder.php | 23 + .../Database/Seeders/EmailTemplateSeeder.php | 78 + .../Database/Seeders/LeadPipelineSeeder.php | 76 + .../src/Database/Seeders/LeadSourceSeeder.php | 47 + .../src/Database/Seeders/LeadTypeSeeder.php | 32 + .../src/Database/Seeders/WorkflowSeeder.php | 44 + .../Webkul/Admin/src/Exceptions/Handler.php | 121 + packages/Webkul/Admin/src/Facades/Bouncer.php | 18 + packages/Webkul/Admin/src/Facades/Menu.php | 18 + .../Webkul/Admin/src/Helpers/Dashboard.php | 825 ++++ .../Activity/ActivityController.php | 401 ++ .../Controllers/Admin/DashboardController.php | 116 + .../Configuration/ConfigurationController.php | 98 + .../Contact/OrganizationController.php | 156 + .../Controllers/Contact/PersonController.php | 185 + .../Admin/src/Http/Controllers/Controller.php | 23 + .../Http/Controllers/Lead/LeadController.php | 383 ++ .../Http/Controllers/Lead/QuoteController.php | 88 + .../Http/Controllers/Lead/TagController.php | 76 + .../Http/Controllers/Mail/EmailController.php | 378 ++ .../Controllers/Product/ProductController.php | 169 + .../Controllers/Quote/QuoteController.php | 216 + .../Setting/AttributeController.php | 224 + .../Setting/EmailTemplateController.php | 163 + .../Controllers/Setting/GroupController.php | 142 + .../Setting/PipelineController.php | 159 + .../Controllers/Setting/RoleController.php | 186 + .../Controllers/Setting/SettingController.php | 18 + .../Controllers/Setting/SourceController.php | 138 + .../Controllers/Setting/TagController.php | 194 + .../Controllers/Setting/TypeController.php | 138 + .../Controllers/Setting/UserController.php | 289 ++ .../Setting/WorkflowController.php | 141 + .../Controllers/User/AccountController.php | 82 + .../User/ForgotPasswordController.php | 79 + .../User/ResetPasswordController.php | 97 + .../Controllers/User/SessionController.php | 72 + .../Admin/src/Http/Middleware/Bouncer.php | 87 + .../Admin/src/Http/Middleware/Locale.php | 37 + .../Admin/src/Http/Requests/LeadForm.php | 152 + .../Admin/src/Http/Requests/PipelineForm.php | 91 + .../Admin/src/Http/Requests/UserForm.php | 43 + packages/Webkul/Admin/src/Http/helpers.php | 8 + packages/Webkul/Admin/src/Http/routes.php | 422 ++ packages/Webkul/Admin/src/Listeners/Lead.php | 42 + .../Webkul/Admin/src/Listeners/Person.php | 42 + packages/Webkul/Admin/src/Menu.php | 114 + .../Webkul/Admin/src/Notifications/Common.php | 39 + .../Admin/src/Notifications/User/Create.php | 31 + .../Notifications/User/UserResetPassword.php | 28 + .../Notifications/User/UserUpdatePassword.php | 43 + .../src/Providers/AdminServiceProvider.php | 163 + .../src/Providers/EventServiceProvider.php | 23 + .../src/Providers/ModuleServiceProvider.php | 11 + .../assets/images/activities-active-icon.svg | 5 + .../assets/images/activities-icon.svg | 5 + .../assets/images/attribute-icon.svg | 37 + .../assets/images/avatar-dark-icon.svg | 6 + .../Resources/assets/images/avatar-icon.svg | 5 + .../images/calendar-line-active-icon.svg | 6 + .../assets/images/calendar-line-icon.svg | 6 + .../src/Resources/assets/images/call-icon.svg | 5 + .../assets/images/dashboard-active-icon.svg | 5 + .../assets/images/dashboard-icon.svg | 5 + .../assets/images/dollar-circle-icon.svg | 6 + .../src/Resources/assets/images/drag-icon.svg | 4 + .../Resources/assets/images/ellipsis-icon.svg | 6 + .../Resources/assets/images/email-icon.svg | 5 + .../assets/images/email-send-icon.svg | 5 + .../assets/images/email-template-icon.svg | 66 + .../assets/images/emails-active-icon.svg | 5 + .../Resources/assets/images/emails-icon.svg | 5 + .../assets/images/empty-bar-icon.svg | 4 + .../assets/images/empty-bar-vertical-icon.svg | 4 + .../assets/images/empty-kanban-icon.svg | 10 + .../assets/images/empty-state-icon.svg | 11 + .../assets/images/empty-table-icon.svg | 22 + .../assets/images/error-illustraton.svg | 24 + .../images/favicon/android-icon-144x144.png | Bin 0 -> 3914 bytes .../images/favicon/android-icon-192x192.png | Bin 0 -> 3518 bytes .../images/favicon/android-icon-36x36.png | Bin 0 -> 1576 bytes .../images/favicon/android-icon-48x48.png | Bin 0 -> 1578 bytes .../images/favicon/android-icon-72x72.png | Bin 0 -> 1884 bytes .../images/favicon/android-icon-96x96.png | Bin 0 -> 2249 bytes .../images/favicon/apple-icon-114x114.png | Bin 0 -> 3450 bytes .../images/favicon/apple-icon-120x120.png | Bin 0 -> 3333 bytes .../images/favicon/apple-icon-144x144.png | Bin 0 -> 3914 bytes .../images/favicon/apple-icon-152x152.png | Bin 0 -> 4737 bytes .../images/favicon/apple-icon-180x180.png | Bin 0 -> 5895 bytes .../images/favicon/apple-icon-57x57.png | Bin 0 -> 2135 bytes .../images/favicon/apple-icon-60x60.png | Bin 0 -> 2105 bytes .../images/favicon/apple-icon-72x72.png | Bin 0 -> 1884 bytes .../images/favicon/apple-icon-76x76.png | Bin 0 -> 2103 bytes .../images/favicon/apple-icon-precomposed.png | Bin 0 -> 4092 bytes .../assets/images/favicon/apple-icon.png | Bin 0 -> 4092 bytes .../assets/images/favicon/browserconfig.xml | 11 + .../assets/images/favicon/favicon-16x16.png | Bin 0 -> 1136 bytes .../assets/images/favicon/favicon-32x32.png | Bin 0 -> 1317 bytes .../assets/images/favicon/favicon-96x96.png | Bin 0 -> 2249 bytes .../assets/images/favicon/favicon.ico | Bin 0 -> 1150 bytes .../assets/images/favicon/manifest.json | 41 + .../assets/images/favicon/ms-icon-144x144.png | Bin 0 -> 3914 bytes .../assets/images/favicon/ms-icon-150x150.png | Bin 0 -> 4718 bytes .../assets/images/favicon/ms-icon-310x310.png | Bin 0 -> 13305 bytes .../assets/images/favicon/ms-icon-70x70.png | Bin 0 -> 2055 bytes .../src/Resources/assets/images/file-icon.svg | 5 + .../Resources/assets/images/group-icon.svg | 20 + .../images/layout-column-line-active-icon.svg | 5 + .../assets/images/layout-column-line-icon.svg | 5 + .../src/Resources/assets/images/lead-icon.svg | 10 + .../assets/images/leads-active-icon.svg | 3 + .../Resources/assets/images/leads-icon.svg | 3 + .../src/Resources/assets/images/logo.svg | 10 + .../Resources/assets/images/lunch-icon.svg | 5 + .../src/Resources/assets/images/mail-icon.svg | 7 + .../Resources/assets/images/meeting-icon.svg | 5 + .../src/Resources/assets/images/note-icon.svg | 5 + .../assets/images/organization-icon.svg | 28 + .../Resources/assets/images/person-icon.svg | 10 + .../assets/images/phone-active-icon.svg | 5 + .../Resources/assets/images/phone-icon.svg | 5 + .../Resources/assets/images/pipeline-icon.svg | 27 + .../Resources/assets/images/product-icon.svg | 14 + .../assets/images/products-active-icon.svg | 5 + .../Resources/assets/images/products-icon.svg | 5 + .../assets/images/quotation-icon.svg | 26 + .../src/Resources/assets/images/role-icon.svg | 31 + .../assets/images/settings-active-icon.svg | 5 + .../Resources/assets/images/settings-icon.svg | 5 + .../Resources/assets/images/source-icon.svg | 69 + .../Resources/assets/images/sprite-main.svg | 132 + .../assets/images/table-line-active-icon.svg | 6 + .../assets/images/table-line-icon.svg | 6 + .../src/Resources/assets/images/tag-icon.svg | 23 + .../assets/images/tools-active-icon.svg | 6 + .../Resources/assets/images/tools-icon.svg | 6 + .../src/Resources/assets/images/type-icon.svg | 43 + .../src/Resources/assets/images/user-icon.svg | 13 + .../Resources/assets/images/workflow-icon.svg | 76 + .../Admin/src/Resources/assets/js/app.js | 221 + .../src/Resources/assets/js/bootstrap.js | 21 + .../src/Resources/assets/sass/_mixins.scss | 22 + .../src/Resources/assets/sass/_variables.scss | 28 + .../Admin/src/Resources/assets/sass/app.scss | 2519 +++++++++++ .../src/Resources/assets/sass/icons.scss | 227 + .../src/Resources/assets/sass/kanban.scss | 245 + .../Admin/src/Resources/assets/sass/rtl.scss | 440 ++ .../Admin/src/Resources/lang/ar/app.php | 877 ++++ .../Admin/src/Resources/lang/en/app.php | 882 ++++ .../Admin/src/Resources/lang/tr/app.php | 869 ++++ .../activities/datagrid/is-done.blade.php | 13 + .../Resources/views/activities/edit.blade.php | 351 ++ .../views/activities/index.blade.php | 25 + .../views/activities/index/calendar.blade.php | 93 + .../views/activities/index/table.blade.php | 64 + .../activities/index/view-swither.blade.php | 19 + .../common/custom-attributes/edit.blade.php | 72 + .../custom-attributes/edit/address.blade.php | 150 + .../custom-attributes/edit/boolean.blade.php | 14 + .../custom-attributes/edit/checkbox.blade.php | 27 + .../custom-attributes/edit/date.blade.php | 10 + .../custom-attributes/edit/datetime.blade.php | 10 + .../edit/email-tags.blade.php | 79 + .../custom-attributes/edit/email.blade.php | 137 + .../custom-attributes/edit/file.blade.php | 27 + .../custom-attributes/edit/image.blade.php | 27 + .../custom-attributes/edit/lookup.blade.php | 157 + .../custom-attributes/edit/lookup.blade1.php | 109 + .../edit/multi-lookup.blade.php | 126 + .../edit/multiselect.blade.php | 18 + .../custom-attributes/edit/phone.blade.php | 142 + .../custom-attributes/edit/price.blade.php | 9 + .../custom-attributes/edit/select.blade.php | 20 + .../custom-attributes/edit/tags.blade.php | 133 + .../custom-attributes/edit/text.blade.php | 9 + .../custom-attributes/edit/textarea.blade.php | 7 + .../view(Inline-edit).blade.php | 74 + .../common/custom-attributes/view.blade.php | 15 + .../custom-attributes/view/address.blade.php | 12 + .../custom-attributes/view/boolean.blade.php | 1 + .../custom-attributes/view/checkbox.blade.php | 17 + .../custom-attributes/view/date.blade.php | 1 + .../custom-attributes/view/datetime.blade.php | 1 + .../custom-attributes/view/email.blade.php | 15 + .../custom-attributes/view/file.blade.php | 11 + .../custom-attributes/view/image.blade.php | 11 + .../custom-attributes/view/lookup.blade.php | 5 + .../view/multiselect.blade.php | 17 + .../custom-attributes/view/phone.blade.php | 15 + .../custom-attributes/view/price.blade.php | 1 + .../custom-attributes/view/select.blade.php | 7 + .../custom-attributes/view/text.blade.php | 1 + .../custom-attributes/view/textarea.blade.php | 1 + .../views/configuration/field-type.blade.php | 356 ++ .../configuration/fields/boolean.blade.php | 17 + .../configuration/fields/country.blade.php | 7 + .../views/configuration/fields/file.blade.php | 37 + .../configuration/fields/image.blade.php | 36 + .../configuration/fields/input.blade.php | 9 + .../fields/multiselect.blade.php | 40 + .../configuration/fields/select.blade.php | 40 + .../configuration/fields/state.blade.php | 7 + .../views/configuration/fields/text.blade.php | 9 + .../configuration/fields/textarea.blade.php | 7 + .../views/configuration/index.blade.php | 77 + .../contacts/organizations/create.blade.php | 61 + .../contacts/organizations/edit.blade.php | 64 + .../contacts/organizations/index.blade.php | 30 + .../views/contacts/persons/create.blade.php | 62 + .../views/contacts/persons/edit.blade.php | 65 + .../views/contacts/persons/index.blade.php | 30 + .../Resources/views/dashboard/index.blade.php | 449 ++ .../views/dashboard/template.blade.php | 534 +++ .../Resources/views/emails/common.blade.php | 25 + .../views/emails/layouts/logo.blade.php | 5 + .../views/emails/layouts/master.blade.php | 23 + .../views/emails/users/create.blade.php | 19 + .../emails/users/forget-password.blade.php | 35 + .../src/Resources/views/errors/401.blade.php | 5 + .../src/Resources/views/errors/403.blade.php | 5 + .../src/Resources/views/errors/404.blade.php | 5 + .../src/Resources/views/errors/419.blade.php | 5 + .../src/Resources/views/errors/429.blade.php | 5 + .../src/Resources/views/errors/500.blade.php | 5 + .../src/Resources/views/errors/503.blade.php | 5 + .../views/errors/illustrated-layout.blade.php | 189 + .../Resources/views/errors/layout.blade.php | 57 + .../Resources/views/errors/minimal.blade.php | 531 +++ .../views/layouts/anonymous-master.blade.php | 103 + .../Resources/views/layouts/master.blade.php | 114 + .../views/layouts/nav-left.blade.php | 45 + .../Resources/views/layouts/nav-top.blade.php | 172 + .../views/leads/common/contact.blade.php | 164 + .../views/leads/common/products.blade.php | 248 + .../Resources/views/leads/create.blade.php | 102 + .../src/Resources/views/leads/index.blade.php | 25 + .../views/leads/index/kanban.blade.php | 311 ++ .../views/leads/index/table.blade.php | 27 + .../views/leads/index/view-swither.blade.php | 50 + .../src/Resources/views/leads/view.blade.php | 334 ++ .../leads/view/activity-action.blade.php | 577 +++ .../views/leads/view/activity-list.blade.php | 465 ++ .../views/leads/view/stage.blade.php | 218 + .../Resources/views/leads/view/tags.blade.php | 249 ++ .../Resources/views/mail/compose.blade.php | 230 + .../src/Resources/views/mail/index.blade.php | 23 + .../src/Resources/views/mail/view.blade.php | 1020 +++++ .../Resources/views/products/create.blade.php | 64 + .../Resources/views/products/edit.blade.php | 67 + .../Resources/views/products/index.blade.php | 30 + .../Resources/views/quotes/create.blade.php | 666 +++ .../src/Resources/views/quotes/edit.blade.php | 669 +++ .../Resources/views/quotes/index.blade.php | 30 + .../src/Resources/views/quotes/pdf.blade.php | 253 ++ .../views/sessions/forgot-password.blade.php | 57 + .../Resources/views/sessions/login.blade.php | 88 + .../views/sessions/reset-password.blade.php | 93 + .../settings/attributes/create.blade.php | 319 ++ .../views/settings/attributes/edit.blade.php | 385 ++ .../views/settings/attributes/index.blade.php | 31 + .../settings/email-templates/create.blade.php | 197 + .../settings/email-templates/edit.blade.php | 200 + .../settings/email-templates/index.blade.php | 30 + .../views/settings/groups/create.blade.php | 90 + .../views/settings/groups/edit.blade.php | 93 + .../views/settings/groups/index.blade.php | 31 + .../Resources/views/settings/index.blade.php | 58 + .../pipeline-components-helper.blade.php | 85 + .../views/settings/pipelines/create.blade.php | 250 ++ .../views/settings/pipelines/edit.blade.php | 237 + .../views/settings/pipelines/index.blade.php | 31 + .../views/settings/roles/create.blade.php | 135 + .../views/settings/roles/edit.blade.php | 141 + .../views/settings/roles/index.blade.php | 31 + .../views/settings/sources/edit.blade.php | 75 + .../views/settings/sources/index.blade.php | 75 + .../views/settings/tags/edit.blade.php | 144 + .../views/settings/tags/index.blade.php | 145 + .../views/settings/types/edit.blade.php | 75 + .../views/settings/types/index.blade.php | 75 + .../views/settings/users/create.blade.php | 228 + .../views/settings/users/edit.blade.php | 244 + .../views/settings/users/index.blade.php | 31 + .../views/settings/workflows/create.blade.php | 760 ++++ .../views/settings/workflows/edit.blade.php | 773 ++++ .../views/settings/workflows/index.blade.php | 30 + .../views/user/account/edit.blade.php | 227 + .../src/Traits/ProvideDropdownOptions.php | 270 ++ packages/Webkul/Admin/webpack.mix.js | 39 + packages/Webkul/Attribute/composer.json | 27 + .../src/Config/attribute_lookups.php | 4 + .../Attribute/src/Contracts/Attribute.php | 7 + .../src/Contracts/AttributeOption.php | 7 + .../src/Contracts/AttributeValue.php | 7 + ...1_04_02_080709_create_attributes_table.php | 43 + ..._080837_create_attribute_options_table.php | 34 + ...6_122751_create_attribute_values_table.php | 44 + .../src/Http/Requests/AttributeForm.php | 140 + .../Webkul/Attribute/src/Models/Attribute.php | 35 + .../Attribute/src/Models/AttributeOption.php | 30 + .../src/Models/AttributeOptionProxy.php | 10 + .../Attribute/src/Models/AttributeProxy.php | 10 + .../Attribute/src/Models/AttributeValue.php | 65 + .../src/Models/AttributeValueProxy.php | 10 + .../Providers/AttributeServiceProvider.php | 43 + .../src/Providers/ModuleServiceProvider.php | 14 + .../AttributeOptionRepository.php | 18 + .../src/Repositories/AttributeRepository.php | 173 + .../Repositories/AttributeValueRepository.php | 160 + .../Attribute/src/Traits/CustomAttribute.php | 176 + packages/Webkul/Contact/composer.json | 28 + .../Contact/src/Contracts/Organization.php | 7 + .../Webkul/Contact/src/Contracts/Person.php | 7 + .../src/Database/Factories/PersonFactory.php | 30 + ...4_09_051326_create_organizations_table.php | 34 + ...2021_04_09_065617_create_persons_table.php | 37 + ...e_index_to_name_in_organizations_table.php | 32 + .../Contact/src/Models/Organization.php | 26 + .../Contact/src/Models/OrganizationProxy.php | 10 + packages/Webkul/Contact/src/Models/Person.php | 70 + .../Webkul/Contact/src/Models/PersonProxy.php | 10 + .../src/Providers/ContactServiceProvider.php | 29 + .../src/Providers/ModuleServiceProvider.php | 13 + .../Repositories/OrganizationRepository.php | 72 + .../src/Repositories/PersonRepository.php | 85 + packages/Webkul/Core/composer.json | 26 + packages/Webkul/Core/src/Config/concord.php | 22 + packages/Webkul/Core/src/Config/cors.php | 62 + packages/Webkul/Core/src/Config/sanctum.php | 65 + .../Core/src/Console/Commands/Install.php | 227 + .../Core/src/Console/Commands/Version.php | 42 + .../Webkul/Core/src/Contracts/CoreConfig.php | 7 + .../Webkul/Core/src/Contracts/Country.php | 7 + .../Core/src/Contracts/CountryState.php | 7 + .../Core/src/Contracts/Validations/Code.php | 30 + .../src/Contracts/Validations/Decimal.php | 30 + packages/Webkul/Core/src/Core.php | 394 ++ packages/Webkul/Core/src/Data/countries.json | 1277 ++++++ packages/Webkul/Core/src/Data/states.json | 3978 +++++++++++++++++ ..._03_12_060658_create_core_config_table.php | 33 + ...21_04_12_173232_create_countries_table.php | 32 + ..._12_173344_create_country_states_table.php | 36 + .../src/Database/Seeders/CountriesSeeder.php | 18 + .../src/Database/Seeders/DatabaseSeeder.php | 19 + .../src/Database/Seeders/StatesSeeder.php | 18 + .../Webkul/Core/src/Eloquent/Repository.php | 140 + .../Core/src/Eloquent/TranslatableModel.php | 23 + packages/Webkul/Core/src/Facades/Core.php | 18 + packages/Webkul/Core/src/Helpers/Helper.php | 27 + .../src/Http/Controllers/CoreController.php | 40 + packages/Webkul/Core/src/Http/helpers.php | 24 + .../Webkul/Core/src/Models/CoreConfig.php | 25 + .../Core/src/Models/CoreConfigProxy.php | 10 + packages/Webkul/Core/src/Models/Country.php | 11 + .../Webkul/Core/src/Models/CountryProxy.php | 10 + .../Webkul/Core/src/Models/CountryState.php | 11 + .../Core/src/Models/CountryStateProxy.php | 10 + .../Providers/BaseModuleServiceProvider.php | 32 + .../src/Providers/CoreServiceProvider.php | 79 + .../src/Providers/ModuleServiceProvider.php | 12 + .../src/Repositories/CoreConfigRepository.php | 128 + .../src/Repositories/CountryRepository.php | 21 + .../Repositories/CountryStateRepository.php | 21 + packages/Webkul/Core/src/Tree.php | 66 + .../Core/src/ViewRenderEventManager.php | 90 + packages/Webkul/Email/composer.json | 28 + .../Webkul/Email/src/Contracts/Attachment.php | 7 + packages/Webkul/Email/src/Contracts/Email.php | 7 + .../2021_05_24_075618_create_emails_table.php | 58 + ..._072700_create_email_attachments_table.php | 40 + .../Webkul/Email/src/Helpers/Attachment.php | 148 + packages/Webkul/Email/src/Helpers/Charset.php | 352 ++ .../src/Helpers/Contracts/CharsetManager.php | 21 + .../Webkul/Email/src/Helpers/Exception.php | 8 + .../Webkul/Email/src/Helpers/Htmlfilter.php | 1301 ++++++ packages/Webkul/Email/src/Helpers/Parser.php | 820 ++++ packages/Webkul/Email/src/Mails/Email.php | 62 + .../Webkul/Email/src/Models/Attachment.php | 33 + .../Email/src/Models/AttachmentProxy.php | 10 + packages/Webkul/Email/src/Models/Email.php | 89 + .../Webkul/Email/src/Models/EmailProxy.php | 10 + .../src/Providers/EmailServiceProvider.php | 29 + .../src/Providers/ModuleServiceProvider.php | 13 + .../src/Repositories/AttachmentRepository.php | 78 + .../src/Repositories/EmailRepository.php | 227 + .../src/Contracts/EmailTemplate.php | 7 + ...03_172713_create_email_templates_table.php | 34 + .../src/Models/EmailTemplate.php | 15 + .../src/Models/EmailTemplateProxy.php | 10 + .../EmailTemplateServiceProvider.php | 18 + .../src/Providers/ModuleServiceProvider.php | 12 + .../Repositories/EmailTemplateRepository.php | 18 + packages/Webkul/Lead/composer.json | 35 + packages/Webkul/Lead/src/Contracts/Lead.php | 7 + .../Webkul/Lead/src/Contracts/Pipeline.php | 7 + .../Webkul/Lead/src/Contracts/Product.php | 7 + packages/Webkul/Lead/src/Contracts/Source.php | 7 + packages/Webkul/Lead/src/Contracts/Stage.php | 7 + packages/Webkul/Lead/src/Contracts/Type.php | 7 + ...04_21_172825_create_lead_sources_table.php | 32 + ...1_04_21_172847_create_lead_types_table.php | 32 + ..._04_22_153258_create_lead_stages_table.php | 34 + ..._22_155706_create_lead_pipelines_table.php | 33 + ...5838_create_lead_pipeline_stages_table.php | 38 + .../2021_04_22_164215_create_leads_table.php | 56 + ...4_22_171805_create_lead_products_table.php | 40 + ...12_150329_create_lead_activities_table.php | 34 + ...21_05_20_141240_create_lead_tags_table.php | 34 + ..._07_02_201822_create_lead_quotes_table.php | 34 + ...umn_expected_close_date_in_leads_table.php | 32 + ...mn_rotten_days_in_lead_pipelines_table.php | 32 + ...54222_alter_lead_pipeline_stages_table.php | 55 + .../2021_09_30_161722_alter_leads_table.php | 47 + ...nge_user_id_to_nullable_in_leads_table.php | 32 + ...ine_stage_id_constraint_in_leads_table.php | 36 + packages/Webkul/Lead/src/Models/Lead.php | 147 + packages/Webkul/Lead/src/Models/LeadProxy.php | 10 + packages/Webkul/Lead/src/Models/Pipeline.php | 38 + .../Webkul/Lead/src/Models/PipelineProxy.php | 10 + packages/Webkul/Lead/src/Models/Product.php | 61 + .../Webkul/Lead/src/Models/ProductProxy.php | 10 + packages/Webkul/Lead/src/Models/Source.php | 28 + .../Webkul/Lead/src/Models/SourceProxy.php | 10 + packages/Webkul/Lead/src/Models/Stage.php | 42 + .../Webkul/Lead/src/Models/StageProxy.php | 10 + packages/Webkul/Lead/src/Models/Type.php | 28 + packages/Webkul/Lead/src/Models/TypeProxy.php | 10 + .../src/Providers/LeadServiceProvider.php | 29 + .../src/Providers/ModuleServiceProvider.php | 17 + .../Lead/src/Repositories/LeadRepository.php | 301 ++ .../src/Repositories/PipelineRepository.php | 128 + .../src/Repositories/ProductRepository.php | 18 + .../src/Repositories/SourceRepository.php | 18 + .../Lead/src/Repositories/StageRepository.php | 18 + .../Lead/src/Repositories/TypeRepository.php | 18 + packages/Webkul/Product/composer.json | 28 + .../Webkul/Product/src/Contracts/Product.php | 7 + ...021_04_09_065617_create_products_table.php | 36 + .../Webkul/Product/src/Models/Product.php | 25 + .../Product/src/Models/ProductProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 12 + .../src/Providers/ProductServiceProvider.php | 29 + .../src/Repositories/ProductRepository.php | 85 + packages/Webkul/Quote/src/Contracts/Quote.php | 7 + .../Webkul/Quote/src/Contracts/QuoteItem.php | 7 + .../2021_07_01_230345_create_quotes_table.php | 52 + ..._07_01_231317_create_quote_items_table.php | 49 + packages/Webkul/Quote/src/Models/Quote.php | 76 + .../Webkul/Quote/src/Models/QuoteItem.php | 39 + .../Quote/src/Models/QuoteItemProxy.php | 10 + .../Webkul/Quote/src/Models/QuoteProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 13 + .../src/Providers/QuoteServiceProvider.php | 29 + .../src/Repositories/QuoteItemRepository.php | 78 + .../src/Repositories/QuoteRepository.php | 131 + packages/Webkul/Tag/composer.json | 28 + packages/Webkul/Tag/src/Contracts/Tag.php | 7 + .../2021_05_20_141230_create_tags_table.php | 37 + packages/Webkul/Tag/src/Models/Tag.php | 31 + packages/Webkul/Tag/src/Models/TagProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 12 + .../Tag/src/Providers/TagServiceProvider.php | 29 + .../Tag/src/Repositories/TagRepository.php | 18 + packages/Webkul/UI/.gitignore | 3 + packages/Webkul/UI/composer.json | 27 + packages/Webkul/UI/package.json | 36 + .../Webkul/UI/publishable/assets/css/ui.css | 1 + .../publishable/assets/fonts/Roboto-Black.ttf | Bin 0 -> 168060 bytes .../assets/fonts/Roboto-BlackItalic.ttf | Bin 0 -> 174108 bytes .../publishable/assets/fonts/Roboto-Bold.ttf | Bin 0 -> 167336 bytes .../assets/fonts/Roboto-BoldItalic.ttf | Bin 0 -> 171508 bytes .../assets/fonts/Roboto-Italic.ttf | Bin 0 -> 170504 bytes .../publishable/assets/fonts/Roboto-Light.ttf | Bin 0 -> 167000 bytes .../assets/fonts/Roboto-LightItalic.ttf | Bin 0 -> 173172 bytes .../assets/fonts/Roboto-Medium.ttf | Bin 0 -> 168644 bytes .../assets/fonts/Roboto-MediumItalic.ttf | Bin 0 -> 173416 bytes .../assets/fonts/Roboto-Regular.ttf | Bin 0 -> 168260 bytes .../publishable/assets/fonts/Roboto-Thin.ttf | Bin 0 -> 168488 bytes .../assets/fonts/Roboto-ThinItalic.ttf | Bin 0 -> 172860 bytes .../UI/publishable/assets/images/add-icon.svg | 4 + .../assets/images/alert-danger-icon.svg | 6 + .../assets/images/align-justify-icon.svg | 4 + .../assets/images/arrow-down-icon.svg | 4 + .../assets/images/arrow-down-s-icon.svg | 4 + .../assets/images/arrow-left-icon.svg | 4 + .../assets/images/arrow-left-line-icon.svg | 4 + .../assets/images/arrow-right-icon.svg | 4 + .../assets/images/arrow-right-line-icon.svg | 5 + .../assets/images/arrow-up-icon.svg | 4 + .../assets/images/attachment-icon.svg | 6 + .../assets/images/calendar-icon.svg | 6 + .../assets/images/checkbox-checked-icon.svg | 6 + .../assets/images/checkbox-dash-icon.svg | 5 + .../assets/images/checkbox-icon.svg | 5 + .../assets/images/circle-check-white-icon.svg | 5 + .../assets/images/circle-close-white-icon.svg | 5 + .../assets/images/circle-info-white-icon.svg | 5 + .../publishable/assets/images/close-icon.svg | 5 + .../assets/images/close-white-icon.svg | 5 + .../assets/images/download-icon.svg | 5 + .../assets/images/ellipsis-icon.svg | 6 + .../publishable/assets/images/export-icon.svg | 6 + .../assets/images/external-link-icon.svg | 6 + .../UI/publishable/assets/images/eye-icon.svg | 6 + .../publishable/assets/images/folder-icon.svg | 6 + .../assets/images/forward-icon.svg | 6 + .../assets/images/forward-white-icon.svg | 6 + .../publishable/assets/images/link-icon.svg | 6 + .../assets/images/loader-active-icon.svg | 4 + .../publishable/assets/images/loader-icon.svg | 4 + .../assets/images/menu-fold-active-icon.svg | 4 + .../assets/images/menu-fold-icon.svg | 4 + .../assets/images/menu-unfold-active-icon.svg | 4 + .../assets/images/menu-unfold-icon.svg | 4 + .../publishable/assets/images/pencil-icon.svg | 6 + .../assets/images/pencil-underline-icon.svg | 5 + .../assets/images/plus-black-icon.svg | 4 + .../assets/images/plus-primary-icon.svg | 4 + .../assets/images/plus-white-icon.svg | 4 + .../assets/images/radio-checked-icon.svg | 6 + .../publishable/assets/images/radio-icon.svg | 6 + .../assets/images/reply-all-icon.svg | 6 + .../assets/images/reply-all-white-icon.svg | 6 + .../publishable/assets/images/reply-icon.svg | 6 + .../assets/images/reply-white-icon.svg | 6 + .../publishable/assets/images/search-icon.svg | 6 + .../assets/images/tags-active-icon.svg | 5 + .../publishable/assets/images/tags-icon.svg | 5 + .../publishable/assets/images/time-icon.svg | 6 + .../publishable/assets/images/trash-icon.svg | 6 + .../assets/images/trash-white-icon.svg | 6 + .../publishable/assets/images/upload-icon.svg | 5 + .../Webkul/UI/publishable/assets/js/ui.js | 2 + .../publishable/assets/js/ui.js.LICENSE.txt | 41 + .../UI/publishable/assets/mix-manifest.json | 69 + packages/Webkul/UI/src/DataGrid/DataGrid.php | 459 ++ .../src/DataGrid/Exports/DataGridExport.php | 49 + .../UI/src/DataGrid/Traits/ProvideBouncer.php | 39 + .../src/DataGrid/Traits/ProvideCollection.php | 418 ++ .../Traits/ProvideExceptionHandler.php | 89 + .../UI/src/DataGrid/Traits/ProvideExport.php | 50 + .../DataGrid/Traits/ProvideQueryResolver.php | 107 + .../Traits/ProvideQueryStringParser.php | 77 + .../DataGrid/Traits/ProvideRouteResolver.php | 32 + .../src/DataGrid/Traits/ProvideTabFilters.php | 167 + .../UI/src/Exceptions/ActionKeyException.php | 9 + .../UI/src/Exceptions/ColumnKeyException.php | 9 + .../src/Exceptions/ConditionKeyException.php | 9 + .../UI/src/Http/Controllers/Controller.php | 13 + .../src/Http/Controllers/ExportController.php | 54 + .../src/Providers/ModuleServiceProvider.php | 11 + .../UI/src/Providers/UIServiceProvider.php | 35 + .../Resources/assets/fonts/Roboto-Black.ttf | Bin 0 -> 168060 bytes .../assets/fonts/Roboto-BlackItalic.ttf | Bin 0 -> 174108 bytes .../Resources/assets/fonts/Roboto-Bold.ttf | Bin 0 -> 167336 bytes .../assets/fonts/Roboto-BoldItalic.ttf | Bin 0 -> 171508 bytes .../Resources/assets/fonts/Roboto-Italic.ttf | Bin 0 -> 170504 bytes .../Resources/assets/fonts/Roboto-Light.ttf | Bin 0 -> 167000 bytes .../assets/fonts/Roboto-LightItalic.ttf | Bin 0 -> 173172 bytes .../Resources/assets/fonts/Roboto-Medium.ttf | Bin 0 -> 168644 bytes .../assets/fonts/Roboto-MediumItalic.ttf | Bin 0 -> 173416 bytes .../Resources/assets/fonts/Roboto-Regular.ttf | Bin 0 -> 168260 bytes .../Resources/assets/fonts/Roboto-Thin.ttf | Bin 0 -> 168488 bytes .../assets/fonts/Roboto-ThinItalic.ttf | Bin 0 -> 172860 bytes .../src/Resources/assets/images/add-icon.svg | 4 + .../assets/images/alert-danger-icon.svg | 6 + .../assets/images/align-justify-icon.svg | 4 + .../assets/images/arrow-down-icon.svg | 4 + .../assets/images/arrow-down-s-icon.svg | 4 + .../assets/images/arrow-left-icon.svg | 4 + .../assets/images/arrow-left-line-icon.svg | 4 + .../assets/images/arrow-right-icon.svg | 4 + .../assets/images/arrow-right-line-icon.svg | 5 + .../Resources/assets/images/arrow-up-icon.svg | 4 + .../assets/images/attachment-icon.svg | 6 + .../Resources/assets/images/calendar-icon.svg | 6 + .../assets/images/checkbox-checked-icon.svg | 6 + .../assets/images/checkbox-dash-icon.svg | 5 + .../Resources/assets/images/checkbox-icon.svg | 5 + .../assets/images/circle-check-white-icon.svg | 5 + .../assets/images/circle-close-white-icon.svg | 5 + .../assets/images/circle-info-white-icon.svg | 5 + .../Resources/assets/images/close-icon.svg | 5 + .../assets/images/close-white-icon.svg | 5 + .../Resources/assets/images/download-icon.svg | 5 + .../Resources/assets/images/ellipsis-icon.svg | 6 + .../Resources/assets/images/export-icon.svg | 6 + .../assets/images/external-link-icon.svg | 6 + .../src/Resources/assets/images/eye-icon.svg | 6 + .../Resources/assets/images/folder-icon.svg | 6 + .../Resources/assets/images/forward-icon.svg | 6 + .../assets/images/forward-white-icon.svg | 6 + .../src/Resources/assets/images/link-icon.svg | 6 + .../assets/images/loader-active-icon.svg | 4 + .../Resources/assets/images/loader-icon.svg | 4 + .../assets/images/menu-fold-active-icon.svg | 4 + .../assets/images/menu-fold-icon.svg | 4 + .../assets/images/menu-unfold-active-icon.svg | 4 + .../assets/images/menu-unfold-icon.svg | 4 + .../Resources/assets/images/pencil-icon.svg | 6 + .../assets/images/pencil-underline-icon.svg | 5 + .../assets/images/plus-black-icon.svg | 4 + .../assets/images/plus-primary-icon.svg | 4 + .../assets/images/plus-white-icon.svg | 4 + .../assets/images/radio-checked-icon.svg | 6 + .../Resources/assets/images/radio-icon.svg | 6 + .../assets/images/reply-all-icon.svg | 6 + .../assets/images/reply-all-white-icon.svg | 6 + .../Resources/assets/images/reply-icon.svg | 6 + .../assets/images/reply-white-icon.svg | 6 + .../Resources/assets/images/search-icon.svg | 6 + .../assets/images/tags-active-icon.svg | 5 + .../src/Resources/assets/images/tags-icon.svg | 5 + .../src/Resources/assets/images/time-icon.svg | 6 + .../Resources/assets/images/trash-icon.svg | 6 + .../assets/images/trash-white-icon.svg | 6 + .../Resources/assets/images/upload-icon.svg | 5 + .../Webkul/UI/src/Resources/assets/js/app.js | 110 + .../assets/js/components/accordian.vue | 75 + .../components/attachment/attachment-item.vue | 98 + .../attachment/attachment-wrapper.vue | 140 + .../assets/js/components/bar-chart.vue | 92 + .../assets/js/components/color-picker.vue | 155 + .../js/components/datagrid/datetime.vue | 38 + .../assets/js/components/datagrid/filters.vue | 897 ++++ .../js/components/datagrid/pagination.vue | 93 + .../js/components/datagrid/side-filter.vue | 324 ++ .../js/components/datagrid/table-body.vue | 215 + .../js/components/datagrid/table-head.vue | 110 + .../assets/js/components/datagrid/table.vue | 246 + .../assets/js/components/date-range-basic.vue | 83 + .../assets/js/components/date-range.vue | 144 + .../Resources/assets/js/components/date.vue | 62 + .../assets/js/components/datetime.vue | 45 + .../assets/js/components/flash-wrapper.vue | 40 + .../Resources/assets/js/components/flash.vue | 38 + .../assets/js/components/image/image-item.vue | 83 + .../js/components/image/image-upload.vue | 86 + .../js/components/image/image-wrapper.vue | 125 + .../assets/js/components/line-chart.vue | 93 + .../Resources/assets/js/components/modal.vue | 59 + .../assets/js/components/overlay-loader.vue | 31 + .../assets/js/components/spinner-meter.vue | 23 + .../assets/js/components/tabs/tab.vue | 53 + .../assets/js/components/tabs/tabs.vue | 105 + .../Resources/assets/js/components/time.vue | 39 + .../Resources/assets/js/components/trans.js | 24 + .../assets/js/components/tree-view/index.js | 1 + .../js/components/tree-view/tree-checkbox.vue | 92 + .../js/components/tree-view/tree-item.vue | 257 ++ .../js/components/tree-view/tree-radio.vue | 25 + .../js/components/tree-view/tree-view.vue | 128 + .../UI/src/Resources/assets/js/debounce.js | 13 + .../Resources/assets/js/directives/alert.vue | 18 + .../Resources/assets/js/directives/code.vue | 16 + .../assets/js/directives/debounce.vue | 13 + .../assets/js/directives/slugify-target.vue | 26 + .../assets/js/directives/slugify.vue | 23 + .../UI/src/Resources/assets/js/dropdown.js | 93 + .../src/Resources/assets/js/store/actions.js | 29 + .../UI/src/Resources/assets/js/store/index.js | 12 + .../Resources/assets/js/store/mutations.js | 58 + .../UI/src/Resources/assets/js/store/state.js | 59 + .../UI/src/Resources/assets/sass/_mixins.scss | 26 + .../src/Resources/assets/sass/_variables.scss | 30 + .../src/Resources/assets/sass/animations.scss | 49 + .../UI/src/Resources/assets/sass/app.scss | 2085 +++++++++ .../UI/src/Resources/assets/sass/fonts.scss | 15 + .../UI/src/Resources/assets/sass/icons.scss | 218 + .../UI/src/Resources/assets/sass/rtl.css | 1 + .../UI/src/Resources/assets/sass/rtl.scss | 228 + .../Webkul/UI/src/Resources/lang/ar/app.php | 88 + .../Webkul/UI/src/Resources/lang/en/app.php | 88 + .../Webkul/UI/src/Resources/lang/tr/app.php | 87 + .../src/Resources/views/export/temp.blade.php | 19 + packages/Webkul/UI/src/Routes/web.php | 12 + packages/Webkul/UI/webpack.mix.js | 48 + packages/Webkul/User/.gitignore | 1 + packages/Webkul/User/composer.json | 27 + packages/Webkul/User/src/Contracts/Group.php | 7 + packages/Webkul/User/src/Contracts/Role.php | 7 + packages/Webkul/User/src/Contracts/User.php | 7 + .../User/src/Database/Migrations/.gitkeep | 0 .../2021_03_12_074578_create_groups_table.php | 33 + .../2021_03_12_074597_create_roles_table.php | 35 + .../2021_03_12_074857_create_users_table.php | 38 + ..._03_12_074867_create_user_groups_table.php | 34 + ...4957_create_user_password_resets_table.php | 32 + ...d_unique_index_to_name_in_groups_table.php | 32 + ...171510_add_image_column_in_users_table.php | 32 + .../Webkul/User/src/Database/Seeders/.gitkeep | 0 .../src/Database/Seeders/DatabaseSeeder.php | 20 + .../User/src/Database/Seeders/RolesSeeder.php | 23 + .../User/src/Database/Seeders/UsersSeeder.php | 28 + packages/Webkul/User/src/Models/Group.php | 27 + .../Webkul/User/src/Models/GroupProxy.php | 10 + packages/Webkul/User/src/Models/Role.php | 33 + packages/Webkul/User/src/Models/RoleProxy.php | 10 + packages/Webkul/User/src/Models/User.php | 103 + packages/Webkul/User/src/Models/UserProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 14 + .../src/Providers/UserServiceProvider.php | 29 + .../User/src/Repositories/GroupRepository.php | 18 + .../User/src/Repositories/RoleRepository.php | 18 + .../User/src/Repositories/UserRepository.php | 35 + packages/Webkul/WebForm/.gitignore | 3 + packages/Webkul/WebForm/package.json | 28 + .../WebForm/publishable/assets/css/admin.css | 3 + .../publishable/assets/css/web-form.css | 1 + .../assets/images/calendar-icon.svg | 6 + .../assets/images/close-white-icon.svg | 5 + .../assets/images/web-form-icon.svg | 23 + .../WebForm/publishable/assets/js/web-form.js | 2 + .../assets/js/web-form.js.LICENSE.txt | 33 + .../publishable/assets/mix-manifest.json | 8 + packages/Webkul/WebForm/src/Config/acl.php | 30 + packages/Webkul/WebForm/src/Config/menu.php | 12 + .../Webkul/WebForm/src/Contracts/WebForm.php | 7 + .../src/Contracts/WebFormAttribute.php | 7 + .../WebForm/src/DataGrids/WebFormDataGrid.php | 79 + ...21_12_14_213049_create_web_forms_table.php | 43 + ...14923_create_web_form_attributes_table.php | 41 + .../src/Http/Controllers/Controller.php | 23 + .../Http/Controllers/WebFormController.php | 392 ++ .../WebForm/src/Http/Requests/WebForm.php | 146 + packages/Webkul/WebForm/src/Http/routes.php | 29 + .../Webkul/WebForm/src/Models/WebForm.php | 32 + .../WebForm/src/Models/WebFormAttribute.php | 38 + .../src/Models/WebFormAttributeProxy.php | 10 + .../WebForm/src/Models/WebFormProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 13 + .../src/Providers/WebFormServiceProvider.php | 60 + .../WebFormAttributeRepository.php | 18 + .../src/Repositories/WebFormRepository.php | 100 + .../Resources/assets/fonts/Roboto-Black.ttf | Bin 0 -> 168060 bytes .../assets/fonts/Roboto-BlackItalic.ttf | Bin 0 -> 174108 bytes .../Resources/assets/fonts/Roboto-Bold.ttf | Bin 0 -> 167336 bytes .../assets/fonts/Roboto-BoldItalic.ttf | Bin 0 -> 171508 bytes .../Resources/assets/fonts/Roboto-Italic.ttf | Bin 0 -> 170504 bytes .../Resources/assets/fonts/Roboto-Light.ttf | Bin 0 -> 167000 bytes .../assets/fonts/Roboto-LightItalic.ttf | Bin 0 -> 173172 bytes .../Resources/assets/fonts/Roboto-Medium.ttf | Bin 0 -> 168644 bytes .../assets/fonts/Roboto-MediumItalic.ttf | Bin 0 -> 173416 bytes .../Resources/assets/fonts/Roboto-Regular.ttf | Bin 0 -> 168260 bytes .../Resources/assets/fonts/Roboto-Thin.ttf | Bin 0 -> 168488 bytes .../assets/fonts/Roboto-ThinItalic.ttf | Bin 0 -> 172860 bytes .../Resources/assets/images/calendar-icon.svg | 6 + .../assets/images/close-white-icon.svg | 5 + .../Resources/assets/images/web-form-icon.svg | 23 + .../src/Resources/assets/js/web-form.js | 5 + .../src/Resources/assets/sass/_mixins.scss | 22 + .../src/Resources/assets/sass/_variables.scss | 28 + .../src/Resources/assets/sass/app.scss | 3 + .../src/Resources/assets/sass/web-form.scss | 246 + .../WebForm/src/Resources/lang/ar/app.php | 48 + .../WebForm/src/Resources/lang/en/app.php | 48 + .../WebForm/src/Resources/lang/tr/app.php | 48 + .../Resources/views/layouts/style.blade.php | 1 + .../views/settings/web-forms/create.blade.php | 457 ++ .../views/settings/web-forms/edit.blade.php | 560 +++ .../settings/web-forms/form-js.blade.php | 119 + .../settings/web-forms/form-js/form.blade.php | 250 ++ .../views/settings/web-forms/index.blade.php | 30 + .../settings/web-forms/preview.blade.php | 5 + packages/Webkul/WebForm/webpack.mix.js | 40 + .../Webkul/Workflow/src/Config/workflows.php | 74 + .../Workflow/src/Contracts/Workflow.php | 7 + ...21_08_26_133538_create_workflows_table.php | 38 + .../Webkul/Workflow/src/Helpers/Entity.php | 125 + .../src/Helpers/Entity/AbstractEntity.php | 204 + .../Workflow/src/Helpers/Entity/Activity.php | 377 ++ .../Workflow/src/Helpers/Entity/Lead.php | 271 ++ .../Workflow/src/Helpers/Entity/Person.php | 164 + .../Workflow/src/Helpers/Entity/Quote.php | 208 + .../Webkul/Workflow/src/Helpers/Validator.php | 189 + .../Webkul/Workflow/src/Listeners/Entity.php | 66 + .../Webkul/Workflow/src/Models/Workflow.php | 24 + .../Workflow/src/Models/WorkflowProxy.php | 10 + .../src/Providers/ModuleServiceProvider.php | 12 + .../src/Providers/WorkflowServiceProvider.php | 47 + .../src/Repositories/WorkflowRepository.php | 18 + phpunit.xml | 32 + public/.htaccess | 21 + public/favicon.ico | 0 public/index.php | 55 + public/phpinfo.php | 5 + public/robots.txt | 2 + public/web.config | 28 + resources/css/app.css | 0 resources/js/app.js | 1 + resources/js/bootstrap.js | 28 + resources/views/errors/401.blade.php | 5 + resources/views/errors/402.blade.php | 5 + resources/views/errors/403.blade.php | 5 + resources/views/errors/404.blade.php | 5 + resources/views/errors/419.blade.php | 5 + resources/views/errors/429.blade.php | 5 + resources/views/errors/500.blade.php | 5 + resources/views/errors/503.blade.php | 5 + .../views/errors/illustrated-layout.blade.php | 487 ++ resources/views/errors/layout.blade.php | 53 + resources/views/errors/minimal.blade.php | 527 +++ .../vendor/breadcrumbs/bootstrap4.blade.php | 15 + .../vendor/breadcrumbs/bootstrap5.blade.php | 15 + .../views/vendor/breadcrumbs/bulma.blade.php | 24 + .../vendor/breadcrumbs/foundation6.blade.php | 17 + .../views/vendor/breadcrumbs/json-ld.php | 23 + .../vendor/breadcrumbs/materialize.blade.php | 17 + .../vendor/breadcrumbs/tailwind.blade.php | 28 + .../views/vendor/breadcrumbs/uikit.blade.php | 13 + .../views/vendor/mail/html/button.blade.php | 20 + .../views/vendor/mail/html/footer.blade.php | 11 + .../views/vendor/mail/html/header.blade.php | 11 + .../views/vendor/mail/html/layout.blade.php | 58 + .../views/vendor/mail/html/message.blade.php | 27 + .../views/vendor/mail/html/panel.blade.php | 14 + .../views/vendor/mail/html/subcopy.blade.php | 7 + .../views/vendor/mail/html/table.blade.php | 3 + .../views/vendor/mail/html/themes/default.css | 290 ++ .../views/vendor/mail/text/button.blade.php | 1 + .../views/vendor/mail/text/footer.blade.php | 1 + .../views/vendor/mail/text/header.blade.php | 1 + .../views/vendor/mail/text/layout.blade.php | 9 + .../views/vendor/mail/text/message.blade.php | 27 + .../views/vendor/mail/text/panel.blade.php | 1 + .../views/vendor/mail/text/subcopy.blade.php | 1 + .../views/vendor/mail/text/table.blade.php | 1 + .../vendor/notifications/email.blade.php | 58 + .../vendor/pagination/bootstrap-4.blade.php | 50 + .../vendor/pagination/bootstrap-5.blade.php | 94 + .../views/vendor/pagination/default.blade.php | 47 + .../vendor/pagination/semantic-ui.blade.php | 40 + .../pagination/simple-bootstrap-4.blade.php | 28 + .../pagination/simple-bootstrap-5.blade.php | 30 + .../pagination/simple-default.blade.php | 19 + .../pagination/simple-tailwind.blade.php | 29 + .../vendor/pagination/tailwind.blade.php | 130 + resources/views/welcome.blade.php | 552 +++ routes/api.php | 19 + routes/breadcrumbs.php | 352 ++ routes/channels.php | 18 + routes/console.php | 19 + routes/web.php | 18 + sail | 486 ++ server.php | 21 + storage/app/.gitignore | 3 + storage/app/public/.gitignore | 2 + storage/debugbar/.gitignore | 2 + storage/framework/.gitignore | 10 + storage/framework/cache/.gitignore | 3 + storage/framework/cache/data/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tests/CreatesApplication.php | 22 + tests/Feature/AuthenticationTest.php | 29 + tests/Pest.php | 78 + tests/RestAPI/ActivityTest.php | 13 + tests/RestAPI/AuthenticationTest.php | 48 + tests/RestAPI/LeadTest.php | 13 + tests/RestAPI/MailTest.php | 13 + tests/RestAPI/OrganizationTest.php | 13 + tests/RestAPI/PersonTest.php | 32 + tests/RestAPI/ProductTest.php | 13 + tests/RestAPI/QuoteTest.php | 13 + tests/RestAPI/RestAPITestCase.php | 24 + tests/TestCase.php | 10 + tests/Unit/BasicTest.php | 7 + webpack.mix.js | 17 + 1173 files changed, 79039 insertions(+) create mode 100644 .editorconfig create mode 100644 .env.example create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .htaccess create mode 100644 .styleci.yml create mode 100644 CHANGELOG for v1.x.x.md create mode 100644 CODE_OF_CONDUCT.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 app/Console/Kernel.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/Authenticate.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustHosts.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Models/User.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/BroadcastServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 composer.json create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/breadcrumbs.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/concord.php create mode 100644 config/cors.php create mode 100644 config/database.php create mode 100644 config/debugbar.php create mode 100644 config/dompdf.php create mode 100644 config/excel.php create mode 100644 config/filesystems.php create mode 100644 config/flare.php create mode 100644 config/hashing.php create mode 100644 config/ignition.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/repository.php create mode 100644 config/sanctum.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/tinker.php create mode 100644 config/view.php create mode 100644 database/.gitignore create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/2019_08_19_000000_create_failed_jobs_table.php create mode 100644 database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php create mode 100644 database/migrations/2023_12_02_000001_create_personal_access_tokens_expires_at_column.php create mode 100644 database/seeders/DatabaseSeeder.php create mode 100644 docker/7.4/Dockerfile create mode 100644 docker/7.4/php.ini create mode 100644 docker/7.4/start-container create mode 100644 docker/7.4/supervisord.conf create mode 100644 docker/8.0/Dockerfile create mode 100644 docker/8.0/php.ini create mode 100644 docker/8.0/start-container create mode 100644 docker/8.0/supervisord.conf create mode 100644 docker/8.1/Dockerfile create mode 100644 docker/8.1/php.ini create mode 100644 docker/8.1/start-container create mode 100644 docker/8.1/supervisord.conf create mode 100644 docker/8.2/Dockerfile create mode 100644 docker/8.2/php.ini create mode 100644 docker/8.2/start-container create mode 100644 docker/8.2/supervisord.conf create mode 100644 lang/en/auth.php create mode 100644 lang/en/pagination.php create mode 100644 lang/en/passwords.php create mode 100644 lang/en/validation.php create mode 100644 package.json create mode 100644 packages/Webkul/Activity/composer.json create mode 100644 packages/Webkul/Activity/src/Contracts/Activity.php create mode 100644 packages/Webkul/Activity/src/Contracts/File.php create mode 100644 packages/Webkul/Activity/src/Contracts/Participant.php create mode 100644 packages/Webkul/Activity/src/Database/Migrations/2021_05_12_150329_create_activities_table.php create mode 100644 packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php create mode 100644 packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php create mode 100644 packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php create mode 100644 packages/Webkul/Activity/src/Models/Activity.php create mode 100644 packages/Webkul/Activity/src/Models/ActivityProxy.php create mode 100644 packages/Webkul/Activity/src/Models/File.php create mode 100644 packages/Webkul/Activity/src/Models/FileProxy.php create mode 100644 packages/Webkul/Activity/src/Models/Participant.php create mode 100644 packages/Webkul/Activity/src/Models/ParticipantProxy.php create mode 100644 packages/Webkul/Activity/src/Providers/ActivityServiceProvider.php create mode 100644 packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Activity/src/Repositories/ActivityRepository.php create mode 100644 packages/Webkul/Activity/src/Repositories/FileRepository.php create mode 100644 packages/Webkul/Activity/src/Repositories/ParticipantRepository.php create mode 100644 packages/Webkul/Admin/.gitignore create mode 100644 packages/Webkul/Admin/composer.json create mode 100644 packages/Webkul/Admin/package.json create mode 100644 packages/Webkul/Admin/publishable/assets/css/admin.css create mode 100644 packages/Webkul/Admin/publishable/assets/images/activities-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/activities-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/attribute-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/avatar-dark-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/avatar-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/calendar-line-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/calendar-line-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/call-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/dashboard-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/dashboard-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/dollar-circle-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/drag-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/ellipsis-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/email-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/email-send-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/email-template-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/emails-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/emails-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/empty-bar-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/empty-bar-vertical-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/empty-kanban-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/empty-state-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/empty-table-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/error-illustraton.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-144x144.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-192x192.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-36x36.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-48x48.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-72x72.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-96x96.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-114x114.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-120x120.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-144x144.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-152x152.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-180x180.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-57x57.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-60x60.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-72x72.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-76x76.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-precomposed.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/browserconfig.xml create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/favicon-16x16.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/favicon-32x32.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/favicon-96x96.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/favicon.ico create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/manifest.json create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-144x144.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-150x150.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-310x310.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-70x70.png create mode 100644 packages/Webkul/Admin/publishable/assets/images/file-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/group-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/layout-column-line-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/layout-column-line-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/lead-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/leads-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/leads-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/logo.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/lunch-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/mail-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/meeting-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/note-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/organization-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/person-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/phone-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/phone-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/pipeline-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/product-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/products-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/products-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/quotation-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/role-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/settings-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/settings-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/source-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/sprite-main.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/table-line-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/table-line-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/tag-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/tools-active-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/tools-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/type-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/user-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/images/workflow-icon.svg create mode 100644 packages/Webkul/Admin/publishable/assets/js/admin.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/admin.js.LICENSE.txt create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/advlist/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/anchor/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/autolink/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/autoresize/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/autosave/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/bbcode/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/charmap/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/code/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/codesample/css/prism.css create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/codesample/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/contextmenu/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/directionality/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-cool.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-cry.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-embarassed.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-foot-in-mouth.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-frown.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-innocent.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-kiss.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-laughing.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-money-mouth.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-sealed.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-smile.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-surprised.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-tongue-out.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-undecided.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-wink.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/img/smiley-yell.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/emoticons/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/fullpage/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/fullscreen/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/help/img/logo.png create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/help/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/hr/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/image/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/imagetools/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/importcss/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/insertdatetime/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/legacyoutput/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/link/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/lists/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/media/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/mention/plugin.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/mention/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/mention/plugin.min.js.real create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/nonbreaking/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/noneditable/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/pagebreak/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/paste/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/preview/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/print/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/save/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/searchreplace/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/spellchecker/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/tabfocus/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/table/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/template/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/textcolor/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/textpattern/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/toc/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/css/visualblocks.css create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualchars/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/wordcount/plugin.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/content.inline.min.css create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/content.min.css create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce-small.eot create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce-small.svg create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce-small.ttf create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce-small.woff create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.eot create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.svg create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.ttf create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.woff create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/anchor.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/loader.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/object.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/trans.gif create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/skin.min.css create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/inlite/theme.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/modern/theme.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/js/tinyMCE/tinymce.min.js create mode 100644 packages/Webkul/Admin/publishable/assets/mix-manifest.json create mode 100644 packages/Webkul/Admin/src/Bouncer.php create mode 100644 packages/Webkul/Admin/src/Config/acl.php create mode 100644 packages/Webkul/Admin/src/Config/attribute_entity_types.php create mode 100644 packages/Webkul/Admin/src/Config/attribute_lookups.php create mode 100644 packages/Webkul/Admin/src/Config/core_config.php create mode 100644 packages/Webkul/Admin/src/Config/dashboard_cards.php create mode 100644 packages/Webkul/Admin/src/Config/menu.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Activity/ActivityDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Contact/PersonDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Lead/LeadDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Mail/EmailDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Product/ProductDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Quote/QuoteDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/AttributeDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/EmailTemplateDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/GroupDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/PipelineDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/RoleDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/SourceDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/TagDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/TypeDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/UserDataGrid.php create mode 100644 packages/Webkul/Admin/src/DataGrids/Setting/WorkflowDataGrid.php create mode 100644 packages/Webkul/Admin/src/Database/Migrations/2021_06_07_162808_add_lead_view_permission_column_in_users_table.php create mode 100644 packages/Webkul/Admin/src/Database/Migrations/2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/AttributeSeeder.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/EmailTemplateSeeder.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/LeadPipelineSeeder.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/LeadSourceSeeder.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/LeadTypeSeeder.php create mode 100644 packages/Webkul/Admin/src/Database/Seeders/WorkflowSeeder.php create mode 100644 packages/Webkul/Admin/src/Exceptions/Handler.php create mode 100644 packages/Webkul/Admin/src/Facades/Bouncer.php create mode 100644 packages/Webkul/Admin/src/Facades/Menu.php create mode 100644 packages/Webkul/Admin/src/Helpers/Dashboard.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Activity/ActivityController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Admin/DashboardController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Configuration/ConfigurationController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Contact/PersonController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Controller.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Lead/LeadController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Lead/QuoteController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Lead/TagController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Mail/EmailController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Product/ProductController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Quote/QuoteController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/AttributeController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/EmailTemplateController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/GroupController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/PipelineController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/RoleController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/SettingController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/SourceController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/TagController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/TypeController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/UserController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/Setting/WorkflowController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/User/AccountController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/User/ForgotPasswordController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/User/ResetPasswordController.php create mode 100644 packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php create mode 100644 packages/Webkul/Admin/src/Http/Middleware/Bouncer.php create mode 100644 packages/Webkul/Admin/src/Http/Middleware/Locale.php create mode 100644 packages/Webkul/Admin/src/Http/Requests/LeadForm.php create mode 100644 packages/Webkul/Admin/src/Http/Requests/PipelineForm.php create mode 100644 packages/Webkul/Admin/src/Http/Requests/UserForm.php create mode 100644 packages/Webkul/Admin/src/Http/helpers.php create mode 100644 packages/Webkul/Admin/src/Http/routes.php create mode 100644 packages/Webkul/Admin/src/Listeners/Lead.php create mode 100644 packages/Webkul/Admin/src/Listeners/Person.php create mode 100644 packages/Webkul/Admin/src/Menu.php create mode 100644 packages/Webkul/Admin/src/Notifications/Common.php create mode 100644 packages/Webkul/Admin/src/Notifications/User/Create.php create mode 100644 packages/Webkul/Admin/src/Notifications/User/UserResetPassword.php create mode 100644 packages/Webkul/Admin/src/Notifications/User/UserUpdatePassword.php create mode 100644 packages/Webkul/Admin/src/Providers/AdminServiceProvider.php create mode 100644 packages/Webkul/Admin/src/Providers/EventServiceProvider.php create mode 100644 packages/Webkul/Admin/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/activities-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/activities-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/attribute-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/avatar-dark-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/avatar-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/calendar-line-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/calendar-line-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/call-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/dashboard-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/dashboard-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/dollar-circle-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/drag-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/ellipsis-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/email-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/email-send-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/email-template-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/emails-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/emails-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/empty-bar-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/empty-bar-vertical-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/empty-kanban-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/empty-state-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/empty-table-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/error-illustraton.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-144x144.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-192x192.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-36x36.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-48x48.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-72x72.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-96x96.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-114x114.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-120x120.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-144x144.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-152x152.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-180x180.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-57x57.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-60x60.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-72x72.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-76x76.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-precomposed.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/browserconfig.xml create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-16x16.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-32x32.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-96x96.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon.ico create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/manifest.json create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-144x144.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-150x150.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-310x310.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-70x70.png create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/file-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/group-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/lead-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/leads-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/leads-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/logo.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/lunch-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/mail-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/meeting-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/note-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/organization-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/person-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/phone-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/phone-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/pipeline-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/product-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/products-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/products-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/quotation-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/role-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/settings-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/settings-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/source-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/sprite-main.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/table-line-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/table-line-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/tag-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/tools-active-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/tools-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/type-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/user-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/images/workflow-icon.svg create mode 100644 packages/Webkul/Admin/src/Resources/assets/js/app.js create mode 100644 packages/Webkul/Admin/src/Resources/assets/js/bootstrap.js create mode 100644 packages/Webkul/Admin/src/Resources/assets/sass/_mixins.scss create mode 100644 packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss create mode 100644 packages/Webkul/Admin/src/Resources/assets/sass/app.scss create mode 100644 packages/Webkul/Admin/src/Resources/assets/sass/icons.scss create mode 100644 packages/Webkul/Admin/src/Resources/assets/sass/kanban.scss create mode 100644 packages/Webkul/Admin/src/Resources/assets/sass/rtl.scss create mode 100644 packages/Webkul/Admin/src/Resources/lang/ar/app.php create mode 100644 packages/Webkul/Admin/src/Resources/lang/en/app.php create mode 100644 packages/Webkul/Admin/src/Resources/lang/tr/app.php create mode 100644 packages/Webkul/Admin/src/Resources/views/activities/datagrid/is-done.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/activities/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/activities/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/activities/index/calendar.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/activities/index/table.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/activities/index/view-swither.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/address.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/boolean.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/checkbox.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/date.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/datetime.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email-tags.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/file.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/image.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade1.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multi-lookup.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multiselect.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/phone.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/price.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/select.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/tags.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/text.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/textarea.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view(Inline-edit).blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/address.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/boolean.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/checkbox.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/date.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/datetime.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/email.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/file.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/image.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/lookup.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/multiselect.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/phone.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/price.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/select.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/text.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/textarea.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/boolean.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/country.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/file.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/image.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/input.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/multiselect.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/select.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/state.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/text.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/fields/textarea.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/configuration/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/organizations/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/organizations/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/organizations/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/persons/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/persons/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/contacts/persons/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/dashboard/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/dashboard/template.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/emails/common.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/emails/layouts/logo.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/emails/layouts/master.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/emails/users/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/emails/users/forget-password.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/401.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/403.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/404.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/419.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/429.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/500.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/503.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/illustrated-layout.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/layout.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/errors/minimal.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/layouts/anonymous-master.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/layouts/nav-left.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/layouts/nav-top.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/common/contact.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/common/products.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/index/kanban.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/index/table.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/index/view-swither.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/view.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/view/activity-action.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/view/activity-list.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/view/stage.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/leads/view/tags.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/mail/compose.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/mail/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/mail/view.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/products/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/products/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/products/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/quotes/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/quotes/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/quotes/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/quotes/pdf.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/sessions/forgot-password.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/sessions/login.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/sessions/reset-password.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/attributes/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/attributes/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/attributes/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/email-templates/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/email-templates/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/email-templates/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/groups/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/groups/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/groups/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/pipelines/common/pipeline-components-helper.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/pipelines/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/pipelines/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/pipelines/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/roles/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/roles/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/roles/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/sources/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/sources/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/tags/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/tags/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/types/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/types/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/users/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/users/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/users/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/workflows/create.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/workflows/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/settings/workflows/index.blade.php create mode 100644 packages/Webkul/Admin/src/Resources/views/user/account/edit.blade.php create mode 100644 packages/Webkul/Admin/src/Traits/ProvideDropdownOptions.php create mode 100644 packages/Webkul/Admin/webpack.mix.js create mode 100644 packages/Webkul/Attribute/composer.json create mode 100644 packages/Webkul/Attribute/src/Config/attribute_lookups.php create mode 100644 packages/Webkul/Attribute/src/Contracts/Attribute.php create mode 100644 packages/Webkul/Attribute/src/Contracts/AttributeOption.php create mode 100644 packages/Webkul/Attribute/src/Contracts/AttributeValue.php create mode 100644 packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080709_create_attributes_table.php create mode 100644 packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080837_create_attribute_options_table.php create mode 100644 packages/Webkul/Attribute/src/Database/Migrations/2021_04_06_122751_create_attribute_values_table.php create mode 100644 packages/Webkul/Attribute/src/Http/Requests/AttributeForm.php create mode 100644 packages/Webkul/Attribute/src/Models/Attribute.php create mode 100644 packages/Webkul/Attribute/src/Models/AttributeOption.php create mode 100644 packages/Webkul/Attribute/src/Models/AttributeOptionProxy.php create mode 100644 packages/Webkul/Attribute/src/Models/AttributeProxy.php create mode 100644 packages/Webkul/Attribute/src/Models/AttributeValue.php create mode 100644 packages/Webkul/Attribute/src/Models/AttributeValueProxy.php create mode 100644 packages/Webkul/Attribute/src/Providers/AttributeServiceProvider.php create mode 100644 packages/Webkul/Attribute/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Attribute/src/Repositories/AttributeOptionRepository.php create mode 100644 packages/Webkul/Attribute/src/Repositories/AttributeRepository.php create mode 100644 packages/Webkul/Attribute/src/Repositories/AttributeValueRepository.php create mode 100644 packages/Webkul/Attribute/src/Traits/CustomAttribute.php create mode 100644 packages/Webkul/Contact/composer.json create mode 100644 packages/Webkul/Contact/src/Contracts/Organization.php create mode 100644 packages/Webkul/Contact/src/Contracts/Person.php create mode 100644 packages/Webkul/Contact/src/Database/Factories/PersonFactory.php create mode 100644 packages/Webkul/Contact/src/Database/Migrations/2021_04_09_051326_create_organizations_table.php create mode 100644 packages/Webkul/Contact/src/Database/Migrations/2021_04_09_065617_create_persons_table.php create mode 100644 packages/Webkul/Contact/src/Database/Migrations/2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php create mode 100644 packages/Webkul/Contact/src/Models/Organization.php create mode 100644 packages/Webkul/Contact/src/Models/OrganizationProxy.php create mode 100644 packages/Webkul/Contact/src/Models/Person.php create mode 100644 packages/Webkul/Contact/src/Models/PersonProxy.php create mode 100644 packages/Webkul/Contact/src/Providers/ContactServiceProvider.php create mode 100644 packages/Webkul/Contact/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Contact/src/Repositories/OrganizationRepository.php create mode 100644 packages/Webkul/Contact/src/Repositories/PersonRepository.php create mode 100644 packages/Webkul/Core/composer.json create mode 100644 packages/Webkul/Core/src/Config/concord.php create mode 100644 packages/Webkul/Core/src/Config/cors.php create mode 100644 packages/Webkul/Core/src/Config/sanctum.php create mode 100644 packages/Webkul/Core/src/Console/Commands/Install.php create mode 100644 packages/Webkul/Core/src/Console/Commands/Version.php create mode 100644 packages/Webkul/Core/src/Contracts/CoreConfig.php create mode 100644 packages/Webkul/Core/src/Contracts/Country.php create mode 100644 packages/Webkul/Core/src/Contracts/CountryState.php create mode 100644 packages/Webkul/Core/src/Contracts/Validations/Code.php create mode 100644 packages/Webkul/Core/src/Contracts/Validations/Decimal.php create mode 100644 packages/Webkul/Core/src/Core.php create mode 100644 packages/Webkul/Core/src/Data/countries.json create mode 100644 packages/Webkul/Core/src/Data/states.json create mode 100644 packages/Webkul/Core/src/Database/Migrations/2021_03_12_060658_create_core_config_table.php create mode 100644 packages/Webkul/Core/src/Database/Migrations/2021_04_12_173232_create_countries_table.php create mode 100644 packages/Webkul/Core/src/Database/Migrations/2021_04_12_173344_create_country_states_table.php create mode 100644 packages/Webkul/Core/src/Database/Seeders/CountriesSeeder.php create mode 100644 packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php create mode 100644 packages/Webkul/Core/src/Database/Seeders/StatesSeeder.php create mode 100644 packages/Webkul/Core/src/Eloquent/Repository.php create mode 100644 packages/Webkul/Core/src/Eloquent/TranslatableModel.php create mode 100644 packages/Webkul/Core/src/Facades/Core.php create mode 100644 packages/Webkul/Core/src/Helpers/Helper.php create mode 100644 packages/Webkul/Core/src/Http/Controllers/CoreController.php create mode 100644 packages/Webkul/Core/src/Http/helpers.php create mode 100644 packages/Webkul/Core/src/Models/CoreConfig.php create mode 100644 packages/Webkul/Core/src/Models/CoreConfigProxy.php create mode 100644 packages/Webkul/Core/src/Models/Country.php create mode 100644 packages/Webkul/Core/src/Models/CountryProxy.php create mode 100644 packages/Webkul/Core/src/Models/CountryState.php create mode 100644 packages/Webkul/Core/src/Models/CountryStateProxy.php create mode 100644 packages/Webkul/Core/src/Providers/BaseModuleServiceProvider.php create mode 100644 packages/Webkul/Core/src/Providers/CoreServiceProvider.php create mode 100644 packages/Webkul/Core/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Core/src/Repositories/CoreConfigRepository.php create mode 100644 packages/Webkul/Core/src/Repositories/CountryRepository.php create mode 100644 packages/Webkul/Core/src/Repositories/CountryStateRepository.php create mode 100644 packages/Webkul/Core/src/Tree.php create mode 100644 packages/Webkul/Core/src/ViewRenderEventManager.php create mode 100644 packages/Webkul/Email/composer.json create mode 100644 packages/Webkul/Email/src/Contracts/Attachment.php create mode 100644 packages/Webkul/Email/src/Contracts/Email.php create mode 100644 packages/Webkul/Email/src/Database/Migrations/2021_05_24_075618_create_emails_table.php create mode 100644 packages/Webkul/Email/src/Database/Migrations/2021_05_25_072700_create_email_attachments_table.php create mode 100644 packages/Webkul/Email/src/Helpers/Attachment.php create mode 100644 packages/Webkul/Email/src/Helpers/Charset.php create mode 100644 packages/Webkul/Email/src/Helpers/Contracts/CharsetManager.php create mode 100644 packages/Webkul/Email/src/Helpers/Exception.php create mode 100644 packages/Webkul/Email/src/Helpers/Htmlfilter.php create mode 100644 packages/Webkul/Email/src/Helpers/Parser.php create mode 100644 packages/Webkul/Email/src/Mails/Email.php create mode 100644 packages/Webkul/Email/src/Models/Attachment.php create mode 100644 packages/Webkul/Email/src/Models/AttachmentProxy.php create mode 100644 packages/Webkul/Email/src/Models/Email.php create mode 100644 packages/Webkul/Email/src/Models/EmailProxy.php create mode 100644 packages/Webkul/Email/src/Providers/EmailServiceProvider.php create mode 100644 packages/Webkul/Email/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Email/src/Repositories/AttachmentRepository.php create mode 100644 packages/Webkul/Email/src/Repositories/EmailRepository.php create mode 100644 packages/Webkul/EmailTemplate/src/Contracts/EmailTemplate.php create mode 100644 packages/Webkul/EmailTemplate/src/Database/Migrations/2021_09_03_172713_create_email_templates_table.php create mode 100644 packages/Webkul/EmailTemplate/src/Models/EmailTemplate.php create mode 100644 packages/Webkul/EmailTemplate/src/Models/EmailTemplateProxy.php create mode 100644 packages/Webkul/EmailTemplate/src/Providers/EmailTemplateServiceProvider.php create mode 100644 packages/Webkul/EmailTemplate/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/EmailTemplate/src/Repositories/EmailTemplateRepository.php create mode 100644 packages/Webkul/Lead/composer.json create mode 100644 packages/Webkul/Lead/src/Contracts/Lead.php create mode 100644 packages/Webkul/Lead/src/Contracts/Pipeline.php create mode 100644 packages/Webkul/Lead/src/Contracts/Product.php create mode 100644 packages/Webkul/Lead/src/Contracts/Source.php create mode 100644 packages/Webkul/Lead/src/Contracts/Stage.php create mode 100644 packages/Webkul/Lead/src/Contracts/Type.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_21_172825_create_lead_sources_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_21_172847_create_lead_types_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_22_153258_create_lead_stages_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_22_155706_create_lead_pipelines_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_22_155838_create_lead_pipeline_stages_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_22_164215_create_leads_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_04_22_171805_create_lead_products_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_05_12_150329_create_lead_activities_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_05_20_141240_create_lead_tags_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_07_02_201822_create_lead_quotes_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_09_23_221138_add_column_expected_close_date_in_leads_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_09_30_135857_add_column_rotten_days_in_lead_pipelines_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_09_30_154222_alter_lead_pipeline_stages_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_09_30_161722_alter_leads_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_09_30_183825_change_user_id_to_nullable_in_leads_table.php create mode 100644 packages/Webkul/Lead/src/Database/Migrations/2021_11_11_180804_change_lead_pipeline_stage_id_constraint_in_leads_table.php create mode 100644 packages/Webkul/Lead/src/Models/Lead.php create mode 100644 packages/Webkul/Lead/src/Models/LeadProxy.php create mode 100644 packages/Webkul/Lead/src/Models/Pipeline.php create mode 100644 packages/Webkul/Lead/src/Models/PipelineProxy.php create mode 100644 packages/Webkul/Lead/src/Models/Product.php create mode 100644 packages/Webkul/Lead/src/Models/ProductProxy.php create mode 100644 packages/Webkul/Lead/src/Models/Source.php create mode 100644 packages/Webkul/Lead/src/Models/SourceProxy.php create mode 100644 packages/Webkul/Lead/src/Models/Stage.php create mode 100644 packages/Webkul/Lead/src/Models/StageProxy.php create mode 100644 packages/Webkul/Lead/src/Models/Type.php create mode 100644 packages/Webkul/Lead/src/Models/TypeProxy.php create mode 100644 packages/Webkul/Lead/src/Providers/LeadServiceProvider.php create mode 100644 packages/Webkul/Lead/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Lead/src/Repositories/LeadRepository.php create mode 100644 packages/Webkul/Lead/src/Repositories/PipelineRepository.php create mode 100644 packages/Webkul/Lead/src/Repositories/ProductRepository.php create mode 100644 packages/Webkul/Lead/src/Repositories/SourceRepository.php create mode 100644 packages/Webkul/Lead/src/Repositories/StageRepository.php create mode 100644 packages/Webkul/Lead/src/Repositories/TypeRepository.php create mode 100644 packages/Webkul/Product/composer.json create mode 100644 packages/Webkul/Product/src/Contracts/Product.php create mode 100644 packages/Webkul/Product/src/Database/Migrations/2021_04_09_065617_create_products_table.php create mode 100644 packages/Webkul/Product/src/Models/Product.php create mode 100644 packages/Webkul/Product/src/Models/ProductProxy.php create mode 100644 packages/Webkul/Product/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Product/src/Providers/ProductServiceProvider.php create mode 100644 packages/Webkul/Product/src/Repositories/ProductRepository.php create mode 100644 packages/Webkul/Quote/src/Contracts/Quote.php create mode 100644 packages/Webkul/Quote/src/Contracts/QuoteItem.php create mode 100644 packages/Webkul/Quote/src/Database/Migrations/2021_07_01_230345_create_quotes_table.php create mode 100644 packages/Webkul/Quote/src/Database/Migrations/2021_07_01_231317_create_quote_items_table.php create mode 100644 packages/Webkul/Quote/src/Models/Quote.php create mode 100644 packages/Webkul/Quote/src/Models/QuoteItem.php create mode 100644 packages/Webkul/Quote/src/Models/QuoteItemProxy.php create mode 100644 packages/Webkul/Quote/src/Models/QuoteProxy.php create mode 100644 packages/Webkul/Quote/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Quote/src/Providers/QuoteServiceProvider.php create mode 100644 packages/Webkul/Quote/src/Repositories/QuoteItemRepository.php create mode 100644 packages/Webkul/Quote/src/Repositories/QuoteRepository.php create mode 100644 packages/Webkul/Tag/composer.json create mode 100644 packages/Webkul/Tag/src/Contracts/Tag.php create mode 100644 packages/Webkul/Tag/src/Database/Migrations/2021_05_20_141230_create_tags_table.php create mode 100644 packages/Webkul/Tag/src/Models/Tag.php create mode 100644 packages/Webkul/Tag/src/Models/TagProxy.php create mode 100644 packages/Webkul/Tag/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Tag/src/Providers/TagServiceProvider.php create mode 100644 packages/Webkul/Tag/src/Repositories/TagRepository.php create mode 100644 packages/Webkul/UI/.gitignore create mode 100644 packages/Webkul/UI/composer.json create mode 100644 packages/Webkul/UI/package.json create mode 100644 packages/Webkul/UI/publishable/assets/css/ui.css create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Black.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-BlackItalic.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Bold.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-BoldItalic.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Italic.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Light.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-LightItalic.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Medium.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-MediumItalic.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Regular.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-Thin.ttf create mode 100644 packages/Webkul/UI/publishable/assets/fonts/Roboto-ThinItalic.ttf create mode 100644 packages/Webkul/UI/publishable/assets/images/add-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/alert-danger-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/align-justify-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-down-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-down-s-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-left-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-left-line-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-right-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-right-line-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/arrow-up-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/attachment-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/calendar-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/checkbox-checked-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/checkbox-dash-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/checkbox-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/circle-check-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/circle-close-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/circle-info-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/close-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/close-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/download-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/ellipsis-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/export-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/external-link-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/eye-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/folder-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/forward-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/forward-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/link-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/loader-active-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/loader-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/menu-fold-active-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/menu-fold-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/menu-unfold-active-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/menu-unfold-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/pencil-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/pencil-underline-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/plus-black-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/plus-primary-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/plus-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/radio-checked-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/radio-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/reply-all-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/reply-all-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/reply-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/reply-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/search-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/tags-active-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/tags-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/time-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/trash-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/trash-white-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/images/upload-icon.svg create mode 100644 packages/Webkul/UI/publishable/assets/js/ui.js create mode 100644 packages/Webkul/UI/publishable/assets/js/ui.js.LICENSE.txt create mode 100644 packages/Webkul/UI/publishable/assets/mix-manifest.json create mode 100644 packages/Webkul/UI/src/DataGrid/DataGrid.php create mode 100644 packages/Webkul/UI/src/DataGrid/Exports/DataGridExport.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideBouncer.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideCollection.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideExceptionHandler.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideExport.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideQueryResolver.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideQueryStringParser.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideRouteResolver.php create mode 100644 packages/Webkul/UI/src/DataGrid/Traits/ProvideTabFilters.php create mode 100644 packages/Webkul/UI/src/Exceptions/ActionKeyException.php create mode 100644 packages/Webkul/UI/src/Exceptions/ColumnKeyException.php create mode 100644 packages/Webkul/UI/src/Exceptions/ConditionKeyException.php create mode 100644 packages/Webkul/UI/src/Http/Controllers/Controller.php create mode 100644 packages/Webkul/UI/src/Http/Controllers/ExportController.php create mode 100644 packages/Webkul/UI/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/UI/src/Providers/UIServiceProvider.php create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Black.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-BlackItalic.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Bold.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-BoldItalic.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Italic.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Light.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-LightItalic.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Medium.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-MediumItalic.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Regular.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-Thin.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/fonts/Roboto-ThinItalic.ttf create mode 100644 packages/Webkul/UI/src/Resources/assets/images/add-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/alert-danger-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/align-justify-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-down-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-down-s-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-left-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-left-line-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-right-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-right-line-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/arrow-up-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/attachment-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/calendar-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/checkbox-checked-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/checkbox-dash-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/checkbox-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/circle-check-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/circle-close-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/circle-info-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/close-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/close-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/download-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/ellipsis-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/export-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/external-link-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/eye-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/folder-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/forward-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/forward-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/link-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/loader-active-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/loader-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/menu-fold-active-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/menu-fold-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/menu-unfold-active-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/menu-unfold-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/pencil-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/pencil-underline-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/plus-black-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/plus-primary-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/plus-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/radio-checked-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/radio-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/reply-all-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/reply-all-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/reply-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/reply-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/search-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/tags-active-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/tags-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/time-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/trash-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/trash-white-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/images/upload-icon.svg create mode 100644 packages/Webkul/UI/src/Resources/assets/js/app.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/accordian.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/attachment/attachment-item.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/attachment/attachment-wrapper.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/bar-chart.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/color-picker.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/datetime.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/filters.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/pagination.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/side-filter.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-body.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-head.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/date-range-basic.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/date-range.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/date.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/datetime.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/flash-wrapper.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/flash.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/image/image-item.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/image/image-upload.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/image/image-wrapper.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/line-chart.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/modal.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/overlay-loader.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/spinner-meter.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tabs/tab.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tabs/tabs.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/time.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/trans.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tree-view/index.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-checkbox.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-item.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-radio.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-view.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/debounce.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/directives/alert.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/directives/code.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/directives/debounce.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/directives/slugify-target.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/directives/slugify.vue create mode 100644 packages/Webkul/UI/src/Resources/assets/js/dropdown.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/store/actions.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/store/index.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/store/mutations.js create mode 100644 packages/Webkul/UI/src/Resources/assets/js/store/state.js create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/_mixins.scss create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/_variables.scss create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/animations.scss create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/app.scss create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/fonts.scss create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/icons.scss create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/rtl.css create mode 100644 packages/Webkul/UI/src/Resources/assets/sass/rtl.scss create mode 100644 packages/Webkul/UI/src/Resources/lang/ar/app.php create mode 100644 packages/Webkul/UI/src/Resources/lang/en/app.php create mode 100644 packages/Webkul/UI/src/Resources/lang/tr/app.php create mode 100644 packages/Webkul/UI/src/Resources/views/export/temp.blade.php create mode 100644 packages/Webkul/UI/src/Routes/web.php create mode 100644 packages/Webkul/UI/webpack.mix.js create mode 100644 packages/Webkul/User/.gitignore create mode 100644 packages/Webkul/User/composer.json create mode 100644 packages/Webkul/User/src/Contracts/Group.php create mode 100644 packages/Webkul/User/src/Contracts/Role.php create mode 100644 packages/Webkul/User/src/Contracts/User.php create mode 100644 packages/Webkul/User/src/Database/Migrations/.gitkeep create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_03_12_074578_create_groups_table.php create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_03_12_074597_create_roles_table.php create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_03_12_074857_create_users_table.php create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_03_12_074867_create_user_groups_table.php create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_03_12_074957_create_user_password_resets_table.php create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_09_22_194622_add_unique_index_to_name_in_groups_table.php create mode 100644 packages/Webkul/User/src/Database/Migrations/2021_11_12_171510_add_image_column_in_users_table.php create mode 100644 packages/Webkul/User/src/Database/Seeders/.gitkeep create mode 100644 packages/Webkul/User/src/Database/Seeders/DatabaseSeeder.php create mode 100644 packages/Webkul/User/src/Database/Seeders/RolesSeeder.php create mode 100644 packages/Webkul/User/src/Database/Seeders/UsersSeeder.php create mode 100644 packages/Webkul/User/src/Models/Group.php create mode 100644 packages/Webkul/User/src/Models/GroupProxy.php create mode 100644 packages/Webkul/User/src/Models/Role.php create mode 100644 packages/Webkul/User/src/Models/RoleProxy.php create mode 100644 packages/Webkul/User/src/Models/User.php create mode 100644 packages/Webkul/User/src/Models/UserProxy.php create mode 100644 packages/Webkul/User/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/User/src/Providers/UserServiceProvider.php create mode 100644 packages/Webkul/User/src/Repositories/GroupRepository.php create mode 100644 packages/Webkul/User/src/Repositories/RoleRepository.php create mode 100644 packages/Webkul/User/src/Repositories/UserRepository.php create mode 100644 packages/Webkul/WebForm/.gitignore create mode 100644 packages/Webkul/WebForm/package.json create mode 100644 packages/Webkul/WebForm/publishable/assets/css/admin.css create mode 100644 packages/Webkul/WebForm/publishable/assets/css/web-form.css create mode 100644 packages/Webkul/WebForm/publishable/assets/images/calendar-icon.svg create mode 100644 packages/Webkul/WebForm/publishable/assets/images/close-white-icon.svg create mode 100644 packages/Webkul/WebForm/publishable/assets/images/web-form-icon.svg create mode 100644 packages/Webkul/WebForm/publishable/assets/js/web-form.js create mode 100644 packages/Webkul/WebForm/publishable/assets/js/web-form.js.LICENSE.txt create mode 100644 packages/Webkul/WebForm/publishable/assets/mix-manifest.json create mode 100644 packages/Webkul/WebForm/src/Config/acl.php create mode 100644 packages/Webkul/WebForm/src/Config/menu.php create mode 100644 packages/Webkul/WebForm/src/Contracts/WebForm.php create mode 100644 packages/Webkul/WebForm/src/Contracts/WebFormAttribute.php create mode 100644 packages/Webkul/WebForm/src/DataGrids/WebFormDataGrid.php create mode 100644 packages/Webkul/WebForm/src/Database/Migrations/2021_12_14_213049_create_web_forms_table.php create mode 100644 packages/Webkul/WebForm/src/Database/Migrations/2021_12_14_214923_create_web_form_attributes_table.php create mode 100644 packages/Webkul/WebForm/src/Http/Controllers/Controller.php create mode 100644 packages/Webkul/WebForm/src/Http/Controllers/WebFormController.php create mode 100644 packages/Webkul/WebForm/src/Http/Requests/WebForm.php create mode 100644 packages/Webkul/WebForm/src/Http/routes.php create mode 100644 packages/Webkul/WebForm/src/Models/WebForm.php create mode 100644 packages/Webkul/WebForm/src/Models/WebFormAttribute.php create mode 100644 packages/Webkul/WebForm/src/Models/WebFormAttributeProxy.php create mode 100644 packages/Webkul/WebForm/src/Models/WebFormProxy.php create mode 100644 packages/Webkul/WebForm/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/WebForm/src/Providers/WebFormServiceProvider.php create mode 100644 packages/Webkul/WebForm/src/Repositories/WebFormAttributeRepository.php create mode 100644 packages/Webkul/WebForm/src/Repositories/WebFormRepository.php create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Black.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-BlackItalic.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Bold.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-BoldItalic.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Italic.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Light.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-LightItalic.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Medium.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-MediumItalic.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Regular.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-Thin.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/fonts/Roboto-ThinItalic.ttf create mode 100644 packages/Webkul/WebForm/src/Resources/assets/images/calendar-icon.svg create mode 100644 packages/Webkul/WebForm/src/Resources/assets/images/close-white-icon.svg create mode 100644 packages/Webkul/WebForm/src/Resources/assets/images/web-form-icon.svg create mode 100644 packages/Webkul/WebForm/src/Resources/assets/js/web-form.js create mode 100644 packages/Webkul/WebForm/src/Resources/assets/sass/_mixins.scss create mode 100644 packages/Webkul/WebForm/src/Resources/assets/sass/_variables.scss create mode 100644 packages/Webkul/WebForm/src/Resources/assets/sass/app.scss create mode 100644 packages/Webkul/WebForm/src/Resources/assets/sass/web-form.scss create mode 100644 packages/Webkul/WebForm/src/Resources/lang/ar/app.php create mode 100644 packages/Webkul/WebForm/src/Resources/lang/en/app.php create mode 100644 packages/Webkul/WebForm/src/Resources/lang/tr/app.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/layouts/style.blade.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/settings/web-forms/create.blade.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/settings/web-forms/edit.blade.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js.blade.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js/form.blade.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/settings/web-forms/index.blade.php create mode 100644 packages/Webkul/WebForm/src/Resources/views/settings/web-forms/preview.blade.php create mode 100644 packages/Webkul/WebForm/webpack.mix.js create mode 100644 packages/Webkul/Workflow/src/Config/workflows.php create mode 100644 packages/Webkul/Workflow/src/Contracts/Workflow.php create mode 100644 packages/Webkul/Workflow/src/Database/Migrations/2021_08_26_133538_create_workflows_table.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Entity.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Entity/AbstractEntity.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Entity/Activity.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Entity/Lead.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Entity/Person.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Entity/Quote.php create mode 100644 packages/Webkul/Workflow/src/Helpers/Validator.php create mode 100644 packages/Webkul/Workflow/src/Listeners/Entity.php create mode 100644 packages/Webkul/Workflow/src/Models/Workflow.php create mode 100644 packages/Webkul/Workflow/src/Models/WorkflowProxy.php create mode 100644 packages/Webkul/Workflow/src/Providers/ModuleServiceProvider.php create mode 100644 packages/Webkul/Workflow/src/Providers/WorkflowServiceProvider.php create mode 100644 packages/Webkul/Workflow/src/Repositories/WorkflowRepository.php create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/favicon.ico create mode 100644 public/index.php create mode 100644 public/phpinfo.php create mode 100644 public/robots.txt create mode 100644 public/web.config create mode 100644 resources/css/app.css create mode 100644 resources/js/app.js create mode 100644 resources/js/bootstrap.js create mode 100644 resources/views/errors/401.blade.php create mode 100644 resources/views/errors/402.blade.php create mode 100644 resources/views/errors/403.blade.php create mode 100644 resources/views/errors/404.blade.php create mode 100644 resources/views/errors/419.blade.php create mode 100644 resources/views/errors/429.blade.php create mode 100644 resources/views/errors/500.blade.php create mode 100644 resources/views/errors/503.blade.php create mode 100644 resources/views/errors/illustrated-layout.blade.php create mode 100644 resources/views/errors/layout.blade.php create mode 100644 resources/views/errors/minimal.blade.php create mode 100644 resources/views/vendor/breadcrumbs/bootstrap4.blade.php create mode 100644 resources/views/vendor/breadcrumbs/bootstrap5.blade.php create mode 100644 resources/views/vendor/breadcrumbs/bulma.blade.php create mode 100644 resources/views/vendor/breadcrumbs/foundation6.blade.php create mode 100644 resources/views/vendor/breadcrumbs/json-ld.php create mode 100644 resources/views/vendor/breadcrumbs/materialize.blade.php create mode 100644 resources/views/vendor/breadcrumbs/tailwind.blade.php create mode 100644 resources/views/vendor/breadcrumbs/uikit.blade.php create mode 100644 resources/views/vendor/mail/html/button.blade.php create mode 100644 resources/views/vendor/mail/html/footer.blade.php create mode 100644 resources/views/vendor/mail/html/header.blade.php create mode 100644 resources/views/vendor/mail/html/layout.blade.php create mode 100644 resources/views/vendor/mail/html/message.blade.php create mode 100644 resources/views/vendor/mail/html/panel.blade.php create mode 100644 resources/views/vendor/mail/html/subcopy.blade.php create mode 100644 resources/views/vendor/mail/html/table.blade.php create mode 100644 resources/views/vendor/mail/html/themes/default.css create mode 100644 resources/views/vendor/mail/text/button.blade.php create mode 100644 resources/views/vendor/mail/text/footer.blade.php create mode 100644 resources/views/vendor/mail/text/header.blade.php create mode 100644 resources/views/vendor/mail/text/layout.blade.php create mode 100644 resources/views/vendor/mail/text/message.blade.php create mode 100644 resources/views/vendor/mail/text/panel.blade.php create mode 100644 resources/views/vendor/mail/text/subcopy.blade.php create mode 100644 resources/views/vendor/mail/text/table.blade.php create mode 100644 resources/views/vendor/notifications/email.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/default.blade.php create mode 100644 resources/views/vendor/pagination/semantic-ui.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/simple-default.blade.php create mode 100644 resources/views/vendor/pagination/simple-tailwind.blade.php create mode 100644 resources/views/vendor/pagination/tailwind.blade.php create mode 100644 resources/views/welcome.blade.php create mode 100644 routes/api.php create mode 100644 routes/breadcrumbs.php create mode 100644 routes/channels.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 sail create mode 100644 server.php create mode 100644 storage/app/.gitignore create mode 100644 storage/app/public/.gitignore create mode 100644 storage/debugbar/.gitignore create mode 100644 storage/framework/.gitignore create mode 100644 storage/framework/cache/.gitignore create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 storage/framework/sessions/.gitignore create mode 100644 storage/framework/testing/.gitignore create mode 100644 storage/framework/views/.gitignore create mode 100644 storage/logs/.gitignore create mode 100644 tests/CreatesApplication.php create mode 100644 tests/Feature/AuthenticationTest.php create mode 100644 tests/Pest.php create mode 100644 tests/RestAPI/ActivityTest.php create mode 100644 tests/RestAPI/AuthenticationTest.php create mode 100644 tests/RestAPI/LeadTest.php create mode 100644 tests/RestAPI/MailTest.php create mode 100644 tests/RestAPI/OrganizationTest.php create mode 100644 tests/RestAPI/PersonTest.php create mode 100644 tests/RestAPI/ProductTest.php create mode 100644 tests/RestAPI/QuoteTest.php create mode 100644 tests/RestAPI/RestAPITestCase.php create mode 100644 tests/TestCase.php create mode 100644 tests/Unit/BasicTest.php create mode 100644 webpack.mix.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6537ca4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false + +[*.{yml,yaml}] +indent_size = 2 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..51bc4d1 --- /dev/null +++ b/.env.example @@ -0,0 +1,52 @@ +APP_NAME='Krayin CRM' +APP_ENV=local +APP_VERSION=1.2.4 +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost +APP_TIMEZONE=Asia/Kolkata + +LOG_CHANNEL=stack +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel-crm +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=laravel@krayincrm.com +MAIL_FROM_NAME="${APP_NAME}" +MAIL_DOMAIN=webkul.com + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..967315d --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +* text=auto +*.css linguist-vendored +*.scss linguist-vendored +*.js linguist-vendored +CHANGELOG.md export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0d412d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,31 @@ +.env +.env.testing +.env.backup +.DS_Store +.phpunit.result.cache +docker-compose.override.yml +.idea +.php_cs.cache +.vscode +todo.txt +.vagrant +composer.lock +/data +/docker-compose-collection +Homestead.json +Homestead.yaml +/ignorables/* +/node_modules +npm-debug.log +package-lock.json +/public/css +/public/fonts +/public/js +/public/hot +/public/storage +/public/themes +/public/vendor +/storage/*.key +/storage/dcc-data/ +/stubs +/vendor diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..8282e37 --- /dev/null +++ b/.htaccess @@ -0,0 +1,18 @@ + + + Options -MultiViews + + +RewriteEngine On + +RewriteCond %{REQUEST_FILENAME} -d [OR] +RewriteCond %{REQUEST_FILENAME} -f +RewriteRule ^ ^$1 [N] + +RewriteCond %{REQUEST_URI} (\.\w+$) [NC] +RewriteRule ^(.*)$ public/$1 + +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule ^ server.php + \ No newline at end of file diff --git a/.styleci.yml b/.styleci.yml new file mode 100644 index 0000000..9231873 --- /dev/null +++ b/.styleci.yml @@ -0,0 +1,13 @@ +php: + preset: laravel + disabled: + - no_unused_imports + finder: + not-name: + - index.php + - server.php +js: + finder: + not-name: + - webpack.mix.js +css: true diff --git a/CHANGELOG for v1.x.x.md b/CHANGELOG for v1.x.x.md new file mode 100644 index 0000000..56c5d80 --- /dev/null +++ b/CHANGELOG for v1.x.x.md @@ -0,0 +1,832 @@ +## **v1.2.4 (15th of September 2022)** - *Release* + +* #816[feature] - There should be an option to filter the expired quotes + +* #374[feature] - Add Drag and Drop functionality to attach files. + +* #1073[enhancement] - The section should be removed from the dashboard for which the user has no permission. + +* #1013[enhancement] - Add support to php 8.1 + +* #974[enhancement] - There should be an option for copy the Embed in web form + +* #947[enhancement] - There is no option for update leads stages using workflow + +* #847[enhancement] - There should be a loader before success message when the user is trying to submit the web-form + +* #821[enhancement] - There is no option to filter the system/custom attributes.. + +* #802[enhancement] - Only the filtered data should be exported if the user is trying to export data after applying the + filter. + +* #764[enhancement] - There should be an option to filter all rotten leads + +* #663[enhancement] - There should be an option to print quotes in the quote table if the user is trying to print + multiple quotes at a time. + +* #435[enhancement] - There should be an option for a "move to trash" when a customer trying to delete the inbox mail. + +* #1091[fixed] - The date filter is not working if the admin is selecting the same date on from and to fields. + +* #1088[fixed] - The user should not be able to view the leads by link leads option, if the user has no permission, to + view leads. + +* #1087[fixed] - The filter label should be visible if the admin is trying to filter the attributes. + +* #1085[fixed] - There should be a astricts icon for the required field when the admin is creating the roles. + +* #1071[fixed] - The user should be login with a message screen if the user has no permission to access any tab + +* #1063[fixed] - The date filter's should be on the left side of the calendar. if the admin is trying to filter the + dashboard data. + +* #1008[fixed] - The admin is not able to send the email by using the compose option. + +* #885[fixed] - There should not be any translation issue on the person table. + +* #792[fixed] - The custom tab should be active when the user is trying to filter activity by custom date. + +## **v1.2.3 (25th of August 2022)** - *Release* + +* #991[feature] - Export option for Leads Table + +* #[feature] - Webform Feature Added + +* #951[enhancement] - The Web form should be open in the next tab + +* #924[enhancement] - by default the cursor should remain on the email textbox + +* #895[enhancement] - There should be a dropdown instead of inputbox in the lead source filter. + +* #893[enhancement] - There should be an option to view the web form in the webform table. + +* #840[enhancement] - There is no option if the admin is trying to filter the leads from the web form. + +* #830[enhancement] - There should be the logo of krayin CRM in the web form + +* #826[enhancement] - There should be a logo for the webform + +* #799[enhancement] - The page should be redirected to the organization page if the user is clicking on the organization + name. + +* #900 [fixed] - There is a translation issue on the compose section inside the mails. + +* #885 [fixed] - There should not be any translation issue on the person table + +* #867 [fixed] -There should not be any translation issue on the mails. + +* #950 [fixed] - WebForm check unique email and phone number from users instead of contacts. + +* #852 [fixed] -There should not be any translation issue in the dashboard + +* #801 [fixed] -The user should not be able to view the leads in the dashboard without permisson. + +* #732 [fixed] -The user should not be able to view the admin's leads if the user has individual permission. + +* #1055 [fixed] -The admin should be able to change the app locale from the configuration. + +* #1036 [fixed] -The required functionality is not working if the admin is creating an attribute with required property + +* #1032 [fixed] -Issue with action attribute input field in workflow form + +* #1021 [fixed] -The admin is not able to create and edit any role. + +* #1020 [fixed] -Intermittent 500 error when admin is adding an activity + +* #1014 [fixed] -Problems with Spanish translation of the calendar and form alerts. + +* #1008 [fixed] -The admin is not able to send the email by using the compose option. + +* #984 [fixed] -There is a translation issue in the header section. + +* #979 [fixed] -There is an exception. if the admin is trying to edit the user's account. + +* #965 [fixed] -There is a translation issue when the user is trying to delete the mail. + +* #943 [fixed] -There is a UI issue on side bar. + +* #942 [fixed] -There should be an option of give permission for view web form. + +* #936 [fixed] -The warning message also should should be translate. + +* #931 [fixed] -If a user is changing the locale of his panel, then the locale is being changed for all the users. + +* #928 [fixed] -Translation is missing for Web form package + +* #926 [fixed] -sidebar must be scrollable + +* #919 [fixed] -There is a translation issue if user is trying to delete any quote from lead. + +* #918 [fixed] -The placeholder value is not showing, when the user is trying to edit the web form. + +* #916 [fixed] -There should not translation issue in the pipeline. + +* #911 [fixed] -The user should not be able to update the lead if there is any warning in input field + +* #910 [fixed] -There should be a asterisk icon for required field in web form. + +* #909 [fixed] -All lead related tabs are missing inside lead view page. + +* #908 [fixed] -There should not translation issue in the leads section. + +* #899 [fixed] -The downloaded data is not in a proper format if the user is trying to download the persons table + +* #896 [fixed] -There is an UI issue in the Activity table + +* #887 [fixed] -There is a translation issue on the Attributes table. + +* #884 [fixed] -There is a translation issue on the leads filter + +* #883 [fixed] -There should not any UI issue on Users list + +* #878 [fixed] -There should not be any Translation issue on quotes + +* #877 [fixed] -There is a UI issue inside the quote + +* #874 [fixed] -The user should be able to update the Customize Web Form. + +* #868 [fixed] -The warning message should be correct in the web form. + +* #866 [fixed] -There should not be any translation issue on the leads page. + +* #865 [fixed] -There should not be any UI issue on the leads page. + +* #859 [fixed] -The warning message should be in the correct format + +* #858 [fixed] -There is a translation issue in the user profile section. + +* #856 [fixed] -There should not be any translation issue in the leads + +* #855 [fixed] -There is a UI issue on the leads table. + +* #853 [fixed] -here should not be any translation issue in the webform. + +* #848 [fixed] -There should be a placeholder in the web form if the placeholder is provided by the admin. + +* #846 [fixed] -Translation issue on Dashboard + +* #845 [fixed] -Translation issue on activity + +* #844 [fixed] -There is a UI issue on the leads table + +* #843 [fixed] -UI issue on the activity table + +* #842 [fixed] -There should be a 404 error page if the user is trying to open the deleted web form. + +* #841 [fixed] -The Sales Person should be shown in the leads table. + +* #834 [fixed] -The webform page should also be translated according to the selected language. + +* #825 [fixed] -The checkbox should not be disabled for the custom attributes + +* #824 [fixed] -The success message is not correct if the user is updating the webform + +* #823 [fixed] -There is not a good UI if the user is trying to preview the webform. + +* #822 [fixed] -There is an exception when the user is trying to create a new webform + +* #817 [fixed] -missing translation for Image upload section + +* #815 [fixed] -The Person image should be uploaded. + +* #810 [fixed] -There is not proper translation on the contact tab. + +* #809 [fixed] -There is no success/warning message on any operation when the user changing locale into Arabic + fixedpage should be redirected to the organization page if the user is clicking on the organization name. + +* #797 [fixed] -There should not any exception when the user is creating a new person. + +* #794 [fixed] -There should not be an exception when the user is trying to edit the person. + +* #788 [fixed] -The Expected Close Date can not be less than the created date. + +* #787 [fixed] -The success and warning message should be clickable. + +* #785 [fixed] -The user should be able to edit the Activity. + +* #777 [fixed] -The page should not be crash. if the user is trying to enter the blade value into the input field. + +* #774 [fixed] -There should not be an exception If the user is trying to delete the person's image. + +* #170 [fixed] -If admin Inactive any user who is logged in on CRM then the user should automatically logged out + +## **v1.2.2 (3rd of December 2021)** + +* #435 [fixed] - There should be an option for a "move to trash" when a customer trying to delete the inbox mail. + +* #692 [fixed] - The page should be redirected to the leads of the same pipeline for which the user is creating/editing + the lead. + +* #698 [fixed] - There should be an option to remove the profile picture. + +* #699 [fixed] - The color of rotten leads should be the same on the kanban view and list view. + +* #700 [fixed] - There should be an option for lead id on the leads table. + +* #701 [fixed] - There should be a warning message if the user is trying to create a new person with the same details. + +* #704 [fixed] - The top leads and the top customers should be visible in the dashboard. + +* #709 [fixed] - The user should not be able to update activity without permission. + +* #710 [fixed] - There is no option for the lead when the user is trying to edit any activity. + +* #712 [fixed] - The success message is showing repeatedly. + +* #714 [fixed] - The probability of new stage should not disabled for any pipeline + +* #719 [fixed] - Dashboard data is not showing according to login use + +* #720 [fixed] - Option for location is not present inside Activity placeholder + +* #722 [fixed] - There should be a warning message if the user is typing the wrong number format. + +* #723 [fixed] - The warning message should not be visible if the user is trying to edit the attribute. + +* #724 [fixed] - There is no option to view the lost reason for the lost lead + +* #727 [fixed] - Sales pipeline not showing properly + +* #735 [fixed] - Input validation's dropdown should be according to attribute type. + +* #737 [fixed] - The UI design of the contact person. the section should be correct. + +* #741 [fixed] - The format of the Activity table should be correct. + +* #742 [fixed] - The model box should be closed automatically after exporting the data. + +* #748 [fixed] - The format of a person's data should be correct after exporting to excel + +* #761 [fixed] - There should not be an error if the user is trying to edit the attributes. + +* #762 [fixed] - There is no option to give permission to download data + +* #763 [fixed] - The page should be redirected to the leads when the user is clicking on any lead + +* #721 [fixed] - Link mails are not showing inside the mail tab. + +* #755 [fixed] - There is no option to apply validation for image attributes + +## **v1.2.1 (12st of November 2021)** + +* [feature] Calendar view added for activities + +* [feature] Admin profile picture feature implemented + + +* #308 [fixed] - There should be a warning message if the user creating multiple persons with the same details. + +* #315 [fixed] - The participants should not be added to multiple activities at the same time. + +* #323 [fixed] - There should be an option to upload user profile picture + +* #343 [fixed] - There should be an option to view lead on dashboard. + +* #373 [fixed] - The color of quote should be red which is expired. + +* #453 [fixed] - The warning message should be removed after fill data in the Reply section. + +* #463 [fixed] - When SKU was made not compulsory, and when we add the product, it shows a junk code in the screen + +* #496 [fixed] - There should be a dropdown according to the default pipeline instead of an input box when the user + trying to filter leads by stage. + +* #501 [fixed] - There should be an option to change activity status in activity table. + +* #504 [fixed] - There should be a warning message if the user is adding the same email and contact number multiple time + +* #511 [fixed] - There should not be print the JSON data when the user clicking on the back arrow. + +* #535 [fixed] - There should be an option of created date, when user trying to view the lead. + +* #572 [fixed] - There should be an option for searching the "Tag" in global search bar and in Filter also. + +* #582 [fixed] - There should be a loader before the success message When the user trying to mark as done any activity. + +* #596 [fixed] - There should be an option to give permission to download a quote + +* #634 [fixed] - The color of Won lead should be green in the dashboard. + +* #635 [fixed] - The filters should work properly when the user is trying to filter the lead by the contact person. + +* #636 [fixed] - The number of activities should be correct in the dashboard. + +* #637 [fixed] - There should not be any warning message when the user is trying to filter organization by Person count + +* #638 [fixed] - The attached file should be visible in the reply section if any. + +* #639 [fixed] - The name of the filter should be correct. + +* #647 [fixed] - The Expected close date should be correct when the user is selecting the current date for the expected + closed date. + +* #648 [fixed] - The name of the leads filter should be correct. + +* #653 [fixed] - There should be a warning message when the user is trying to add multiple "Types" with the same name. + +* #661 [fixed] - There should be a loader before the success message When the user trying to update activity status. + +* #668 [fixed] - The name of the filter should be correct when the user is trying to filter activity by the type. + +* #671 [fixed] - There should be one more option of 'select status' when the user is trying to filter activity by 'Is + Done' filter. + +* #672 [fixed] - The 'Expired At' time should be correct when the user is selecting the current date for 'Expired At'. + +* #679 [fixed] - When the user is clicking on 'Sales Person', then the page should be redirected to the person's page. + +* #678 [fixed] - The stage we are deleting from the pipeline, the leads of that stage should not be deleted. + +* #685 [fixed] - There should not be any warning when the user is trying to delete that lead for which the workflow was + created + +* #692 [fixed] - The page should be redirected to the leads of the same pipeline for which the user is creating the + lead. + +* #691 [fixed] - There should not be an exception when the user is trying to create a new lead. + +## **v1.2.0 (1st of November 2021)** + +* [feature] Pipeline feature implemented + +* [feature] Quick create option implemented + +* [feature] Brand new setting page implemented + + +* #138 [fixed] - fix column spacing in quotes inside the respective leads + +* #170 [fixed] - If admin Inactive any user who is logged in on CRM then the user should automatically logged out + +* #171 [fixed] - When admin/user logged in to their panel then the name of logged in user should be mention to the top + right corner + +* #192 [fixed] - When we appying the filters to search leads . then the end date input should not take the date which is + less then start date. + +* #196 [fixed] - When we creating Attributes after choosing select from type dropdown and options from options + dropdown . Then Input Validation field should be disabled. + +* #204 [fixed] - When we creating activity and selecting date in 'To' input box which is less then 'From' date. Inside + schedule label. then it should give an error. + +* #255 [fixed] - When the user trying to create/edit Activity. then there should be a suggestion in placeholder of + Participants input field for search Participants. + +* #265 [fixed] - The user or person should not be add into participants which is already added as a participants. + +* #277 [fixed] - When we trying to delete any lead. then There should be a confirm box before delete lead. + +* #280 [fixed] - Filters should be visible to filter the leads. + +* #281 [fixed] - When we are creating Note. Then ' Note created successfully ' should be show in message box. + +* #282 [fixed] - There should be a scrollbar to scroll the leads inside lead tab. + +* #283 [fixed] - The date filter should work properly in leads section + +* #285 [fixed] - When we are deleting any Note. then there should be a confirm box before delete Note + +* #286 [fixed] - When we are removing the search keyword from the search box inside lead. then there should be visible + all leads + +* #287 [fixed] - When we are adding a person, then there should be a suggestion in organization input field + +* #288 [fixed] - When we are trying to delete multiple persons at a time, then there should be a confirm box before + delete person + +* #289 [fixed] - When we are trying to delete multiple Leads at a time, then there should be a confirm box before delete + the Lead. + +* #296 [fixed] - When we are deleting any Note. Then ' Note deleted successfully ' should be show in message box + +* #297 [fixed] - Search box should be work properly. when we are searching any attribute + +* #298 [fixed] - The status is not updating of login user and showing 'User updated successfully'. + +* #299 [fixed] - Search box should be work properly. when we are searching any user + +* #300 [fixed] - When we are creating the lead then The color should be change of the tab after filled all the required + fields + +* #301 [fixed] - Search box should be work properly. when we are searching any Quote + +* #305 [fixed] - The Warning message should be show, if the user adding same product again and again in quote items. + +* #306 [fixed] - There should be a option to select date in created at' input field, if user want to filter activities. + +* #309 [fixed] - When we applying filters to search activities . then filters should be work properly to search + activities + +* #313 [fixed] - There should be a option to delete multiple activites at a time + +* #318 [fixed] - There should be a option to select date in created date input field, if user want to filter the inbox + mails. + +* #319 [fixed] - There should be a warning message, if user creating activities for less then current schedule time + +* #321 [fixed] - The filter should be work properly, when user filter activity by lead name. + 67 +* #338 [fixed] - HTML code should not be visible in attachment place. + +* #341 [fixed] - Search box should be work properly. when we are searching any Lead + +* #351 [fixed] - Fix column spacing in Inbox inside the mail tab + +* #352 [fixed] - There should not be any exception. if user want to filter inbox mail. + +* #354 [fixed] - The date filter should be work properly in Activity tab. + +* #361 [fixed] - There should be a submit button if we want to filter dashboard data using date + +* #363 [fixed] - Search box should be work properly. when we are searching any Organizations + +* #364 [fixed] - There should not be any error if we are adding new organization. + +* #367 [fixed] - The filter should be work properly, when user trying to filter Attributes by type + +* #368 [fixed] - There should be a option to edit the tag + +* #369 [fixed] - The filters should be work properly, if user trying to filter tags. + +* #372 [fixed] - There should be a option to delete the multiple tags at a time. + +* #377 [fixed] - Date input fields should be cleared, after click on cross icon. + +* #378 [fixed] - The details of contact person should be fill automatically. + +* #380 [fixed] - The person should be received mail , after delete person. if we have create a workflow for the same. + +* #381 [fixed] - The Created by field should be visible only one time in activity table. + +* #384 [fixed] - The default image should be show in product section. + +* #386 [fixed] - There should be asterisk icon in Quote item. + +* #396 [fixed] - The contact number field should not take the blank value. + +* #397 [fixed] - The input fields should be shown to add product + +* #398 [fixed] - Filters should be work properly in quote. + +* #399 [fixed] - There should not be an exception when we are trying to view inbox mail. + +* #400 [fixed] - The mails should be deleted when the user trying to delete multiple emails at a time. + +* #402 [fixed] - The user should have the option to compose mail. + +* #403 [fixed] - The person attributes should be shown inside the placeholder. + +* #404 [fixed] - The filters should be work properly in the activity section. + +* #407 [fixed] - The filters should work properly in the activity section. + +* #410 [fixed] - Filters should be work properly in the activity section + +* #411 [fixed] - There should not be an exception when the user trying to edit any role. + +* #412 [fixed] - The page should not be asked to choose file when we are trying to view draft mails + +* #413 [fixed] - There should not be an exception when user trying to create a lead. + +* #415 [fixed] - There should not be a blank option in the activity type dropdown when the user is trying to create an + activity. + +* #416 [fixed] - There should be a dropdown instead of an input box when the user trying to filter activities by type. + +* #419 [fixed] - There should be a suggestion for users to search for products. + +* #420 [fixed] - There should be a warning message if the user trying to delete the leads when the user has no + permission to delete the leads. + +* #422 [fixed] - There should be an option to create tags if the user has permission to create a tag. + +* #426 [fixed] - The mails should be visible in the inbox. + +* #427 [fixed] - The ' To ' field should not take a blank value when the user trying to compose a mail. + +* #432 [fixed] - The search box should not take the blank value. + +* #433 [fixed] - There should be a dropdown instead of the input box when the user trying to filter the pipeline by " is + Default" . + +* #434 [fixed] - The person id should be visible in the person table. + +* #436 [fixed] - Filters should work properly in the Attributes section. + +* #441 [fixed] - The calculation should be correct when the user trying to create the quote. + +* #447 [fixed] - The delete icon should not be visible when the user is adding only one product in the quote item. + +* #448 [fixed] - The Leads should be visible in the lead's table. + +* #452 [fixed] - There should be a field of created date in the quote table. + +* #459 [fixed] - At least one pipeline should be the default pipeline. + +* #460 [fixed] - When we are trying to create a new user, then it should not give a warning message. + +* #465 [fixed] - There should be ' Select user ' instead of 'User' in the Leads filter. + +* #471 [fixed] - There should be an error if the user trying to create multiple sources with the same name. + +* #479 [fixed] - There should a warning message when the user trying to enter the character in the quantity input field + +* #481 [fixed] - There should a warning message when the user trying to enter the character in the Price and discount + input field. + +* #482 [fixed] - Date inputs should be blank when the user is removing the date filters. + +* #484 [fixed] - When the user trying to see **Leads Over Time** leads from the dashboard, then only **Leads Over Time** + leads should be visible on the leads table. + +* #485 [fixed] - When the user trying to add multiple-stage with the same name in the pipeline, then there should a + warning message instead of an exception. + +* #488 [fixed] - When the user trying to click on submit button without selecting any action, then there should be a + warning for select any action to perform. + +* #489 [fixed] - There should be a warning message if the user trying to add the same tag multiple times in a lead. + +* #492 [fixed] - There should be a warning message if the user trying to edit leads [by drag and drop] without + permission. + +* #495 [fixed] - The user should not be able to edit leads without permission. + +* #498 [fixed] - There should be a success message after reply on mail. + +* #499 [fixed] - There should be an option to give permissions-related quotes to a role. + +* #500 [fixed] - The user should log out automatically if the user has no permission for any tab. + +* #504 [fixed] - There should be a warning message if the user is adding the same email and contact number multiple time + +* #505 [fixed] - The user should be redirected to the login page after deleting the self account. + +* #512 [fixed] - There should not be any exception when the user trying to view the lead. + +* #514 [fixed] - The user should not be able to select the date greater than today in the created date input field. + +* #530 [fixed] - The user should not be able to delete tags if the user has no permission for the same. + +* #531 [fixed] - The Add stage and Save as pipeline buttons should not be disabled when the user removing the duplicate + stage + +* #534 [fixed] - The user should not be able to add a tag on a lead if the user has no permission for edit the lead. + +* #541 [fixed] - 'Expected Close Date' should not be less than Created date + +* #542 [fixed] - There should not be any exception when the user tries to filter quotes by created date. + +* #543 [fixed] - The numerator should not be greater than the denominator in the dashboard. + +* #544 [fixed] - There should be Yes or No' in 'Is Done dropdown' when the user trying to filter activity by 'is done' + filter. + +* #545 [fixed] - There should be an option to select date instead of input type text. + +* #568 [fixed] - When the admin trying to delete self account the message should be correct + +* #569 [fixed] - There should be a success message, When the admin tries to delete any other user. + +* #571 [fixed] - The user should not be able to edit another user without permission. + +* #577 [fixed] - The user should not be able to access the 'sent, trash, inbox' pages without permission. + +* #585 [fixed] - The Setting option should be visible if the user has permission for the same. + +* #586 [fixed] - There should not be any exception when the user is trying to compose mail. + +* #589 [fixed] - When the user is trying to delete default attributes, then the message should be correct. + +* #590 [fixed] - The user should not be able to view the quotes if the user has no permission for the same. + +* #592 [fixed] - The user should not be able to view the leads if the user has no permission for the same. + +* #599 [fixed] - There should be an option to filter quotes 'by is expired' + +* #600 [fixed] - The date filter should work properly when the user is trying to filter the leads. + +* #601 [fixed] - The rotting date should be correct when the user is trying to view any lead. + +* #606 [fixed] - Filters should work properly. when the user is trying to filter the activity. + +* #607 [fixed] - There should a warning message if the user is trying to add the same stage multiple times. + +* #619 [fixed] - The user should not be able to view the admin's data if the user has group permission. + +* #620 [fixed] - The Link Lead option should work properly on mail section. + +## **v1.1.3 (23rd of September 2021)** + +* [feature] Refactored data grid code + +* [feature] Add app version in admin ui + + +* #244 [fixed] - The modal box should be open if we click on add lead button of the leads page. + +* #251 [fixed] - While Adding a new attribute Entity Type field should be come only one time. + +* #255 [fixed] - When we creating Activity. then there should be a suggestion in placeholder of Participants input field + for search Participants. + +* #257 [fixed] - [BUG] SKU Validation Bug + +* #260 [fixed] - When we changing the lead stage to Won/Lost. then date icon should be visible in Closed Date input + field. + +* #263 [fixed] - When we are creating a activity and selecting persons for participants. then persons name should be + visible below Participants input box. + +* #269 [fixed] - [BUG] Add Lead Buttons Do Nothing + +* #270 [fixed] - When we are creating multiple group with the same details. then there should be a warning message + +* #272 [fixed] - When we are creating multiple Organizations with the same details. then there should be a warning + message + +## **v1.1.2 (17th of September 2021)** + +* #217 [fixed] - When we adding a new organization then it should not give an exception. + +* #221 [fixed] - if the user has no permission to add a role and the user is trying to add a role. then it should be + shown a warning + +* #225 [fixed] - When we creating a person then after creating person it is not redirecting to persons list page + +* #226 [fixed] - When we creating a user then the the 'asterisk icon' should visible on Confirm password label + +* #218 [fixed] - When we creating a new lead, Then after create lead it should be redirect to leads page + +* #230 [fixed] - Automatic publish should be done at the time of installation + +## **v1.1.0 (16th of September 2021)** + +* [feature] Workflow (CRM Automation) feature implemented + + +* #132 [fixed] - filter option for mails are not working + +* #162 [fixed] - Issue with seeder during installation + +* #163 [fixed] - Lookup field is showing 2 times while creating the attribute + +* #164 [fixed] - No option is coming to update lead status in grid view + +* #165 [fixed] - Image type Attribute is not working + +* #166 [fixed] - Getting exception when new user Login + +* #172 [fixed] - If user have not Permission to delete the Roles and the user is trying to delete the Roles then the + warning message should be present inside the error box + +* #174 [fixed] - If the user Applying multiple filter to search sources then data should be searched. + +* #175 [fixed] - After Added a new product the page should be redirect to product list page. + +* #177 [fixed] - result: When admin/user adding new Person after deleting email input field. then required validation of + email should be work + +* #178 [fixed] - Getting Error " Class "Webklex\PHPIMAP\IMAP" not found" while integration of Google calender in Krayin + +* #180 [fixed] - admin/user adding new Lead after deleting email input field inside Contact Person tab. then required + validation of email should be work. + +* #181 [fixed] - When admin/user run the **php artisan krayin-crm:version** command on root directory to check their + Krayin version. then krayin version is there in the place of V + +* #182 [fixed] - While Adding a new attribute Lookup field should be come only one time + +* #184 [fixed] - When Customer running " composer create-project krayin/laravel-crm " and " php artisan krayin-crm: + install ". command to install the laravel-crm. Then the project should be setup successfully . + +* #186 [fixed] - When we creating person and selecting the value from the Attributes dropdown which is unique then the + it should be give warning to user/admin + +* #189 [fixed] - When we creating Lead and selecting the value from the Attributes dropdown which is unique then the it + should be give warning to user/admin + +* #193 [fixed] - When we clicking on locale dropdown inside configuration tab. there should be multiple options of + languages + +* #197 [fixed] - When we creating Quote. then the Quote should be show in dashboard + +* #199 [fixed] - When we changing timezone from timezone dropdown inside Configuration tab . then time should be convert + according to timezone + +* #202 [fixed] - When we creating an activity, then the date icon should be shown in the schedule input box. + +* #203 [fixed] - When we creating an activity, the schedule input box should not take date before today + +* #204 [fixed] - When we creating activity and selecting date in 'To' input box which is less then 'From' date. Inside + schedule label. then it should give an error. + +* #208 [fixed] - When we applying filters to search activities . then filters should be work properly to search + activities + +## **v1.0.1 (2nd of September 2021)** + +* [feature] Activity participants + + +* #117 [fixed] - Implement Pest PHP For Testing + +* #120 [fixed] - getting error when run migrate and seed database + +* #122 [fixed] - missing translation for alert message when deleting types and sources + +* #123 [fixed] - add more option is not working while edit person details + +* #134 [fixed] - update alert when delete groups + +* #133 [fixed] - exception when save new user roles + +* #135 [fixed] - default placeholder should be selected in quotes billing address + +* #136 [fixed] - buying leads stages are not assigned on mass action + +* #137 [fixed] - show names instead of id for search term at activities section + +* #139 [fixed] - filter is not working in quotes + +* #147 [fixed] - Getting exception while creating product with same sku + +* #148 [fixed] - Description field not visible while adding the products + +* #152 [fixed] - Automatically curly bracket is getting added in description while editing Role + +## **v1.0.0 (21th of July 2021)** - *First Release* + +* [feature] Descriptive and Simple Admin Panel. + +* [feature] Admin Dashboard. + +* [feature] Custom Attributes. + +* [feature] Built on Modular Approach. + +* [feature] Email parsing via Sendgrid. + + +* #26 [fixed] - VAT number is missing for organization + +* #28 [fixed] - Organization is not found while adding person to organization + +* #29 [fixed] - Users to teams + +* #31 [fixed] - Add Phone to source & type to the new lead form + +* #32 [fixed] - Error on installation + +* #33 [fixed] - update favicon + +* #34 [fixed] - product is not listed even success alert is visible + +* #35 [fixed] - Dashboard widgets are not draggable + +* #38 [fixed] - Lead stages + +* #39 [fixed] - unable to save the lead + +* #40 [fixed] - Move icon is missing + +* #41 [fixed] - unable to open the lead in kanban view + +* #42 [fixed] - Lead without product + +* #43 [fixed] - dashboard move icon is not working + +* #54 [fixed] - Compose email is not working + +* #55 [fixed] - Filter at kanban view does not work + +* #56 [fixed] - Unable to back from single view to outbox or any email grid + +* #57 [fixed] - wrong button name + +* #60 [fixed] - date picker gets removed while selecting date on activity section + +* #61 [fixed] - No validation on product SKU field + +* #62 [fixed] - Getting exception when filter organization/products/admin roles + +* #63 [fixed] - missing translation for compose mail + +* #65 [fixed] - can't enter Email & Contact details for person + +* #71 [fixed] - Menus are not visible + +* #72 [fixed] - Alignment problem + +* #79 [fixed] - Reset Password Mail is not sent and error is shown + +* #81 [fixed] - Issue with Leads Filter in Layout + +* #82 [fixed] - Exception issue in Organisation + +* #83 [fixed] - Issue with Actions Alignment on Organisation page + +* #84 [fixed] - Issue with user access + +* #111 [fixed] - Fetch custom attribute types from config file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..9012a62 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at support@krayincrm.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..ad86d41 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +MIT License + +Copyright 2010-2018, Webkul Software + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..c8786dc --- /dev/null +++ b/README.md @@ -0,0 +1,131 @@ +

+Total Downloads +

+ +

+Total Downloads +Latest Stable Version +License +

+ +## Topics + +1. [Introduction](#introduction) +2. [Documentation](#documentation) +3. [Requirements](#requirements) +4. [Installation & Configuration](#installation-and-configuration) +5. [License](#license) +6. [Security Vulnerabilities](#security-vulnerabilities) + +### Introduction + +[Krayin CRM](https://krayincrm.com) is a hand tailored CRM framework built on some of the hottest opensource +technologies +such as [Laravel](https://laravel.com) (a [PHP](https://secure.php.net/) framework) and [Vue.js](https://vuejs.org) +a progressive Javascript framework. + +**Free & Opensource Laravel CRM solution for SMEs and Enterprises for complete customer lifecycle management.** + +**Read our documentation: [Krayin CRM Docs](https://devdocs.krayincrm.com/)** + +**We also have a forum for any type of concerns, feature requests, or discussions. Please +visit: [Krayin CRM Forums](https://forums.krayincrm.com/)** + +# Visit our live [Demo](https://demo.krayincrm.com) + +It packs in lots of features that will allow your E-Commerce business to scale in no time: + +- Descriptive and Simple Admin Panel. +- Admin Dashboard. +- Custom Attributes. +- Built on Modular Approach. +- Email parsing via Sendgrid. +- Check out [these features and more](https://krayincrm.com/features/). + +**For Developers**: +Take advantage of two of the hottest frameworks used in this project -- Laravel and Vue.js -- both of which have been +used in Krayin CRM. + +### Documentation + +#### Krayin Documentation [https://devdocs.krayincrm.com](https://devdocs.krayincrm.com) + +### Requirements + +- **SERVER**: Apache 2 or NGINX. +- **RAM**: 3 GB or higher. +- **PHP**: 7.4 or higher. +- **For MySQL users**: 5.7.23 or higher. +- **For MariaDB users**: 10.2.7 or Higher. +- **Node**: 8.11.3 LTS or higher. +- **Composer**: 1.6.5 or higher. + +### Installation and Configuration with Git + +``` +git clone https://github.com/techalgo/laravel-crm.git +cd laravel-crm +composer install +php artisan krayin-crm:install +``` + +### Installation and Configuration + +##### Execute these commands below, in order + +``` +composer create-project krayin/laravel-crm +``` + +``` +cd laravel-crm +rm composer.lock +composer install +``` + +- Find **.env** file in root directory and change the **APP_URL** param to your **domain**. + +- Also, Configure the **Mail** and **Database** parameters inside **.env** file. + +``` +php artisan krayin-crm:install +``` + +**To execute Krayin**: + +##### On server: + +Warning: Before going into production mode we recommend you uninstall developer dependencies. +In order to do that, run the command below: + +> composer install --no-dev + +``` +Open the specified entry point in your hosts file in your browser or make an entry in hosts file if not done. +``` + +##### On local: + +``` +php artisan route:clear +php artisan serve +``` + +**How to log in as admin:** + +> _http(s)://example.com/admin/login_ + +``` +email:admin@example.com +password:admin123 +``` + +### License + +Krayin CRM is a truly opensource CRM framework which will always be free under +the [MIT License](https://github.com/krayin/laravel-crm/blob/master/LICENSE). + +### Security Vulnerabilities + +Please don't disclose security vulnerabilities publicly. If you find any security vulnerability in Krayin CRM then +please email us: mailto:sales@krayincrm.com. diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 0000000..9a0cbd3 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,42 @@ +command('inspire')->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__ . '/Commands'); + $this->load(__DIR__ . '/../../packages/Webkul/Core/src/Console/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 0000000..c18c43c --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,41 @@ +reportable(function (Throwable $e) { + // + }); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 0000000..a0a2a8a --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + [ + \App\Http\Middleware\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + \Illuminate\View\Middleware\ShareErrorsFromSession::class, + \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + 'throttle:api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \App\Http\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, + ]; +} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..bcfb255 --- /dev/null +++ b/app/Http/Middleware/Authenticate.php @@ -0,0 +1,21 @@ +expectsJson()) { + return route('login'); + } + } +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..033136a --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +check()) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..a8a252d --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ +allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..0c7d3b6 --- /dev/null +++ b/app/Http/Middleware/TrustProxies.php @@ -0,0 +1,28 @@ + 'datetime', + ]; +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php new file mode 100644 index 0000000..ee8ca5b --- /dev/null +++ b/app/Providers/AppServiceProvider.php @@ -0,0 +1,28 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..395c518 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ + [ + SendEmailVerificationNotification::class, + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..3bd3c81 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,63 @@ +configureRateLimiting(); + + $this->routes(function () { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + }); + } + + /** + * Configure the rate limiters for the application. + * + * @return void + */ + protected function configureRateLimiting() + { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip()); + }); + } +} diff --git a/artisan b/artisan new file mode 100644 index 0000000..f82e421 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 0000000..037e17d --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..9ed9af8 --- /dev/null +++ b/composer.json @@ -0,0 +1,91 @@ +{ + "name": "krayin/laravel-crm", + "type": "project", + "description": "Krayin CRM", + "keywords": [ + "framework", + "laravel" + ], + "license": "MIT", + "require": { + "php": "^8.1", + "barryvdh/laravel-dompdf": "^2.0.1", + "diglactic/laravel-breadcrumbs": "^8.1.1", + "doctrine/dbal": "^3.1", + "guzzlehttp/guzzle": "^7.0.1", + "konekt/concord": "^1.10", + "krayin/rest-api": "dev-master", + "laravel/framework": "^10.0", + "laravel/sanctum": "^3.2", + "laravel/tinker": "^2.5", + "laravel/ui": "^4.2.3", + "maatwebsite/excel": "^3.1", + "prettus/l5-repository": "^2.7.9" + }, + "require-dev": { + "barryvdh/laravel-debugbar": "^3.6", + "spatie/laravel-ignition": "^2.0", + "fakerphp/faker": "^1.9.1", + "krayin/krayin-package-generator": "dev-master", + "laravel/sail": "^1.0.1", + "mockery/mockery": "^1.4.2", + "nunomaduro/collision": "^6.1", + "pestphp/pest": "^1.21", + "pestphp/pest-plugin-laravel": "^1.1", + "phpunit/phpunit": "^9.3.3" + }, + "config": { + "optimize-autoloader": true, + "preferred-install": "dist", + "sort-packages": true, + "allow-plugins": { + "pestphp/pest-plugin": true + } + }, + "extra": { + "laravel": { + "dont-discover": [] + } + }, + "autoload": { + "psr-4": { + "App\\": "app/", + "Database\\Factories\\": "database/factories/", + "Database\\Seeders\\": "database/seeders/", + "Webkul\\Activity\\": "packages/Webkul/Activity/src", + "Webkul\\Admin\\": "packages/Webkul/Admin/src", + "Webkul\\Attribute\\": "packages/Webkul/Attribute/src", + "Webkul\\Contact\\": "packages/Webkul/Contact/src", + "Webkul\\Core\\": "packages/Webkul/Core/src", + "Webkul\\Email\\": "packages/Webkul/Email/src", + "Webkul\\EmailTemplate\\": "packages/Webkul/EmailTemplate/src", + "Webkul\\Lead\\": "packages/Webkul/Lead/src", + "Webkul\\Product\\": "packages/Webkul/Product/src", + "Webkul\\Quote\\": "packages/Webkul/Quote/src", + "Webkul\\Tag\\": "packages/Webkul/Tag/src", + "Webkul\\UI\\": "packages/Webkul/UI/src", + "Webkul\\User\\": "packages/Webkul/User/src", + "Webkul\\WebForm\\": "packages/Webkul/WebForm/src", + "Webkul\\Workflow\\": "packages/Webkul/Workflow/src" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "minimum-stability": "stable", + "prefer-stable": true, + "scripts": { + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover --ansi" + ], + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-create-project-cmd": [ + "@php artisan key:generate --ansi" + ] + } +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 0000000..eb34bcb --- /dev/null +++ b/config/app.php @@ -0,0 +1,296 @@ + env('APP_NAME', 'Laravel'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services the application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => (bool)env('APP_DEBUG', false), + + /* + Application Version + */ + 'version' => env('APP_VERSION'), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Admin URL + |-------------------------------------------------------------------------- + | + | This URL suffix is used to define the admin url for example + | admin/ or backend/ + | + */ + + 'admin_path' => env('APP_ADMIN_PATH', 'admin'), + + 'asset_url' => env('ASSET_URL', null), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => env('APP_TIMEZONE', 'Asia/Kolkata'), + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Available Locales Configuration + |-------------------------------------------------------------------------- + | + | The application available locale determines the supported locales + | by application + | + */ + + 'available_locales' => [ + 'en' => 'English', + 'tr' => 'Türkçe', + 'ar' => 'Arabic', + ], + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Faker Locale + |-------------------------------------------------------------------------- + | + | This locale will be used by the Faker PHP library when generating fake + | data for your database seeds. For example, this will be used to get + | localized telephone numbers, street address information and more. + | + */ + + 'faker_locale' => 'en_US', + + /* + |-------------------------------------------------------------------------- + | Base Currency Code + |-------------------------------------------------------------------------- + | + | Here you may specify the base currency code for your application. + | + */ + + 'currency' => env('APP_CURRENCY', 'USD'), + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + + /* + * Package Service Providers... + */ + Prettus\Repository\Providers\RepositoryServiceProvider::class, + Konekt\Concord\ConcordServiceProvider::class, + Barryvdh\DomPDF\ServiceProvider::class, + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + // App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + // CRM packages + Webkul\Activity\Providers\ActivityServiceProvider::class, + Webkul\Admin\Providers\AdminServiceProvider::class, + Webkul\Attribute\Providers\AttributeServiceProvider::class, + Webkul\Contact\Providers\ContactServiceProvider::class, + Webkul\Core\Providers\CoreServiceProvider::class, + Webkul\Email\Providers\EmailServiceProvider::class, + Webkul\EmailTemplate\Providers\EmailTemplateServiceProvider::class, + Webkul\Lead\Providers\LeadServiceProvider::class, + Webkul\Product\Providers\ProductServiceProvider::class, + Webkul\Quote\Providers\QuoteServiceProvider::class, + Webkul\Tag\Providers\TagServiceProvider::class, + Webkul\UI\Providers\UIServiceProvider::class, + Webkul\User\Providers\UserServiceProvider::class, + Webkul\WebForm\Providers\WebFormServiceProvider::class, + Webkul\Workflow\Providers\WorkflowServiceProvider::class, + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Arr' => Illuminate\Support\Arr::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Http' => Illuminate\Support\Facades\Http::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'PDF' => Barryvdh\DomPDF\Facade\Pdf::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + // 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'Str' => Illuminate\Support\Str::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + 'Menu' => Webkul\Admin\Facades\Menu::class, + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 0000000..2aab2a6 --- /dev/null +++ b/config/auth.php @@ -0,0 +1,105 @@ + [ + 'guard' => 'user', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ + + 'guards' => [ + 'user' => [ + 'driver' => 'session', + 'provider' => 'users' + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => Webkul\User\Models\User::class, + ] + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'user_password_resets', + 'expire' => 60, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Password Confirmation Timeout + |-------------------------------------------------------------------------- + | + | Here you may define the amount of seconds before a password confirmation + | times out and the user is prompted to re-enter their password via the + | confirmation screen. By default, the timeout lasts for three hours. + | + */ + + 'password_timeout' => 10800, + +]; diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php new file mode 100644 index 0000000..9a268fa --- /dev/null +++ b/config/breadcrumbs.php @@ -0,0 +1,75 @@ + 'breadcrumbs::bootstrap5', + + /* + |-------------------------------------------------------------------------- + | Breadcrumbs File(s) + |-------------------------------------------------------------------------- + | + | The file(s) where breadcrumbs are defined. e.g. + | + | - base_path('routes/breadcrumbs.php') + | - glob(base_path('breadcrumbs/*.php')) + | + */ + + 'files' => base_path('routes/breadcrumbs.php'), + + /* + |-------------------------------------------------------------------------- + | Exceptions + |-------------------------------------------------------------------------- + | + | Determine when to throw an exception. + | + */ + + // When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException) + 'unnamed-route-exception' => true, + + // When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException) + 'missing-route-bound-breadcrumb-exception' => true, + + // When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException) + 'invalid-named-breadcrumb-exception' => true, + + /* + |-------------------------------------------------------------------------- + | Classes + |-------------------------------------------------------------------------- + | + | Subclass the default classes for more advanced customisations. + | + */ + + // Manager + 'manager-class' => Diglactic\Breadcrumbs\Manager::class, + + // Generator + 'generator-class' => Diglactic\Breadcrumbs\Generator::class, + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 0000000..2d52982 --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,64 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'useTLS' => true, + ], + ], + + 'ably' => [ + 'driver' => 'ably', + 'key' => env('ABLY_KEY'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 0000000..2389425 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,106 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + | Supported drivers: "apc", "array", "database", "file", + | "memcached", "redis", "dynamodb", "null" + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + 'serialize' => false, + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + 'lock_connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'cache', + 'lock_connection' => 'default', + ], + + 'dynamodb' => [ + 'driver' => 'dynamodb', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), + 'endpoint' => env('DYNAMODB_ENDPOINT'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'), + +]; diff --git a/config/concord.php b/config/concord.php new file mode 100644 index 0000000..1096800 --- /dev/null +++ b/config/concord.php @@ -0,0 +1,22 @@ + [ + \Webkul\Activity\Providers\ModuleServiceProvider::class, + \Webkul\Admin\Providers\ModuleServiceProvider::class, + \Webkul\Attribute\Providers\ModuleServiceProvider::class, + \Webkul\Contact\Providers\ModuleServiceProvider::class, + \Webkul\Core\Providers\ModuleServiceProvider::class, + \Webkul\Email\Providers\ModuleServiceProvider::class, + \Webkul\EmailTemplate\Providers\ModuleServiceProvider::class, + \Webkul\Lead\Providers\ModuleServiceProvider::class, + \Webkul\Product\Providers\ModuleServiceProvider::class, + \Webkul\Quote\Providers\ModuleServiceProvider::class, + \Webkul\Tag\Providers\ModuleServiceProvider::class, + \Webkul\UI\Providers\ModuleServiceProvider::class, + \Webkul\User\Providers\ModuleServiceProvider::class, + \Webkul\WebForm\Providers\ModuleServiceProvider::class, + \Webkul\Workflow\Providers\ModuleServiceProvider::class, + ], + 'register_route_models' => true +]; diff --git a/config/cors.php b/config/cors.php new file mode 100644 index 0000000..ddaaf28 --- /dev/null +++ b/config/cors.php @@ -0,0 +1,62 @@ + [ + 'admin/web-forms/forms/*' + ], + + /* + * Matches the request method. `['*']` allows all methods. + */ + 'allowed_methods' => ['*'], + + /* + * Matches the request origin. `['*']` allows all origins. Wildcards can be used, eg `*.mydomain.com` + */ + 'allowed_origins' => ['*'], + + /* + * Patterns that can be used with `preg_match` to match the origin. + */ + 'allowed_origins_patterns' => [], + + /* + * Sets the Access-Control-Allow-Headers response header. `['*']` allows all headers. + */ + 'allowed_headers' => ['*'], + + /* + * Sets the Access-Control-Expose-Headers response header with these headers. + */ + 'exposed_headers' => [], + + /* + * Sets the Access-Control-Max-Age response header when > 0. + */ + 'max_age' => 0, + + /* + * Sets the Access-Control-Allow-Credentials header. + */ + 'supports_credentials' => false, +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 0000000..d5a7215 --- /dev/null +++ b/config/database.php @@ -0,0 +1,147 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'url' => env('DATABASE_URL'), + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => false, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'url' => env('DATABASE_URL'), + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'prefix_indexes' => true, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer body of commands than a typical key-value system + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => env('REDIS_CLIENT', 'phpredis'), + + 'options' => [ + 'cluster' => env('REDIS_CLUSTER', 'redis'), + 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + ], + + 'default' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_DB', '0'), + ], + + 'cache' => [ + 'url' => env('REDIS_URL'), + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', '6379'), + 'database' => env('REDIS_CACHE_DB', '1'), + ], + + ], + +]; diff --git a/config/debugbar.php b/config/debugbar.php new file mode 100644 index 0000000..b18c919 --- /dev/null +++ b/config/debugbar.php @@ -0,0 +1,275 @@ + env('DEBUGBAR_ENABLED', null), + 'except' => [ + 'telescope*', + 'horizon*', + ], + + /* + |-------------------------------------------------------------------------- + | Storage settings + |-------------------------------------------------------------------------- + | + | DebugBar stores data for session/ajax requests. + | You can disable this, so the debugbar stores data in headers/session, + | but this can cause problems with large data collectors. + | By default, file storage (in the storage folder) is used. Redis and PDO + | can also be used. For PDO, run the package migrations first. + | + */ + 'storage' => [ + 'enabled' => true, + 'driver' => 'file', // redis, file, pdo, socket, custom + 'path' => storage_path('debugbar'), // For file driver + 'connection' => null, // Leave null for default connection (Redis/PDO) + 'provider' => '', // Instance of StorageInterface for custom driver + 'hostname' => '127.0.0.1', // Hostname to use with the "socket" driver + 'port' => 2304, // Port to use with the "socket" driver + ], + + /* + |-------------------------------------------------------------------------- + | Editor + |-------------------------------------------------------------------------- + | + | Choose your preferred editor to use when clicking file name. + | + | Supported: "phpstorm", "vscode", "vscode-insiders", "vscode-remote", + | "vscode-insiders-remote", "vscodium", "textmate", "emacs", + | "sublime", "atom", "nova", "macvim", "idea", "netbeans", + | "xdebug", "espresso" + | + */ + + 'editor' => env('DEBUGBAR_EDITOR', 'phpstorm'), + + /* + |-------------------------------------------------------------------------- + | Remote Path Mapping + |-------------------------------------------------------------------------- + | + | If you are using a remote dev server, like Laravel Homestead, Docker, or + | even a remote VPS, it will be necessary to specify your path mapping. + | + | Leaving one, or both of these, empty or null will not trigger the remote + | URL changes and Debugbar will treat your editor links as local files. + | + | "remote_sites_path" is an absolute base path for your sites or projects + | in Homestead, Vagrant, Docker, or another remote development server. + | + | Example value: "/home/vagrant/Code" + | + | "local_sites_path" is an absolute base path for your sites or projects + | on your local computer where your IDE or code editor is running on. + | + | Example values: "/Users//Code", "C:\Users\\Documents\Code" + | + */ + + 'remote_sites_path' => env('DEBUGBAR_REMOTE_SITES_PATH', ''), + 'local_sites_path' => env('DEBUGBAR_LOCAL_SITES_PATH', ''), + + /* + |-------------------------------------------------------------------------- + | Vendors + |-------------------------------------------------------------------------- + | + | Vendor files are included by default, but can be set to false. + | This can also be set to 'js' or 'css', to only include javascript or css vendor files. + | Vendor files are for css: font-awesome (including fonts) and highlight.js (css files) + | and for js: jquery and and highlight.js + | So if you want syntax highlighting, set it to true. + | jQuery is set to not conflict with existing jQuery scripts. + | + */ + + 'include_vendors' => true, + + /* + |-------------------------------------------------------------------------- + | Capture Ajax Requests + |-------------------------------------------------------------------------- + | + | The Debugbar can capture Ajax requests and display them. If you don't want this (ie. because of errors), + | you can use this option to disable sending the data through the headers. + | + | Optionally, you can also send ServerTiming headers on ajax requests for the Chrome DevTools. + | + | Note for your request to be identified as ajax requests they must either send the header + | X-Requested-With with the value XMLHttpRequest (most JS libraries send this), or have application/json as a Accept header. + */ + + 'capture_ajax' => true, + 'add_ajax_timing' => false, + + /* + |-------------------------------------------------------------------------- + | Custom Error Handler for Deprecated warnings + |-------------------------------------------------------------------------- + | + | When enabled, the Debugbar shows deprecated warnings for Symfony components + | in the Messages tab. + | + */ + 'error_handler' => false, + + /* + |-------------------------------------------------------------------------- + | Clockwork integration + |-------------------------------------------------------------------------- + | + | The Debugbar can emulate the Clockwork headers, so you can use the Chrome + | Extension, without the server-side code. It uses Debugbar collectors instead. + | + */ + 'clockwork' => false, + + /* + |-------------------------------------------------------------------------- + | DataCollectors + |-------------------------------------------------------------------------- + | + | Enable/disable DataCollectors + | + */ + + 'collectors' => [ + 'phpinfo' => true, // Php version + 'messages' => true, // Messages + 'time' => true, // Time Datalogger + 'memory' => true, // Memory usage + 'exceptions' => true, // Exception displayer + 'log' => true, // Logs from Monolog (merged in messages if enabled) + 'db' => true, // Show database (PDO) queries and bindings + 'views' => true, // Views with their data + 'route' => true, // Current route information + 'auth' => false, // Display Laravel authentication status + 'gate' => true, // Display Laravel Gate checks + 'session' => true, // Display session data + 'symfony_request' => true, // Only one can be enabled.. + 'mail' => true, // Catch mail messages + 'laravel' => false, // Laravel version and environment + 'events' => false, // All events fired + 'default_request' => false, // Regular or special Symfony request logger + 'logs' => false, // Add the latest log messages + 'files' => false, // Show the included files + 'config' => false, // Display config settings + 'cache' => false, // Display cache events + 'models' => true, // Display models + 'livewire' => true, // Display Livewire (when available) + ], + + /* + |-------------------------------------------------------------------------- + | Extra options + |-------------------------------------------------------------------------- + | + | Configure some DataCollectors + | + */ + + 'options' => [ + 'auth' => [ + 'show_name' => true, // Also show the users name/email in the debugbar + ], + 'db' => [ + 'with_params' => true, // Render SQL with the parameters substituted + 'backtrace' => true, // Use a backtrace to find the origin of the query in your files. + 'backtrace_exclude_paths' => [], // Paths to exclude from backtrace. (in addition to defaults) + 'timeline' => false, // Add the queries to the timeline + 'duration_background' => true, // Show shaded background on each query relative to how long it took to execute. + 'explain' => [ // Show EXPLAIN output on queries + 'enabled' => false, + 'types' => ['SELECT'], // Deprecated setting, is always only SELECT + ], + 'hints' => false, // Show hints for common mistakes + 'show_copy' => false, // Show copy button next to the query + ], + 'mail' => [ + 'full_log' => false, + ], + 'views' => [ + 'timeline' => false, // Add the views to the timeline (Experimental) + 'data' => false, //Note: Can slow down the application, because the data can be quite large.. + ], + 'route' => [ + 'label' => true, // show complete route on bar + ], + 'logs' => [ + 'file' => null, + ], + 'cache' => [ + 'values' => true, // collect cache values + ], + ], + + /* + |-------------------------------------------------------------------------- + | Inject Debugbar in Response + |-------------------------------------------------------------------------- + | + | Usually, the debugbar is added just before , by listening to the + | Response after the App is done. If you disable this, you have to add them + | in your template yourself. See http://phpdebugbar.com/docs/rendering.html + | + */ + + 'inject' => true, + + /* + |-------------------------------------------------------------------------- + | DebugBar route prefix + |-------------------------------------------------------------------------- + | + | Sometimes you want to set route prefix to be used by DebugBar to load + | its resources from. Usually the need comes from misconfigured web server or + | from trying to overcome bugs like this: http://trac.nginx.org/nginx/ticket/97 + | + */ + 'route_prefix' => '_debugbar', + + /* + |-------------------------------------------------------------------------- + | DebugBar route domain + |-------------------------------------------------------------------------- + | + | By default DebugBar route served from the same domain that request served. + | To override default domain, specify it as a non-empty value. + */ + 'route_domain' => null, + + /* + |-------------------------------------------------------------------------- + | DebugBar theme + |-------------------------------------------------------------------------- + | + | Switches between light and dark theme. If set to auto it will respect system preferences + | Possible values: auto, light, dark + */ + 'theme' => env('DEBUGBAR_THEME', 'auto'), + + /* + |-------------------------------------------------------------------------- + | Backtrace stack limit + |-------------------------------------------------------------------------- + | + | By default, the DebugBar limits the number of frames returned by the 'debug_backtrace()' function. + | If you need larger stacktraces, you can increase this number. Setting it to 0 will result in no limit. + */ + 'debug_backtrace_limit' => 50, +]; diff --git a/config/dompdf.php b/config/dompdf.php new file mode 100644 index 0000000..bebbc13 --- /dev/null +++ b/config/dompdf.php @@ -0,0 +1,284 @@ + false, // Throw an Exception on warnings from dompdf + + 'public_path' => null, // Override the public path if needed + + /* + * Dejavu Sans font is missing glyphs for converted entities, turn it off if you need to show € and £. + */ + 'convert_entities' => true, + + 'options' => array( + /** + * The location of the DOMPDF font directory + * + * The location of the directory where DOMPDF will store fonts and font metrics + * Note: This directory must exist and be writable by the webserver process. + * *Please note the trailing slash.* + * + * Notes regarding fonts: + * Additional .afm font metrics can be added by executing load_font.php from command line. + * + * Only the original "Base 14 fonts" are present on all pdf viewers. Additional fonts must + * be embedded in the pdf file or the PDF may not display correctly. This can significantly + * increase file size unless font subsetting is enabled. Before embedding a font please + * review your rights under the font license. + * + * Any font specification in the source HTML is translated to the closest font available + * in the font directory. + * + * The pdf standard "Base 14 fonts" are: + * Courier, Courier-Bold, Courier-BoldOblique, Courier-Oblique, + * Helvetica, Helvetica-Bold, Helvetica-BoldOblique, Helvetica-Oblique, + * Times-Roman, Times-Bold, Times-BoldItalic, Times-Italic, + * Symbol, ZapfDingbats. + */ + "font_dir" => storage_path('fonts'), // advised by dompdf (https://github.com/dompdf/dompdf/pull/782) + + /** + * The location of the DOMPDF font cache directory + * + * This directory contains the cached font metrics for the fonts used by DOMPDF. + * This directory can be the same as DOMPDF_FONT_DIR + * + * Note: This directory must exist and be writable by the webserver process. + */ + "font_cache" => storage_path('fonts'), + + /** + * The location of a temporary directory. + * + * The directory specified must be writeable by the webserver process. + * The temporary directory is required to download remote images and when + * using the PFDLib back end. + */ + "temp_dir" => sys_get_temp_dir(), + + /** + * ==== IMPORTANT ==== + * + * dompdf's "chroot": Prevents dompdf from accessing system files or other + * files on the webserver. All local files opened by dompdf must be in a + * subdirectory of this directory. DO NOT set it to '/' since this could + * allow an attacker to use dompdf to read any files on the server. This + * should be an absolute path. + * This is only checked on command line call by dompdf.php, but not by + * direct class use like: + * $dompdf = new DOMPDF(); $dompdf->load_html($htmldata); $dompdf->render(); $pdfdata = $dompdf->output(); + */ + "chroot" => realpath(base_path()), + + /** + * Protocol whitelist + * + * Protocols and PHP wrappers allowed in URIs, and the validation rules + * that determine if a resouce may be loaded. Full support is not guaranteed + * for the protocols/wrappers specified + * by this array. + * + * @var array + */ + 'allowed_protocols' => [ + "file://" => ["rules" => []], + "http://" => ["rules" => []], + "https://" => ["rules" => []] + ], + + /** + * @var string + */ + 'log_output_file' => null, + + /** + * Whether to enable font subsetting or not. + */ + "enable_font_subsetting" => false, + + /** + * The PDF rendering backend to use + * + * Valid settings are 'PDFLib', 'CPDF' (the bundled R&OS PDF class), 'GD' and + * 'auto'. 'auto' will look for PDFLib and use it if found, or if not it will + * fall back on CPDF. 'GD' renders PDFs to graphic files. {@link + * Canvas_Factory} ultimately determines which rendering class to instantiate + * based on this setting. + * + * Both PDFLib & CPDF rendering backends provide sufficient rendering + * capabilities for dompdf, however additional features (e.g. object, + * image and font support, etc.) differ between backends. Please see + * {@link PDFLib_Adapter} for more information on the PDFLib backend + * and {@link CPDF_Adapter} and lib/class.pdf.php for more information + * on CPDF. Also see the documentation for each backend at the links + * below. + * + * The GD rendering backend is a little different than PDFLib and + * CPDF. Several features of CPDF and PDFLib are not supported or do + * not make any sense when creating image files. For example, + * multiple pages are not supported, nor are PDF 'objects'. Have a + * look at {@link GD_Adapter} for more information. GD support is + * experimental, so use it at your own risk. + * + * @link http://www.pdflib.com + * @link http://www.ros.co.nz/pdf + * @link http://www.php.net/image + */ + "pdf_backend" => "CPDF", + + /** + * PDFlib license key + * + * If you are using a licensed, commercial version of PDFlib, specify + * your license key here. If you are using PDFlib-Lite or are evaluating + * the commercial version of PDFlib, comment out this setting. + * + * @link http://www.pdflib.com + * + * If pdflib present in web server and auto or selected explicitely above, + * a real license code must exist! + */ + //"DOMPDF_PDFLIB_LICENSE" => "your license key here", + + /** + * html target media view which should be rendered into pdf. + * List of types and parsing rules for future extensions: + * http://www.w3.org/TR/REC-html40/types.html + * screen, tty, tv, projection, handheld, print, braille, aural, all + * Note: aural is deprecated in CSS 2.1 because it is replaced by speech in CSS 3. + * Note, even though the generated pdf file is intended for print output, + * the desired content might be different (e.g. screen or projection view of html file). + * Therefore allow specification of content here. + */ + "default_media_type" => "screen", + + /** + * The default paper size. + * + * North America standard is "letter"; other countries generally "a4" + * + * @see CPDF_Adapter::PAPER_SIZES for valid sizes ('letter', 'legal', 'A4', etc.) + */ + "default_paper_size" => "a4", + + /** + * The default paper orientation. + * + * The orientation of the page (portrait or landscape). + * + * @var string + */ + 'default_paper_orientation' => "portrait", + + /** + * The default font family + * + * Used if no suitable fonts can be found. This must exist in the font folder. + * @var string + */ + "default_font" => "serif", + + /** + * Image DPI setting + * + * This setting determines the default DPI setting for images and fonts. The + * DPI may be overridden for inline images by explictly setting the + * image's width & height style attributes (i.e. if the image's native + * width is 600 pixels and you specify the image's width as 72 points, + * the image will have a DPI of 600 in the rendered PDF. The DPI of + * background images can not be overridden and is controlled entirely + * via this parameter. + * + * For the purposes of DOMPDF, pixels per inch (PPI) = dots per inch (DPI). + * If a size in html is given as px (or without unit as image size), + * this tells the corresponding size in pt. + * This adjusts the relative sizes to be similar to the rendering of the + * html page in a reference browser. + * + * In pdf, always 1 pt = 1/72 inch + * + * Rendering resolution of various browsers in px per inch: + * Windows Firefox and Internet Explorer: + * SystemControl->Display properties->FontResolution: Default:96, largefonts:120, custom:? + * Linux Firefox: + * about:config *resolution: Default:96 + * (xorg screen dimension in mm and Desktop font dpi settings are ignored) + * + * Take care about extra font/image zoom factor of browser. + * + * In images, size in pixel attribute, img css style, are overriding + * the real image dimension in px for rendering. + * + * @var int + */ + "dpi" => 96, + + /** + * Enable inline PHP + * + * If this setting is set to true then DOMPDF will automatically evaluate + * inline PHP contained within tags. + * + * Enabling this for documents you do not trust (e.g. arbitrary remote html + * pages) is a security risk. Set this option to false if you wish to process + * untrusted documents. + * + * @var bool + */ + "enable_php" => false, + + /** + * Enable inline Javascript + * + * If this setting is set to true then DOMPDF will automatically insert + * JavaScript code contained within tags. + * + * @var bool + */ + "enable_javascript" => true, + + /** + * Enable remote file access + * + * If this setting is set to true, DOMPDF will access remote sites for + * images and CSS files as required. + * This is required for part of test case www/test/image_variants.html through www/examples.php + * + * Attention! + * This can be a security risk, in particular in combination with DOMPDF_ENABLE_PHP and + * allowing remote access to dompdf.php or on allowing remote html code to be passed to + * $dompdf = new DOMPDF(, $dompdf->load_html(..., + * This allows anonymous users to download legally doubtful internet content which on + * tracing back appears to being downloaded by your server, or allows malicious php code + * in remote html pages to be executed by your server with your account privileges. + * + * @var bool + */ + "enable_remote" => true, + + /** + * A ratio applied to the fonts height to be more like browsers' line height + */ + "font_height_ratio" => 1.1, + + /** + * Use the HTML5 Lib parser + * + * @deprecated This feature is now always on in dompdf 2.x + * @var bool + */ + "enable_html5_parser" => true, + ), + + +); diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 0000000..49d13f1 --- /dev/null +++ b/config/excel.php @@ -0,0 +1,332 @@ + [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Pre-calculate formulas during export + |-------------------------------------------------------------------------- + */ + 'pre_calculate_formulas' => false, + + /* + |-------------------------------------------------------------------------- + | Enable strict null comparison + |-------------------------------------------------------------------------- + | + | When enabling strict null comparison empty cells ('') will + | be added to the sheet. + */ + 'strict_null_comparison' => false, + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + 'output_encoding' => '', + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + ], + + 'imports' => [ + + /* + |-------------------------------------------------------------------------- + | Read Only + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might only be interested in the + | data that the sheet exists. By default we ignore all styles, + | however if you want to do some logic based on style data + | you can enable it by setting read_only to false. + | + */ + 'read_only' => true, + + /* + |-------------------------------------------------------------------------- + | Ignore Empty + |-------------------------------------------------------------------------- + | + | When dealing with imports, you might be interested in ignoring + | rows that have null values or empty strings. By default rows + | containing empty strings or empty values are not ignored but can be + | ignored by enabling the setting ignore_empty to true. + | + */ + 'ignore_empty' => false, + + /* + |-------------------------------------------------------------------------- + | Heading Row Formatter + |-------------------------------------------------------------------------- + | + | Configure the heading row formatter. + | Available options: none|slug|custom + | + */ + 'heading_row' => [ + 'formatter' => 'slug', + ], + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV imports. + | + */ + 'csv' => [ + 'delimiter' => null, + 'enclosure' => '"', + 'escape_character' => '\\', + 'contiguous' => false, + 'input_encoding' => 'UTF-8', + ], + + /* + |-------------------------------------------------------------------------- + | Worksheet properties + |-------------------------------------------------------------------------- + | + | Configure e.g. default title, creator, subject,... + | + */ + 'properties' => [ + 'creator' => '', + 'lastModifiedBy' => '', + 'title' => '', + 'description' => '', + 'subject' => '', + 'keywords' => '', + 'category' => '', + 'manager' => '', + 'company' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer/reader type should be used when the package + | needs to guess the correct type based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + 'tsv' => Excel::TSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], + + /* + |-------------------------------------------------------------------------- + | Value Binder + |-------------------------------------------------------------------------- + | + | PhpSpreadsheet offers a way to hook into the process of a value being + | written to a cell. In there some assumptions are made on how the + | value should be formatted. If you want to change those defaults, + | you can implement your own default value binder. + | + | Possible value binders: + | + | [x] Maatwebsite\Excel\DefaultValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\StringValueBinder::class + | [x] PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder::class + | + */ + 'value_binder' => [ + 'default' => Maatwebsite\Excel\DefaultValueBinder::class, + ], + + 'cache' => [ + /* + |-------------------------------------------------------------------------- + | Default cell caching driver + |-------------------------------------------------------------------------- + | + | By default PhpSpreadsheet keeps all cell values in memory, however when + | dealing with large files, this might result into memory issues. If you + | want to mitigate that, you can configure a cell caching driver here. + | When using the illuminate driver, it will store each value in a the + | cache store. This can slow down the process, because it needs to + | store each value. You can use the "batch" store if you want to + | only persist to the store when the memory limit is reached. + | + | Drivers: memory|illuminate|batch + | + */ + 'driver' => 'memory', + + /* + |-------------------------------------------------------------------------- + | Batch memory caching + |-------------------------------------------------------------------------- + | + | When dealing with the "batch" caching driver, it will only + | persist to the store when the memory limit is reached. + | Here you can tweak the memory limit to your liking. + | + */ + 'batch' => [ + 'memory_limit' => 60000, + ], + + /* + |-------------------------------------------------------------------------- + | Illuminate cache + |-------------------------------------------------------------------------- + | + | When using the "illuminate" caching driver, it will automatically use + | your default cache store. However if you prefer to have the cell + | cache on a separate store, you can configure the store name here. + | You can use any store defined in your cache config. When leaving + | at "null" it will use the default store. + | + */ + 'illuminate' => [ + 'store' => null, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Transaction Handler + |-------------------------------------------------------------------------- + | + | By default the import is wrapped in a transaction. This is useful + | for when an import may fail and you want to retry it. With the + | transactions, the previous import gets rolled-back. + | + | You can disable the transaction handler by setting this to null. + | Or you can choose a custom made transaction handler here. + | + | Supported handlers: null|db + | + */ + 'transactions' => [ + 'handler' => 'db', + 'db' => [ + 'connection' => null, + ], + ], + + 'temporary_files' => [ + + /* + |-------------------------------------------------------------------------- + | Local Temporary Path + |-------------------------------------------------------------------------- + | + | When exporting and importing files, we use a temporary file, before + | storing reading or downloading. Here you can customize that path. + | + */ + 'local_path' => storage_path('framework/cache/laravel-excel'), + + /* + |-------------------------------------------------------------------------- + | Remote Temporary Disk + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup with queues in which you + | cannot rely on having a shared local temporary path, you might + | want to store the temporary file on a shared disk. During the + | queue executing, we'll retrieve the temporary file from that + | location instead. When left to null, it will always use + | the local path. This setting only has effect when using + | in conjunction with queued imports and exports. + | + */ + 'remote_disk' => null, + 'remote_prefix' => null, + + /* + |-------------------------------------------------------------------------- + | Force Resync + |-------------------------------------------------------------------------- + | + | When dealing with a multi server setup as above, it's possible + | for the clean up that occurs after entire queue has been run to only + | cleanup the server that the last AfterImportJob runs on. The rest of the server + | would still have the local temporary file stored on it. In this case your + | local storage limits can be exceeded and future imports won't be processed. + | To mitigate this you can set this config value to be true, so that after every + | queued chunk is processed the local temporary file is deleted on the server that + | processed it. + | + */ + 'force_resync_remote' => null, + ], +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 0000000..df9e2cf --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,72 @@ + env('FILESYSTEM_DISK', 'public'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "sftp", "s3" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL') . '/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION'), + 'bucket' => env('AWS_BUCKET'), + 'url' => env('AWS_URL'), + 'endpoint' => env('AWS_ENDPOINT'), + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Symbolic Links + |-------------------------------------------------------------------------- + | + | Here you may configure the symbolic links that will be created when the + | `storage:link` Artisan command is executed. The array keys should be + | the locations of the links and the values should be their targets. + | + */ + + 'links' => [ + public_path('storage') => storage_path('app/public'), + ], + +]; diff --git a/config/flare.php b/config/flare.php new file mode 100644 index 0000000..a4896f3 --- /dev/null +++ b/config/flare.php @@ -0,0 +1,80 @@ + env('FLARE_KEY'), + + /* + |-------------------------------------------------------------------------- + | Middleware + |-------------------------------------------------------------------------- + | + | These middleware will modify the contents of the report sent to Flare. + | + */ + + 'flare_middleware' => [ + RemoveRequestIp::class, + AddGitInformation::class, + AddNotifierName::class, + AddEnvironmentInformation::class, + AddExceptionInformation::class, + AddDumps::class, + AddLogs::class => [ + 'maximum_number_of_collected_logs' => 200, + ], + AddQueries::class => [ + 'maximum_number_of_collected_queries' => 200, + 'report_query_bindings' => true, + ], + AddJobs::class => [ + 'max_chained_job_reporting_depth' => 5, + ], + CensorRequestBodyFields::class => [ + 'censor_fields' => [ + 'password', + 'password_confirmation', + ], + ], + CensorRequestHeaders::class => [ + 'headers' => [ + 'API-KEY', + ] + ] + ], + + /* + |-------------------------------------------------------------------------- + | Reporting log statements + |-------------------------------------------------------------------------- + | + | If this setting is `false` log statements won't be sent as events to Flare, + | no matter which error level you specified in the Flare log channel. + | + */ + + 'send_logs_as_events' => true, +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 0000000..8425770 --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,52 @@ + 'bcrypt', + + /* + |-------------------------------------------------------------------------- + | Bcrypt Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Bcrypt algorithm. This will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'bcrypt' => [ + 'rounds' => env('BCRYPT_ROUNDS', 10), + ], + + /* + |-------------------------------------------------------------------------- + | Argon Options + |-------------------------------------------------------------------------- + | + | Here you may specify the configuration options that should be used when + | passwords are hashed using the Argon algorithm. These will allow you + | to control the amount of time it takes to hash the given password. + | + */ + + 'argon' => [ + 'memory' => 1024, + 'threads' => 2, + 'time' => 2, + ], + +]; diff --git a/config/ignition.php b/config/ignition.php new file mode 100644 index 0000000..4cc53e4 --- /dev/null +++ b/config/ignition.php @@ -0,0 +1,214 @@ + env('IGNITION_EDITOR', 'phpstorm'), + + /* + |-------------------------------------------------------------------------- + | Theme + |-------------------------------------------------------------------------- + | + | Here you may specify which theme Ignition should use. + | + | Supported: "light", "dark", "auto" + | + */ + + 'theme' => env('IGNITION_THEME', 'auto'), + + /* + |-------------------------------------------------------------------------- + | Sharing + |-------------------------------------------------------------------------- + | + | You can share local errors with colleagues or others around the world. + | Sharing is completely free and doesn't require an account on Flare. + | + | If necessary, you can completely disable sharing below. + | + */ + + 'enable_share_button' => env('IGNITION_SHARING_ENABLED', true), + + /* + |-------------------------------------------------------------------------- + | Register Ignition commands + |-------------------------------------------------------------------------- + | + | Ignition comes with an additional make command that lets you create + | new solution classes more easily. To keep your default Laravel + | installation clean, this command is not registered by default. + | + | You can enable the command registration below. + | + */ + + 'register_commands' => env('REGISTER_IGNITION_COMMANDS', false), + + /* + |-------------------------------------------------------------------------- + | Solution Providers + |-------------------------------------------------------------------------- + | + | You may specify a list of solution providers (as fully qualified class + | names) that shouldn't be loaded. Ignition will ignore these classes + | and possible solutions provided by them will never be displayed. + | + */ + + 'solution_providers' => [ + // from spatie/ignition + BadMethodCallSolutionProvider::class, + MergeConflictSolutionProvider::class, + UndefinedPropertySolutionProvider::class, + + // from spatie/laravel-ignition + IncorrectValetDbCredentialsSolutionProvider::class, + MissingAppKeySolutionProvider::class, + DefaultDbNameSolutionProvider::class, + TableNotFoundSolutionProvider::class, + MissingImportSolutionProvider::class, + InvalidRouteActionSolutionProvider::class, + ViewNotFoundSolutionProvider::class, + RunningLaravelDuskInProductionProvider::class, + MissingColumnSolutionProvider::class, + UnknownValidationSolutionProvider::class, + MissingMixManifestSolutionProvider::class, + MissingViteManifestSolutionProvider::class, + MissingLivewireComponentSolutionProvider::class, + UndefinedViewVariableSolutionProvider::class, + GenericLaravelExceptionSolutionProvider::class, + ], + + /* + |-------------------------------------------------------------------------- + | Ignored Solution Providers + |-------------------------------------------------------------------------- + | + | You may specify a list of solution providers (as fully qualified class + | names) that shouldn't be loaded. Ignition will ignore these classes + | and possible solutions provided by them will never be displayed. + | + */ + + 'ignored_solution_providers' => [ + + ], + + /* + |-------------------------------------------------------------------------- + | Runnable Solutions + |-------------------------------------------------------------------------- + | + | Some solutions that Ignition displays are runnable and can perform + | various tasks. By default, runnable solutions are only enabled when your + | app has debug mode enabled and the environment is `local` or + | `development`. + | + | Using the `IGNITION_ENABLE_RUNNABLE_SOLUTIONS` environment variable, you + | can override this behaviour and enable or disable runnable solutions + | regardless of the application's environment. + | + | Default: env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS') + | + */ + + 'enable_runnable_solutions' => env('IGNITION_ENABLE_RUNNABLE_SOLUTIONS'), + + /* + |-------------------------------------------------------------------------- + | Remote Path Mapping + |-------------------------------------------------------------------------- + | + | If you are using a remote dev server, like Laravel Homestead, Docker, or + | even a remote VPS, it will be necessary to specify your path mapping. + | + | Leaving one, or both of these, empty or null will not trigger the remote + | URL changes and Ignition will treat your editor links as local files. + | + | "remote_sites_path" is an absolute base path for your sites or projects + | in Homestead, Vagrant, Docker, or another remote development server. + | + | Example value: "/home/vagrant/Code" + | + | "local_sites_path" is an absolute base path for your sites or projects + | on your local computer where your IDE or code editor is running on. + | + | Example values: "/Users//Code", "C:\Users\\Documents\Code" + | + */ + + 'remote_sites_path' => env('IGNITION_REMOTE_SITES_PATH', base_path()), + 'local_sites_path' => env('IGNITION_LOCAL_SITES_PATH', ''), + + /* + |-------------------------------------------------------------------------- + | Housekeeping Endpoint Prefix + |-------------------------------------------------------------------------- + | + | Ignition registers a couple of routes when it is enabled. Below you may + | specify a route prefix that will be used to host all internal links. + | + */ + + 'housekeeping_endpoint_prefix' => '_ignition', + + /* + |-------------------------------------------------------------------------- + | Settings File + |-------------------------------------------------------------------------- + | + | Ignition allows you to save your settings to a specific global file. + | + | If no path is specified, a file with settings will be saved to the user's + | home directory. The directory depends on the OS and its settings but it's + | typically `~/.ignition.json`. In this case, the settings will be applied + | to all of your projects where Ignition is used and the path is not + | specified. + | + | However, if you want to store your settings on a project basis, or you + | want to keep them in another directory, you can specify a path where + | the settings file will be saved. The path should be an existing directory + | with correct write access. + | For example, create a new `ignition` folder in the storage directory and + | use `storage_path('ignition')` as the `settings_file_path`. + | + | Default value: '' (empty string) + */ + + 'settings_file_path' => '', + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 0000000..6aa77fe --- /dev/null +++ b/config/logging.php @@ -0,0 +1,104 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "monolog", + | "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + 'ignore_exceptions' => false, + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => env('LOG_LEVEL', 'debug'), + 'days' => 14, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => env('LOG_LEVEL', 'critical'), + ], + + 'papertrail' => [ + 'driver' => 'monolog', + 'level' => env('LOG_LEVEL', 'debug'), + 'handler' => SyslogUdpHandler::class, + 'handler_with' => [ + 'host' => env('PAPERTRAIL_URL'), + 'port' => env('PAPERTRAIL_PORT'), + ], + ], + + 'stderr' => [ + 'driver' => 'monolog', + 'handler' => StreamHandler::class, + 'formatter' => env('LOG_STDERR_FORMATTER'), + 'with' => [ + 'stream' => 'php://stderr', + ], + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => env('LOG_LEVEL', 'debug'), + ], + + 'null' => [ + 'driver' => 'monolog', + 'handler' => NullHandler::class, + ], + + 'emergency' => [ + 'path' => storage_path('logs/laravel.log'), + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 0000000..f4b2962 --- /dev/null +++ b/config/mail.php @@ -0,0 +1,130 @@ + env('MAIL_MAILER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | Mailer Configurations + |-------------------------------------------------------------------------- + | + | Here you may configure all of the mailers used by your application plus + | their respective settings. Several examples have been configured for + | you and you are free to add your own as your application requires. + | + | Laravel supports a variety of mail "transport" drivers to be used while + | sending an e-mail. You will specify which one you are using for your + | mailers below. You are free to add additional mailers as required. + | + | Supported: "smtp", "sendmail", "mailgun", "ses", + | "postmark", "log", "array", "failover" + | + */ + + 'mailers' => [ + 'smtp' => [ + 'transport' => 'smtp', + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + 'port' => env('MAIL_PORT', 587), + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'username' => env('MAIL_USERNAME'), + 'password' => env('MAIL_PASSWORD'), + 'timeout' => null, + 'verify_peer' => false, + ], + + 'ses' => [ + 'transport' => 'ses', + ], + + 'mailgun' => [ + 'transport' => 'mailgun', + ], + + 'postmark' => [ + 'transport' => 'postmark', + ], + + 'sendmail' => [ + 'transport' => 'sendmail', + 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), + ], + + 'log' => [ + 'transport' => 'log', + 'channel' => env('MAIL_LOG_CHANNEL'), + ], + + 'array' => [ + 'transport' => 'array', + ], + + 'failover' => [ + 'transport' => 'failover', + 'mailers' => [ + 'smtp', + 'log', + ], + ], + ], + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS'), + 'name' => env('MAIL_FROM_NAME') + ], + + /* + |-------------------------------------------------------------------------- + | Default Mailer Domain + |-------------------------------------------------------------------------- + | + | This option controls the domain for email message_id that is used to send email + | messages sent by your application. + | + */ + + 'domain' => env('MAIL_DOMAIN', 'webkul.com'), + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; \ No newline at end of file diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 0000000..1222296 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,89 @@ + env('QUEUE_CONNECTION', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", "null" + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + 'block_for' => 0, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), + 'queue' => env('SQS_QUEUE', 'your-queue-name'), + 'suffix' => env('SQS_SUFFIX'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => env('REDIS_QUEUE', 'default'), + 'retry_after' => 90, + 'block_for' => null, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/repository.php b/config/repository.php new file mode 100644 index 0000000..fe63a7b --- /dev/null +++ b/config/repository.php @@ -0,0 +1,246 @@ + [ + 'limit' => 15 + ], + + /* + |-------------------------------------------------------------------------- + | Fractal Presenter Config + |-------------------------------------------------------------------------- + | + + Available serializers: + ArraySerializer + DataArraySerializer + JsonApiSerializer + + */ + 'fractal' => [ + 'params' => [ + 'include' => 'include' + ], + 'serializer' => League\Fractal\Serializer\DataArraySerializer::class + ], + + /* + |-------------------------------------------------------------------------- + | Cache Config + |-------------------------------------------------------------------------- + | + */ + 'cache' => [ + /* + |-------------------------------------------------------------------------- + | Cache Status + |-------------------------------------------------------------------------- + | + | Enable or disable cache + | + */ + 'enabled' => false, + + /* + |-------------------------------------------------------------------------- + | Cache Minutes + |-------------------------------------------------------------------------- + | + | Time of expiration cache + | + */ + 'minutes' => 30, + + /* + |-------------------------------------------------------------------------- + | Cache Repository + |-------------------------------------------------------------------------- + | + | Instance of Illuminate\Contracts\Cache\Repository + | + */ + 'repository' => 'cache', + + /* + |-------------------------------------------------------------------------- + | Cache Clean Listener + |-------------------------------------------------------------------------- + | + | + | + */ + 'clean' => [ + + /* + |-------------------------------------------------------------------------- + | Enable clear cache on repository changes + |-------------------------------------------------------------------------- + | + */ + 'enabled' => true, + + /* + |-------------------------------------------------------------------------- + | Actions in Repository + |-------------------------------------------------------------------------- + | + | create : Clear Cache on create Entry in repository + | update : Clear Cache on update Entry in repository + | delete : Clear Cache on delete Entry in repository + | + */ + 'on' => [ + 'create' => true, + 'update' => true, + 'delete' => true, + ] + ], + + 'params' => [ + /* + |-------------------------------------------------------------------------- + | Skip Cache Params + |-------------------------------------------------------------------------- + | + | + | Ex: http://prettus.local/?search=lorem&skipCache=true + | + */ + 'skipCache' => 'skipCache' + ], + + /* + |-------------------------------------------------------------------------- + | Methods Allowed + |-------------------------------------------------------------------------- + | + | methods cacheable : all, paginate, find, findByField, findWhere, getByCriteria + | + | Ex: + | + | 'only' =>['all','paginate'], + | + | or + | + | 'except' =>['find'], + */ + 'allowed' => [ + 'only' => null, + 'except' => null + ] + ], + + /* + |-------------------------------------------------------------------------- + | Criteria Config + |-------------------------------------------------------------------------- + | + | Settings of request parameters names that will be used by Criteria + | + */ + 'criteria' => [ + /* + |-------------------------------------------------------------------------- + | Accepted Conditions + |-------------------------------------------------------------------------- + | + | Conditions accepted in consultations where the Criteria + | + | Ex: + | + | 'acceptedConditions'=>['=','like'] + | + | $query->where('foo','=','bar') + | $query->where('foo','like','bar') + | + */ + 'acceptedConditions' => [ + '=', + 'like', + 'in' + ], + /* + |-------------------------------------------------------------------------- + | Request Params + |-------------------------------------------------------------------------- + | + | Request parameters that will be used to filter the query in the repository + | + | Params : + | + | - search : Searched value + | Ex: http://prettus.local/?search=lorem + | + | - searchFields : Fields in which research should be carried out + | Ex: + | http://prettus.local/?search=lorem&searchFields=name;email + | http://prettus.local/?search=lorem&searchFields=name:like;email + | http://prettus.local/?search=lorem&searchFields=name:like + | + | - filter : Fields that must be returned to the response object + | Ex: + | http://prettus.local/?search=lorem&filter=id,name + | + | - orderBy : Order By + | Ex: + | http://prettus.local/?search=lorem&orderBy=id + | + | - sortedBy : Sort + | Ex: + | http://prettus.local/?search=lorem&orderBy=id&sortedBy=asc + | http://prettus.local/?search=lorem&orderBy=id&sortedBy=desc + | + | - searchJoin: Specifies the search method (AND / OR), by default the + | application searches each parameter with OR + | EX: + | http://prettus.local/?search=lorem&searchJoin=and + | http://prettus.local/?search=lorem&searchJoin=or + | + */ + 'params' => [ + 'search' => 'search', + 'searchFields' => 'searchFields', + 'filter' => 'filter', + 'orderBy' => 'orderBy', + 'sortedBy' => 'sortedBy', + 'with' => 'with', + 'searchJoin' => 'searchJoin', + 'withCount' => 'withCount' + ] + ], + /* + |-------------------------------------------------------------------------- + | Generator Config + |-------------------------------------------------------------------------- + | + */ + 'generator' => [ + 'basePath' => app()->path(), + 'rootNamespace' => 'App\\', + 'stubsOverridePath' => app()->path(), + 'paths' => [ + 'models' => 'Entities', + 'repositories' => 'Repositories', + 'interfaces' => 'Repositories', + 'transformers' => 'Transformers', + 'presenters' => 'Presenters', + 'validators' => 'Validators', + 'controllers' => 'Http/Controllers', + 'provider' => 'RepositoryServiceProvider', + 'criteria' => 'Criteria' + ] + ] +]; diff --git a/config/sanctum.php b/config/sanctum.php new file mode 100644 index 0000000..6b98c27 --- /dev/null +++ b/config/sanctum.php @@ -0,0 +1,65 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + env('APP_URL') ? ',' . parse_url(env('APP_URL'), PHP_URL_HOST) : '' + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['user'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 0000000..2a1d616 --- /dev/null +++ b/config/services.php @@ -0,0 +1,33 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), + ], + + 'postmark' => [ + 'token' => env('POSTMARK_TOKEN'), + ], + + 'ses' => [ + 'key' => env('AWS_ACCESS_KEY_ID'), + 'secret' => env('AWS_SECRET_ACCESS_KEY'), + 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 0000000..c0e798b --- /dev/null +++ b/config/session.php @@ -0,0 +1,201 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => env('SESSION_LIFETIME', 120), + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => env('SESSION_CONNECTION', null), + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | While using one of the framework's cache driven session backends you may + | list a cache store that should be used for these sessions. This value + | must match with one of the application's configured cache "stores". + | + | Affects: "apc", "dynamodb", "memcached", "redis" + | + */ + + 'store' => env('SESSION_STORE', null), + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE'), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | will set this value to "lax" since this is a secure default value. + | + | Supported: "lax", "strict", "none", null + | + */ + + 'same_site' => 'lax', + +]; diff --git a/config/tinker.php b/config/tinker.php new file mode 100644 index 0000000..c187942 --- /dev/null +++ b/config/tinker.php @@ -0,0 +1,50 @@ + [ + // App\Console\Commands\ExampleCommand::class, + ], + + /* + |-------------------------------------------------------------------------- + | Auto Aliased Classes + |-------------------------------------------------------------------------- + | + | Tinker will not automatically alias classes in your vendor namespaces + | but you may explicitly allow a subset of classes to get aliased by + | adding the names of each of those classes to the following list. + | + */ + + 'alias' => [ + // + ], + + /* + |-------------------------------------------------------------------------- + | Classes That Should Not Be Aliased + |-------------------------------------------------------------------------- + | + | Typically, Tinker automatically aliases classes as you require them in + | Tinker. However, you may wish to never alias certain classes, which + | you may accomplish by listing the classes in the following array. + | + */ + + 'dont_alias' => [ + 'App\Nova', + ], + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 0000000..22b8a18 --- /dev/null +++ b/config/view.php @@ -0,0 +1,36 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => env( + 'VIEW_COMPILED_PATH', + realpath(storage_path('framework/views')) + ), + +]; diff --git a/database/.gitignore b/database/.gitignore new file mode 100644 index 0000000..97fc976 --- /dev/null +++ b/database/.gitignore @@ -0,0 +1,2 @@ +*.sqlite +*.sqlite-journal diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 0000000..3510ed6 --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,47 @@ + $this->faker->name, + 'email' => $this->faker->unique()->safeEmail, + 'email_verified_at' => now(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + ]; + } + + /** + * Indicate that the model's email address should be unverified. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + public function unverified() + { + return $this->state(function (array $attributes) { + return [ + 'email_verified_at' => null, + ]; + }); + } +} diff --git a/database/migrations/2019_08_19_000000_create_failed_jobs_table.php b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php new file mode 100644 index 0000000..6aa6d74 --- /dev/null +++ b/database/migrations/2019_08_19_000000_create_failed_jobs_table.php @@ -0,0 +1,36 @@ +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. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php new file mode 100644 index 0000000..3ce0002 --- /dev/null +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->morphs('tokenable'); + $table->string('name'); + $table->string('token', 64)->unique(); + $table->text('abilities')->nullable(); + $table->timestamp('last_used_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('personal_access_tokens'); + } +} diff --git a/database/migrations/2023_12_02_000001_create_personal_access_tokens_expires_at_column.php b/database/migrations/2023_12_02_000001_create_personal_access_tokens_expires_at_column.php new file mode 100644 index 0000000..2291285 --- /dev/null +++ b/database/migrations/2023_12_02_000001_create_personal_access_tokens_expires_at_column.php @@ -0,0 +1,35 @@ + sanctum 3 + */ + Schema::table('personal_access_tokens', function (Blueprint $table) { + $table->timestamp('expires_at')->nullable()->after('last_used_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('personal_access_tokens', function (Blueprint $table) { + $table->dropColumn('expires_at'); + }); + } +} diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php new file mode 100644 index 0000000..22f0087 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php @@ -0,0 +1,23 @@ +call(AdminDatabaseSeeder::class); + $this->call(CoreDatabaseSeeder::class); + $this->call(UserDatabaseSeeder::class); + } +} diff --git a/docker/7.4/Dockerfile b/docker/7.4/Dockerfile new file mode 100644 index 0000000..2184e49 --- /dev/null +++ b/docker/7.4/Dockerfile @@ -0,0 +1,62 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=13 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && echo "keyserver hkp://keyserver.ubuntu.com:80" >> ~/.gnupg/dirmngr.conf \ + && gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c \ + && gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c > /usr/share/keyrings/ppa_ondrej_php.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php7.4-cli php7.4-dev \ + php7.4-pgsql php7.4-sqlite3 php7.4-gd \ + php7.4-curl php7.4-memcached \ + php7.4-imap php7.4-mysql php7.4-mbstring \ + php7.4-xml php7.4-zip php7.4-bcmath php7.4-soap \ + php7.4-intl php7.4-readline php7.4-pcov \ + php7.4-msgpack php7.4-igbinary php7.4-ldap \ + php7.4-redis php7.4-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php7.4 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/7.4/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/7.4/php.ini b/docker/7.4/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/7.4/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/7.4/start-container b/docker/7.4/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/7.4/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/7.4/supervisord.conf b/docker/7.4/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/7.4/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.0/Dockerfile b/docker/8.0/Dockerfile new file mode 100644 index 0000000..15456ca --- /dev/null +++ b/docker/8.0/Dockerfile @@ -0,0 +1,64 @@ +FROM ubuntu:20.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=13 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && echo "keyserver hkp://keyserver.ubuntu.com:80" >> ~/.gnupg/dirmngr.conf \ + && gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c \ + && gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c > /usr/share/keyrings/ppa_ondrej_php.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu focal main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.0-cli php8.0-dev \ + php8.0-pgsql php8.0-sqlite3 php8.0-gd \ + php8.0-curl php8.0-memcached \ + php8.0-imap php8.0-mysql php8.0-mbstring \ + php8.0-xml php8.0-zip php8.0-bcmath php8.0-soap \ + php8.0-intl php8.0-readline php8.0-pcov \ + php8.0-msgpack php8.0-igbinary php8.0-ldap \ + php8.0-redis php8.0-swoole php8.0-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarnkey.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN update-alternatives --set php /usr/bin/php8.0 + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.0 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.0/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.0/php.ini b/docker/8.0/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/8.0/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/8.0/start-container b/docker/8.0/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.0/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.0/supervisord.conf b/docker/8.0/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.0/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.1/Dockerfile b/docker/8.1/Dockerfile new file mode 100644 index 0000000..0277709 --- /dev/null +++ b/docker/8.1/Dockerfile @@ -0,0 +1,63 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=14 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && echo "keyserver hkp://keyserver.ubuntu.com:80" >> ~/.gnupg/dirmngr.conf \ + && gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c \ + && gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c > /usr/share/keyrings/ppa_ondrej_php.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.1-cli php8.1-dev \ + php8.1-pgsql php8.1-sqlite3 php8.1-gd \ + php8.1-curl \ + php8.1-imap php8.1-mysql php8.1-mbstring \ + php8.1-xml php8.1-zip php8.1-bcmath php8.1-soap \ + php8.1-intl php8.1-readline \ + php8.1-ldap \ + php8.1-msgpack php8.1-igbinary php8.1-redis php8.1-swoole \ + php8.1-memcached php8.1-pcov php8.1-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.1 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.1/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.1/php.ini b/docker/8.1/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/8.1/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/8.1/start-container b/docker/8.1/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.1/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.1/supervisord.conf b/docker/8.1/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.1/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/docker/8.2/Dockerfile b/docker/8.2/Dockerfile new file mode 100644 index 0000000..e177eb8 --- /dev/null +++ b/docker/8.2/Dockerfile @@ -0,0 +1,63 @@ +FROM ubuntu:22.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=16 +ARG POSTGRES_VERSION=14 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND noninteractive +ENV TZ=UTC + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN apt-get update \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python2 \ + && mkdir -p ~/.gnupg \ + && chmod 600 ~/.gnupg \ + && echo "disable-ipv6" >> ~/.gnupg/dirmngr.conf \ + && echo "keyserver hkp://keyserver.ubuntu.com:80" >> ~/.gnupg/dirmngr.conf \ + && gpg --recv-key 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c \ + && gpg --export 0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c > /usr/share/keyrings/ppa_ondrej_php.gpg \ + && echo "deb [signed-by=/usr/share/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.2-cli php8.2-dev \ + php8.2-pgsql php8.2-sqlite3 php8.2-gd \ + php8.2-curl \ + php8.2-imap php8.2-mysql php8.2-mbstring \ + php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \ + php8.2-intl php8.2-readline \ + php8.2-ldap \ + # php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \ + # php8.2-memcached php8.2-pcov php8.2-xdebug \ + && php -r "readfile('https://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -sLS https://deb.nodesource.com/setup_$NODE_VERSION.x | bash - \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /usr/share/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /usr/share/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/usr/share/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y mysql-client \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2 + +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.2/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 8000 + +ENTRYPOINT ["start-container"] diff --git a/docker/8.2/php.ini b/docker/8.2/php.ini new file mode 100644 index 0000000..66d04d5 --- /dev/null +++ b/docker/8.2/php.ini @@ -0,0 +1,4 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS diff --git a/docker/8.2/start-container b/docker/8.2/start-container new file mode 100644 index 0000000..b864399 --- /dev/null +++ b/docker/8.2/start-container @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + exec gosu $WWWUSER "$@" +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.2/supervisord.conf b/docker/8.2/supervisord.conf new file mode 100644 index 0000000..9d28479 --- /dev/null +++ b/docker/8.2/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80 +user=sail +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0 diff --git a/lang/en/auth.php b/lang/en/auth.php new file mode 100644 index 0000000..6598e2c --- /dev/null +++ b/lang/en/auth.php @@ -0,0 +1,20 @@ + 'These credentials do not match our records.', + 'password' => 'The provided password is incorrect.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/lang/en/pagination.php b/lang/en/pagination.php new file mode 100644 index 0000000..d481411 --- /dev/null +++ b/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/lang/en/passwords.php b/lang/en/passwords.php new file mode 100644 index 0000000..2345a56 --- /dev/null +++ b/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Your password has been reset!', + 'sent' => 'We have emailed your password reset link!', + 'throttled' => 'Please wait before retrying.', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that email address.", + +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..c77e41c --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,152 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, dashes and underscores.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_equals' => 'The :attribute must be a date equal to :date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'ends_with' => 'The :attribute must end with one of the following: :values.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'gt' => [ + 'numeric' => 'The :attribute must be greater than :value.', + 'file' => 'The :attribute must be greater than :value kilobytes.', + 'string' => 'The :attribute must be greater than :value characters.', + 'array' => 'The :attribute must have more than :value items.', + ], + 'gte' => [ + 'numeric' => 'The :attribute must be greater than or equal :value.', + 'file' => 'The :attribute must be greater than or equal :value kilobytes.', + 'string' => 'The :attribute must be greater than or equal :value characters.', + 'array' => 'The :attribute must have :value items or more.', + ], + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'lt' => [ + 'numeric' => 'The :attribute must be less than :value.', + 'file' => 'The :attribute must be less than :value kilobytes.', + 'string' => 'The :attribute must be less than :value characters.', + 'array' => 'The :attribute must have less than :value items.', + ], + 'lte' => [ + 'numeric' => 'The :attribute must be less than or equal :value.', + 'file' => 'The :attribute must be less than or equal :value kilobytes.', + 'string' => 'The :attribute must be less than or equal :value characters.', + 'array' => 'The :attribute must not have more than :value items.', + ], + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'multiple_of' => 'The :attribute must be a multiple of :value.', + 'not_in' => 'The selected :attribute is invalid.', + 'not_regex' => 'The :attribute format is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'password' => 'The password is incorrect.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values are present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'starts_with' => 'The :attribute must start with one of the following: :values.', + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute format is invalid.', + 'uuid' => 'The :attribute must be a valid UUID.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap our attribute placeholder + | with something more reader friendly such as "E-Mail Address" instead + | of "email". This simply helps us make our message more expressive. + | + */ + + 'attributes' => [], + +]; diff --git a/package.json b/package.json new file mode 100644 index 0000000..00c6506 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "axios": "^0.21", + "laravel-mix": "^6.0.6", + "lodash": "^4.17.19", + "postcss": "^8.1.14" + } +} diff --git a/packages/Webkul/Activity/composer.json b/packages/Webkul/Activity/composer.json new file mode 100644 index 0000000..0cf8329 --- /dev/null +++ b/packages/Webkul/Activity/composer.json @@ -0,0 +1,28 @@ +{ + "name": "krayin/laravel-activity", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "krayin/laravel-core": "^1.0", + "krayin/laravel-user": "^1.0" + }, + "autoload": { + "psr-4": { + "Webkul\\Activity\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Activity\\Providers\\ActivityServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/packages/Webkul/Activity/src/Contracts/Activity.php b/packages/Webkul/Activity/src/Contracts/Activity.php new file mode 100644 index 0000000..3fa2414 --- /dev/null +++ b/packages/Webkul/Activity/src/Contracts/Activity.php @@ -0,0 +1,7 @@ +increments('id'); + $table->string('title')->nullable(); + $table->string('type'); + $table->text('comment')->nullable(); + $table->json('additional')->nullable(); + $table->datetime('schedule_from')->nullable(); + $table->datetime('schedule_to')->nullable(); + $table->boolean('is_done')->default(0); + + $table->integer('user_id')->unsigned(); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('activities'); + } +} diff --git a/packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php b/packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php new file mode 100644 index 0000000..279fe0d --- /dev/null +++ b/packages/Webkul/Activity/src/Database/Migrations/2021_05_15_151855_create_activity_files_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('name'); + $table->string('path'); + + $table->integer('activity_id')->unsigned(); + $table->foreign('activity_id')->references('id')->on('activities')->onDelete('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('activity_files'); + } +} diff --git a/packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php b/packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php new file mode 100644 index 0000000..a58ec77 --- /dev/null +++ b/packages/Webkul/Activity/src/Database/Migrations/2021_07_28_142453_create_activity_participants_table.php @@ -0,0 +1,39 @@ +increments('id'); + + $table->integer('activity_id')->unsigned(); + $table->foreign('activity_id')->references('id')->on('activities')->onDelete('cascade'); + + $table->integer('user_id')->nullable()->unsigned(); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + + $table->integer('person_id')->nullable()->unsigned(); + $table->foreign('person_id')->references('id')->on('persons')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('activity_participants'); + } +} diff --git a/packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php b/packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php new file mode 100644 index 0000000..26fe706 --- /dev/null +++ b/packages/Webkul/Activity/src/Database/Migrations/2021_11_17_190943_add_location_column_in_activities_table.php @@ -0,0 +1,32 @@ +string('location')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('activities', function (Blueprint $table) { + $table->dropColumn('location'); + }); + } +} diff --git a/packages/Webkul/Activity/src/Models/Activity.php b/packages/Webkul/Activity/src/Models/Activity.php new file mode 100644 index 0000000..d8fde7b --- /dev/null +++ b/packages/Webkul/Activity/src/Models/Activity.php @@ -0,0 +1,69 @@ +belongsTo(UserProxy::modelClass()); + } + + /** + * The participants that belong to the activity. + */ + public function participants() + { + return $this->hasMany(ParticipantProxy::modelClass()); + } + + /** + * Get the file associated with the activity. + */ + public function file() + { + return $this->hasOne(FileProxy::modelClass(), 'activity_id'); + } + + /** + * The leads that belong to the activity. + */ + public function leads() + { + return $this->belongsToMany(LeadProxy::modelClass(), 'lead_activities'); + } +} diff --git a/packages/Webkul/Activity/src/Models/ActivityProxy.php b/packages/Webkul/Activity/src/Models/ActivityProxy.php new file mode 100644 index 0000000..0e7fda0 --- /dev/null +++ b/packages/Webkul/Activity/src/Models/ActivityProxy.php @@ -0,0 +1,10 @@ +path); + } + + /** + * Get image url for the product image. + */ + public function getUrlAttribute() + { + return $this->url(); + } + + /** + * Get the activity that owns the file. + */ + public function activity() + { + return $this->belongsTo(ActivityProxy::modelClass()); + } + + /** + * @return array + */ + public function toArray() + { + $array = parent::toArray(); + + $array['url'] = $this->url; + + return $array; + } +} diff --git a/packages/Webkul/Activity/src/Models/FileProxy.php b/packages/Webkul/Activity/src/Models/FileProxy.php new file mode 100644 index 0000000..b4326e8 --- /dev/null +++ b/packages/Webkul/Activity/src/Models/FileProxy.php @@ -0,0 +1,10 @@ +belongsTo(ActivityProxy::modelClass()); + } + + /** + * Get the user that owns the participant. + */ + public function user() + { + return $this->belongsTo(UserProxy::modelClass()); + } + + /** + * Get the person that owns the participant. + */ + public function person() + { + return $this->belongsTo(PersonProxy::modelClass()); + } +} diff --git a/packages/Webkul/Activity/src/Models/ParticipantProxy.php b/packages/Webkul/Activity/src/Models/ParticipantProxy.php new file mode 100644 index 0000000..71f6467 --- /dev/null +++ b/packages/Webkul/Activity/src/Models/ParticipantProxy.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + } +} \ No newline at end of file diff --git a/packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..8d52023 --- /dev/null +++ b/packages/Webkul/Activity/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,14 @@ +select( + 'activities.id', + 'activities.created_at', + 'activities.title', + 'activities.schedule_from as start', + 'activities.schedule_to as end', + 'users.name as user_name', + ) + ->addSelect(\DB::raw('IF(activities.is_done, "done", "") as class')) + ->leftJoin('activity_participants', 'activities.id', '=', 'activity_participants.activity_id') + ->leftJoin('users', 'activities.user_id', '=', 'users.id') + ->whereIn('type', ['call', 'meeting', 'lunch']) + ->whereBetween('activities.schedule_from', $dateRange) + ->where(function ($query) { + $currentUser = auth()->guard()->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $userIds = app(UserRepository::class)->getCurrentUserGroupsUserIds(); + + $query->whereIn('activities.user_id', $userIds) + ->orWhereIn('activity_participants.user_id', $userIds); + } else { + $query->where('activities.user_id', $currentUser->id) + ->orWhere('activity_participants.user_id', $currentUser->id); + } + } + }) + ->distinct() + ->get(); + } + + /** + * @param string $startFrom + * @param string $endFrom + * @param array $participants + * @param integer $id + * @return boolean + */ + public function isDurationOverlapping($startFrom, $endFrom, $participants = [], $id) + { + $queryBuilder = $this->model + ->leftJoin('activity_participants', 'activities.id', '=', 'activity_participants.activity_id') + ->where(function ($query) use ($startFrom, $endFrom) { + $query->where([ + ['activities.schedule_from', '<=', $startFrom], + ['activities.schedule_to', '>=', $startFrom], + ])->orWhere([ + ['activities.schedule_from', '>=', $startFrom], + ['activities.schedule_from', '<=', $endFrom], + ]); + }) + ->where(function ($query) use ($participants) { + if (is_null($participants)) { + return; + } + + if (isset($participants['users'])) { + $query->orWhereIn('activity_participants.user_id', collect($participants['users'])->pluck('id')); + } + + if (isset($participants['persons'])) { + $query->orWhereIn('activity_participants.person_id', collect($participants['persons'])->pluck('id')); + } + }) + ->groupBy('activities.id'); + + if (!is_null($id)) { + $queryBuilder->where('activities.id', '!=', $id); + } + + return $queryBuilder->count() ? true : false; + } +} diff --git a/packages/Webkul/Activity/src/Repositories/FileRepository.php b/packages/Webkul/Activity/src/Repositories/FileRepository.php new file mode 100644 index 0000000..f1bc105 --- /dev/null +++ b/packages/Webkul/Activity/src/Repositories/FileRepository.php @@ -0,0 +1,68 @@ +activityRepository = $activityRepository; + + parent::__construct($container); + } + + /** + * Specify model class name. + * + * @return mixed + */ + public function model() + { + return \Webkul\Activity\Contracts\File::class; + } + + /** + * Upload files. + * + * @param array $data + * @return mixed|void + */ + public function upload(array $data) + { + if (!request()->hasFile('file')) { + return; + } + + $leadActivity = $this->activityRepository->create([ + 'is_done' => 1, + 'type' => 'file', + 'comment' => $data['comment'], + 'user_id' => auth()->guard()->user()->id, + ]); + + return parent::create([ + 'name' => $data['name'] ?? request()->file('file')->getClientOriginalName(), + 'path' => request()->file('file')->store('activities/' . $leadActivity->id), + 'activity_id' => $leadActivity->id, + ]); + } +} diff --git a/packages/Webkul/Activity/src/Repositories/ParticipantRepository.php b/packages/Webkul/Activity/src/Repositories/ParticipantRepository.php new file mode 100644 index 0000000..26ff036 --- /dev/null +++ b/packages/Webkul/Activity/src/Repositories/ParticipantRepository.php @@ -0,0 +1,18 @@ +div{width:100%}.drag-column .drag-column-header>div h2{color:#263238;font-size:18px;font-weight:500;margin:0 0 10px}.drag-column .drag-column-header>div h2 span{color:#53c41a}.drag-column .drag-column-header>div a{cursor:pointer}.drag-inner-list{color:#546e7a;height:100%;height:calc(100% - 110px);min-height:50px;overflow-y:scroll}.drag-inner-list .empty-icon-container{display:block;height:100%;position:relative;text-align:center}.drag-inner-list .empty-icon-container .icon-text-container{left:calc(50% - 49px);position:absolute;top:calc(50% - 75px)}.drag-inner-list .empty-icon-container .icon-text-container .empty-kanban-icon{height:98px;width:98px}.drag-inner-list .empty-icon-container .icon-text-container span{display:block;padding-top:10px}.drag-item{background:#fff;border:1px solid #f7f8f9;border-bottom-color:hsla(210,2%,76%,.5);box-shadow:none;box-shadow:0 2px 2px rgba(0,0,0,.1);line-height:30px;margin:0;transition:all .3s cubic-bezier(.23,1,.32,1)}.drag-item .lead-block{padding:10px;position:relative}.drag-item .lead-block:hover .icons{display:inline-block}.drag-item .lead-block.rotten{background:#ffd0d6}.drag-item .lead-block .lead-title{color:#263238;display:inline-block;font-size:16px;font-weight:500;line-break:anywhere;width:calc(100% - 45px)}.drag-item .lead-block .icons{cursor:pointer;display:none;position:absolute;right:5px;top:5px}.drag-item .lead-block .lead-cost{color:#263238}.drag-item .lead-block .lead-cost,.drag-item .lead-block .lead-person{font-size:14px}.drag-item .lead-block .lead-cost .icon,.drag-item .lead-block .lead-person .icon{margin-right:5px;vertical-align:middle}.drag-header-more{cursor:pointer}.drag-options{height:100%;left:0;opacity:0;padding:10px;position:absolute;top:44px;transform:translateX(100%);transition:all .3s cubic-bezier(.23,1,.32,1);width:100%}.drag-options.active{opacity:1;transform:translateX(0)}.drag-options-label{display:block;margin:0 0 5px}.drag-options-label input{opacity:.6}.drag-options-label span{display:inline-block;font-size:.9rem;font-weight:400;margin-left:5px}.gu-mirror{list-style-type:none;margin:0!important;opacity:.8;position:fixed!important;z-index:9999!important}.gu-hide{display:none!important}.gu-unselectable{-webkit-user-select:none!important;-moz-user-select:none!important;-ms-user-select:none!important;user-select:none!important}.gu-transit{opacity:.2}.disable-drag{pointer-events:none}.rtl{direction:rtl}.rtl .anonymous-layout-container .center-box .adjacent-center{text-align:right}.rtl .lead-quote-list table tr td.actions .icon{cursor:pointer}.rtl .lead-quote-list table tr td.actions .dropdown-list{left:60px!important;right:unset}.rtl .navbar-top .navbar-top-right{text-align:left}.rtl .navbar-top .navbar-top-right .quick-create .dropdown-toggle .icon{margin-left:6px;margin-right:unset}.rtl .navbar-top .navbar-top-right .quick-create .dropdown-list{left:0;right:unset}.rtl .navbar-top .navbar-top-right .profile-info .dropdown-toggle .avatar{margin-left:10px}.rtl .navbar-top .navbar-top-right .profile-info .dropdown-list{left:0;right:unset;text-align:right}.rtl table tr .avatar{margin-left:10px}.rtl table tr .badge{margin-left:5px}.rtl .navbar-left{left:unset;right:-1px}.rtl .navbar-left .menubar li.menu-item .menu-label{margin-left:0;margin-right:10px}.rtl .navbar-left .menubar li.menu-item ul.sub-menubar{border-left:1px solid #eee;border-right:0;left:unset;right:48px}.rtl .navbar-left.open ul.menubar li.menu-item.active{width:100%}.rtl .navbar-left.open+.content-container{padding-left:0!important;padding-right:160px}.rtl .content-container{padding-left:0;padding-right:48px}.rtl .content-container .dashboard .row-grid-3 .card label .icon-container,.rtl .content-container .dashboard>h1~.card-filter-container{float:left}.rtl .content-container .dashboard .daterangepicker{left:0;right:unset}.rtl .content-container .content .page-header .page-action{float:left}.rtl .table .tabs-container .tabs-right-container{text-align:left}.rtl .drag-item .lead-block .icons{left:5px;right:unset}.rtl .tags-container .tag-dropdown .lookup-results{text-align:right}.rtl .tags-container ul.tag-list{margin-left:0;margin-right:10px}.rtl .tags-container ul.tag-list li{margin-left:8px;margin-right:0}.rtl .tags-container ul.tag-list li:last-child{margin-left:0}.rtl .modal-container .modal-header .header-actions{text-align:left}.rtl .page-content.lead-view .lead-content-left{float:right;padding-left:10px;padding-right:0}.rtl .page-content.lead-view .lead-content-left .panel .lead-rotten-info{float:left}.rtl .page-content.lead-view .lead-content-right{padding-left:0;padding-right:10px}.rtl .adjacent-center .page-content .nav-aside{float:right;padding-left:20px;padding-right:0}.rtl .adjacent-center .page-content .panel .panel-header button.btn{margin-right:0}.rtl .adjacent-center .page-content .panel .panel-header button.btn .icon{margin-left:5px;margin-right:0}.rtl .custom-attribute-view .attribute-value-row{padding-left:30px;padding-right:0}.rtl .custom-attribute-view .attribute-value-row .label{float:right}.rtl .custom-attribute-view .attribute-value-row .value{float:right;padding-left:0;padding-right:10px}.rtl .pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stage-controls{direction:ltr;margin-left:0;margin-right:10px}.rtl .pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage .dropdown-list{left:0;right:unset}.rtl .activity-list .section-tag span{padding-left:10px;padding-right:0}.rtl .activity-list .timeline-bar{left:unset;right:18px}.rtl .activity-list .activities .activity-item{margin-left:0;margin-right:50px;text-align:right}.rtl .activity-list .activities .activity-item:before{left:unset;right:-51px}.rtl .activity-list .activities .activity-item .timeline-bar-icon{left:unset;right:-40px}.rtl .activity-list .activities .activity-item .timeline-bar-icon.meeting{right:-42px}.rtl .activity-list .activities .activity-item .timeline-bar-icon.lunch{left:-40px}.rtl .activity-list .activities .activity-item .timeline-bar-icon.email{left:unset;right:-41px}.rtl .activity-list .activities .activity-item .icon.ellipsis-icon{left:10px;right:unset}.rtl .activity-list .activities .activity-item .dropdown-list{left:0;right:unset;text-align:right}.rtl .activity-list .activities .activity-item.activity .attachment .icon{margin-left:5px;margin-right:0}.rtl .switch-view-container{margin-left:unset}.rtl .switch-view-container .icon-container.active{margin-left:1px}.rtl .form-group.email-control-group{padding-left:0;padding-right:40px}.rtl .form-group.email-control-group>label{left:unset;right:0}.rtl .form-group.email-control-group .email-address-options{left:10px;right:unset}.rtl .email-list .email-item .email-header .row .time{float:left;text-align:left}.rtl .email-action-container .sidebar-filter{left:-420px;right:unset}.rtl .email-action-container .sidebar-filter.show{left:0;right:unset}.rtl .email-action-container .sidebar-filter .panel .panel-header .links{float:left}.rtl .email-action-container .sidebar-filter .panel .panel-header .links .icon.close-icon{margin-left:0;margin-right:5px}.rtl .email-action-container .sidebar-filter .panel .panel-header .links a{margin-left:0}.rtl .email-action-container .sidebar-filter .panel .btn-group .form-group .icon{left:13px;right:unset}.rtl .dropdown-list{text-align:right}.rtl .dragable-container ul.dragable-list li.list-group-item .form-group{padding-left:40px;padding-right:0}.rtl .dragable-container ul.dragable-list li.list-group-item .form-group .icon.align-justify-icon{left:50px;right:unset}.rtl .dragable-container ul.dragable-list li.list-group-item .icon.trash-icon{left:5px;right:unset}body{background:#f7f8f9;height:100%;margin:0;position:static;width:100%}::-webkit-scrollbar{height:8px;width:8px}::-webkit-scrollbar-track{border-radius:10px;-webkit-box-shadow:inset 0 0 6px hsla(0,0%,100%,.3)}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.5)}.navbar-top{background-color:#fff;box-shadow:inset 0 -1px 0 #cdcecf;font-size:0;height:60px;left:0;position:fixed;right:0;z-index:5}.navbar-top .navbar-top-left{display:inline-block;height:60px;vertical-align:middle;width:50%}.navbar-top .navbar-top-left .brand-logo{padding:10px 5px}.navbar-top .navbar-top-right{display:inline-block;height:60px;padding:10px;text-align:right;vertical-align:middle;width:50%}.navbar-top .navbar-top-right .quick-create{display:inline-block;margin-right:10px;position:relative;vertical-align:middle}.navbar-top .navbar-top-right .quick-create .button{background:#0e90d9;border:2px solid #0e90d9;border-radius:43px;cursor:pointer;display:inline-block;height:40px;width:40px}.navbar-top .navbar-top-right .quick-create .button.active{box-shadow:inset 0 0 0 2px #fff}.navbar-top .navbar-top-right .quick-create .button .icon{margin-right:9px;margin-top:6px}.navbar-top .navbar-top-right .quick-create .dropdown-list{bottom:unset;padding:12px;right:0;top:50px;width:284px}.navbar-top .navbar-top-right .quick-create .dropdown-list .quick-link-container{grid-gap:10px;display:grid;font-size:12px;font-weight:500;grid-template-columns:auto auto auto;text-align:center}.navbar-top .navbar-top-right .quick-create .dropdown-list .quick-link-container .quick-link-item{background:#fff;width:80px}.navbar-top .navbar-top-right .quick-create .dropdown-list .quick-link-container .quick-link-item:hover{background:#f7f8f9;border-radius:8px}.navbar-top .navbar-top-right .quick-create .dropdown-list .quick-link-container .quick-link-item a{color:#546e7a;display:block;padding:5px}.navbar-top .navbar-top-right .quick-create .dropdown-list .quick-link-container .quick-link-item a .icon{height:40px;margin-bottom:5px;width:40px}.navbar-top .navbar-top-right .quick-create .dropdown-list .quick-link-container .quick-link-item a span{display:block}.navbar-top .navbar-top-right .profile-info{cursor:pointer;display:inline-block;position:relative;text-align:left;vertical-align:middle}.navbar-top .navbar-top-right .profile-info .avatar{background-color:#f7f8f9;border:1px solid #c1c2c3;border-radius:43px;display:inline-block;height:40px;margin-right:10px;overflow:hidden;text-align:center;vertical-align:middle;width:40px}.navbar-top .navbar-top-right .profile-info .avatar img{height:40px;width:40px}.navbar-top .navbar-top-right .profile-info .avatar .icon{margin-top:8px}.navbar-top .navbar-top-right .profile-info .info{display:inline-block;font-size:16px;line-height:20px;min-width:50px;vertical-align:middle}.navbar-top .navbar-top-right .profile-info .info .howdy{color:#9e9e9e}.navbar-top .navbar-top-right .profile-info .info .user{display:block}.navbar-top .navbar-top-right .profile-info .icon.ellipsis-icon{height:30px!important;vertical-align:middle;width:30px!important}.navbar-top .navbar-top-right .profile-info .dropdown-list{bottom:unset;right:0;top:50px}.navbar-top .navbar-top-right .profile-info .dropdown-list .app-version{border-bottom:1px solid #c1c2c3;color:#a2a2a2;cursor:default;display:block;font-size:18px;padding:8px 12px}.navbar-left{background-color:#263238;bottom:0;box-shadow:inset -1px 0 0 #cdcecf;height:auto;left:0;position:fixed;top:60px;width:48px;z-index:2}.navbar-left ul.menubar li.menu-item{font-size:14px;overflow:hidden;position:relative}.navbar-left ul.menubar li.menu-item>a{color:#546e7a;display:block;padding:16px 12px;width:100%}.navbar-left ul.menubar li.menu-item>a .icon{display:inline-block;vertical-align:middle}.navbar-left ul.menubar li.menu-item>a .menu-label{display:none;margin-left:10px}.navbar-left ul.menubar li.menu-item span{display:block;margin:auto}.navbar-left ul.menubar li.menu-item ul.sub-menubar{background-color:#fff;border:1px solid #eee;border-left:0;border-radius:0 3px 3px 0;box-shadow:2px 1px 3px #cdcecf;display:none;left:48px;min-width:160px;position:absolute;top:0}.navbar-left ul.menubar li.menu-item ul.sub-menubar li.sub-menu-item a{color:#546e7a;display:block;font-size:14px;padding:8px 12px}.navbar-left ul.menubar li.menu-item ul.sub-menubar li.sub-menu-item.active a,.navbar-left ul.menubar li.menu-item ul.sub-menubar li.sub-menu-item:hover a{color:#0e90d9}.navbar-left ul.menubar li.menu-item.active,.navbar-left ul.menubar li.menu-item:hover{box-shadow:inset 4px 0 0 #0e90d9}.navbar-left ul.menubar li.menu-item:hover{overflow:visible}.navbar-left ul.menubar li.menu-item:hover ul.sub-menubar{display:block}.navbar-left ul.menubar li.menu-item:hover ul.sub-menubar .sub-menu-item .menu-label{color:#546e7a}.navbar-left ul.menubar li.menu-item:hover ul.sub-menubar .sub-menu-item.active .menu-label,.navbar-left ul.menubar li.menu-item:hover ul.sub-menubar .sub-menu-item:hover .menu-label{color:#0e90d9}.navbar-left.open{overflow-x:auto;width:160px}.navbar-left.open ul.menubar li.menu-item a .menu-label{color:#b0bec5;display:inline-block;font-size:16px;font-weight:200}.navbar-left.open ul.menubar li.menu-item ul.sub-menubar{background-color:transparent;border:0;border-radius:0;box-shadow:unset;display:none;position:unset}.navbar-left.open ul.menubar li.menu-item ul.sub-menubar li.sub-menu-item a{padding-left:45px}.navbar-left.open ul.menubar li.menu-item.active{background:#12171a;width:calc(100% - 1px)}.navbar-left.open ul.menubar li.menu-item.active .menu-label{color:#0e90d9}.navbar-left.open ul.menubar li.menu-item.active ul.sub-menubar{display:block}.navbar-left.open ul.menubar li.menu-item.active ul.sub-menubar .sub-menu-item .menu-label{color:#b0bec5}.navbar-left.open ul.menubar li.menu-item.active ul.sub-menubar .sub-menu-item.active .menu-label,.navbar-left.open ul.menubar li.menu-item.active ul.sub-menubar .sub-menu-item:hover .menu-label{color:#0e90d9!important}.navbar-left.open ul.menubar li.menu-item:hover .menu-label{color:#0e90d9}.navbar-left .menubar-bottom{background-color:#263238;cursor:pointer;padding:12px;position:absolute;width:calc(100% - 1px)}.settings-container .panel{margin-bottom:30px;max-width:941px}.settings-container .panel .panel-header h3{margin:0 0 5px}.settings-container .panel .panel-header p{font-size:16px;font-weight:400;margin:0}.settings-container .panel .setting-link-container .setting-link-item{display:inline-block;width:300px}.settings-container .panel .setting-link-container .setting-link-item a{align-items:center;display:flex;height:100px;padding:20px}.settings-container .panel .setting-link-container .setting-link-item a .icon{height:40px;width:40px}.settings-container .panel .setting-link-container .setting-link-item a .setting-info{display:inline-block;margin-left:25px}.settings-container .panel .setting-link-container .setting-link-item a .setting-info label{color:#263238;cursor:pointer;font-size:18px;font-weight:400}.settings-container .panel .setting-link-container .setting-link-item a .setting-info p{color:#263238;display:none;font-size:14px;font-weight:400;margin:0 0 3px}.settings-container .panel .setting-link-container .setting-link-item:hover{background-color:#f7f8f9;border-radius:8px}.settings-container .panel .setting-link-container .setting-link-item:hover .setting-info p{display:block}.content-container{bottom:0;height:calc(100% - 60px);left:0;padding-left:48px;position:absolute;right:0;top:60px;width:100%}.content-container .inner-section{height:100%}.content-container .aside-nav{background-color:#fff;border-right:1px solid #c1c2c3;bottom:0;padding-bottom:10px;padding-top:10px;position:fixed;top:60px;width:280px;z-index:4}.content-container .aside-nav ul{height:90%;overflow-y:auto}.content-container .aside-nav a{color:#000311;display:block;padding:15px}.content-container .aside-nav .active a{background:#fff;border-bottom:1px solid #c1c2c3;border-top:1px solid #c1c2c3}.content-container .aside-nav .active i{float:right}.content-container .content-wrapper{background-color:#fff;margin-left:280px;margin-top:1px;padding:25px 25px 25px 15px}.content-container .content.full-page{height:100%;padding:25px}.content-container .content .page-header{display:inline-block;margin-bottom:10px;width:100%;z-index:3}.content-container .content .page-header .page-title{display:inline-block}.content-container .content .page-header .page-title .back-link{cursor:pointer;float:left;height:24px;margin-right:10px;margin-top:5px;width:24px}.content-container .content .page-header .page-title h1{display:inline-block;font-weight:400;line-height:normal;margin-bottom:0;vertical-align:middle}.content-container .content .page-header .page-action{float:right}.content-container .content .page-header .page-action a{margin-left:25px}.content-container .content .page-header>.form-group{display:inline-block;margin-bottom:0;margin-left:20px;width:180px}.content-container .content .page-header .control{margin:0;width:100%}.content-container .content .page-content{display:inline-block;padding-bottom:20px;width:100%}.control-container{align-items:flex-start;display:flex;flex-direction:row;width:750px}.control-container .control{background:#fff;border:1px solid #c1c2c3;border-radius:3px;display:inline-block;font-size:16px;height:36px;padding:0 10px;transition:.2s cubic-bezier(.4,0,.2,1);vertical-align:middle;width:150px}.control-container .control:focus{border-color:#0041ff}.control-container .icon:hover{cursor:pointer}.control-container .form-group::last-child{margin-right:0}.anonymous-layout-container{background:#f7f8f9;display:table;height:100%;position:absolute;text-align:center;width:100%;z-index:1}.anonymous-layout-container .center-box{display:table-cell;vertical-align:middle}.anonymous-layout-container .center-box .adjacent-center{display:inline-block;text-align:left;width:476px}.anonymous-layout-container .center-box .adjacent-center .brand-logo{margin-bottom:40px;text-align:center}.anonymous-layout-container .center-box .adjacent-center .brand-logo img{height:50px;transform:translateY(-8px);width:280px}.anonymous-layout-container .center-box .adjacent-center .brand-logo p{color:#546e7a;font-size:20px;margin:0}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body{border:0;padding:48px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body h1{color:#546e7a;font-size:24px;font-weight:500;margin-bottom:30px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .control{width:100%}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body a{display:block;font-size:14px;margin-bottom:30px;margin-top:-15px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body button.btn{font-size:24px;width:100%}.adjacent-center .page-content,.adjacent-center .page-header{display:block!important;margin:auto;width:1000px!important}.adjacent-center .page-content .nav-aside{float:left;padding-right:20px;width:190px}.adjacent-center .page-content .nav-aside ul{margin-top:118px}.adjacent-center .page-content .nav-aside ul li{margin-bottom:5px}.adjacent-center .page-content .nav-aside ul li a{border-radius:4px;color:#546e7a;display:block;font-weight:400;padding:10px;text-align:right}.adjacent-center .page-content .nav-aside ul li:hover a{background-color:rgba(38,41,44,.08)}.adjacent-center .page-content .nav-aside ul li.active a{background:#0e90d9;color:#fff;font-weight:500}.adjacent-center .page-content .panel .panel-header button.btn{margin-right:30px}.adjacent-center .page-content .panel .panel-header button.btn .icon{margin-right:5px}.adjacent-center .page-content .panel .panel-header input[type=submit]{background:transparent;border:0;color:#546e7a;cursor:pointer;font-family:Roboto;font-size:18px;font-weight:500;margin-right:30px;padding:0}.adjacent-center .page-content .panel .panel-header a{color:inherit;margin-right:30px}.dragable-container ul.dragable-list li.list-group-item{margin-bottom:10px;position:relative}.dragable-container ul.dragable-list li.list-group-item.sortable-ghost .form-group .control{border-style:dashed}.dragable-container ul.dragable-list li.list-group-item .form-group{margin:0;padding-right:40px}.dragable-container ul.dragable-list li.list-group-item .form-group .control{margin:0}.dragable-container ul.dragable-list li.list-group-item .form-group .icon.align-justify-icon{cursor:pointer;height:24px;position:absolute;right:50px;top:9px;width:24px}.dragable-container ul.dragable-list li.list-group-item .icon.trash-icon{cursor:pointer;height:24px;position:absolute;right:5px;top:9px;width:24px}.dragable-container table{box-shadow:none}.dragable-container table tr th:first-child,.dragable-container table tr th:last-child{width:40px}.dragable-container table tr td.delete-icon .icon,.dragable-container table tr td.dragable-icon .icon{cursor:pointer;height:24px;margin-top:9px;width:24px}.dragable-container table tr td .form-group .control{margin-bottom:0;margin-top:0}.dragable-container table tr:not(.draggable) .control[readonly=readonly]{background-color:#f0f0f0}.dragable-container button.btn{margin-top:10px}.lookup-results{background-color:#fff;border-radius:3px;box-shadow:0 2px 4px 0 rgba(0,0,0,.16),0 0 9px 0 rgba(0,0,0,.16);max-height:200px;overflow-y:auto;text-align:left;width:100%;z-index:10}.lookup-results.grouped label{color:#263238;font-size:18px;font-weight:500;padding:10px 10px 0}.lookup-results.grouped li{padding-left:15px}.lookup-results li{cursor:pointer;padding:5px 0}.lookup-results li.action{border-top:1px solid #c1c2c3}.lookup-results li span{display:inline-block;padding:5px 10px;width:100%}.lookup-results li span:hover{background-color:#0e90d9;color:#fff}.lookup-selected-options{margin-top:10px}.lookup-selected-options .badge{margin-right:10px}.lookup-selected-options .badge .icon{cursor:pointer}.modal-container{box-shadow:0 54px 55px rgba(0,0,0,.25),0 -12px 30px rgba(0,0,0,.12),0 4px 6px rgba(0,0,0,.12),0 12px 13px rgba(0,0,0,.17),0 -3px 5px rgba(0,0,0,.09)}.modal-container .tabs-content{border:0;border-top:1px solid #c1c2c3}.lead-product-list .lead-product{border-bottom:1px solid #c1c2c3;padding-bottom:20px;padding-top:20px}.lead-product-list .lead-product:first-of-type{padding-top:0}.lead-product-list .lead-product:last-of-type{margin-bottom:20px}.lead-product-list .lead-product .top-control-group{display:inline-block;width:100%}.lead-product-list .lead-product .top-control-group .form-group{margin-bottom:10px}.lead-product-list .lead-product .bottom-control-group{grid-column-gap:10px;grid-row-gap:0;display:grid;grid-auto-rows:auto;grid-template-columns:repeat(auto-fill,minmax(30%,1fr));justify-items:center;padding-right:28px;position:relative;width:100%}.lead-product-list .lead-product .bottom-control-group .form-group{margin-bottom:0}.lead-product-list .lead-product .bottom-control-group .icon.trash-icon{cursor:pointer;position:absolute;right:0;top:44px}.page-content.lead-view .lead-content-left{float:left;padding-right:10px;width:30%}.page-content.lead-view .lead-content-left .panel{margin-bottom:30px}.page-content.lead-view .lead-content-left .panel .lead-rotten-info{background:#ffd0d6;border-radius:4px;color:#ff4d50;float:right;font-size:14px;font-weight:400;padding:2px 12px}.page-content.lead-view .lead-content-left .panel .lead-rotten-info .icon{height:16px;margin-right:5px;margin-top:3px;width:16px}.page-content.lead-view .lead-content-right{float:left;padding-left:10px;width:70%}.page-content.lead-view .lead-content-right .tabs-content{margin-bottom:20px}.custom-attribute-view .attribute-value-row{display:inline-block;font-size:16px;padding:6px 30px 6px 6px;position:relative;width:100%}.custom-attribute-view .attribute-value-row:nth-child(2n){background-color:#fff;padding:10px 6px}.custom-attribute-view .attribute-value-row:last-child{border:none}.custom-attribute-view .attribute-value-row .label{color:#546e7a;float:left;width:120px}.custom-attribute-view .attribute-value-row .value{float:left;padding-left:10px;width:calc(100% - 120px)}.custom-attribute-view .attribute-value-row .value span.multi-value{background:#eff0f5;border-radius:30px;display:inline-block;margin-bottom:5px;padding:4px 8px;word-break:break-all}.custom-attribute-view .attribute-value-row .value span.multi-value span{color:#747678;font-size:16px}.custom-attribute-view .attribute-value-row .value .image{border:1px solid;border-radius:4px;height:100px;width:100px}.custom-attribute-view .attribute-value-row .icon.pencil-underline-icon{cursor:pointer;display:none;position:absolute;right:5px}.custom-attribute-view .attribute-value-row .dropdown-list{right:0;width:100%}.custom-attribute-view .attribute-value-row:hover .icon.pencil-underline-icon{display:inline-block}.form-group .image{border-radius:3px;height:33px;margin-right:5px;position:absolute;right:0;top:36px;width:33px}.form-group .icon.download-icon{position:absolute;right:10px;top:40px}.form-group.email-control-group{padding-left:40px}.form-group.email-control-group>label{left:0;position:absolute;top:10px}.form-group.email-control-group .tags-control{margin-top:0}.form-group.email-control-group .email-address-options{position:absolute;right:10px;top:10px}.form-group.email-control-group .email-address-options label{-webkit-touch-callout:none;cursor:pointer;display:inline-block;font-weight:500;margin-right:10px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-group.email-control-group .email-address-options label:last-child{margin-right:0}.activity-list .section-tag{display:inline-block;margin-bottom:20px;margin-left:50px;position:relative;width:100%}.activity-list .section-tag span{background:#fff;color:#546e7a;font-weight:500;padding-right:10px;position:absolute;top:-11px}.activity-list .section-tag hr{border-top:1px solid #c1c2c3;margin:0}.activity-list .timeline-bar{bottom:0;left:18px;position:absolute;top:38px}.activity-list .activities{position:relative}.activity-list .activities.planned-activities{margin-bottom:30px}.activity-list .activities.planned-activities .timeline-bar{border-left:2px dashed #546e7a;bottom:-67px}.activity-list .activities.planned-activities.email,.activity-list .activities.planned-activities.file,.activity-list .activities.planned-activities.note{display:none}.activity-list .activities.done-activities .timeline-bar{border-left:2px solid #546e7a}.activity-list .activities .activity-item{background:#fff;border:1px solid #f7f8f9;box-shadow:0 2px 2px rgba(0,0,0,.1);margin-bottom:10px;margin-left:50px;padding:15px;position:relative;text-align:left}.activity-list .activities .activity-item:before{background-color:#fff;background-position:50%;background-repeat:no-repeat;border:1px solid #546e7a;border-radius:50%;content:" ";display:inline-block;height:36px;left:-51px;position:absolute;top:0;width:36px}.activity-list .activities .activity-item:last-child{margin-bottom:0}.activity-list .activities .activity-item.activity .title{color:#546e7a;font-size:16px;margin-bottom:5px}.activity-list .activities .activity-item.activity .title h4{margin:0 0 5px}.activity-list .activities .activity-item.activity .attachment{display:inline-block;font-size:16px;margin-bottom:10px;margin-top:5px}.activity-list .activities .activity-item.activity .attachment .icon{margin-left:-3px;margin-right:5px}.activity-list .activities .activity-item.activity .comment{background-color:#fff9c4;border:1px solid #fdd835;border-radius:4px;font-size:16px;margin-bottom:5px;padding:15px;position:relative}.activity-list .activities .activity-item.activity .info{color:#747678;font-size:14px}.activity-list .activities .activity-item.activity .info .seperator{cursor:default;display:inline-block;font-weight:700;margin:0 5px;text-align:center;width:8px}.activity-list .activities .activity-item.email{position:relative}.activity-list .activities .activity-item.email .subject h5{margin:0 0 5px}.activity-list .activities .activity-item.email .subject span{color:#546e7a;font-size:16px;margin-bottom:5px}.activity-list .activities .activity-item .icon.ellipsis-icon{border-radius:4px;cursor:pointer;position:absolute;right:10px;top:10px}.activity-list .activities .activity-item .icon.ellipsis-icon:hover{background-color:rgba(38,41,44,.05)}.activity-list .activities .activity-item .dropdown-list{font-weight:400;right:0;top:40px}.activity-list .activities .activity-item .timeline-bar-icon{bottom:77px;height:18px;left:-40px;position:absolute;top:11px;width:18px}.activity-list .activities .activity-item .timeline-bar-icon.note{background-image:url(../images/note-icon.svg);height:20px;top:8px;width:16px}.activity-list .activities .activity-item .timeline-bar-icon.call{background-image:url(../images/call-icon.svg);top:9px}.activity-list .activities .activity-item .timeline-bar-icon.meeting{background-image:url(../images/meeting-icon.svg);top:9px}.activity-list .activities .activity-item .timeline-bar-icon.lunch{background-image:url(../images/lunch-icon.svg);height:17px;left:-40px;top:10px;width:17px}.activity-list .activities .activity-item .timeline-bar-icon.file{background-image:url(../images/file-icon.svg);top:10px;width:16px}.activity-list .activities .activity-item .timeline-bar-icon.email{background-image:url(../images/email-icon.svg);height:16px;left:-41px;width:18px}.activity-list .empty-activities{color:#546e7a;font-size:16px;text-align:center}.dashboard{background-color:#f7f8f9;height:unset!important}.dashboard .dashboard-content.print{background-color:#fff;left:0;position:absolute;top:-60px;width:100%;z-index:10000}.dashboard>h1{display:inline-block;margin-bottom:35px}.dashboard>h1~.cards-collection{border:2px solid #c1c2c3;border-radius:3px;cursor:pointer;float:right;margin:0;width:200px}.dashboard>h1~.cards-collection .toggle-btn{background-color:#fff;margin:0;padding:6px 10px}.dashboard>h1~.cards-collection .toggle-btn :last-child{float:right}.dashboard>h1~.cards-collection .cards-options{border:none;margin-bottom:0;position:relative;width:unset;z-index:1}.dashboard>h1~.cards-collection .cards-options>div{background:#fff;box-shadow:0 4px 4px rgba(84,110,122,.25);padding:20px 12px;position:absolute;top:20px;transition:.35s cubic-bezier(.4,0,.2,1);width:100%;z-index:1}.dashboard>h1~.cards-collection .cards-options>div header{border-bottom:1px solid #c1c2c3;margin-bottom:10px;padding-bottom:15px}.dashboard>h1~.cards-collection .cards-options>div header .btn-secondary-outline{border:none;font-size:16px;padding-left:0}.dashboard>h1~.cards-collection .cards-options>div header .btn-primary{float:right}.dashboard>h1~.card-filter-container{color:#546e7a;float:right;z-index:1}.dashboard>h1~.card-filter-container .daterangepicker .btn-success{background-color:#0e90d9;padding:10px 14px}.dashboard>h1~.card-filter-container .daterangepicker .btn-secondary{background-color:#546e7a;padding:10px 14px}.dashboard .date{text-align:right}.dashboard .date .date-container,.dashboard .date label{display:inline-block}.dashboard .row-grid-3{align-items:start;padding:10px 0}.dashboard .row-grid-3 .card{background-color:#fff;border-radius:3px;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);height:100%;min-height:300px}.dashboard .row-grid-3 .card label{border-bottom:1px solid hsla(210,2%,76%,.5);color:#263238;display:block;font-weight:500;height:100%;padding:20px}.dashboard .row-grid-3 .card label .card-filter-container{color:#546e7a;cursor:pointer;display:inline-block;margin-left:5px}.dashboard .row-grid-3 .card label .card-filter-container .dropdown-toggle{margin-bottom:5px}.dashboard .row-grid-3 .card label .icon-container{display:none;float:right}.dashboard .row-grid-3 .card label .icon-container .icon{cursor:pointer}.dashboard .row-grid-3 .card .card-header{height:65px;text-transform:capitalize}.dashboard .row-grid-3 .card .card-data,.dashboard .row-grid-3 .card .db-wg-spinner{height:calc(100% - 65px)}.dashboard .row-grid-3 .card .card-data{overflow-y:scroll;padding:20px;position:relative}.dashboard .row-grid-3 .card .card-data::-webkit-scrollbar{display:none}.dashboard .row-grid-3 .card .card-data .bar-chart,.dashboard .row-grid-3 .card .card-data .line-chart{align-items:center;display:grid;height:100%}.dashboard .row-grid-3 .card .card-data .bar-data{grid-column-gap:15px;align-items:center;color:#263238;display:grid;font-size:14px;grid-template-columns:70px auto 40px}.dashboard .row-grid-3 .card .card-data .bar-data.activity>span:first-child{line-break:anywhere;text-transform:capitalize}.dashboard .row-grid-3 .card .card-data .lead{color:#546e7a;margin-top:20px}.dashboard .row-grid-3 .card .card-data .lead:first-child{margin:0}.dashboard .row-grid-3 .card .card-data .lead label{border:0;font-size:18px;font-weight:500;height:-webkit-max-content;height:-moz-max-content;height:max-content;padding:0}.dashboard .row-grid-3 .card .card-data .lead .details{border-bottom:1px solid hsla(210,2%,76%,.5);display:grid;font-size:16px;grid-template-columns:auto auto auto;padding:5px 0}.dashboard .row-grid-3 .card .card-data .column-container{border-bottom:1px solid #c1c2c3;display:inline-block;margin-top:10px;padding-bottom:5px;width:100%}.dashboard .row-grid-3 .card .card-data .column-container:nth-child(odd){margin-right:10px}.dashboard .row-grid-3 .card .card-data .column-container:first-child,.dashboard .row-grid-3 .card .card-data .column-container:nth-child(2){margin-top:0}.dashboard .row-grid-3 .card .card-data .column-container span{color:#546e7a;display:block;text-align:left}.dashboard .row-grid-3 .card .card-data .column-container span:first-child{font-size:36px;font-weight:500;margin-bottom:10px}.dashboard .row-grid-3 .card .card-data .column-container span:last-child{font-size:16px}.dashboard .row-grid-3 .card .card-data .custom-card{color:#546e7a;left:calc(50% - 62px);position:absolute;text-align:center;top:calc(50% - 62px)}.dashboard .row-grid-3 .card .card-data .custom-card span{display:block}.dashboard .row-grid-3 .card .card-data .custom-card i.icon{height:96px;width:96px}.dashboard .row-grid-3 .card .card-data.column-grid-2{align-items:start}.dashboard .row-grid-3 .card.dashed{border-style:dashed}.dashboard .row-grid-3 .card:hover label .icon-container{display:inline}.table tr td.subject,.table tr th.subject{overflow:hidden;text-overflow:ellipsis;width:100%}.table tr td.subject .subject-wrapper,.table tr th.subject .subject-wrapper{align-items:center;display:flex}.table tr td.subject .subject-wrapper .subject-content,.table tr th.subject .subject-wrapper .subject-content{flex:0 0 auto;font-weight:500;max-width:100%;overflow:hidden;text-overflow:ellipsis}.table tr td.subject .subject-wrapper .reply,.table tr th.subject .subject-wrapper .reply{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis}.table tr td.created_at,.table tr th.created_at{width:200px}.table tr td.attachments,.table tr th.attachments{width:45px}.table tr td .avatar,.table tr th .avatar{background-color:#f7f8f9;border:1px solid #c1c2c3;border-radius:43px;display:inline-block;height:40px;margin-right:10px;overflow:hidden;text-align:center;vertical-align:middle;width:40px}.table tr td .avatar img,.table tr th .avatar img{height:40px;width:40px}.table tr td .avatar .icon,.table tr th .avatar .icon{margin-top:8px}.banner{background-color:#0e90d9;color:#fff;display:none;height:50px;max-height:50px;padding:13px 20px;position:fixed;text-align:center;width:100%;z-index:10}.banner .thumbnail{cursor:pointer;margin-right:10px;width:20px}.banner .hovered-container{display:none;position:relative;right:110px;top:-28px;z-index:10}.banner .hovered-container.show{display:inline-block}.banner .hovered-container img{position:absolute}.banner span{vertical-align:super}.banner i.close-white-icon{cursor:pointer;float:right}body.top-banner .center-box,body.top-banner .content-container,body.top-banner .navbar-top{top:50px}body.top-banner .navbar-left{top:110px}body.top-banner .center-box{position:relative}body.top-banner .banner{display:inline-block}.email-action-container .btn-secondary-outline{font-size:16px}.email-action-container .btn-secondary-outline span{padding:1px 0}.email-action-container .btn-secondary-outline .icon{margin-right:5px}.email-action-container .sidebar-filter{padding:0}.email-action-container .sidebar-filter header{margin-bottom:0;padding:30px 20px 20px}.email-action-container .sidebar-filter .panel{border-bottom:1px solid #c1c2c3;padding:20px}.email-action-container .sidebar-filter .panel .panel-header .links{float:right}.email-action-container .sidebar-filter .panel .panel-header .links .icon{cursor:pointer;height:24px;width:24px}.email-action-container .sidebar-filter .panel .panel-header .links .icon.close-icon{margin-left:5px;margin-top:-2px}.email-action-container .sidebar-filter .panel .panel-body{border:1px solid #c1c2c3;box-shadow:none}.email-action-container .sidebar-filter .panel .btn-group button{font-size:18px;margin-bottom:10px;width:100%}.email-action-container .sidebar-filter .panel .btn-group button:last-child{margin-bottom:0}.email-action-container .sidebar-filter .panel .btn-group .form-group{margin-bottom:10px}.email-action-container .sidebar-filter .panel .btn-group .form-group .control{border:2px solid;padding:6px 10px 7px}.email-action-container .sidebar-filter .panel .btn-group .form-group .icon{position:absolute;right:13px;top:7px}.email-action-container .sidebar-filter .panel .contact-details .name{color:#546e7a;margin-bottom:10px}.email-action-container .sidebar-filter .panel .contact-details .email{color:#546e7a;font-weight:500;margin-bottom:10px}.email-action-container .sidebar-filter .panel .contact-details .email .icon{margin-right:10px;margin-top:1px}.email-list .email-item{margin-bottom:40px}.email-list .email-item .email-header{margin-bottom:20px}.email-list .email-item .email-header .row{color:#546e7a}.email-list .email-item .email-header .row .label{font-weight:400}.email-list .email-item .email-header .row .value{font-weight:500}.email-list .email-item .email-header .row .time{float:right;position:relative;text-align:right;width:215px}.email-list .email-item .email-header .row .time>.icon{cursor:pointer;transform:rotate(90deg)}.email-list .email-item .email-header .row .time .dropdown-list .icon{margin-right:15px}.email-list .email-item .email-content{background-color:#fff;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);color:#546e7a;padding:30px}.email-list .email-item .email-content .attachment-list{margin-top:30px}.email-list .email-item .email-content .attachment-list .attachment-item{display:block;margin-bottom:10px}.email-list .email-item .email-content .attachment-list .attachment-item:last-child{margin-bottom:0}.email-list .email-item .email-content .attachment-list .attachment-item a{color:#546e7a}.email-list .email-action span{color:#546e7a;cursor:pointer;font-weight:500;padding:8px}.email-list .email-action span.reply-button{margin-right:20px}.email-list .email-action span .icon{margin-right:10px}.email-list .email-form-container .panel .panel-bottom{margin-top:25px}.email-list .email-form-container .panel .panel-bottom button.btn{margin-right:30px}.email-list .email-form-container .panel .panel-bottom label{color:#546e7a;cursor:pointer;font-size:18px;font-weight:500}.tags-container{display:inline-block;margin-left:10px;position:relative}.tags-container .icon.tags-icon{cursor:pointer;vertical-align:middle}.tags-container ul.tag-list{display:inline-block;margin-left:10px}.tags-container ul.tag-list li{border-radius:4px;color:#fff;display:inline-block;font-size:16px;font-weight:500;margin-right:8px;padding:3px 10px}.tags-container ul.tag-list li:last-child{margin-right:0}.tags-container ul.tag-list li .icon{cursor:pointer;height:15px;width:15px}.tags-container .tag-dropdown{background-color:#fff;border:1px solid #f0f0f0;box-shadow:0 2px 5px 0 rgba(39,49,58,.15);margin-bottom:20px;position:absolute;text-align:left;top:35px;width:215px;z-index:10}.tags-container .tag-dropdown .lookup-results{color:#546e7a;font-size:18px}.tags-container .tag-dropdown .lookup-results .control-list-item:hover{background-color:#fff}.tags-container .tag-dropdown .form-group{margin:0!important;padding:5px 10px;width:100%!important}.tags-container .tag-dropdown .form-group .loader-active-icon{right:15px}.tags-container .tag-dropdown .form-container{padding:5px 0}.tags-container .tag-dropdown .form-container .color-list,.tags-container .tag-dropdown .form-container .form-group .control{margin-bottom:5px;margin-top:10px}.tags-container .tag-dropdown .form-container .color-list span{border-radius:50%;box-shadow:0 4px 15.36px .75px rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.15);cursor:pointer;display:inline-block;height:25px;margin-right:3px;transition:.2s cubic-bezier(.4,0,.2,1);width:25px}.tags-container .tag-dropdown .form-container .color-list span.active{border:3px solid #fff}.tags-container .tag-dropdown .form-container .button-group{border-top:1px solid #c1c2c3;display:inline-block;padding-top:10px}.pipeline-stage-controls-wrapper{margin-bottom:40px}.pipeline-stage-controls-wrapper .pipeline-stage-container{display:flex;position:relative;width:100%}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages{align-items:center;border-radius:4px;display:flex;flex-flow:row nowrap;overflow:hidden;width:100%}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages::-webkit-scrollbar{display:none}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage{background:#c1c2c3;color:#263238;font-size:16px;font-weight:500;min-width:200px;text-align:center;width:100%}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage span{cursor:pointer;display:block;overflow:hidden;padding:7px 5px 7px 22px;text-overflow:ellipsis;white-space:nowrap}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage span .icon{float:right}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage:not(:last-child){position:relative}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage:not(:last-child):before{background:#c1c2c3;border-radius:0 0 0 25px;box-shadow:1px -1px 0 1px #fff,1px -1px 0 1px #fff;content:"";height:25px;position:absolute;right:-12px;top:50%;transform:translateY(-50%) rotate(45deg);width:25px;z-index:1}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage.active{background-color:#0e90d9;color:#fff}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage.active:before{background:#0e90d9}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage .dropdown-list{font-weight:400;right:0}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage .dropdown-list ul li{color:#546e7a}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages .stage .dropdown-list ul li:hover{color:#fff}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages.won .stage{background-color:#53c41a;color:#fff}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages.won .stage:before{background:#53c41a}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages.lost .stage{background-color:#ff4d50;color:#fff}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stages.lost .stage:before{background:#ff4d50}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stage-controls{align-items:center;display:flex;margin-left:10px;width:72px}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stage-controls .btn{border:1px solid;border-radius:4px;height:36px;padding:7px}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stage-controls .btn:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.pipeline-stage-controls-wrapper .pipeline-stage-container .pipeline-stage-controls .btn:last-child{border-bottom-left-radius:0;border-top-left-radius:0;margin-left:-1px}.pipeline-stage-controls-wrapper .date-panel{display:inline-block;font-size:14px;margin-top:5px;width:100%}.pipeline-stage-controls-wrapper .date-panel .pull-left{float:left}.pipeline-stage-controls-wrapper .date-panel .pull-right{float:right}.pipeline-stage-controls-wrapper .date-panel .pull-left .icon,.pipeline-stage-controls-wrapper .date-panel .pull-right .icon{height:18px;vertical-align:middle;width:18px}.pipeline-stage-controls-wrapper .date-panel .pull-left label,.pipeline-stage-controls-wrapper .date-panel .pull-right label{color:#546e7a;font-weight:500}.pipeline-stage-controls-wrapper .date-panel .pull-left span,.pipeline-stage-controls-wrapper .date-panel .pull-right span{color:#263238}.switch-pipeline-container{display:inline-block;margin-right:6px}.switch-pipeline-container .control{border:1px solid #c1c2c3;height:40px;margin:0}.switch-view-container{display:inline-block;margin-left:-5px;margin-right:6px;vertical-align:top}.switch-view-container .icon-container{border:1px solid #c1c2c3;cursor:pointer;display:inline-block;height:40px;padding:6px 10px 10px 8px}.switch-view-container .icon-container:first-child{border-radius:3px 0 0 3px;left:5px;position:relative}.switch-view-container .icon-container:last-child{border-radius:0 3px 3px 0}.switch-view-container .icon-container.active{background-color:#546e7a;border-color:#546e7a;cursor:not-allowed}.switch-view-container .icon-container .icon{height:22px;vertical-align:middle;width:24px}.empty-record{text-align:center}.empty-record img{height:100px;margin-bottom:15px;width:100px}.empty-record span{display:block}.quote-item-list .table{padding:5px}.quote-item-list .table table{margin-bottom:20px}.quote-item-list .table table tr th.actions{width:50px}.quote-item-list .table table tr td{vertical-align:top}.quote-item-list .table table tr td.actions{vertical-align:middle;width:50px}.quote-item-list .table table tr td.actions .icon{cursor:pointer}.quote-item-list .table table tr td .form-group{min-width:100%!important}.quote-item-list .table table tr td .form-group .control{margin:0}.quote-item-list .quote-summary{padding:5px}.quote-item-list .quote-summary table{float:right;margin-top:40px}.quote-item-list .quote-summary table tr td{font-weight:500;padding:5px 8px;vertical-align:text-bottom}.quote-item-list .quote-summary table tr td .form-group{margin:0;width:100px!important}.quote-item-list .quote-summary table tr td .form-group .control{margin:0}.lead-quote-list table tr td.actions .icon{cursor:pointer}.lead-quote-list table tr td.actions .dropdown-list{right:60px}.web-form-container .panel-separator,.workflow-container .panel-separator{border-bottom:1px solid #d3d3d3;margin:25px 0}.web-form-container .web-form-panel .header label,.web-form-container .workflow-panel .header label,.workflow-container .web-form-panel .header label,.workflow-container .workflow-panel .header label{color:#546e7a;font-size:18px;font-weight:500}.web-form-container .web-form-panel .header p,.web-form-container .workflow-panel .header p,.workflow-container .web-form-panel .header p,.workflow-container .workflow-panel .header p{color:#6f6f6f;font-size:16px;font-style:italic;margin:5px 0 20px}.web-form-container .web-form-panel table tr td.actions,.web-form-container .workflow-panel table tr td.actions,.workflow-container .web-form-panel table tr td.actions,.workflow-container .workflow-panel table tr td.actions{width:50px}.web-form-container .web-form-panel table tr td.actions .icon,.web-form-container .workflow-panel table tr td.actions .icon,.workflow-container .web-form-panel table tr td.actions .icon,.workflow-container .workflow-panel table tr td.actions .icon{cursor:pointer;margin-top:20px}.web-form-panel .dropdown-list .dropdown-container ul li{color:#263238;cursor:default;font-weight:500}.web-form-panel .dropdown-list .dropdown-container ul li:hover{background:none}.web-form-panel .dropdown-list .dropdown-container ul li ul li{color:#546e7a;cursor:pointer;font-weight:400}.web-form-panel .dropdown-list .dropdown-container ul li ul li:hover{background:#0e90d9;color:#fff}.web-form-panel .dragable-container table tr td{vertical-align:bottom}.web-form-panel .dragable-container table tr td.delete-icon .icon,.web-form-panel .dragable-container table tr td.dragable-icon .icon{margin-bottom:10px}.web-form-panel .dragable-container table tr td .form-group .control{margin-top:10px}.vuecal__event{background-color:#0e90d9!important;color:#fff!important;cursor:pointer}.vuecal__event.done{background-color:#53c41a!important}.image-upload-brick{border:1px dashed #546e7a;border-radius:5px;display:inline-block;height:100px;margin-right:15px;overflow:hidden;position:relative;transition:.2s cubic-bezier(.4,0,.2,1);vertical-align:middle;width:100px}.image-upload-brick input[type=file]{height:100px;opacity:0;position:absolute;width:100px;z-index:3}.image-upload-brick .upload-icon{height:40px;left:50%;margin-left:-20px;margin-top:-20px;position:absolute;top:50%;width:40px;z-index:1}.image-upload-brick img{background:#fff;display:block;height:100px;position:absolute;width:100px;z-index:2}.image-info-brick{display:inline-block;margin:10px 0;vertical-align:middle}.image-info-brick .field-info{color:#546e7a;display:block;font-size:16px;font-style:italic} diff --git a/packages/Webkul/Admin/publishable/assets/images/activities-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/activities-active-icon.svg new file mode 100644 index 0000000..05bc456 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/activities-active-icon.svg @@ -0,0 +1,5 @@ +> + + diff --git a/packages/Webkul/Admin/publishable/assets/images/activities-icon.svg b/packages/Webkul/Admin/publishable/assets/images/activities-icon.svg new file mode 100644 index 0000000..9f304f9 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/activities-icon.svg @@ -0,0 +1,5 @@ +> + + diff --git a/packages/Webkul/Admin/publishable/assets/images/attribute-icon.svg b/packages/Webkul/Admin/publishable/assets/images/attribute-icon.svg new file mode 100644 index 0000000..6c9a7c6 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/attribute-icon.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/avatar-dark-icon.svg b/packages/Webkul/Admin/publishable/assets/images/avatar-dark-icon.svg new file mode 100644 index 0000000..7800c9a --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/avatar-dark-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/avatar-icon.svg b/packages/Webkul/Admin/publishable/assets/images/avatar-icon.svg new file mode 100644 index 0000000..94a1c2d --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/avatar-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/calendar-line-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/calendar-line-active-icon.svg new file mode 100644 index 0000000..df30602 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/calendar-line-active-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/calendar-line-icon.svg b/packages/Webkul/Admin/publishable/assets/images/calendar-line-icon.svg new file mode 100644 index 0000000..db0a3f4 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/calendar-line-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/call-icon.svg b/packages/Webkul/Admin/publishable/assets/images/call-icon.svg new file mode 100644 index 0000000..f8d00b5 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/call-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/dashboard-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/dashboard-active-icon.svg new file mode 100644 index 0000000..0da5203 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/dashboard-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/dashboard-icon.svg b/packages/Webkul/Admin/publishable/assets/images/dashboard-icon.svg new file mode 100644 index 0000000..72ac425 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/dashboard-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/dollar-circle-icon.svg b/packages/Webkul/Admin/publishable/assets/images/dollar-circle-icon.svg new file mode 100644 index 0000000..bfc8fb2 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/dollar-circle-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/drag-icon.svg b/packages/Webkul/Admin/publishable/assets/images/drag-icon.svg new file mode 100644 index 0000000..ff4047e --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/drag-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/ellipsis-icon.svg b/packages/Webkul/Admin/publishable/assets/images/ellipsis-icon.svg new file mode 100644 index 0000000..5f5a28d --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/ellipsis-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/email-icon.svg b/packages/Webkul/Admin/publishable/assets/images/email-icon.svg new file mode 100644 index 0000000..0b5633c --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/email-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/email-send-icon.svg b/packages/Webkul/Admin/publishable/assets/images/email-send-icon.svg new file mode 100644 index 0000000..1b30a45 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/email-send-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/email-template-icon.svg b/packages/Webkul/Admin/publishable/assets/images/email-template-icon.svg new file mode 100644 index 0000000..f619ab7 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/email-template-icon.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/emails-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/emails-active-icon.svg new file mode 100644 index 0000000..abda225 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/emails-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/emails-icon.svg b/packages/Webkul/Admin/publishable/assets/images/emails-icon.svg new file mode 100644 index 0000000..c6d0203 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/emails-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/empty-bar-icon.svg b/packages/Webkul/Admin/publishable/assets/images/empty-bar-icon.svg new file mode 100644 index 0000000..1b758aa --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/empty-bar-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/empty-bar-vertical-icon.svg b/packages/Webkul/Admin/publishable/assets/images/empty-bar-vertical-icon.svg new file mode 100644 index 0000000..ac8e212 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/empty-bar-vertical-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/empty-kanban-icon.svg b/packages/Webkul/Admin/publishable/assets/images/empty-kanban-icon.svg new file mode 100644 index 0000000..fcf5d4a --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/empty-kanban-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/empty-state-icon.svg b/packages/Webkul/Admin/publishable/assets/images/empty-state-icon.svg new file mode 100644 index 0000000..db3e50b --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/empty-state-icon.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/empty-table-icon.svg b/packages/Webkul/Admin/publishable/assets/images/empty-table-icon.svg new file mode 100644 index 0000000..4a857b4 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/empty-table-icon.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/error-illustraton.svg b/packages/Webkul/Admin/publishable/assets/images/error-illustraton.svg new file mode 100644 index 0000000..afee5fd --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/error-illustraton.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-144x144.png b/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9e7e24ddb67f8251872f5a5ccfe0562196a7 GIT binary patch literal 3914 zcmb7H2T)U6w>}~Cs!~M+1OX|5gpdFMr3gruUZjN*5`<6_2!fa(aA|^qA}w_3AYD+= zU_lfFq(!($(JLi@a0RT0|KXoE^X~g+-n@Bp_CEXUwZ89LYtK2e)|@mu+j9cElDq%_ z2w0e#IDqT*gUQVa-j~hZcY_N%-pIxX09v#8_Ix?OJtWHEoH5WmEVT-5Wc|$@YyjYr zA^=d60N@8`qOJe{84ds}EC68g0YE&w_`bb9=-~9TI%fj>KDf$yYjQygPq?{z6aerE zA4~{PSS$em{JjZcV6K(*^J9{Ij0Z&(LK=S#`mDROB4Qp zTWx)~cwYw@9#f!)j9Hq!JN?yyzhUlO@ABuluezIYBR$YWS?>RPTyYY4+(EY5{C*b| z-WKOO!8{Ss5wdD}_}6Zf+(XW5lGUYATH{_2g_|`vD-Fpetsgm37dlNSzl?>-;=cs3 zJ*vPuI@-d5#uyq3sVcrd^1LG#bZU!4SoU0GN5SHt!yNXtyn|dLA`9MFXt?NBdJ3ve zimNSarBMW?NO9tIVJo5*(XJ5Oa+9?k%bq?;D96dVF7uMq6MW@sYBzyMj*;7l0z7T)iZ)w}>RXCgs~agAG5&&U#GldR z`Rzdz+-Rp#q;ZJG>xieR4&7;rgZCllKa57D4y((R#!7*)lHY45h*3_5&^Zceo(0R^ z*wb@;jykrar3&!G?y?-(eoOk^eOGnW;^`b>hQb}4C4bL+HYVlO*b!0rJlp;^1xwh3 z$zl|;Sn88_!eE9)Q#;ShOi}^-XV3K6@q%4`t@0U_8kmM+)9~jR2jy-WE0N21qF@qG zaU_1njje)78FxCTbv@)Z#ZQT#%Pri9OUnIKqwY5peNhE95;WG3C8x^R$qrHdPASKZVa76(d(7 zOKprj+?ejpN}f2-kj8Ysbzo>3j#pJD_lgu_HA|s{_Cr_vcD7 z4xJxwKU*1!1c|7%M!95;wR(mks-M{1mUNQeQg{*u zN@>zfXTcCg`0S6!T1OVcPs{gHNvwT#6{jRkPefm{-c2iNARt8+p=UM{ykIy`%9lsjp8jZ7nN=)|c@R1^c9bKHcs zrdDn9pSnGvX!tFPd7|HIYk-O#9WO1BK_+u5~ve&s+)AZVz}@@V{6 z@4)s#PD1Frw|p?_62@BjiqcY+tx6>WEwEO7QLxx$%R<0NtK1^L<6?t^68LSlCuaYl z+Kt93QJOq1y?mS+cvvy@lj3)yowk(DYlUC4?y=49$e4`3PMUsqa!>6g9e(xA)VO3x zxZP^`r>yixb?fgmXM0BFS_F};XT*02!DUOVA!lOGe9n!(7G479{WZ^HteW44 zHBv?^kY~Zzo7?)9pO^I?b$;w;dO2=l^d`ENkH}(`y zOq4Z6h(FuZ=8w@x@-?IjRk)f*m)7!hTlLlVt0Aq9uNdlWd9luVjI6}hotf=z38?d4 zD*T40*qjko{^BU}y59(^REWf79b=1L{%x(2thgvF`08shUe0;mlw8&Rlp)XH(Yyqo4~#K|`k>Dc~M*qeSFg07ehv-@GK5aXXvH>kD%S$MR^v?!~-ILN1( z%Sdv;pQG+xXjr~ACNHe9l87tS{Y{>qql;%V*@szs2Di;l=W9-Q5@UUFa`}ezBv{1t< z{pw>r)9o+xz?I)T*1CHq!}VE^`z;s1OnPr0_NR;1!;s6m`U$Nc_da@&NYRiXhxEz( zOiiwDl3Q0jvtp0az0_8ACZ=89SGMy*E)LpY=@a>@jSj@u4(ZN@+8@XyPKxx~1;!1; z!l?RrIvLuKYKx}@gSdAS607Unw}RIa)CHxfbqpqLSNEG!t20@hPCS93Cxc1Tx<2@q zwHtTtK6LGLHu3N-@aNrf#%@S>j=!0Ho+zrCaa{b?ux3&fOuJm4Khqqa&_R}|&Z#%i zlV^m{1Z-@U=VXosEsd6F_h)PGvDBQ1Jr>D-TMh3MRUJb;IMTCeG1O_pbJWL=M^DB# zyX79r?CMajgK0=o*QhUz=Z*3k<16m>OygP$`l)w5j}+27{=K402TfODr% zYd+6l!~(YrQ_tT#JK;X9xX4a)MlKSck^Ypit@%^zH9bzNKF~jfyW^wc&aN6{P3;sh zHbU@iH7XcCw18EF{_!PgDkRg|Bede@sMpVt;U9H|9@xU9e7qZaU-Jcgn&frG;IykJ z-l2r(9s;{N_YG$FNQDNtwD z-v;0M=D@!@Rfa4A>z)?i!;T)x@5{Mkh2nFWbz9eYj2S#6PwYw4hl+01wYN0D9v3s+ z=Ra+5Eyc_+%DwdZv+sRosYTC33Ks#1>0lXEIFZy0)99xfK-SD8VwFtOg`#^e|4p%4 zQ_BNEJx^wx%G%*zp(g;30R1uR?Y8#JZ$xxpYF*dtGZm=lsfzXoRH3wcT@NLo`;Bkr z4aj4w5rrd&mJy_|C~3+t6FhGog#81lOQKtbqG|?qjy8ss2};Fbod-D3dwI)nR)1lc@wG zAtg3qHSOwi@hXTX8+>SCb=A{-H|tGHDj9%ugsKO~J>P!f|)0Ng}EglAY<(*R%9YsafWuW`^SCt!lIF2)kd&& zU_@t|ZIW*_eXlXKZhS>CAlP_#do-ji7r)2|%6AnSLEJrRiB1!cz4J|fiu#BF9-?9*_#GU-TunICzN{wrz~|R!7P}ouYPJ{JCQqFaYUJ2AfB0n)tRq9vA`{_P zT_t7aLedJSbqv=gH(ogCet|?GWX|78ilDQ1-QnWOGP^9-dHpT_U)8Hpe@R_Jc+~zj z{7lMoW64o3#e}^;2ytFQ$nY1l)2}HmNDbyBIr$u3?W0w#uFo?vzz5QVk^>+425r`Q zbb7OVy~wrF?|Q&vb&1-ifaG1|?x8Kc_u5LY*e+kUiU*#fdYL9h_}lkJEP^-IIhxtU z`Uww@F1TKQN0;7%v!d$K?hhJ<_V-KLseC&EBAe?^Pzu z1dc#=c!nBW0?!Eth*4 zBrMM&hrJj@l)|P{A}y8rBgf5mjQx;j?eI+CJt6-@g5u)qv}nKRfE}sEtDU19toyvG zPwj`)nLf}O=)TvcpLFZPwCOkxZR>h|C)v_uM*Nredinev+&?v*46*4^$+`|#>{mig z<7D!yAnf9#=;`&Ir)6{fT3?&{oPyAjS~c*vpE52hOq6X`7_-P;=ub>8n#wy=cp1ez zTsEETC!~1HE2|*D^(l8?!tTi}3ZIlt#@McezMW8$9UrODjmNUGh8C5M7P#j(*VuX_ z|6Ia@2%a_uV#ss(E+g1b2wqQngc;8}#v?0!eDJ=V@<5PXdI2LIdvwWkk;&$YO?=s> zU-lY1C-_r(=_w^n>KpvF&$46KHr>x05H0uLJBLvoS`M)0s8-&_TNdHuYT%-?sZ*KC z&fR6{a~S6-lao}-(KoAM%e5aEH2Q8Snce8n|6`o6*ppdzL!{52eKG+4-6)Vu-ADnx zBpk*+5(h4TCR`H%gQH=ZT22Tg27$uB(W-Db1`dDEjK%*C0x>KgC@}VaC*-F0{RtAx z4kAQ_1(ITXBXNKQ(HD=i@x=%E2g{<>wbgZCy0V&Zgcb~rf*~|z?Gb2M0*Mrk(a?yA ziBS(aK!X!RtA|D6XHzynK|ta_(TPAN`e868Vg6(yE|i49*n!X}08#V%fyRGe{v8v8 zA>e}W1QLMI)f56ElR=F5KXm>J;~Eq|A{;=*8&7b9kfZ;A*aQ)Aq}XsA@b9cN!b9-} zZ7#O|p=09&q5uS1Qwya9N5RqiRQ@s$BJ>X($Dm6%0B&r2v*OG;=yLgo%h|yK2n-6r zfydV%hLS?U@EU=>(Lw%Up-~$D{bDqb{<^w;a0J>f0Ij3zi$Lq5w6$R^7xodSVi1i-@7)}+}OoA@sdxYD5j literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-192x192.png b/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..db7fe99ccf6190221e876ccdedc51fb9a6fb9d5d GIT binary patch literal 3518 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-36x36.png b/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..356ee607f17e36938fdc12eaf1e423b6a7840fee GIT binary patch literal 1576 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpuVXA zJ|V6^1-uh(@=dtOFySWqgqva$ZgNhz#y{bfMD`5f`rT?q7Cg~S)cPB(I!x^YXkod$~0v%_e zW*V4stN=+txlp^n=D_VGm!S#{YM{yg|NjpNt_=r9OiM|SUoen{0d{6q7T&H1MxN#b z$vMAX=FWbe$+r66msIZ0#bG~_UP!Mg@&9yI_NXP}*O;kCG~TxTxpg~;J<^H4!71_M zeS79N!Jd!K7_fA(CtPylZwz<-@Q}G|r=}Q_*HI}pQN5f0%D7v;uV>|)vO%QlYXwKm zX@%w+?)I6v@hXhF=TGl_jGX# zu{iy7Qh4|w1BO;_nFNVPPAnlUU5g$th=@7{9_*}szjnv>d&~aco?^!9`rz*4+TGu4 z&QAX}CGlUGNLH^>DRY$Ugs)DufrVVGUS6k*CTS#Sn1{`{^65EG+Tx{~xGu!yx~@1j zZFY&+hS`EnIcvox6#wj-aMZE)z`FI1&9~X{cdT=9KcOkP(fbaIaz@4$CBq{cJ6bmA z`7oAGHtBGCBy{Oclj7F1PU81GVr!yof9^T|y5Q2;>ue=&wo3V_!wfX)7r(&M0as59@YttFkO+s<8(f1iNd6t#Tj=pW^cjnx?d;30#H#76| zaUMR}ui*2${Ltgc!JSst{``g?9vS&9SnVUgygonA^#xyAlSIXTg@As4Ny&LteUGyD z?>VF+u~>+ zBa;wAV=F^bD+4oa0|P4qgGbjZ(@`|!=BH$)RpQn#x$EFlpinIP3b3{{j|ig%;fyMVtqu!=o=?nS|%A7nkA)}Sy(0-npv8fo1|J8rx_V1CR(H# b8tMUc=mFj5w3RmvXaj?%tDnm{r-UW|pkg}g literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-48x48.png b/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..a7319dad23fb0fbd3a17f1ecc36317f20cd64895 GIT binary patch literal 1578 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq8sKd6mGxU^Rn*LA+qju0R{0zP13L z5LciAz6m#ZC*0(paFYwfxWO~?1;hXUQb}F^85o{1FzjYv*vY`KoPj|mqEgk+Ld^(> z%+-u6fw~|XAq+Z@Agc{bAr^t10d|a`85TA~(9jI7816ifVtr$-h2P;)2<;%R!956P zqcJRDYS6^V;R4+NH0}TY|34BNLVz(*UlQaO45ZNk6Bi>ho69O4mYhjKPPdP0zyCAa z`S%>*l^@)`mUD6(mQDP-#Pxx=Fqg-Dl^s1idw=%w{+h@)ng7Vrsn;sx8d;gtxRv(3 zFmiZa$Q-_im1%M4vtp*8r>{%`p8RQL^S$x!t01FB^O<{VxR~W6Ij?Qb&;i=dnB?v5 z(kQfR-9I3Qv%n*=n1O*?7=#%aX3dcRDrog|aSZV|{`Nw6_#p#{hKFti{92EkTn}{a zU=N3-3?UxBi(e%4~Lrc?CBD8zK znmb%Gm_kCrZZ=GOxBBgchbf#_u3xzp$kb3}-QuJ8O~7n|la;*DQGb8VrQzN8=LvkO zj!?Rn%w#=ZtYSUKm-!X_+?(7NU2NUfu$0qj*@9}0yJwXc!q|gX{GN8rY=YjtlP87N z?2|pQe~FOn+yfV$UV9;V=$rDYj9Gv0)~dEfNCs!BypZvMRZ zr1clgYxjEGtCgQ0zvrEu>HoTYjGjg!)i3`}I|Ym-)e_f;l9a@fRIB8oR3OD*WME{d zYhb2pWD;U%Y-MO_WniXlU|?ln@aTGFI*Nwe{FKbJO57SIcOAS9)ZhlPp*TOSq&%@G zmBBMNF+J5cF+DRmTft1vT+c$+Qo+c;&_vh3RM*f*A<)oFA)}c`~GB z=A;6>ub-P&l9QjVpO#pbnVg?jtdEEoedAbP0l+XkKM%yWs literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-72x72.png b/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..c68f23da0e00bf32499fd8142aa3404064e416c0 GIT binary patch literal 1884 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5)ORt! zC&U$~fN#Q0{s}jEC*0(oa8qEyP4)>lSts1&nsAd1DA<2XGOT$XeO%|m?DV)y^m?NB}@>`z*Ix22+(;zTmJw5Z;*eu4j8F3 zN`m}?fi!Nw$;8gAKF?cvau}oP&O4rx%lBBM1fzEg-%VMDe`;PY|%e+-?T7Ua`HOyeTp#KEy!5)-d;3Uct%@$q0m%U zL9zbtX}v!d^L2e)C(oUJ?e8-QCe;lW?_6zWRg~ssbPb7b1v-o|$=ls!){Oh2@ zfk$L90|U1(2s1Lwnj^u$z!dE1;usQf`0eHI(N_#)*ghPyc-6uE{gCyX1r5~;ikcp~ zJh3Tkc;w_-(EZ?Ebm94L`%N>e%QHXu&YE_==GVVlHuIm?em0plRn1rG@dCr{=?Trn z$;U(Wug-PWn7mdpUtwYD>F_m2q|&cuE#H>sG^OR@tgT;pd%aE;%V@clY+AYbT%nZI z_2kygjg}XMZk>=(Yn&`)sP-y*-COr~Z zS!r(9k@u5Sn3t=xma|?u8N4s$$&Vnv8&8)%-*WxsnMmb!ujl8|kHj{Hyik2{=%{yE z-}IS9^3(R64&8i4@chemnd`DUoE|xbum9R`;j8q=1vj6hm5XcKRVq&M6x(SV(Xzlg zwD_^3*h`rfE8er++-KXDCT>ztONr!ue{b@&uXp>)Z#I5ea6!=_mw&QDx5vN0h^jv= zDvd9CpU<~@yzu$Y6uzl(dul=}v)12N(K)hY`}=$KALjNuD|bq&)&8>i^Yr!h_ssUc z>ido*ioBHl`Stht`+-K8mzMnW|IF`O`c%mB^^EhtG^bkP8c~vxSdwa$T$Bo=7>o>z z40R36bd5|x42`V}O|1;fv<(cb3=AG!uS`eLkei>9nO2Eg!{n}mw}BemKsFTTr6zz9|8>t%ve z12IswUVc&fowm0?0~sVhCWd5`<|bKLx#TC8=BDPASXl)Cl@>D?F8{w|X=V0-zFpBy)l@t5O*ZoSddCvU>xR3PX|#4f142 z%gjjydS5>`uOufwT|X_cEHgPjuUH=uG5W^ImX=8dhGt1AW)_x-hGv$g<|e5Y#%V^z giHR1ehK71T9eP0bIc?=l1KPmg>FVdQ&MBb@0R48kJOBUy literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-96x96.png b/packages/Webkul/Admin/publishable/assets/images/favicon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..23d1920bc49fa9521762c0b4e3449a663a5b3958 GIT binary patch literal 2249 zcma)52~d;Q7QP80$RdcOP(+Lnq7<|JS;(S<@PbHXNstPH76N3eU=j!-_C?b?Q7cqZ zpnd2d2CSu>=>)V`Yw8lQ7EoMX@hJh6s+}kBKxNp3u)G^_e6cg__|JduJ?A^$Ip00^ z{{N?f_-J<*KNkRid&~xYB3v_U!`T7O|6YH<7FZzV#qj_*RpvS^a)drAKQTHI7;pOb zLkF9+Au$es-FN`B`v91NkhTwi0x|#t833@W0Ps;(n}lltKqm-dlcFHOU2j>ex47yp zZhDJ{-r}XVxR>4Y{M-^?Xk(fhsArmjDa>GmiAR{&HQ|9oXt07v^dN-pcDNglgy9he zo*0B>GFKtYAPO^(!o(qA{+tLr!d^`yuBL_JsW62eg3xdffgD(h%7TjXy7M!1=Mj5% z9(?=xuXAB{e_iTzn>doK+1GE-o9=7;Esc56d9wWm<`EqEl@L_7FK9a@+u7Q{U<&=U z{StYF+wR`+uXA>tg{YXS6~P<9!iZ?J-aYbQy_4v)9Ko{lFjmp2iu;Ozi2Ki`mp}ev-=&x zAuX)OrPQ0uk+Q>~nyQk?sEii}B{xD=+-Pn0YkN;SC_K^9WbiU~svhU#$u8KBAK`j` z-|EL3On5l?ZI15FlSw%Z-Kw7|)%{xURXIX+84fSj_fefcy;$qn>rtWa3G*z!l|YbL z`MlnGuThQ8aNpykzN^LM+b8v&0!^v*=`!cO@WhCr7J+$e3Hs?YAJv<%WP|3rh=J{n z+FlPHb|P4`dn@QaLfus(BoB<7SNvy#@G0!_b@PDmOG5 zo18PxW_PwMy0+)gJts$AXX7ciLZ?IFse*~1i6~Krq%$B`FeZ%53z@DL=cW| zD*k2AU0Cr!Cq{Sd3&N4U(8zEJ_u8P*EhMcg>ub`?wyw0>#kYNmHKKmbg*h{i zsu405G+KrD#DY$Oi+O8$K=b5DR-X4!#YTs+B$>#Brf<0%d|t1$=jjqP0+Q_Usi z=gwPAIjZRUru1{~qXX|5&Ma3owiJ{LR9Ct?{4%fyBS2ZEHk|qB;&@uzuIHX<)cBt7PMMC^rtdVaQkB&HYyU63pScTfrMGcje!q{~=Qw*oRbFNC&q?D8;g1un zj!IEyi_~IvR-PCx03jn30+~TTXh{?*n?h%k8KGn{n@oOmuSohvLariPE-Cu+go;C# zyJ5n5n?k-qqAnEWi9t-RNGgsKN#$AFu?%7ukx5`-5i*5FAkzsH1S_O4urjq;$tIBs z3k!*I8ygPDCMxozJ^P1XLEvkvm?SI6&1AFrimZZM@eVbcEr8T~K&hYmiS!4~OHDRg zCYDQOYCvHj9w4t6a(wLSyy7Iwv(+*irQ^Gm&XDr19VJelD^?dN#o*KxlLtnNDWRYTXQw;$c^3lYF-rkRu~2>%s?NXtQ1DgTxphk>`kE`=s0* z>KuiXBoXbDXDN2%lm34(Bx)9ml}V;BGP4;>mWaY&(ZgtBCRKt^MIxq{LLtHoBHUl( R8FvX(05MVVd}CyW?tj(8M$P~L literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-114x114.png b/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..ae178458fc39da18fe5fb1ce3977d48760683b93 GIT binary patch literal 3450 zcmZ{m2{fDQ*2mu%T4QS-I*=GnDIp1ROr_PRP(mVx;usbfR z&kZ_gqiD4iYOEMqhn}i7l)7{<^h@vh?z-o@>$~e+``zn#_HY09^S*nnXYC9pjE$t& zAu#{|ByG_s9N$O$G?9J$cg|dD0^bP*oN_n?0IfOVJAT6aH7F8iV+Aw~9a-it!2W2Q z0|3PR0s!Q{I@C5+VLI6+_9d)&;i-bTjJV!+2Gwjf*V)*I(^M61WKq;ejwz>=H(-|wb zr^00yG#;8=Eb8qoI#)V3*zg6>Zt$_>O%^FOI(}&9%XaCf_@x=)%RRm@C5e6ij}rqw zeh?e!rVq#zzIRvM^s2`gEm2cXi28~;J)*6CaTGp#KQ7Pd*q^JWOJ883)@X;m2{r`e zXdC$TPWtj-JBEz}F_qnq)@@2(Vx3p(0Inn-ORi@}%6JRn#JOY!6D`*wZ~VdhiY3|@ zJl`g1p9cGJQXMB7E*YsdDX5c-0aH11@@HEIIgdf|K4;>s<|?{Is2os)6g?B~4koXn68e6Zwm%x*eKSj(}` zZe={@2m|U;7^{vTnr*5hk)EmO!KW;)pnydQ2xmR`s4Ul|&Dm0|lMA$u;hwc}B{tmX znHlpf{6sVbInTR;j|k~#N>{vahKP#(U^79P^mmXrZU((^gmF|K_Qfpa>J(;INuZ=T zjkC|GRkXN)qj3Dr_PLLT%5zXm7km$ywbA$KkF5-BmPqVUQC5Q9XPM6iY;m@1-)WR$ zr+{20zd?zLH>OaeYVWSpts#y0$&Uj1kkpOGEi?Ad|4baOeda8rMUIT0?6Yz|d3kN* zuLF?OF(1Jl(Z7bn)twle;NhBg3Ken)trG{(4UP}=x=s(kS-D$++w{&`jK1uXLk0y; z^jp`}E|2<^o|M4Q?!AFRIaCgwm(;EnNF9MWdM@`^pF|_#j#Ac8?))?5NLLch{81M~{HVGjxKO z_=iW#FTWOV4|KcbCrQDSxd$Zwiz3)v1swiUhp?|=^rP> z+!JVKM|A^yHAR*E8LZ^aWTw?XQt#~J(eDFf4^=L2?|AaTx0^n z=N)FXQ_M^4jEGOir%Tu!(l`4RK+R%3W4O`xnYG!!DYh3=QLivxF1>dw2&y(cm3XMW z7|HOj?x4W$o}K`|qB!NbyFK-1i~1Ub3BJF+rsMmBb#6s!j>VhNf0ka)C%oUs?v3-^mM8D zqKd86L@D_qPtk|S;Kg*U6m#l~g6zx;-NdZ1ela}4di*ZvNM4v78}AdPJ_e9lK1qpGyj-1L)+;;q1_SatXTI;25K_Kt7&@PReL)TeshY=qc|?QH(EWvU z$k&*dJdLsSDtc(6h|WqhWea+#of|{{Eh?%=Wq>ud92AB!$M{KuZi2Q`a)$wjn^m{) z?OcmXEbc8H-fCXW3cYef1?l;$)^-vDePKbJam7RzKLdaGD9*o9{Mq5!{aIE6>jHej z!hmxteOH-R9$Z}|RmyRVuB z0S-GFGNrBgMaT(s{N4$5blvD@cfw4%C-4TE!W-#S0�q^J@mo4_vhkimct<#Zfvc zx2}R~&wn~Ejr^!$y&`4hU04#T!FnXz)r)b&c@Ug+W!a+ICJ@~x+e6oh?V6ndLbh@) zNtO(bYl!ZPhv2FKY4|XvS4!Gf`#Cx0taiZ--*ys<4^7;EmeBEwfPBXN?&C;Y8o4^r z9;9#k7GBvEyYAJ~n1SLhC;EafbMQBK_+xE3!f##Z#ZGG8=&D17udAkmCMjr`f#BJj zL~98hneIZNdzEi%r0l;E+imC?qz=CRctV{Z`#{;lKOmcVdIbJ|AR=@KwTxYGpg^Lo zkQ?2nd9DzBFpy9lvUQA3fiw}-TAZ0Rm?xXRPf4v|5qGt!3F?}J^#yi^(qC;7QwQR$ zsV`m}-o61IlGV|SF75K@JayFC2ziE3?Twyy5gqn2zZi%3u(W7HlwQ6f<({1#0y$*1 zc|>Ln3SxN7$jZOb)m_kfD_GMkp8Xut?GB31SF+GAP$T4)F`z~-P%13vPXE>@_d ztHR}Qvj8_^%tv-J&~Oqc&54sr>~kD=YsikW8T2W?*Sp9*!Cop?Nl^{o=IyI^)r2rb z41SicC!dU`e}C{~pD(uW^a~*A=uzeGj^o1vSzoOyFXsx(|56thk$C|{=5++?waT}B znGI6V1WkO4R=Q9W*l%yW^Fv(5EO_E>G$nl`4|22F-AEioY5yUZXkdykl-Z12SL=|j zU6gB}UNV+=kYdWLLH2^1QMRl`BOm44n{_ar2GO&Lw?7eEX?H!WO zEN*pW65Bxd!~TkO-AN6d@_f{|?O@}>*;V=!cFam3ju({=T`~W3j`%9c>gG)Lm-+7ORuxyGB;#qru|IrQ0(d1>;=Dh zn;PnAZ_W+LhYdt{;tgtaTL z+00mu`Y*7wN`@{ej*@n7r^viqQI96S&aJJk-Y&%+9R6=}{?P%_(iBzt`(d= z4QtY@-DyNW8p+f@g2Zgnc*j#`B@>7N~Xp5MUVhnieCW9!7m`lKNyVE`&G{vY63>U;D%6`5fqL9W8p|} zAdMDgs;?gt6QdXOlja+r)}uxQ%%-jI1p%d>iuk}N3c=JAMfH!OkV0vurcQh`5`b6# zxUc^o%s*?Ing)`B0s?6O+yrqDh)Cr#ihtAjU&bwnNDKUlj5R<+_=xh~5QiWNi5441 z0{(d_{jksg%Qjccf9N>i`4j+0A`FcTVMZ|I9$li0j~x7)j&o2P34mEyT`#xb@k6eE z3%THI0di0XiU0Zflu%j-H9(*27ainJ4UN?QcVqMo{7p;im;!I36LzZ#N^ j4af)sKR;s<9InUD(Bq%aiX}hf6pDsq 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 G`ac1IZoTXP literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-144x144.png b/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9e7e24ddb67f8251872f5a5ccfe0562196a7 GIT binary patch literal 3914 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-152x152.png b/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9bd34a704350cdc2f292f4b0248af719cf234f GIT binary patch literal 4737 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Ctm|LKV^1Wc$k^V^HK-X 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-72x72.png b/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..c68f23da0e00bf32499fd8142aa3404064e416c0 GIT binary patch literal 1884 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5)ORt! zC&U$~fN#Q0{s}jEC*0(oa8qEyP4)>lSts1&nsAd1DA<2XGOT$XeO%|m?DV)y^m?NB}@>`z*Ix22+(;zTmJw5Z;*eu4j8F3 zN`m}?fi!Nw$;8gAKF?cvau}oP&O4rx%lBBM1fzEg-%VMDe`;PY|%e+-?T7Ua`HOyeTp#KEy!5)-d;3Uct%@$q0m%U zL9zbtX}v!d^L2e)C(oUJ?e8-QCe;lW?_6zWRg~ssbPb7b1v-o|$=ls!){Oh2@ zfk$L90|U1(2s1Lwnj^u$z!dE1;usQf`0eHI(N_#)*ghPyc-6uE{gCyX1r5~;ikcp~ zJh3Tkc;w_-(EZ?Ebm94L`%N>e%QHXu&YE_==GVVlHuIm?em0plRn1rG@dCr{=?Trn z$;U(Wug-PWn7mdpUtwYD>F_m2q|&cuE#H>sG^OR@tgT;pd%aE;%V@clY+AYbT%nZI z_2kygjg}XMZk>=(Yn&`)sP-y*-COr~Z zS!r(9k@u5Sn3t=xma|?u8N4s$$&Vnv8&8)%-*WxsnMmb!ujl8|kHj{Hyik2{=%{yE z-}IS9^3(R64&8i4@chemnd`DUoE|xbum9R`;j8q=1vj6hm5XcKRVq&M6x(SV(Xzlg zwD_^3*h`rfE8er++-KXDCT>ztONr!ue{b@&uXp>)Z#I5ea6!=_mw&QDx5vN0h^jv= zDvd9CpU<~@yzu$Y6uzl(dul=}v)12N(K)hY`}=$KALjNuD|bq&)&8>i^Yr!h_ssUc z>ido*ioBHl`Stht`+-K8mzMnW|IF`O`c%mB^^EhtG^bkP8c~vxSdwa$T$Bo=7>o>z z40R36bd5|x42`V}O|1;fv<(cb3=AG!uS`eLkei>9nO2Eg!{n}mw}BemKsFTTr6zz9|8>t%ve z12IswUVc&fowm0?0~sVhCWd5`<|bKLx#TC8=BDPASXl)Cl@>D?F8{w|X=V0-zFpBy)l@t5O*ZoSddCvU>xR3PX|#4f142 z%gjjydS5>`uOufwT|X_cEHgPjuUH=uG5W^ImX=8dhGt1AW)_x-hGv$g<|e5Y#%V^z giHR1ehK71T9eP0bIc?=l1KPmg>FVdQ&MBb@0R48kJOBUy literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-76x76.png b/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..66e7aaf407530b075ee08d086bf8bdbc49cf3e8f GIT binary patch literal 2103 zcma)*3s_899KcUzdg~=B5k)h#%RKIFnpb&DO=Z+1y@*9K(`{xjP3l(iS`wQ`gNU+= zY~|ZD9!cV>4Xbv&+tPD3Yb{CBtYTS|_KfyR>*M2o_niO#ob&rX&%N71f&(nf9L)d# z7J@naP$+}+!-N3mCxRp6p&&|mLLLC8vd#NNhH!0=7#iRM)Hf$~!G*JAPN)!oHDmxb zrUUQ_Zf$%7KoT8*$I$?A_XA)bfAIW#ZvaM32?+}KgMg)~)k4)eTGeW$YBg82TJLPO z+SzQPYO+?f0#&V5b_)q%lTo(ywi}k&&DNPWZ8l%FP_+N51P#no*x>dB{F%BC2UPj&69 zASp~{ra6ov>@hab^1Tlb-Ky&y-7h@$a68{SOUJDwlg?SZR@6D2>pmqtF0Vs2da^Ff%ifjBULU+!VKC=f18zf#yrz-@5Ta$i^P-m;abn+Q{pQ-m$1G* zyf*jRgR5n5{^!zx*Hs-aufK?UXhTfVX$Fja!-|FWJyp-H@89OFv9FFQ8%Wg3#2uQ{ zr}oa(5&TR7laX$>PZixYC3!;MmP`{DY}1uU$DS{b&^8xdXI2L0VfpS!HhxcQBHb~8 zV}-D5ik4Y^?R4pa+PU(ARx@mRT>i208s-xFiW^5Oz>V8iiGmvcguD-n`IcG9wBi*}- zvKsu-N~Ya86nRg&eEEbE(}GH?AKy9|=iAl(FeU2j%jS%<7A2*k|u=Y7n7_ zPF5UeIJuRTt_d4=#b{;6B^~Ny)^|~HXYmSE|E;r|@)`{_bWLPcl~HO+qyLlHA%qJH z6`{Em>J6Q0lSxF`4(d6f?uQcP99>64hH*Y4*1oX_?-7#s)UOw=&fu9hsMl>O?P_bJ z%IhBvtUeZeKe@0C%_|CQ60h*l?5k)2paaUagi% zzbJ}>C3w;LplZbqOI<-XdwX3hp+2>j(=wNQYgtW{_`Vr+sW>|KM9g;6`{pN>Za&q` zI$cZLVawuan|id!RZ`7auM{T{dzDp;cI*QB5KzR6t%B%_|3Kd`I20ps=+6{VbpzNUsQHp zYgXR%+VIl`e{!cx@YRbGcW0FM&I(H?)>I~T>X!A;R=#8bS4F5gd-kY#FI;BPNUPgbow97snY)$D3mes*wl|3?8&^?4h{VE5fYWL zc#0?i0|JFeiU~zhxnzYilggs9DI8~%jxZ>6PYQxM&qtWfG8~WR(r76uDO9p%5Z>iP%DtI z1v2&{{QSo(kjLOMJ<@R8#RMYbM<7DE0>e||G4M7kT6~;z*6GOL_xuRMAq5a7%J5{+ zJ?YFh8%H08h}8%`Ve&N?p!@jb6wK7ZqsS3Q5upMQD_@Dh@@a}Ve5F!KixnlyCCa!& z+PjOPc}O@MF&$xwW0-7?2w`$OSqzNr5sP|=L~IN}sL+B6^YbaUh=mb=z%Q7u_K8mW E7eWIV;Q#;t literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-precomposed.png b/packages/Webkul/Admin/publishable/assets/images/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..f6574788239f24bcf2132e6d23db639bb4d4dbe9 GIT binary patch literal 4092 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 + + + + + + + #ffffff + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/favicon-16x16.png b/packages/Webkul/Admin/publishable/assets/images/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..952428b81ef22bee1bbd70c2b469041c5c50ed12 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lz0;0 z6XFV_`6k@to^Vs$z(mE;Ma{@kUB^(($O0%xO*HW~9}uCMsch$~;1P=|eoNWLQ_av^ z&CpEIHIi@QEs&N;clajWQMUJkh%0y}^G&#O!9Vj@y_IK4FGaD3p^r=85p>QL70(Y)*K0- z;9^e~#}J9jz5U0zPXe8*TH+c}l9E`GYL#4+3Zxi}42%qQ4a{_n zOhOEetqe`A49v6*46FsjbpDi|3Un&=vs>KYm;1R9ztWR#Q?Sn2DRmzV2hf>Z-BP_w?G3KBtRyHWR&J6Sy{Q{Czs}?=9O4k1pt*6GZ-%azgr(o4cJaAtBlml^o$Y) zLrWumhN4!W8gV3ZplZT1Q%W*GN-nQaL{j3LnVVWtS&+&Ac9niXUb_9JFh4YN zd_#b$7!1vfOiWD-ObyKbHSjC|D&a>mCpfbzmBGNtY04tIH$bT{B&pCKPlmM2oK&Fq z^>gz|a`Myl(-O-vlk@Y6^$`)HZ=7stnPgySmXu;!lvI6;x#X;^) z4C~IxyacIC_6YK2V5m}KU}$JzVE6?TYIwoGP-?)y@G60U!D3!R5LJD*E8gu@_=XN3m_Y4 zFA%Bg8URILjE6u5&>1{4o`FR4jDS*bR{=$UNY%uK@!)?5n~EgR7NBYW|NoyqcWV)#ndrm8xE_Sg5R zYF|^=-tQ)SKuxbfiP3Qe3uDB)M`}zdZ{M3Hy}m3J|LRX!=*54}8wKR!3|UHgRo4NH zXH4>TcS$(9y+#1Y;VkfoEM{Qf76xHPhFNnYfC^YVT^vI!PG7zBJc!9qr0t=MNVtpZ z1&yv)ku?g767&<^bKLNM_g~K@dy=Qw<`{LXejF7r-@zxk>6gl*DMFiWJC*5{m^+oLDok_O()zN)hM8ws`USDF<2Nmt zCiqAj@~>pQEI$3g|B2I1xJ?V6lh++nSDIVfY<;&QrmlE(z#YB9<=GFv%PMv~jeS?5 znj)UG-e)_@ZhftrtKK-hk(ZH^Ww-8}{36qF#oW2^JLYb*TOW4)!KYK)KSl0+J-e2v z{Ci@^!3Zj%k?rrs(~1&S}(sS{Z89kkeekyCWd5`<|bKLx#TC8=BDPA zSXl)Cl@>D?F8{wFg-EC4FuM=~ck zvnrLrz{zRKBD*(0sW2p|&>&BSw9K4Tp!fB2^Gb5^)AiF5%QBPm^NRHm5uYHpHhVVq`UoS0~lYG|kj)S(A-pVL;}G@uO(p00i_>zopr071;j A4gdfE literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/favicon-96x96.png b/packages/Webkul/Admin/publishable/assets/images/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..23d1920bc49fa9521762c0b4e3449a663a5b3958 GIT binary patch literal 2249 zcma)52~d;Q7QP80$RdcOP(+Lnq7<|JS;(S<@PbHXNstPH76N3eU=j!-_C?b?Q7cqZ zpnd2d2CSu>=>)V`Yw8lQ7EoMX@hJh6s+}kBKxNp3u)G^_e6cg__|JduJ?A^$Ip00^ z{{N?f_-J<*KNkRid&~xYB3v_U!`T7O|6YH<7FZzV#qj_*RpvS^a)drAKQTHI7;pOb zLkF9+Au$es-FN`B`v91NkhTwi0x|#t833@W0Ps;(n}lltKqm-dlcFHOU2j>ex47yp zZhDJ{-r}XVxR>4Y{M-^?Xk(fhsArmjDa>GmiAR{&HQ|9oXt07v^dN-pcDNglgy9he zo*0B>GFKtYAPO^(!o(qA{+tLr!d^`yuBL_JsW62eg3xdffgD(h%7TjXy7M!1=Mj5% z9(?=xuXAB{e_iTzn>doK+1GE-o9=7;Esc56d9wWm<`EqEl@L_7FK9a@+u7Q{U<&=U z{StYF+wR`+uXA>tg{YXS6~P<9!iZ?J-aYbQy_4v)9Ko{lFjmp2iu;Ozi2Ki`mp}ev-=&x zAuX)OrPQ0uk+Q>~nyQk?sEii}B{xD=+-Pn0YkN;SC_K^9WbiU~svhU#$u8KBAK`j` z-|EL3On5l?ZI15FlSw%Z-Kw7|)%{xURXIX+84fSj_fefcy;$qn>rtWa3G*z!l|YbL z`MlnGuThQ8aNpykzN^LM+b8v&0!^v*=`!cO@WhCr7J+$e3Hs?YAJv<%WP|3rh=J{n z+FlPHb|P4`dn@QaLfus(BoB<7SNvy#@G0!_b@PDmOG5 zo18PxW_PwMy0+)gJts$AXX7ciLZ?IFse*~1i6~Krq%$B`FeZ%53z@DL=cW| zD*k2AU0Cr!Cq{Sd3&N4U(8zEJ_u8P*EhMcg>ub`?wyw0>#kYNmHKKmbg*h{i zsu405G+KrD#DY$Oi+O8$K=b5DR-X4!#YTs+B$>#Brf<0%d|t1$=jjqP0+Q_Usi z=gwPAIjZRUru1{~qXX|5&Ma3owiJ{LR9Ct?{4%fyBS2ZEHk|qB;&@uzuIHX<)cBt7PMMC^rtdVaQkB&HYyU63pScTfrMGcje!q{~=Qw*oRbFNC&q?D8;g1un zj!IEyi_~IvR-PCx03jn30+~TTXh{?*n?h%k8KGn{n@oOmuSohvLariPE-Cu+go;C# zyJ5n5n?k-qqAnEWi9t-RNGgsKN#$AFu?%7ukx5`-5i*5FAkzsH1S_O4urjq;$tIBs z3k!*I8ygPDCMxozJ^P1XLEvkvm?SI6&1AFrimZZM@eVbcEr8T~K&hYmiS!4~OHDRg zCYDQOYCvHj9w4t6a(wLSyy7Iwv(+*irQ^Gm&XDr19VJelD^?dN#o*KxlLtnNDWRYTXQw;$c^3lYF-rkRu~2>%s?NXtQ1DgTxphk>`kE`=s0* z>KuiXBoXbDXDN2%lm34(Bx)9ml}V;BGP4;>mWaY&(ZgtBCRKt^MIxq{LLtHoBHUl( R8FvX(05MVVd}CyW?tj(8M$P~L literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/favicon.ico b/packages/Webkul/Admin/publishable/assets/images/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8fd69159384857b582cc8e427588faba37285153 GIT binary patch literal 1150 zcmd7OOG_J37{>888ZRK33WDIul#sCtsU*P*QtC=*loqloF1(de)Lj?qR?xkpg)Utc zKSu?@uizMks03O;XbSx+dd4__jl7pPb)>x7flw+Hh|T?SZl%@e5^KVj8R^|5+o` z=iBITQuzgxpsce--v&~D&xe6$hnrp${clDR9|lwYcb6SV`Gt4m@!aX>*mL$pwDDm}-wpzAJ^Lc@o*HLlPbNm6&K_)d+pHCk4TC4zUn!v$E_+VDj4K4MUnZs|U&W{L z8{QYj*R{1{+IkK8jnKI+tGpD+rNLhBXKl`{sm9oT5YySc2=A<`mTKx=%~(PSF0XbM zU5H{1KcM;BS=E;&EW*_&($9rKtnw}C>p!T*5oV!t>z`PCsKzq#$c3L;E48(WvFM&Y yw6C6Z9nGN?N$5Pc^r&sQY$n$uX1}}5E@}!bW?!+=_~&|&6|>bHv%S-5M!6fYLjX_! literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/manifest.json b/packages/Webkul/Admin/publishable/assets/images/favicon/manifest.json new file mode 100644 index 0000000..4a3a89e --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-144x144.png b/packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9e7e24ddb67f8251872f5a5ccfe0562196a7 GIT binary patch literal 3914 zcmb7H2T)U6w>}~Cs!~M+1OX|5gpdFMr3gruUZjN*5`<6_2!fa(aA|^qA}w_3AYD+= zU_lfFq(!($(JLi@a0RT0|KXoE^X~g+-n@Bp_CEXUwZ89LYtK2e)|@mu+j9cElDq%_ z2w0e#IDqT*gUQVa-j~hZcY_N%-pIxX09v#8_Ix?OJtWHEoH5WmEVT-5Wc|$@YyjYr zA^=d60N@8`qOJe{84ds}EC68g0YE&w_`bb9=-~9TI%fj>KDf$yYjQygPq?{z6aerE zA4~{PSS$em{JjZcV6K(*^J9{Ij0Z&(LK=S#`mDROB4Qp zTWx)~cwYw@9#f!)j9Hq!JN?yyzhUlO@ABuluezIYBR$YWS?>RPTyYY4+(EY5{C*b| z-WKOO!8{Ss5wdD}_}6Zf+(XW5lGUYATH{_2g_|`vD-Fpetsgm37dlNSzl?>-;=cs3 zJ*vPuI@-d5#uyq3sVcrd^1LG#bZU!4SoU0GN5SHt!yNXtyn|dLA`9MFXt?NBdJ3ve zimNSarBMW?NO9tIVJo5*(XJ5Oa+9?k%bq?;D96dVF7uMq6MW@sYBzyMj*;7l0z7T)iZ)w}>RXCgs~agAG5&&U#GldR z`Rzdz+-Rp#q;ZJG>xieR4&7;rgZCllKa57D4y((R#!7*)lHY45h*3_5&^Zceo(0R^ z*wb@;jykrar3&!G?y?-(eoOk^eOGnW;^`b>hQb}4C4bL+HYVlO*b!0rJlp;^1xwh3 z$zl|;Sn88_!eE9)Q#;ShOi}^-XV3K6@q%4`t@0U_8kmM+)9~jR2jy-WE0N21qF@qG zaU_1njje)78FxCTbv@)Z#ZQT#%Pri9OUnIKqwY5peNhE95;WG3C8x^R$qrHdPASKZVa76(d(7 zOKprj+?ejpN}f2-kj8Ysbzo>3j#pJD_lgu_HA|s{_Cr_vcD7 z4xJxwKU*1!1c|7%M!95;wR(mks-M{1mUNQeQg{*u zN@>zfXTcCg`0S6!T1OVcPs{gHNvwT#6{jRkPefm{-c2iNARt8+p=UM{ykIy`%9lsjp8jZ7nN=)|c@R1^c9bKHcs zrdDn9pSnGvX!tFPd7|HIYk-O#9WO1BK_+u5~ve&s+)AZVz}@@V{6 z@4)s#PD1Frw|p?_62@BjiqcY+tx6>WEwEO7QLxx$%R<0NtK1^L<6?t^68LSlCuaYl z+Kt93QJOq1y?mS+cvvy@lj3)yowk(DYlUC4?y=49$e4`3PMUsqa!>6g9e(xA)VO3x zxZP^`r>yixb?fgmXM0BFS_F};XT*02!DUOVA!lOGe9n!(7G479{WZ^HteW44 zHBv?^kY~Zzo7?)9pO^I?b$;w;dO2=l^d`ENkH}(`y zOq4Z6h(FuZ=8w@x@-?IjRk)f*m)7!hTlLlVt0Aq9uNdlWd9luVjI6}hotf=z38?d4 zD*T40*qjko{^BU}y59(^REWf79b=1L{%x(2thgvF`08shUe0;mlw8&Rlp)XH(Yyqo4~#K|`k>Dc~M*qeSFg07ehv-@GK5aXXvH>kD%S$MR^v?!~-ILN1( z%Sdv;pQG+xXjr~ACNHe9l87tS{Y{>qql;%V*@szs2Di;l=W9-Q5@UUFa`}ezBv{1t< z{pw>r)9o+xz?I)T*1CHq!}VE^`z;s1OnPr0_NR;1!;s6m`U$Nc_da@&NYRiXhxEz( zOiiwDl3Q0jvtp0az0_8ACZ=89SGMy*E)LpY=@a>@jSj@u4(ZN@+8@XyPKxx~1;!1; z!l?RrIvLuKYKx}@gSdAS607Unw}RIa)CHxfbqpqLSNEG!t20@hPCS93Cxc1Tx<2@q zwHtTtK6LGLHu3N-@aNrf#%@S>j=!0Ho+zrCaa{b?ux3&fOuJm4Khqqa&_R}|&Z#%i zlV^m{1Z-@U=VXosEsd6F_h)PGvDBQ1Jr>D-TMh3MRUJb;IMTCeG1O_pbJWL=M^DB# zyX79r?CMajgK0=o*QhUz=Z*3k<16m>OygP$`l)w5j}+27{=K402TfODr% zYd+6l!~(YrQ_tT#JK;X9xX4a)MlKSck^Ypit@%^zH9bzNKF~jfyW^wc&aN6{P3;sh zHbU@iH7XcCw18EF{_!PgDkRg|Bede@sMpVt;U9H|9@xU9e7qZaU-Jcgn&frG;IykJ z-l2r(9s;{N_YG$FNQDNtwD z-v;0M=D@!@Rfa4A>z)?i!;T)x@5{Mkh2nFWbz9eYj2S#6PwYw4hl+01wYN0D9v3s+ z=Ra+5Eyc_+%DwdZv+sRosYTC33Ks#1>0lXEIFZy0)99xfK-SD8VwFtOg`#^e|4p%4 zQ_BNEJx^wx%G%*zp(g;30R1uR?Y8#JZ$xxpYF*dtGZm=lsfzXoRH3wcT@NLo`;Bkr z4aj4w5rrd&mJy_|C~3+t6FhGog#81lOQKtbqG|?qjy8ss2};Fbod-D3dwI)nR)1lc@wG zAtg3qHSOwi@hXTX8+>SCb=A{-H|tGHDj9%ugsKO~J>P!f|)0Ng}EglAY<(*R%9YsafWuW`^SCt!lIF2)kd&& zU_@t|ZIW*_eXlXKZhS>CAlP_#do-ji7r)2|%6AnSLEJrRiB1!cz4J|fiu#BF9-?9*_#GU-TunICzN{wrz~|R!7P}ouYPJ{JCQqFaYUJ2AfB0n)tRq9vA`{_P zT_t7aLedJSbqv=gH(ogCet|?GWX|78ilDQ1-QnWOGP^9-dHpT_U)8Hpe@R_Jc+~zj z{7lMoW64o3#e}^;2ytFQ$nY1l)2}HmNDbyBIr$u3?W0w#uFo?vzz5QVk^>+425r`Q zbb7OVy~wrF?|Q&vb&1-ifaG1|?x8Kc_u5LY*e+kUiU*#fdYL9h_}lkJEP^-IIhxtU z`Uww@F1TKQN0;7%v!d$K?hhJ<_V-KLseC&EBAe?^Pzu z1dc#=c!nBW0?!Eth*4 zBrMM&hrJj@l)|P{A}y8rBgf5mjQx;j?eI+CJt6-@g5u)qv}nKRfE}sEtDU19toyvG zPwj`)nLf}O=)TvcpLFZPwCOkxZR>h|C)v_uM*Nredinev+&?v*46*4^$+`|#>{mig z<7D!yAnf9#=;`&Ir)6{fT3?&{oPyAjS~c*vpE52hOq6X`7_-P;=ub>8n#wy=cp1ez zTsEETC!~1HE2|*D^(l8?!tTi}3ZIlt#@McezMW8$9UrODjmNUGh8C5M7P#j(*VuX_ z|6Ia@2%a_uV#ss(E+g1b2wqQngc;8}#v?0!eDJ=V@<5PXdI2LIdvwWkk;&$YO?=s> zU-lY1C-_r(=_w^n>KpvF&$46KHr>x05H0uLJBLvoS`M)0s8-&_TNdHuYT%-?sZ*KC z&fR6{a~S6-lao}-(KoAM%e5aEH2Q8Snce8n|6`o6*ppdzL!{52eKG+4-6)Vu-ADnx zBpk*+5(h4TCR`H%gQH=ZT22Tg27$uB(W-Db1`dDEjK%*C0x>KgC@}VaC*-F0{RtAx z4kAQ_1(ITXBXNKQ(HD=i@x=%E2g{<>wbgZCy0V&Zgcb~rf*~|z?Gb2M0*Mrk(a?yA ziBS(aK!X!RtA|D6XHzynK|ta_(TPAN`e868Vg6(yE|i49*n!X}08#V%fyRGe{v8v8 zA>e}W1QLMI)f56ElR=F5KXm>J;~Eq|A{;=*8&7b9kfZ;A*aQ)Aq}XsA@b9cN!b9-} zZ7#O|p=09&q5uS1Qwya9N5RqiRQ@s$BJ>X($Dm6%0B&r2v*OG;=yLgo%h|yK2n-6r zfydV%hLS?U@EU=>(Lw%Up-~$D{bDqb{<^w;a0J>f0Ij3zi$Lq5w6$R^7xodSVi1i-@7)}+}OoA@sdxYD5j literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-150x150.png b/packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4285955fb988861d5efd44499c107eb4481cb2 GIT binary patch literal 4718 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 KrpDAW`M&_$N>VHU literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-310x310.png b/packages/Webkul/Admin/publishable/assets/images/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..d3674c6bff5771509fb8517496300adf7a6ed797 GIT binary patch literal 13305 zcmdUWWmH>H*JiNbTHH%~otL#1S3BKo3V;>NR@WK6s0m{mz z1%X6d)s$fR0rUGgKm8ef)6nvt<1~ieas0H(7v8ivSNJriO_@>XY(xYmqSSw(bw?<6 zEG(-(drf*Q?9&dBbsX&+lkv?9+upTVAr7!^7)f%)T1JUC+ZoTKWs-ZLf2m07d4JO^ z@qYESGfz&=9-czL^T=ayGdSE*n5g&voBzbo!KN$BN!04WEc#CH(8KQNvn%}Eo^BwD z==QRb@OG(9etGiG@H1kI4x#)dBI4xLU*r@N?Qf{w^9`kXU)%*3FQq%s(g;h+d|5rf z8y)u9e8KSblpl8t7u|9-sjEDTD;~idbZ`)&B@-Uv`F-S!YCcpg)=MYsw(t3Mz#3t# zr1T$8IZ3{5-ktfCf$@XO#P1kbsF5dmD7DD<%o+rqf7(t@Zr1U{!dtqR(p?c!SiO$| zp5S%k@-dl_reJI0WqWC3b~$$B)DXH-VGu)XnXuilb1@C@LkL1xh1Xa?#Tz|UIO0Xm zi3ZNAKqMinqPQ)X$sjRI7OXr_Sp*q>>*jnYhFc#-D2fSXU`1H>tp^H065@3G2!BYn zYF;vQLCC)Kn~G(0Rr&kV66-CJ0s9E`5>p=fI@0{PAx?9=>j+kC#3`y5Ws4GkKj|O{ z-A!F%*!cQGPeV**@>B~})I>y*%=!dldm`U22DuQaI^nv{d17Jl%gO{%epi5+TRnIR zTKdrD`@$+gO|+>A^>-X~c6_lCnO1rZ-A-l+_F%Cb?I{kormZeD93F$=GDOOQKEoEc zE-&OSc@CnHn}wtsp{V5j?mvE$RI<&y$f(!woi^f;d4um)6d0OVETCGvPC?JP9?0C2 z9=IG3KS@?l`V{q$EWEUtii!SY?CKrn0r5dIY8Z8eSyZDQ?9P<)NkEvpm97hx`$Vj1 z^F{YGMmpAck=Ae_av$Z7+28Yv{8f8*f;9yB4TiCbMreC79Izj-2HlK3t8psc_ z)AG)>Nt|c(WXm~DFlRxe(y4-hs6kAwjzUOfzHRt&;3k@E^YB6sekrBDu8!{so_lye za1e_k*ZR`~;6yXdD)ULyKOK0D7w0te}0-L13EyYmha?*(3 zayR~a^^{oiv%`HoxK$-1<@7&#Mbyoqp0MYECN}QcZ46b3N-x=gt=ga)>ThKD%jM4r zmsMMlc^C_fC-Kd?X9c0_v8;AKQrYqvBNX zaDg(y7L{<=c(UHgzrTH2nKV4d?dZHW!Lad=+A>T~N!0kpUfJi&O-nLjXE70aI1Fv- zh;SS~I#v;s<1SBSM&utDRrw^WIqeMj-7St3KN4*QV$Isl*@QDPJ>ylN=~jUURaqhK zbcRaUeqx6v9Cm2kAS)&3|k=0Sf#z748dJ9o$g*Ol(zS9W}&-YXL^N;>Pt_NTbf5(~4!KpuK z3K+w~83p8P9S@OF{cpAxnd8e!0#}PP&9cXS4|-T!wqa5&x+~i=F^vDNrcy!~uXeRc zU6rE9Ei;nL&?OftH$+6qbrh0VxwwV{g!@_rdRGjQ_5$rGY@W0MYO9Z-+UT^?#A@BL zGoq}D$IjZ?d}{dDl>uII-gUBwQXetFjVfjeDN5X?&oB-qiHQstta?L-=WFvt?(>;i z&54KSE?YoUGv~cmHT46oB!AG%o5tiz45*@p51;&clVIwWb3h5%eY8{AkBl1T8`TR= z*&-rv<}l6LM8@pbp1Mn6Z-{M0vweVsW{EA7tlTUz?*nxY%orWnui#f>u5=SoSW@Ox-WBRIwx+H|^2Jn5V>ud9Y|m&Ufh zT*gj1!PU@0*Pl{Cs5$8uQCfYC-%Dfq${-aSrkLy{$SE8FW<_q*(P{|^LtelCnwW1A@dF_eS z@rU0y5l3xr4xbr3MYyx*ipOOZ`7}f-h#R8h3t_&ZC`Zet_`iau*DF;&{{|>vV4+NMc19|eHKu2 zMY%7e=Cu~Sl)N^qS19xmLuQb$S-@G0itl@-Mz=^BasIo!&PcgRD=nlnM+Mju@;Yb~ z0m*JQ&$`8;n$c7bX#)DxrkQ`Rp2{^&(U?lOUtNe7^0HY+_p@YPX<{`w;EMG_WCrr^ zwT-e9n9Lk*NiNjLg^W@vn{nERbcy6z|1Q9zuIEHHHG?v+F9?00E&+HdWyL{A*QZqK zqyC6$fNvRdfGrjeUM-`7}8SzSNgP4aw`!M^hy6)&-k#gkxn2eS8~6gehw zL6rL2)43&H_dR#RzN^*SCKIN?*A}N)JsD8)02il8bcL1EE1RWc1lr=4Qn-IV z7c`IK)Rwj@)XRk}+GzH%|j%0(sr^gKcxAkv09Y0dqtr4@7wKwwSB5#1jEAKA8xcWl42mT~~mGplj!JmUUo z3HP8nCbp3yllh#P^|@G_lih%UQ|FO%W32aIz2 zi;Ow@Faf#6ulM*bV9R`Gb%1RNHKK)S&CKoqQ09AW zm|NPA_@5l^;Bz0%f_?8l96u5hu~4I)7btH^vh%uq8*uXt>umhV%A|67p*j42rVYnT z+Y9C)z&Ogcj#_^@t&`$Yb1Qs_@&ahVVsDmiSrG`(l92R!;%t>z-vt+Arez<4AMo8w&dGaImf1FOXtha3nT|z?1!(&|I`F^tPI#!jTJ4K?o zO7Kzx|KsAV#OE6!e*+mWD7(~ZRDSe@&W*fNp+II>HblTQ%1)N3fkdYg0|w54fY;H? zt*`1U86kYPo}Xej`)tRC33g`;jz8w@aGHFTtf^iJOv-#YMBG9R;k+OW1o;4~j_^Xl zDxK9an)_o5Yt?0CwshW`RL^WSxf=Qa+__|_-V!>}*7$msEkzP{vhDNY?EQnWpZw~$ zv8rDS$`Apb_A!6aig2xwnc_)xeDkE0*UTKT0heA_wI5~j!?U)OM&p1Tv3iBJ3} z{*R8PNKMHq{^u+&h;0faL*p^M!>r~ROf6djC-$qe%c^i7^D$y<(0tQ~+wyFkstjF`dHAfEyAT=W zKXLqXIlJKGM$}uEz4&6WTKyLM8k+3JI09n)w-HVuhI%UYgV=`M6e>}MjKaYE{Dkxs zWIff@lR`lLj`u+DYsHI`Ap}-3h3g`I`$xG;{C2BrB3==rgdC+T2W;8!Fd90MIJHqd zLLlM%3*KK=&nX1Y<8y1t-x2)IE=9oOEHX=#NRo#*Qu0zE?6w~Q++`KRnIGn+g++&1 zVV-ba@o>g#@R2MD+&ngEr!tR$eP2C@`(CURCTm%?)%(o|V28ZjO)ywH{y3~hv++8F zPa(`qMbiN6|kc;92TDekSkJ-?FN5gGBlW!M}f6kxI zrSMj>CmerPV(75$to3JS5m_4TzqHf#Br&oOl=o0oAA2dXp4zCVRCdr2nU3w3W4jxt zl}w4p^VmvT`?UkKCs}8vZ6qJs;_}Jqg^3z98co}m(utt$BN}~daf#*7`3{FdE6G0+ zjk64v+MjwPdx8CY5$$5K;sOuA#(uf}tg+_vKH%rMaTHU7uj=d~eoKW{|i z0}NH}z3FArIFj>sgoM}ut+B)eA19_`Z^!Rw)x5tbp@FF7njr;7%QBVF&FUwmizJNi z0$#}-z;}xwJo3Lf6|XiA^H)8%8EWTxMY`C5VmWbi{F>s|A)|#pTk&}DQNufjw8GR{ zIZb1rlrtIAExi3j7J})m{ zz97KFmQ502qG|^pOWKRk@~Ka$ zdlU3poRo%|uS%D>#l#X(@>0)tWygE`?WLY?Pyjg6hX8G|hpNXHu(xEejIcjxX%^ah zh)wTq{^xS+EJZuJ9Vm%ydacsr(H$#*Mm1xSwzu*pGP--V-g+Yr#w;;dceOXrCo)aX z;g?r<^9fD)X%_L@S<_eB`BrG`hL>#Y8O2|xeHcubr}MiiZs@iIN9AL9zD{Wr`gBOl zv`JZYAh94;`DA&2q$wF{*d(yTg)HjvJwBn=2c)p z_>s2o%S)MquvZ5GESKBLBx~zg%`dbG-G=8zg+^Waw7>*I1Zi}A#p!nWp3?J%mmt}P zc50Et0umA+|9sep=FU^0SDJ1#CSl!76gl62DT}4hcaK|;?&pX)%~7oKZ}ta@#i_|F zL&`%56XW@%$|D^jUark{F^$aM_}%5Jym(ji@|LZRaN|VO+xn9l;r{9PvZ7O=6tu<8 zYnjMqazyfg@QC6ovAvIOme)VVg9j`=Up3i@ivNyhFP#6 z%!QalTd;_e74-#W0I_V@ZA2X3$r*LAzOzXTZ6Wb46TDd%>EK!U^jvn~l^H-Qac)GP z^ZclhuL%7I&|Y3zRk5b@2nnS{t~N7aI&7)JufT{TBsM=7q?E{(pP(^Ldi=Dm#|+ZM z^FU0ize|S(_(oWpB8f-Omt*&2uv~_HZIhod z2&-8NIL{83I~Y=Z9Lj_mKZsLYS>GG?t@(`eM>)6-u$tT#U@v{B5Uhll{Pl&*x|Ent zH-Tfxsf(_!F~JE^-WBEGa)k@#bSy2q!tYJvRDUIOL<-+}lU%$1@Z>4S@M2ak&H!H* z&s2qZJOa1*8IpF;sgKAeD=~j+jJ&bzEH>^cDT{Wp=Y@4okX<*ByPh`i?Cu`o?gjj3w)%neWH1E;b#8Ugx|P>2bi)z zU`r;%vp200@ulJpA&qtC>4{&<$f0m>L6+S9)bGKHa!escyD3nK2ef|#aA?(T9CAON z01#kTsw#5AqKbGw4*1q@42&z$!Nu|-OtJv_I9vxA#m@I0Z!D01u)pK;7xGuM{>%k< zjEnv|RRY!+IScE6J|=H!Y$EUW*un{%iSLR}CDBUP2Z>cGON;Zcr1rW}GK2NKLMuNe zB>=fEH%eVrq8ZbFwUXyJ)PVe?ez`>I=_sxC2bu}kJ1Jb>25&$4We8j}@UamvK?2uA zMVF#$r!Kopu1CS)GqJBGJSIbuK0wK`M*IKh&EDbi6ehY+(9-hafj-7PkscI4dFW)0 zdaptmg&uVxa|aDQLLU@h#pE2GXDN)le~xYr(9{;U_=(}|{3f^j&Eeyv?{Z7AvFlX) zzj(jBd~gevWmrMDH;E)MiyyEZw8t%^598>;-YE8oT%NnQgcTHD6Del@ZTKSPu9_Sg zPVdHcl3y0ti7zAcWtn@euijoMMq$a`i8=LFChp8M{1q{!b4hf&+P(q{T$+=c(L^~< zLzg`{uMJq1TvtHOWIkDdX2Ai>9W}6nt>-+Aio2r75TFb?ylEf&H+oKoNNR%L9g{=K zIUFmOXzx6hrP#)bwE4Z${%IZJao1W>jZ-we^xks#8}19xt(~`-iH^?rnPKaExr=g8 zrbaRdw;rwEZAk-4YmOfibL-+vhAe*M}ubq_O>zlJe;EPWoAN zbMlqFUtt_0H)~W5IHuHf7ThdKuTGAEuSYMrnjQD$R;^fBv0b}S+xa|cX-VC zV*6?hBe3jlzoYx?dbc`8L0{y~;+h@@a<8mp5+)i(OZOd$T#`t?>M9b=Eciv<)pc{6 zaI96d`HHUZyE#1Eye~9u7ze#;4A=TL#){hXCV~#;z)R2AgP!(izZOchGx5Nx#rsY2 zONr!5T>J1Ob0dE!*%Dv3&@I|sP#xH#-4f54v&&4Y%4Kn&#_~1ybrJejNT7=(@3H+B z_*j`Ku?-s}_=a)6tc!b14kKP?LpfohqPokcLHr8{ZPOvcL@ASymd9Xpof-IW{`e>U zb;C9*T%XnR)0iueG+$(L7DCHM_tVRToFzyoDb`c>fkiRs3F6D3GKP+G(vdqPC%w>6 zB93RW3oJ5);sT^Q+PGMSg<)^W*BPmd2a%w1>Gv0jHv8I6n6QaFWH1?Imsde01eP4wfT3WJ?H+q#7IsTLGVNX<61B}3l;4AVl00?ppekZX zuWHss!zgNq=0v=NeFv6c2^^`VG0{wToSx0UooQ0>@gHCj8rs?o@1CEmU&*oCO17uL z+3SM(MQ5~G6+fVW;)w}e3Sl@koFi9W_8LpTEEjN5-_}KDe5b30AV){%1R-&NZkXdt z_Mjm6y-%WH6s!Mofc+%?R4RL0PEzp_%@h^Bh4r#g)DXnoA0rDvW< z)(EgbpP8QYPT_+^*0+aRh7_*KPU&mEPgM|04XQx&OsfFJ4}1INskwe>y<#8J$Yzu- z*@k4RhvSG)V+8EG__X4~z5fL3yEYV(L4I%iMI^BxP}YclPPZw;EqM>Q17LljV9MPe z6>Z*@qQ>w$toaYmM4Jq5lPGooiCg|vD-%kM+|XOoSy24}FOf}6NtMqqP*k>F10|-c zc(rLN5G-Omh^X zc4Y7Q8@bjN(&^!y^@TP?tN4&Q3B|IR@|9k-RmIgjeamcuf_Oj zeo-MOMXbWs)5)KBXOs!L$q zG5_dj8U{4?@a~ohVGD9RXn$TlT`@<$CaI6Fd+@{uGk6|M1Bf%uekIfP4v!`-EJ?Vk zwuMOTY?;V<|MXf02eg#+43VtX4rXkzW|E>Cm#+;XHyG+#yx_pLNUxKQ6oNahUcP3f<6gwtc=vteSQ5jRMS)sJJPzNf z8ulGvr=AJ~*ObZaT5^Br>nGKn7!-RS1qBBSJdUGNC4Ci=xkXp&`sm&>3T<($FyrWb zHpW94K=&b~eAj=8s}pJ|2IzaE0EslRs*I$j@6)HR1!$-PeQogz0Hzc<3xhzC*Ch;W zFJ`%sO#$le2eM9tx|GTlHMZ=(Vq z_0p14;T2W~f*W&jK%xf#lNE{6Y=URKrbS5Krvw>bbzq#+0uEz_L%JbLvl0!I>s08g zszg9ucy(9BAr1KbhKTZyGID{xPTki%%z8iP9MjY4?^Sw8K>}?be~}0f)YpbJHctmK z_XB`3VHN52DLP_S8;E$p4Ie`L0AOSU89A9dkJ2kmU;GKlgP~jL_6gk!e84zOYXx*a zLQ$e+`_VRnG@J|sx`Qs9V3DCUnQeN5u7qPk`dW>d95ebETT^yI+CG^`P1-% z{!0wfqq7ESUl?;1{2&PcC9L4^=>U#&;@3XO9hK_2fT-uvG=Xk#zHzO{39XUDwJL<) zK~4o5uWlLFQ&$R(q8%7&?Qlqc1j>(AIf8G^+=l|Vu>(ifMx{MSr_wUyD$Z(thr)A5p!_`X_Dh}ga#i?uF+KjPk79N^ho#Dt&#;amd{LpupN zv42}OIU}~dXAaZ5b-v3kbAVMtng5ZsV{t>xKF4)Z=Jj=?oK`BmOe-==GuXY)DnESh zd4TUCahg@?>R=iaW;KdjK36h^;B20H`=~{ah{_vO?}D%aYGqPvz}K^+~V>VJy?*X z@;vxHg9!JXL;#~|TW9JBFJ{OT^c7^9b<1H5rcvT(ch;Giw1!Qo9 z#N*nqUX&#lNayEWg#|PNM=$jXlUG560T$6M0}iEHBqwKIe`(2?OcTDCXme9ZhW-Oz zh_e1`rjh3-%Q}4a;1gQ1Ef5*y3;pkY=ggrc$ zrIh_i1T9B>-Fe-o=yF%IGWjh_ohoC|DYke~sF6jscOf3`$shyHnCNUkf0W7k zVPq=GZS;@<-Kz5YJX^|SztwgcHS$4xJ&;T}AlLs^rl~pw7Y8s-Lu&s1DB^E+P*9q8 z?N-%Gn+LL*yX-{ez;IU30n{J{Yj zFW%5*{GXEwmR8rzm#f|;S{YvMIF&1RryA5Z`SNSD;*mnMmJ7U60^K`!x_!FsNeOKpXCP~9AJn~ zJDfVMLgP5lAbD#ezf@a)08ICR^UcIsw2So-{^7kWge=Y>gGeS>=FM+QZkQ|iP2;(`|I zy~JXcqfRI<3+5Cfz3Ea^hbNc)EM3x9$5$>zfBU=-`c3=|Pb~DQ;A)kmU;Yj{7xPEGG(|OQ-A*J(0UW3P>xuc)cjmW(|tK=&-MuU)Qk^O@kPpRfcsR zm`jjiu+hjr$>wmc=*KjTrTu9tsE%ZuAe}wveJoF=oyNkBg)`Om_$A&*qMH_E)5vOA zxC_Vg3!PUd7UhJ-8VsS>Gf(tdIfA175j{wfrs*mx5vT5hJo4U;Y}5;Rg$yYLTC=tSE8VLReS&)06ImV>882QHD-#XN3wX!oCGF&Cs*Sdy?(CFFhsda z!6FZ-8cZ|buk*z#k$KDFZNS*U?db9uhD(r^DZ~V8Xwq3r9C<1v4jYy%(_*we=@Y5x zwjqY)!b_8fLSFg6g}9TUe5bYv3+fyoIgDl8ZU)&f*MTJdXF_S8e96M_u-=nNY5rRD zLnsztA91%!{-vsq%UV{KC~#^tF!L}Q8kopuP}_sC_JDlL;ZPD+BVxE{cp=^T zZ=ftTiuQoHj*yl?_O?q+PB+osl}Sld+sJ<~R8s!UCf3v-7gst>WHzVsWCF9;^6Vd% z5n7y8N>9v@`QLV_DYlW-isX!9Vxe)Z4WmPv`FMhuKQXKNMO*rXu^4eQ7I7teUGBQ@PzDX5kzdb?=*Yt=-MTvI-8N*@TOgbBn-hJ@X)Wm4mjp*lvpng8Fw#GIu`Uei6x*(GDVU^<>dn$C+ z_lF|nGpkO@2hSu@7y*1`8@4L`yL>MuE&_i#$65X>yhG?~Iq~ouH2c#7RXS;}l&I_6 zf`SKYfjudB>*eusFQGyLgHfiBF;~gz9&EV9X|l{+MV`)zM%cTWD^aGlULUCq41mWl zS@KyHDe8#lo?IS0Q{=&XghH>X^knuudISWUgOW?$>c_5&l)t-FHw(TTPPAI%^wGqA z^l%+Iw?rCED^3PM*E1*J%}pi4|*U*@2~e$Mtm#e#^l zsb!EHc=XH!KT8dOx75{nYQtM!e|NB3R=7&wBWt?d0^#XDE^eaAjkRZTK~aPL%-B=+ ztB4?f9o>%%%(KE6XOIm3V*J@6)XRiEpKJXO$U*@Z{N6^cI+5BbLtF;H58wh+?v9f(=TV>J(ZXEOj6MK@hQkZA| zO(Blay*>`bzQ!STSB-$*eh{dr-+d&@YaOTusoOuE&gX#EIZ9O4+%KDaFlih<<=6A%s{H!| z+AI<0;}$ISsk>)(KZ>nye6@~u-8oh54#ZEC zgr=~wdqiTLKM#y!C`K%sb~QSVA*jvm?&woJJ4sw|z?pzpBognK0sU=BL823q)-ok{%U?wjj&RmrSf=J;e^hRtdh18oe%zi+9z^@5sfS z(Abw=rJYxmrh!>$9scQAcCl5fT4>C?x$~f*@c(`i1YKr@kDVyYNRD$I|3PC<<5O2IM{t-zbG5=S~99mn~9v$wAY z5)r$Wt^YL!VMf-yWPV2Z3GIJw{kL^O`%hQ6*t*z@`CqGbC^Ev?AYS( zk%CMU?}JT#-h~V$v8IhNY+H!l5la%?C}!roHt7`0J!geIgV3c$MY`9 zjkHn29FwvJ_mC$Gt{YMHqYH%uB7C?O~*AjK*wECLY_ek>p&%BmwG&I(5$JfT8D z{{H@gPWP>W3urCq;qAB>yAK!y(cW9shx@wOK%q(=w!Uum?g%JU8))hS5-Gdu5c)sb z{HISS6mIY22uFZKq(n(U-Z4NMn*V0!f3`7nvO~b{n@m+b!~>ep{kJC1o!smZfu8oD z|9BFy|B53K9|yPfCyKr4`lxG3Z?MEJ3=_-zDHKG1~pzuD1q3bF?YD=4HC%KZku zGWc&_z0g$yIXJo61H%_`b4R#(I0`vf`#ITqxcdnGuZa;7vz3yv5f%}*u@je+vKA4S pdMp94mlSgl6|=UMv= z7#<8jsxts-8vu9%r_vq+kca^AWGMjnHvm}26`c?B24I9;=-dc@2(VOYER-6OQbSg1 z#waxueb{2EyknlD9i4ffvgxLyC(8+AfyCaiYcDxtEHkCraSwB(JE|QfkRAuWF8p{cV&C3~MIx}Xvpe$z$cgDQj zFb^k;?TWD+F_sI)f=Xb6GKL-V-<{#`{~zJ5;eHJp)L} z!_^P@><>-8C-pxAh7SVLhlYmM=(KcrMNSjpA@iaAHxJd3G{&B^yxm)Qvvw@4R(#d_97P@T9O*xdT zo3C>#N2D5A**(G?E4CTYns3_v(9L2u_4+^eZERyUoMqIC(W__1BOdO>Zw9=qVyk-w zf38oSMDkv|)SC3hCASVrCJE>8c_lp4i)`Shuq}w^7qRe4 z_nnUUw|s4kpLIVa_{6$VNcnRYKQib zJpV$OLtkTo_Y%$P#(wYobADm#Mw+%+a?=yqH+t`W>FfWZ{V4TdT;=69+uPZGPT3!A zZ$BbDaI9#C+jWZ+w>kAe)mSBC!|ZF@#$7J5Ef~l3pX;!H?|6b-tt;-V&2q64YK^=Z zlg7@giREpuJT#_`Q#7LYbW$DbK4&Oll8jb@J_w^|`C9>o|q?zVpfLmba`gC{`aQgD*!JpMTZd>$iSIteq_O zaLtL8)7A#u=M?VpstR?LY1gPOJ-B6JRl_Od5DUZi^xog&+&}9X?Gk711i9N*rk(sj zpWvFwsmtA>ZsCE~fpgj?FPhrQiQS%eL5SbsJP*)9;_{Lx!S!ZQ-OBU(Z2E0|!n~r7 z&EM1e(5+bA={m9FIC7};30ZY=<@H_l{0{o2zQNs7zcy8JJF6qLQI)m4Ro~`t&#kK7 z%rIS2Zj7lFI^4zk+?kJs@~f*+v#V$2Mh!d525s7_NF9s6nio*8#jc`9IJs&7yLRi@ z6@EzjihMsnBUQ~B&uTO;K0tEv#5@N${~CRjDGD;RnwEC@Y*^N z{tJm^0z!<7;>FMa48c%$gz1iXM4${D^~4e8bOgZ>q)nY7d5<7dER#m3{5>H*tFjdm z0`wIU6wySoAYKfDWCDpeSRj##zOZM~yl5!5@kXh=P5*qGO?V%@lXg&0O+BiGX0;$5c9Ssj>m|l zk{AM@Y>Wcp(;>#%AkS}@1=3|ij2?3Hn1cy~OfY~1OJ!mrB~A?9s-nlqB|fJkL;jQ} zI0B*o%EUZ8JrGZXIhaOPK?ubl&wOdB7$98k*1eoAxD;uy^l5kyh?d5R;r8h=IT5Rn z(4z%OQjtQQK>y=l=nN5?EksbJa2b=u7NAVFr + + diff --git a/packages/Webkul/Admin/publishable/assets/images/group-icon.svg b/packages/Webkul/Admin/publishable/assets/images/group-icon.svg new file mode 100644 index 0000000..d3c2465 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/group-icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/layout-column-line-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/layout-column-line-active-icon.svg new file mode 100644 index 0000000..3afe318 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/layout-column-line-active-icon.svg @@ -0,0 +1,5 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/layout-column-line-icon.svg b/packages/Webkul/Admin/publishable/assets/images/layout-column-line-icon.svg new file mode 100644 index 0000000..b6def06 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/layout-column-line-icon.svg @@ -0,0 +1,5 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/lead-icon.svg b/packages/Webkul/Admin/publishable/assets/images/lead-icon.svg new file mode 100644 index 0000000..6bb1694 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/lead-icon.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/leads-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/leads-active-icon.svg new file mode 100644 index 0000000..7305ef0 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/leads-active-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/leads-icon.svg b/packages/Webkul/Admin/publishable/assets/images/leads-icon.svg new file mode 100644 index 0000000..7dfba97 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/leads-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/logo.svg b/packages/Webkul/Admin/publishable/assets/images/logo.svg new file mode 100644 index 0000000..4adf932 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/logo.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/lunch-icon.svg b/packages/Webkul/Admin/publishable/assets/images/lunch-icon.svg new file mode 100644 index 0000000..215e154 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/lunch-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/mail-icon.svg b/packages/Webkul/Admin/publishable/assets/images/mail-icon.svg new file mode 100644 index 0000000..7c3dfdb --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/mail-icon.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/meeting-icon.svg b/packages/Webkul/Admin/publishable/assets/images/meeting-icon.svg new file mode 100644 index 0000000..af93f44 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/meeting-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/note-icon.svg b/packages/Webkul/Admin/publishable/assets/images/note-icon.svg new file mode 100644 index 0000000..3869cee --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/note-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/organization-icon.svg b/packages/Webkul/Admin/publishable/assets/images/organization-icon.svg new file mode 100644 index 0000000..c600484 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/organization-icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/person-icon.svg b/packages/Webkul/Admin/publishable/assets/images/person-icon.svg new file mode 100644 index 0000000..68446b1 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/person-icon.svg @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/phone-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/phone-active-icon.svg new file mode 100644 index 0000000..ec62c49 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/phone-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/phone-icon.svg b/packages/Webkul/Admin/publishable/assets/images/phone-icon.svg new file mode 100644 index 0000000..415d1c6 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/phone-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/pipeline-icon.svg b/packages/Webkul/Admin/publishable/assets/images/pipeline-icon.svg new file mode 100644 index 0000000..5b2143b --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/pipeline-icon.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/product-icon.svg b/packages/Webkul/Admin/publishable/assets/images/product-icon.svg new file mode 100644 index 0000000..eeb3a00 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/product-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/products-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/products-active-icon.svg new file mode 100644 index 0000000..30de8ab --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/products-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/products-icon.svg b/packages/Webkul/Admin/publishable/assets/images/products-icon.svg new file mode 100644 index 0000000..f26d97a --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/products-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/quotation-icon.svg b/packages/Webkul/Admin/publishable/assets/images/quotation-icon.svg new file mode 100644 index 0000000..95afcfe --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/quotation-icon.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/role-icon.svg b/packages/Webkul/Admin/publishable/assets/images/role-icon.svg new file mode 100644 index 0000000..076af4f --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/role-icon.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/settings-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/settings-active-icon.svg new file mode 100644 index 0000000..52411a1 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/settings-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/settings-icon.svg b/packages/Webkul/Admin/publishable/assets/images/settings-icon.svg new file mode 100644 index 0000000..9536b92 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/settings-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/source-icon.svg b/packages/Webkul/Admin/publishable/assets/images/source-icon.svg new file mode 100644 index 0000000..b5f0a7f --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/source-icon.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/sprite-main.svg b/packages/Webkul/Admin/publishable/assets/images/sprite-main.svg new file mode 100644 index 0000000..6e7a4d5 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/sprite-main.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/table-line-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/table-line-active-icon.svg new file mode 100644 index 0000000..d8fc84a --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/table-line-active-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/table-line-icon.svg b/packages/Webkul/Admin/publishable/assets/images/table-line-icon.svg new file mode 100644 index 0000000..dea6667 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/table-line-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/tag-icon.svg b/packages/Webkul/Admin/publishable/assets/images/tag-icon.svg new file mode 100644 index 0000000..d4d2dc9 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/tag-icon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/tools-active-icon.svg b/packages/Webkul/Admin/publishable/assets/images/tools-active-icon.svg new file mode 100644 index 0000000..07155a8 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/tools-active-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/tools-icon.svg b/packages/Webkul/Admin/publishable/assets/images/tools-icon.svg new file mode 100644 index 0000000..e10ad45 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/tools-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/type-icon.svg b/packages/Webkul/Admin/publishable/assets/images/type-icon.svg new file mode 100644 index 0000000..dee32cb --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/type-icon.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/user-icon.svg b/packages/Webkul/Admin/publishable/assets/images/user-icon.svg new file mode 100644 index 0000000..83cfe8b --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/user-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/images/workflow-icon.svg b/packages/Webkul/Admin/publishable/assets/images/workflow-icon.svg new file mode 100644 index 0000000..19ebd1c --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/images/workflow-icon.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/js/admin.js b/packages/Webkul/Admin/publishable/assets/js/admin.js new file mode 100644 index 0000000..24dd1b5 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/admin.js @@ -0,0 +1,2 @@ +/*! For license information please see admin.js.LICENSE.txt */ +(()=>{var e,t={2584:e=>{e.exports=function(e,t){return Array.prototype.slice.call(e,t)}},9669:(e,t,n)=>{e.exports=n(1609)},5448:(e,t,n)=>{"use strict";var r=n(4867),i=n(6026),a=n(4372),o=n(5327),s=n(4097),u=n(4109),l=n(7985),c=n(5061);e.exports=function(e){return new Promise((function(t,n){var d=e.data,f=e.headers,h=e.responseType;r.isFormData(d)&&delete f["Content-Type"];var p=new XMLHttpRequest;if(e.auth){var m=e.auth.username||"",v=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";f.Authorization="Basic "+btoa(m+":"+v)}var _=s(e.baseURL,e.url);function y(){if(p){var r="getAllResponseHeaders"in p?u(p.getAllResponseHeaders()):null,a={data:h&&"text"!==h&&"json"!==h?p.response:p.responseText,status:p.status,statusText:p.statusText,headers:r,config:e,request:p};i(t,n,a),p=null}}if(p.open(e.method.toUpperCase(),o(_,e.params,e.paramsSerializer),!0),p.timeout=e.timeout,"onloadend"in p?p.onloadend=y:p.onreadystatechange=function(){p&&4===p.readyState&&(0!==p.status||p.responseURL&&0===p.responseURL.indexOf("file:"))&&setTimeout(y)},p.onabort=function(){p&&(n(c("Request aborted",e,"ECONNABORTED",p)),p=null)},p.onerror=function(){n(c("Network Error",e,null,p)),p=null},p.ontimeout=function(){var t="timeout of "+e.timeout+"ms exceeded";e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(c(t,e,e.transitional&&e.transitional.clarifyTimeoutError?"ETIMEDOUT":"ECONNABORTED",p)),p=null},r.isStandardBrowserEnv()){var g=(e.withCredentials||l(_))&&e.xsrfCookieName?a.read(e.xsrfCookieName):void 0;g&&(f[e.xsrfHeaderName]=g)}"setRequestHeader"in p&&r.forEach(f,(function(e,t){void 0===d&&"content-type"===t.toLowerCase()?delete f[t]:p.setRequestHeader(t,e)})),r.isUndefined(e.withCredentials)||(p.withCredentials=!!e.withCredentials),h&&"json"!==h&&(p.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&p.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&p.upload&&p.upload.addEventListener("progress",e.onUploadProgress),e.cancelToken&&e.cancelToken.promise.then((function(e){p&&(p.abort(),n(e),p=null)})),d||(d=null),p.send(d)}))}},1609:(e,t,n)=>{"use strict";var r=n(4867),i=n(1849),a=n(321),o=n(7185);function s(e){var t=new a(e),n=i(a.prototype.request,t);return r.extend(n,a.prototype,t),r.extend(n,t),n}var u=s(n(5655));u.Axios=a,u.create=function(e){return s(o(u.defaults,e))},u.Cancel=n(5263),u.CancelToken=n(4972),u.isCancel=n(6502),u.all=function(e){return Promise.all(e)},u.spread=n(8713),u.isAxiosError=n(6268),e.exports=u,e.exports.default=u},5263:e=>{"use strict";function t(e){this.message=e}t.prototype.toString=function(){return"Cancel"+(this.message?": "+this.message:"")},t.prototype.__CANCEL__=!0,e.exports=t},4972:(e,t,n)=>{"use strict";var r=n(5263);function i(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var n=this;e((function(e){n.reason||(n.reason=new r(e),t(n.reason))}))}i.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},i.source=function(){var e;return{token:new i((function(t){e=t})),cancel:e}},e.exports=i},6502:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},321:(e,t,n)=>{"use strict";var r=n(4867),i=n(5327),a=n(782),o=n(3572),s=n(7185),u=n(4875),l=u.validators;function c(e){this.defaults=e,this.interceptors={request:new a,response:new a}}c.prototype.request=function(e){"string"==typeof e?(e=arguments[1]||{}).url=arguments[0]:e=e||{},(e=s(this.defaults,e)).method?e.method=e.method.toLowerCase():this.defaults.method?e.method=this.defaults.method.toLowerCase():e.method="get";var t=e.transitional;void 0!==t&&u.assertOptions(t,{silentJSONParsing:l.transitional(l.boolean,"1.0.0"),forcedJSONParsing:l.transitional(l.boolean,"1.0.0"),clarifyTimeoutError:l.transitional(l.boolean,"1.0.0")},!1);var n=[],r=!0;this.interceptors.request.forEach((function(t){"function"==typeof t.runWhen&&!1===t.runWhen(e)||(r=r&&t.synchronous,n.unshift(t.fulfilled,t.rejected))}));var i,a=[];if(this.interceptors.response.forEach((function(e){a.push(e.fulfilled,e.rejected)})),!r){var c=[o,void 0];for(Array.prototype.unshift.apply(c,n),c=c.concat(a),i=Promise.resolve(e);c.length;)i=i.then(c.shift(),c.shift());return i}for(var d=e;n.length;){var f=n.shift(),h=n.shift();try{d=f(d)}catch(e){h(e);break}}try{i=o(d)}catch(e){return Promise.reject(e)}for(;a.length;)i=i.then(a.shift(),a.shift());return i},c.prototype.getUri=function(e){return e=s(this.defaults,e),i(e.url,e.params,e.paramsSerializer).replace(/^\?/,"")},r.forEach(["delete","get","head","options"],(function(e){c.prototype[e]=function(t,n){return this.request(s(n||{},{method:e,url:t,data:(n||{}).data}))}})),r.forEach(["post","put","patch"],(function(e){c.prototype[e]=function(t,n,r){return this.request(s(r||{},{method:e,url:t,data:n}))}})),e.exports=c},782:(e,t,n)=>{"use strict";var r=n(4867);function i(){this.handlers=[]}i.prototype.use=function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1},i.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},i.prototype.forEach=function(e){r.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=i},4097:(e,t,n)=>{"use strict";var r=n(1793),i=n(7303);e.exports=function(e,t){return e&&!r(t)?i(e,t):t}},5061:(e,t,n)=>{"use strict";var r=n(481);e.exports=function(e,t,n,i,a){var o=new Error(e);return r(o,t,n,i,a)}},3572:(e,t,n)=>{"use strict";var r=n(4867),i=n(8527),a=n(6502),o=n(5655);function s(e){e.cancelToken&&e.cancelToken.throwIfRequested()}e.exports=function(e){return s(e),e.headers=e.headers||{},e.data=i.call(e,e.data,e.headers,e.transformRequest),e.headers=r.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),r.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||o.adapter)(e).then((function(t){return s(e),t.data=i.call(e,t.data,t.headers,e.transformResponse),t}),(function(t){return a(t)||(s(e),t&&t.response&&(t.response.data=i.call(e,t.response.data,t.response.headers,e.transformResponse))),Promise.reject(t)}))}},481:e=>{"use strict";e.exports=function(e,t,n,r,i){return e.config=t,n&&(e.code=n),e.request=r,e.response=i,e.isAxiosError=!0,e.toJSON=function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code}},e}},7185:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){t=t||{};var n={},i=["url","method","data"],a=["headers","auth","proxy","params"],o=["baseURL","transformRequest","transformResponse","paramsSerializer","timeout","timeoutMessage","withCredentials","adapter","responseType","xsrfCookieName","xsrfHeaderName","onUploadProgress","onDownloadProgress","decompress","maxContentLength","maxBodyLength","maxRedirects","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding"],s=["validateStatus"];function u(e,t){return r.isPlainObject(e)&&r.isPlainObject(t)?r.merge(e,t):r.isPlainObject(t)?r.merge({},t):r.isArray(t)?t.slice():t}function l(i){r.isUndefined(t[i])?r.isUndefined(e[i])||(n[i]=u(void 0,e[i])):n[i]=u(e[i],t[i])}r.forEach(i,(function(e){r.isUndefined(t[e])||(n[e]=u(void 0,t[e]))})),r.forEach(a,l),r.forEach(o,(function(i){r.isUndefined(t[i])?r.isUndefined(e[i])||(n[i]=u(void 0,e[i])):n[i]=u(void 0,t[i])})),r.forEach(s,(function(r){r in t?n[r]=u(e[r],t[r]):r in e&&(n[r]=u(void 0,e[r]))}));var c=i.concat(a).concat(o).concat(s),d=Object.keys(e).concat(Object.keys(t)).filter((function(e){return-1===c.indexOf(e)}));return r.forEach(d,l),n}},6026:(e,t,n)=>{"use strict";var r=n(5061);e.exports=function(e,t,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?t(r("Request failed with status code "+n.status,n.config,null,n.request,n)):e(n)}},8527:(e,t,n)=>{"use strict";var r=n(4867),i=n(5655);e.exports=function(e,t,n){var a=this||i;return r.forEach(n,(function(n){e=n.call(a,e,t)})),e}},5655:(e,t,n)=>{"use strict";var r=n(4155),i=n(4867),a=n(6016),o=n(481),s={"Content-Type":"application/x-www-form-urlencoded"};function u(e,t){!i.isUndefined(e)&&i.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var l,c={transitional:{silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},adapter:(("undefined"!=typeof XMLHttpRequest||void 0!==r&&"[object process]"===Object.prototype.toString.call(r))&&(l=n(5448)),l),transformRequest:[function(e,t){return a(t,"Accept"),a(t,"Content-Type"),i.isFormData(e)||i.isArrayBuffer(e)||i.isBuffer(e)||i.isStream(e)||i.isFile(e)||i.isBlob(e)?e:i.isArrayBufferView(e)?e.buffer:i.isURLSearchParams(e)?(u(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString()):i.isObject(e)||t&&"application/json"===t["Content-Type"]?(u(t,"application/json"),function(e,t,n){if(i.isString(e))try{return(t||JSON.parse)(e),i.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional,n=t&&t.silentJSONParsing,r=t&&t.forcedJSONParsing,a=!n&&"json"===this.responseType;if(a||r&&i.isString(e)&&e.length)try{return JSON.parse(e)}catch(e){if(a){if("SyntaxError"===e.name)throw o(e,this,"E_JSON_PARSE");throw e}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,validateStatus:function(e){return e>=200&&e<300}};c.headers={common:{Accept:"application/json, text/plain, */*"}},i.forEach(["delete","get","head"],(function(e){c.headers[e]={}})),i.forEach(["post","put","patch"],(function(e){c.headers[e]=i.merge(s)})),e.exports=c},1849:e=>{"use strict";e.exports=function(e,t){return function(){for(var n=new Array(arguments.length),r=0;r{"use strict";var r=n(4867);function i(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,n){if(!t)return e;var a;if(n)a=n(t);else if(r.isURLSearchParams(t))a=t.toString();else{var o=[];r.forEach(t,(function(e,t){null!=e&&(r.isArray(e)?t+="[]":e=[e],r.forEach(e,(function(e){r.isDate(e)?e=e.toISOString():r.isObject(e)&&(e=JSON.stringify(e)),o.push(i(t)+"="+i(e))})))})),a=o.join("&")}if(a){var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s)),e+=(-1===e.indexOf("?")?"?":"&")+a}return e}},7303:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):e}},4372:(e,t,n)=>{"use strict";var r=n(4867);e.exports=r.isStandardBrowserEnv()?{write:function(e,t,n,i,a,o){var s=[];s.push(e+"="+encodeURIComponent(t)),r.isNumber(n)&&s.push("expires="+new Date(n).toGMTString()),r.isString(i)&&s.push("path="+i),r.isString(a)&&s.push("domain="+a),!0===o&&s.push("secure"),document.cookie=s.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},1793:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(e)}},6268:e=>{"use strict";e.exports=function(e){return"object"==typeof e&&!0===e.isAxiosError}},7985:(e,t,n)=>{"use strict";var r=n(4867);e.exports=r.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement("a");function i(e){var r=e;return t&&(n.setAttribute("href",r),r=n.href),n.setAttribute("href",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,""):"",host:n.host,search:n.search?n.search.replace(/^\?/,""):"",hash:n.hash?n.hash.replace(/^#/,""):"",hostname:n.hostname,port:n.port,pathname:"/"===n.pathname.charAt(0)?n.pathname:"/"+n.pathname}}return e=i(window.location.href),function(t){var n=r.isString(t)?i(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0}},6016:(e,t,n)=>{"use strict";var r=n(4867);e.exports=function(e,t){r.forEach(e,(function(n,r){r!==t&&r.toUpperCase()===t.toUpperCase()&&(e[t]=n,delete e[r])}))}},4109:(e,t,n)=>{"use strict";var r=n(4867),i=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,n,a,o={};return e?(r.forEach(e.split("\n"),(function(e){if(a=e.indexOf(":"),t=r.trim(e.substr(0,a)).toLowerCase(),n=r.trim(e.substr(a+1)),t){if(o[t]&&i.indexOf(t)>=0)return;o[t]="set-cookie"===t?(o[t]?o[t]:[]).concat([n]):o[t]?o[t]+", "+n:n}})),o):o}},8713:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},4875:(e,t,n)=>{"use strict";var r=n(8593),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));var a={},o=r.version.split(".");function s(e,t){for(var n=t?t.split("."):o,r=e.split("."),i=0;i<3;i++){if(n[i]>r[i])return!0;if(n[i]0;){var a=r[i],o=t[a];if(o){var s=e[a],u=void 0===s||o(s,a,e);if(!0!==u)throw new TypeError("option "+a+" must be "+u)}else if(!0!==n)throw Error("Unknown option "+a)}},validators:i}},4867:(e,t,n)=>{"use strict";var r=n(1849),i=Object.prototype.toString;function a(e){return"[object Array]"===i.call(e)}function o(e){return void 0===e}function s(e){return null!==e&&"object"==typeof e}function u(e){if("[object Object]"!==i.call(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}function l(e){return"[object Function]"===i.call(e)}function c(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),a(e))for(var n=0,r=e.length;n{"use strict";var r=n(1094),i=n.n(r),a=n(9980),o=n.n(a),s=n(6272),u=n.n(s),l=function(e,t,n){var r=n.includeSeconds,i=n.addSuffix;return void 0===i&&(i=!0),u()(e,{locale:t,includeSeconds:r,addSuffix:i})};const c=function(e,t){if(!e.prototype.$timeago){0;var n={locale:t.locale};e.prototype.$timeago=e.observable?e.observable(n):new e({data:n});var r=function(e){void 0===e&&(e={});var t=e.locales||{};return{name:e.name||"Timeago",props:{datetime:{required:!0},title:{type:[String,Boolean]},locale:{type:String},autoUpdate:{type:[Number,Boolean]},converter:{type:Function},converterOptions:{type:Object}},data:function(){return{timeago:this.getTimeago()}},computed:{localeName:function(){return this.locale||this.$timeago.locale}},mounted:function(){this.startUpdater()},beforeDestroy:function(){this.stopUpdater()},render:function(e){return e("time",{attrs:{datetime:new Date(this.datetime).toISOString(),title:"string"==typeof this.title?this.title:!1===this.title?null:this.timeago}},[this.timeago])},methods:{getTimeago:function(n){return(this.converter||e.converter||l)(n||this.datetime,t[this.locale||this.$timeago.locale],this.converterOptions||{})},convert:function(e){this.timeago=this.getTimeago(e)},startUpdater:function(){var e=this;if(this.autoUpdate){var t=!0===this.autoUpdate?60:this.autoUpdate;this.updater=setInterval((function(){e.convert()}),1e3*t)}},stopUpdater:function(){this.updater&&(clearInterval(this.updater),this.updater=null)}},watch:{autoUpdate:function(e){this.stopUpdater(),e&&this.startUpdater()},datetime:function(){this.convert()},localeName:function(){this.convert()},converter:function(){this.convert()},converterOptions:{handler:function(){this.convert()},deep:!0}}}}(t);e.component(r.name,r)}};var d=function(e){return W(["text","password","search","email","tel","url","textarea","number"],e.type)},f=function(e){return W(["radio","checkbox"],e.type)},h=function(e,t){return e.getAttribute("data-vv-"+t)},p=function(e){return"isNaN"in Number?Number.isNaN(e):"number"==typeof e&&e!=e},m=function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return e.every((function(e){return null==e}))},v=function(e,t){if(e instanceof RegExp&&t instanceof RegExp)return v(e.source,t.source)&&v(e.flags,t.flags);if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(var n=0;n0;)t[n]=arguments[n+1];if(x(Object.assign))return Object.assign.apply(Object,[e].concat(t));if(null==e)throw new TypeError("Cannot convert undefined or null to object");var r=Object(e);return t.forEach((function(e){null!=e&&Object.keys(e).forEach((function(t){r[t]=e[t]}))})),r},O=0,E="{id}",C=function(e,t){for(var n=Array.isArray(e)?e:Y(e),r=0;r=0&&e.maxLength<524288&&(t=b("max:"+e.maxLength,t)),e.minLength>0&&(t=b("min:"+e.minLength,t)),"number"===e.type&&(t=b("decimal",t),""!==e.min&&(t=b("min_value:"+e.min,t)),""!==e.max&&(t=b("max_value:"+e.max,t))),t;if(function(e){return W(["date","week","month","datetime-local","time"],e.type)}(e)){var n=e.step&&Number(e.step)<60?"HH:mm:ss":"HH:mm";if("date"===e.type)return b("date_format:yyyy-MM-dd",t);if("datetime-local"===e.type)return b("date_format:yyyy-MM-ddT"+n,t);if("month"===e.type)return b("date_format:yyyy-MM",t);if("week"===e.type)return b("date_format:yyyy-[W]WW",t);if("time"===e.type)return b("date_format:"+n,t)}return t},F=function(e){return x(Object.values)?Object.values(e):Object.keys(e).map((function(t){return e[t]}))},W=function(e,t){return-1!==e.indexOf(t)},R=function(e){return Array.isArray(e)&&0===e.length},z=function(e,t,n){Object.defineProperty(e,t,{configurable:!1,writable:!0,value:n})},B="en",V=function(e){void 0===e&&(e={}),this.container={},this.merge(e)},U={locale:{configurable:!0}};U.locale.get=function(){return B},U.locale.set=function(e){B=e||"en"},V.prototype.hasLocale=function(e){return!!this.container[e]},V.prototype.setDateFormat=function(e,t){this.container[e]||(this.container[e]={}),this.container[e].dateFormat=t},V.prototype.getDateFormat=function(e){return this.container[e]&&this.container[e].dateFormat?this.container[e].dateFormat:null},V.prototype.getMessage=function(e,t,n){var r=null;return r=this.hasMessage(e,t)?this.container[e].messages[t]:this._getDefaultMessage(e),x(r)?r.apply(void 0,n):r},V.prototype.getFieldMessage=function(e,t,n,r){if(!this.hasLocale(e))return this.getMessage(e,n,r);var i=this.container[e].custom&&this.container[e].custom[t];if(!i||!i[n])return this.getMessage(e,n,r);var a=i[n];return x(a)?a.apply(void 0,r):a},V.prototype._getDefaultMessage=function(e){return this.hasMessage(e,"_default")?this.container[e].messages._default:this.container.en.messages._default},V.prototype.getAttribute=function(e,t,n){return void 0===n&&(n=""),this.hasAttribute(e,t)?this.container[e].attributes[t]:n},V.prototype.hasMessage=function(e,t){return!!(this.hasLocale(e)&&this.container[e].messages&&this.container[e].messages[t])},V.prototype.hasAttribute=function(e,t){return!!(this.hasLocale(e)&&this.container[e].attributes&&this.container[e].attributes[t])},V.prototype.merge=function(e){N(this.container,e)},V.prototype.setMessage=function(e,t,n){this.hasLocale(e)||(this.container[e]={messages:{},attributes:{}}),this.container[e].messages||(this.container[e].messages={}),this.container[e].messages[t]=n},V.prototype.setAttribute=function(e,t,n){this.hasLocale(e)||(this.container[e]={messages:{},attributes:{}}),this.container[e].attributes[t]=n},Object.defineProperties(V.prototype,U);var q={default:new V({en:{messages:{},attributes:{},custom:{}}})},J="default",G=function(){};G._checkDriverName=function(e){if(!e)throw k("you must provide a name to the dictionary driver")},G.setDriver=function(e,t){void 0===t&&(t=null),this._checkDriverName(e),t&&(q[e]=t),J=e},G.getDriver=function(){return q[J]};var X=function e(t,n){void 0===t&&(t=null),void 0===n&&(n=null),this.vmId=n||null,this.items=t&&t instanceof e?t.items:[]};X.prototype["function"==typeof Symbol?Symbol.iterator:"@@iterator"]=function(){var e=this,t=0;return{next:function(){return{value:e.items[t++],done:t>e.items.length}}}},X.prototype.add=function(e){var t;(t=this.items).push.apply(t,this._normalizeError(e))},X.prototype._normalizeError=function(e){var t=this;return Array.isArray(e)?e.map((function(e){return e.scope=m(e.scope)?null:e.scope,e.vmId=m(e.vmId)?t.vmId||null:e.vmId,e})):(e.scope=m(e.scope)?null:e.scope,e.vmId=m(e.vmId)?this.vmId||null:e.vmId,[e])},X.prototype.regenerate=function(){this.items.forEach((function(e){e.msg=x(e.regenerate)?e.regenerate():e.msg}))},X.prototype.update=function(e,t){var n=A(this.items,(function(t){return t.id===e}));if(n){var r=this.items.indexOf(n);this.items.splice(r,1),n.scope=t.scope,this.items.push(n)}},X.prototype.all=function(e){var t=this;return this.items.filter((function(n){var r=!0,i=!0;return m(e)||(r=n.scope===e),m(t.vmId)||(i=n.vmId===t.vmId),i&&r})).map((function(e){return e.msg}))},X.prototype.any=function(e){var t=this;return!!this.items.filter((function(n){var r=!0,i=!0;return m(e)||(r=n.scope===e),m(t.vmId)||(i=n.vmId===t.vmId),i&&r})).length},X.prototype.clear=function(e){var t=this,n=m(this.vmId)?function(){return!0}:function(e){return e.vmId===t.vmId},r=function(t){return t.scope===e};0===arguments.length?r=function(){return!0}:m(e)&&(e=null);for(var i=0;i=9999&&(O=0,E=E.replace("{id}","_{id}")),O++,E.replace("{id}",String(O))),this.el=e.el,this.updated=!1,this.vmId=e.vmId,z(this,"dependencies",[]),z(this,"watchers",[]),z(this,"events",[]),this.delay=0,this.rules={},this.forceRequired=!1,this._cacheId(e),this.classNames=j({},ve.classNames),e=j({},ve,e),this._delay=m(e.delay)?0:e.delay,this.validity=e.validity,this.aria=e.aria,this.flags=e.flags||{untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:null,invalid:null,validated:!1,pending:!1,required:!1,changed:!1},z(this,"vm",e.vm),z(this,"componentInstance",e.component),this.ctorConfig=this.componentInstance?y("$options.$_veeValidate",this.componentInstance):void 0,this.update(e),this.initialValue=this.value,this.updated=!1},ye={validator:{configurable:!0},isRequired:{configurable:!0},isDisabled:{configurable:!0},alias:{configurable:!0},value:{configurable:!0},bails:{configurable:!0},rejectsFalse:{configurable:!0}};ye.validator.get=function(){return this.vm&&this.vm.$validator?this.vm.$validator:{validate:function(){return Promise.resolve(!0)}}},ye.isRequired.get=function(){return!!this.rules.required||this.forceRequired},ye.isDisabled.get=function(){return!(!this.el||!this.el.disabled)},ye.alias.get=function(){if(this._alias)return this._alias;var e=null;return this.ctorConfig&&this.ctorConfig.alias&&(e=x(this.ctorConfig.alias)?this.ctorConfig.alias.call(this.componentInstance):this.ctorConfig.alias),!e&&this.el&&(e=h(this.el,"as")),!e&&this.componentInstance?this.componentInstance.$attrs&&this.componentInstance.$attrs["data-vv-as"]:e},ye.value.get=function(){if(x(this.getter))return this.getter()},ye.bails.get=function(){return this._bails},ye.rejectsFalse.get=function(){return this.componentInstance&&this.ctorConfig?!!this.ctorConfig.rejectsFalse:!!this.el&&"checkbox"===this.el.type},_e.prototype.matches=function(e){var t=this;if(!e)return!0;if(e.id)return this.id===e.id;var n=m(e.vmId)?function(){return!0}:function(e){return e===t.vmId};return!!n(e.vmId)&&(void 0===e.name&&void 0===e.scope||(void 0===e.scope?this.name===e.name:void 0===e.name?this.scope===e.scope:e.name===this.name&&e.scope===this.scope))},_e.prototype._cacheId=function(e){this.el&&!e.targetOf&&(this.el._veeValidateId=this.id)},_e.prototype.waitFor=function(e){this._waitingFor=e},_e.prototype.isWaitingFor=function(e){return this._waitingFor===e},_e.prototype.update=function(e){var t,n,r,i=this;if(this.targetOf=e.targetOf||null,this.immediate=e.immediate||this.immediate||!1,this.persist=e.persist||this.persist||!1,!m(e.scope)&&e.scope!==this.scope&&x(this.validator.update)&&this.validator.update(this.id,{scope:e.scope}),this.scope=m(e.scope)?m(this.scope)?null:this.scope:e.scope,this.name=(m(e.name)?e.name:String(e.name))||this.name||null,this.rules=void 0!==e.rules?w(e.rules):this.rules,this._bails=void 0!==e.bails?e.bails:this._bails,this.model=e.model||this.model,this.listen=void 0!==e.listen?e.listen:this.listen,this.classes=!(!e.classes&&!this.classes)&&!this.componentInstance,this.classNames=L(e.classNames)?N(this.classNames,e.classNames):this.classNames,this.getter=x(e.getter)?e.getter:this.getter,this._alias=e.alias||this._alias,this.events=e.events?he(e.events):this.events,this.delay=(t=this.events,n=e.delay||this.delay,r=this._delay,"number"==typeof n?t.reduce((function(e,t){return e[t]=n,e}),{}):t.reduce((function(e,t){return"object"==typeof n&&t in n?(e[t]=n[t],e):"number"==typeof r?(e[t]=r,e):(e[t]=r&&r[t]||0,e)}),{})),this.updateDependencies(),this.addActionListeners(),void 0!==e.rules&&(this.flags.required=this.isRequired),0===Object.keys(e.rules||{}).length&&this.updated){var a=this.flags.validated;this.validator.validate("#"+this.id).then((function(){i.flags.validated=a}))}this.flags.validated&&void 0!==e.rules&&this.updated&&this.validator.validate("#"+this.id),this.updated=!0,this.addValueListeners(),this.el&&(this.updateClasses(),this.updateAriaAttrs())},_e.prototype.reset=function(){var e=this;this._cancellationToken&&(this._cancellationToken.cancelled=!0,delete this._cancellationToken);var t={untouched:!0,touched:!1,dirty:!1,pristine:!0,valid:null,invalid:null,validated:!1,pending:!1,required:!1,changed:!1};Object.keys(this.flags).filter((function(e){return"required"!==e})).forEach((function(n){e.flags[n]=t[n]})),this.initialValue=this.value,this.flags.changed=!1,this.addValueListeners(),this.addActionListeners(),this.updateClasses(!0),this.updateAriaAttrs(),this.updateCustomValidity()},_e.prototype.setFlags=function(e){var t=this,n={pristine:"dirty",dirty:"pristine",valid:"invalid",invalid:"valid",touched:"untouched",untouched:"touched"};Object.keys(e).forEach((function(r){t.flags[r]=e[r],n[r]&&void 0===e[n[r]]&&(t.flags[n[r]]=!e[r])})),void 0===e.untouched&&void 0===e.touched&&void 0===e.dirty&&void 0===e.pristine||this.addActionListeners(),this.updateClasses(),this.updateAriaAttrs(),this.updateCustomValidity()},_e.prototype.updateDependencies=function(){var e=this;this.dependencies.forEach((function(e){return e.field.destroy()})),this.dependencies=[];var t=Object.keys(this.rules).reduce((function(t,n){return ce.isTargetRule(n)&&t.push({selector:e.rules[n][0],name:n}),t}),[]);t.length&&this.vm&&this.vm.$el&&t.forEach((function(t){var n=t.selector,r=t.name,i=e.vm.$refs[n],a=Array.isArray(i)?i[0]:i;if(a){var o={vm:e.vm,classes:e.classes,classNames:e.classNames,delay:e.delay,scope:e.scope,events:e.events.join("|"),immediate:e.immediate,targetOf:e.id};x(a.$watch)?(o.component=a,o.el=a.$el,o.getter=ue.resolveGetter(a.$el,a.$vnode)):(o.el=a,o.getter=ue.resolveGetter(a,{})),e.dependencies.push({name:r,field:new _e(o)})}}))},_e.prototype.unwatch=function(e){if(void 0===e&&(e=null),!e)return this.watchers.forEach((function(e){return e.unwatch()})),void(this.watchers=[]);this.watchers.filter((function(t){return e.test(t.tag)})).forEach((function(e){return e.unwatch()})),this.watchers=this.watchers.filter((function(t){return!e.test(t.tag)}))},_e.prototype.updateClasses=function(e){var t=this;if(void 0===e&&(e=!1),this.classes&&!this.isDisabled){var n=function(n){T(n,t.classNames.dirty,t.flags.dirty),T(n,t.classNames.pristine,t.flags.pristine),T(n,t.classNames.touched,t.flags.touched),T(n,t.classNames.untouched,t.flags.untouched),e&&(T(n,t.classNames.valid,!1),T(n,t.classNames.invalid,!1)),!m(t.flags.valid)&&t.flags.validated&&T(n,t.classNames.valid,t.flags.valid),!m(t.flags.invalid)&&t.flags.validated&&T(n,t.classNames.invalid,t.flags.invalid)};if(f(this.el)){var r=document.querySelectorAll('input[name="'+this.el.name+'"]');Y(r).forEach(n)}else n(this.el)}},_e.prototype.addActionListeners=function(){var e=this;if(this.unwatch(/class/),this.el){var t=function(){e.flags.touched=!0,e.flags.untouched=!1,e.classes&&(T(e.el,e.classNames.touched,!0),T(e.el,e.classNames.untouched,!1)),e.unwatch(/^class_blur$/)},n=d(this.el)?"input":"change",r=function(){e.flags.dirty=!0,e.flags.pristine=!1,e.classes&&(T(e.el,e.classNames.pristine,!1),T(e.el,e.classNames.dirty,!0)),e.unwatch(/^class_input$/)};if(this.componentInstance&&x(this.componentInstance.$once))return this.componentInstance.$once("input",r),this.componentInstance.$once("blur",t),this.watchers.push({tag:"class_input",unwatch:function(){e.componentInstance.$off("input",r)}}),void this.watchers.push({tag:"class_blur",unwatch:function(){e.componentInstance.$off("blur",t)}});if(this.el){me(this.el,n,r);var i=f(this.el)?"change":"blur";me(this.el,i,t),this.watchers.push({tag:"class_input",unwatch:function(){e.el.removeEventListener(n,r)}}),this.watchers.push({tag:"class_blur",unwatch:function(){e.el.removeEventListener(i,t)}})}}},_e.prototype.checkValueChanged=function(){return(null!==this.initialValue||""!==this.value||!d(this.el))&&this.value!==this.initialValue},_e.prototype._determineInputEvent=function(){return this.componentInstance?this.componentInstance.$options.model&&this.componentInstance.$options.model.event||"input":this.model&&this.model.lazy?"change":d(this.el)?"input":"change"},_e.prototype._determineEventList=function(e){var t=this;return!this.events.length||this.componentInstance||d(this.el)?[].concat(this.events).map((function(e){return"input"===e&&t.model&&t.model.lazy?"change":e})):this.events.map((function(t){return"input"===t?e:t}))},_e.prototype.addValueListeners=function(){var e=this;if(this.unwatch(/^input_.+/),this.listen&&this.el){var t={cancelled:!1},n=this.targetOf?function(){var t=e.validator._resolveField("#"+e.targetOf);t&&t.flags.validated&&e.validator.validate("#"+e.targetOf)}:function(){for(var n=[],r=arguments.length;r--;)n[r]=arguments[r];(0===n.length||fe(n[0]))&&(n[0]=e.value),e.flags.pending=!0,e._cancellationToken=t,e.validator.validate("#"+e.id,n[0])},r=this._determineInputEvent(),i=this._determineEventList(r);if(W(i,r)){var a=null,o=null,s=!1;if(this.model&&this.model.expression&&(a=this.vm,o=this.model.expression,s=!0),!o&&this.componentInstance&&this.componentInstance.$options.model&&(a=this.componentInstance,o=this.componentInstance.$options.model.prop||"value"),a&&o){var u=g(n,this.delay[r],t),l=a.$watch(o,u);this.watchers.push({tag:"input_model",unwatch:function(){e.vm.$nextTick((function(){l()}))}}),s&&(i=i.filter((function(e){return e!==r})))}}i.forEach((function(r){var i=g(n,e.delay[r],t);e._addComponentEventListener(r,i),e._addHTMLEventListener(r,i)}))}},_e.prototype._addComponentEventListener=function(e,t){var n=this;this.componentInstance&&(this.componentInstance.$on(e,t),this.watchers.push({tag:"input_vue",unwatch:function(){n.componentInstance.$off(e,t)}}))},_e.prototype._addHTMLEventListener=function(e,t){var n=this;if(this.el&&!this.componentInstance){var r=function(r){me(r,e,t),n.watchers.push({tag:"input_native",unwatch:function(){r.removeEventListener(e,t)}})};if(r(this.el),f(this.el)){var i=document.querySelectorAll('input[name="'+this.el.name+'"]');Y(i).forEach((function(e){e._veeValidateId&&e!==n.el||r(e)}))}}},_e.prototype.updateAriaAttrs=function(){var e=this;if(this.aria&&this.el&&x(this.el.setAttribute)){var t=function(t){t.setAttribute("aria-required",e.isRequired?"true":"false"),t.setAttribute("aria-invalid",e.flags.invalid?"true":"false")};if(f(this.el)){var n=document.querySelectorAll('input[name="'+this.el.name+'"]');Y(n).forEach(t)}else t(this.el)}},_e.prototype.updateCustomValidity=function(){this.validity&&this.el&&x(this.el.setCustomValidity)&&this.validator.errors&&this.el.setCustomValidity(this.flags.valid?"":this.validator.errors.firstById(this.id)||"")},_e.prototype.destroy=function(){this._cancellationToken&&(this._cancellationToken.cancelled=!0),this.unwatch(),this.dependencies.forEach((function(e){return e.field.destroy()})),this.dependencies=[]},Object.defineProperties(_e.prototype,ye);var ge=function(e){void 0===e&&(e=[]),this.items=e||[],this.itemsById=this.items.reduce((function(e,t){return e[t.id]=t,e}),{})},be={length:{configurable:!0}};ge.prototype["function"==typeof Symbol?Symbol.iterator:"@@iterator"]=function(){var e=this,t=0;return{next:function(){return{value:e.items[t++],done:t>e.items.length}}}},be.length.get=function(){return this.items.length},ge.prototype.find=function(e){return A(this.items,(function(t){return t.matches(e)}))},ge.prototype.findById=function(e){return this.itemsById[e]||null},ge.prototype.filter=function(e){return Array.isArray(e)?this.items.filter((function(t){return e.some((function(e){return t.matches(e)}))})):this.items.filter((function(t){return t.matches(e)}))},ge.prototype.map=function(e){return this.items.map(e)},ge.prototype.remove=function(e){var t=null;if(!(t=e instanceof _e?e:this.find(e)))return null;var n=this.items.indexOf(t);return this.items.splice(n,1),delete this.itemsById[t.id],t},ge.prototype.push=function(e){if(!(e instanceof _e))throw k("FieldBag only accepts instances of Field that has an id defined.");if(!e.id)throw k("Field id must be defined.");if(this.findById(e.id))throw k("Field with id "+e.id+" is already added.");this.items.push(e),this.itemsById[e.id]=e},Object.defineProperties(ge.prototype,be);var we=function(e,t){this.id=t._uid,this._base=e,this._paused=!1,this.errors=new X(e.errors,this.id)},Me={flags:{configurable:!0},rules:{configurable:!0},fields:{configurable:!0},dictionary:{configurable:!0},locale:{configurable:!0}};Me.flags.get=function(){var e=this;return this._base.fields.items.filter((function(t){return t.vmId===e.id})).reduce((function(e,t){return t.scope&&(e["$"+t.scope]||(e["$"+t.scope]={}),e["$"+t.scope][t.name]=t.flags),e[t.name]=t.flags,e}),{})},Me.rules.get=function(){return this._base.rules},Me.fields.get=function(){return new ge(this._base.fields.filter({vmId:this.id}))},Me.dictionary.get=function(){return this._base.dictionary},Me.locale.get=function(){return this._base.locale},Me.locale.set=function(e){this._base.locale=e},we.prototype.localize=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this._base).localize.apply(e,t)},we.prototype.update=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this._base).update.apply(e,t)},we.prototype.attach=function(e){var t=j({},e,{vmId:this.id});return this._base.attach(t)},we.prototype.pause=function(){this._paused=!0},we.prototype.resume=function(){this._paused=!1},we.prototype.remove=function(e){return this._base.remove(e)},we.prototype.detach=function(e,t){return this._base.detach(e,t,this.id)},we.prototype.extend=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this._base).extend.apply(e,t)},we.prototype.validate=function(e,t,n){return void 0===n&&(n={}),this._paused?Promise.resolve(!0):this._base.validate(e,t,j({},{vmId:this.id},n||{}))},we.prototype.verify=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this._base).verify.apply(e,t)},we.prototype.validateAll=function(e,t){return void 0===t&&(t={}),this._paused?Promise.resolve(!0):this._base.validateAll(e,j({},{vmId:this.id},t||{}))},we.prototype.validateScopes=function(e){return void 0===e&&(e={}),this._paused?Promise.resolve(!0):this._base.validateScopes(j({},{vmId:this.id},e||{}))},we.prototype.destroy=function(){delete this.id,delete this._base},we.prototype.reset=function(e){return this._base.reset(Object.assign({},e||{},{vmId:this.id}))},we.prototype.flag=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this._base).flag.apply(e,t.concat([this.id]))},we.prototype._resolveField=function(){for(var e,t=[],n=arguments.length;n--;)t[n]=arguments[n];return(e=this._base)._resolveField.apply(e,t)},Object.defineProperties(we.prototype,Me);var ke=null,Le=function(){return ke},xe={provide:function(){return this.$validator&&!H(this.$vnode)?{$validator:this.$validator}:{}},beforeCreate:function(){if(!H(this.$vnode)&&!1!==this.$options.$__veeInject){this.$parent||ee(this.$options.$_veeValidate||{});var e=K(this);(!this.$parent||this.$options.$_veeValidate&&/new/.test(this.$options.$_veeValidate.validator))&&(this.$validator=new we(Le(),this));var t,n=(t=this.$options.inject,!(!L(t)||!t.$validator));if(this.$validator||!e.inject||n||(this.$validator=new we(Le(),this)),n||this.$validator){if(!n&&this.$validator)this.$options._base.util.defineReactive(this.$validator,"errors",this.$validator.errors);this.$options.computed||(this.$options.computed={}),this.$options.computed[e.errorBagName||"errors"]=function(){return this.$validator.errors},this.$options.computed[e.fieldsBagName||"fields"]=function(){return this.$validator.fields.items.reduce((function(e,t){return t.scope?(e["$"+t.scope]||(e["$"+t.scope]={}),e["$"+t.scope][t.name]=t.flags,e):(e[t.name]=t.flags,e)}),{})}}}},beforeDestroy:function(){this.$validator&&this._uid===this.$validator.id&&this.$validator.errors.clear()}};function De(e,t){return t&&t.$validator?t.$validator.fields.findById(e._veeValidateId):null}var Te={bind:function(e,t,n){var r=n.context.$validator;if(r){var i=ue.generate(e,t,n);r.attach(i)}},inserted:function(e,t,n){var r=De(e,n.context),i=ue.resolveScope(e,t,n);r&&i!==r.scope&&(r.update({scope:i}),r.updated=!1)},update:function(e,t,n){var r=De(e,n.context);if(!(!r||r.updated&&v(t.value,t.oldValue))){var i=ue.resolveScope(e,t,n),a=ue.resolveRules(e,t,n);r.update({scope:i,rules:a})}},unbind:function(e,t,n){var r=n.context,i=De(e,r);i&&r.$validator.detach(i)}},Ye=function(e,t,n){void 0===t&&(t={fastExit:!0}),void 0===n&&(n=null),this.errors=new X,this.fields=new ge,this._createFields(e),this.paused=!1,this.fastExit=!!m(t&&t.fastExit)||t.fastExit,this.$vee=n||{_vm:{$nextTick:function(e){return x(e)?e():Promise.resolve()},$emit:function(){},$off:function(){}}}},Se={rules:{configurable:!0},dictionary:{configurable:!0},flags:{configurable:!0},locale:{configurable:!0}},je={rules:{configurable:!0},dictionary:{configurable:!0},locale:{configurable:!0}};je.rules.get=function(){return ce.rules},Se.rules.get=function(){return ce.rules},Se.dictionary.get=function(){return G.getDriver()},je.dictionary.get=function(){return G.getDriver()},Se.flags.get=function(){return this.fields.items.reduce((function(e,t){var n;return t.scope?(e["$"+t.scope]=((n={})[t.name]=t.flags,n),e):(e[t.name]=t.flags,e)}),{})},Se.locale.get=function(){return Ye.locale},Se.locale.set=function(e){Ye.locale=e},je.locale.get=function(){return G.getDriver().locale},je.locale.set=function(e){var t=e!==G.getDriver().locale;G.getDriver().locale=e,t&&Ye.$vee&&Ye.$vee._vm&&Ye.$vee._vm.$emit("localeChanged")},Ye.create=function(e,t){return new Ye(e,t)},Ye.extend=function(e,t,n){void 0===n&&(n={}),Ye._guardExtend(e,t);var r=t.options||{};Ye._merge(e,{validator:t,paramNames:n&&n.paramNames||t.paramNames,options:j({hasTarget:!1,immediate:!0},r,n||{})})},Ye.remove=function(e){ce.remove(e)},Ye.prototype.localize=function(e,t){Ye.localize(e,t)},Ye.localize=function(e,t){var n;if(L(e))G.getDriver().merge(e);else{if(t){var r=e||t.name;t=j({},t),G.getDriver().merge(((n={})[r]=t,n))}e&&(Ye.locale=e)}},Ye.prototype.attach=function(e){var t=this,n={name:e.name,scope:e.scope,persist:!0},r=e.persist?this.fields.find(n):null;r&&(e.flags=r.flags,r.destroy(),this.fields.remove(r));var i=e.initialValue,a=new _e(e);return this.fields.push(a),a.immediate?this.$vee._vm.$nextTick((function(){return t.validate("#"+a.id,i||a.value,{vmId:e.vmId})})):this._validate(a,i||a.value,{initial:!0}).then((function(e){a.flags.valid=e.valid,a.flags.invalid=!e.valid})),a},Ye.prototype.flag=function(e,t,n){void 0===n&&(n=null);var r=this._resolveField(e,void 0,n);r&&t&&r.setFlags(t)},Ye.prototype.detach=function(e,t,n){var r=x(e.destroy)?e:this._resolveField(e,t,n);r&&(r.persist||(r.destroy(),this.errors.remove(r.name,r.scope,r.vmId),this.fields.remove(r)))},Ye.prototype.extend=function(e,t,n){void 0===n&&(n={}),Ye.extend(e,t,n)},Ye.prototype.reset=function(e){var t=this;return this.$vee._vm.$nextTick().then((function(){return t.$vee._vm.$nextTick()})).then((function(){t.fields.filter(e).forEach((function(n){n.waitFor(null),n.reset(),t.errors.remove(n.name,n.scope,e&&e.vmId)}))}))},Ye.prototype.update=function(e,t){var n=t.scope;this._resolveField("#"+e)&&this.errors.update(e,{scope:n})},Ye.prototype.remove=function(e){Ye.remove(e)},Ye.prototype.validate=function(e,t,n){var r=this;void 0===n&&(n={});var i=n.silent,a=n.vmId;if(this.paused)return Promise.resolve(!0);if(m(e))return this.validateScopes({silent:i,vmId:a});if("*"===e)return this.validateAll(void 0,{silent:i,vmId:a});if(/^(.+)\.\*$/.test(e)){var o=e.match(/^(.+)\.\*$/)[1];return this.validateAll(o)}var s=this._resolveField(e);if(!s)return this._handleFieldNotFound(e);i||(s.flags.pending=!0),void 0===t&&(t=s.value);var u=this._validate(s,t);return s.waitFor(u),u.then((function(e){return!i&&s.isWaitingFor(u)&&(s.waitFor(null),r._handleValidationResults([e],a)),e.valid}))},Ye.prototype.pause=function(){return this.paused=!0,this},Ye.prototype.resume=function(){return this.paused=!1,this},Ye.prototype.validateAll=function(e,t){var n=this;void 0===t&&(t={});var r=t.silent,i=t.vmId;if(this.paused)return Promise.resolve(!0);var a=null,o=!1;return"string"==typeof e?a={scope:e,vmId:i}:L(e)?(a=Object.keys(e).map((function(e){return{name:e,vmId:i,scope:null}})),o=!0):a=Array.isArray(e)?e.map((function(e){return"object"==typeof e?Object.assign({vmId:i},e):{name:e,vmId:i}})):{scope:null,vmId:i},Promise.all(this.fields.filter(a).map((function(t){return n._validate(t,o?e[t.name]:t.value)}))).then((function(e){return r||n._handleValidationResults(e,i),e.every((function(e){return e.valid}))}))},Ye.prototype.validateScopes=function(e){var t=this;void 0===e&&(e={});var n=e.silent,r=e.vmId;return this.paused?Promise.resolve(!0):Promise.all(this.fields.filter({vmId:r}).map((function(e){return t._validate(e,e.value)}))).then((function(e){return n||t._handleValidationResults(e,r),e.every((function(e){return e.valid}))}))},Ye.prototype.verify=function(e,t,n){void 0===n&&(n={});var r={name:n&&n.name||"{field}",rules:w(t),bails:y("bails",n,!0),forceRequired:!1,get isRequired(){return!!this.rules.required||this.forceRequired}},i=Object.keys(r.rules).filter(ce.isTargetRule);return i.length&&n&&L(n.values)&&(r.dependencies=i.map((function(e){var t=r.rules[e][0];return{name:e,field:{value:n.values[t]}}}))),this._validate(r,e).then((function(e){var t=[],n={};return e.errors.forEach((function(e){t.push(e.msg),n[e.rule]=e.msg})),{valid:e.valid,errors:t,failedRules:n}}))},Ye.prototype.destroy=function(){this.$vee._vm.$off("localeChanged")},Ye.prototype._createFields=function(e){var t=this;e&&Object.keys(e).forEach((function(n){var r=j({},{name:n,rules:e[n]});t.attach(r)}))},Ye.prototype._getDateFormat=function(e){var t=null;return e.date_format&&Array.isArray(e.date_format)&&(t=e.date_format[0]),t||G.getDriver().getDateFormat(this.locale)},Ye.prototype._formatErrorMessage=function(e,t,n,r){void 0===n&&(n={}),void 0===r&&(r=null);var i=this._getFieldDisplayName(e),a=this._getLocalizedParams(t,r);return G.getDriver().getFieldMessage(this.locale,e.name,t.name,[i,a,n])},Ye.prototype._convertParamObjectToArray=function(e,t){if(Array.isArray(e))return e;var n=ce.getParamNames(t);return n&&L(e)?n.reduce((function(t,n){return n in e&&t.push(e[n]),t}),[]):e},Ye.prototype._getLocalizedParams=function(e,t){void 0===t&&(t=null);var n=this._convertParamObjectToArray(e.params,e.name);return e.options.hasTarget&&n&&n[0]?[t||G.getDriver().getAttribute(this.locale,n[0],n[0])].concat(n.slice(1)):n},Ye.prototype._getFieldDisplayName=function(e){return e.alias||G.getDriver().getAttribute(this.locale,e.name,e.name)},Ye.prototype._convertParamArrayToObj=function(e,t){var n=ce.getParamNames(t);if(!n)return e;if(L(e)){if(n.some((function(t){return-1!==Object.keys(e).indexOf(t)})))return e;e=[e]}return e.reduce((function(e,t,r){return e[n[r]]=t,e}),{})},Ye.prototype._test=function(e,t,n){var r=this,i=ce.getValidatorMethod(n.name),a=Array.isArray(n.params)?Y(n.params):n.params;a||(a=[]);var o=null;if(!i||"function"!=typeof i)return Promise.reject(k("No such validator '"+n.name+"' exists."));if(n.options.hasTarget&&e.dependencies){var s=A(e.dependencies,(function(e){return e.name===n.name}));s&&(o=s.field.alias,a=[s.field.value].concat(a.slice(1)))}else"required"===n.name&&e.rejectsFalse&&(a=a.length?a:[!0]);if(n.options.isDate){var u=this._getDateFormat(e.rules);"date_format"!==n.name&&a.push(u)}var l=i(t,this._convertParamArrayToObj(a,n.name));return x(l.then)?l.then((function(t){var i=!0,a={};return Array.isArray(t)?i=t.every((function(e){return L(e)?e.valid:e})):(i=L(t)?t.valid:t,a=t.data),{valid:i,data:l.data,errors:i?[]:[r._createFieldError(e,n,a,o)]}})):(L(l)||(l={valid:l,data:{}}),{valid:l.valid,data:l.data,errors:l.valid?[]:[this._createFieldError(e,n,l.data,o)]})},Ye._merge=function(e,t){var n=t.validator,r=t.options,i=t.paramNames,a=x(n)?n:n.validate;n.getMessage&&G.getDriver().setMessage(Ye.locale,e,n.getMessage),ce.add(e,{validate:a,options:r,paramNames:i})},Ye._guardExtend=function(e,t){if(!x(t)&&!x(t.validate))throw k("Extension Error: The validator '"+e+"' must be a function or have a 'validate' method.")},Ye.prototype._createFieldError=function(e,t,n,r){var i=this;return{id:e.id,vmId:e.vmId,field:e.name,msg:this._formatErrorMessage(e,t,n,r),rule:t.name,scope:e.scope,regenerate:function(){return i._formatErrorMessage(e,t,n,r)}}},Ye.prototype._resolveField=function(e,t,n){if("#"===e[0])return this.fields.findById(e.slice(1));if(!m(t))return this.fields.find({name:e,scope:t,vmId:n});if(W(e,".")){var r=e.split("."),i=r[0],a=r.slice(1),o=this.fields.find({name:a.join("."),scope:i,vmId:n});if(o)return o}return this.fields.find({name:e,scope:null,vmId:n})},Ye.prototype._handleFieldNotFound=function(e,t){var n=m(t)?e:(m(t)?"":t+".")+e;return Promise.reject(k('Validating a non-existent field: "'+n+'". Use "attach()" first.'))},Ye.prototype._handleValidationResults=function(e,t){var n=this,r=e.map((function(e){return{id:e.id}}));this.errors.removeById(r.map((function(e){return e.id}))),e.forEach((function(e){n.errors.remove(e.field,e.scope,t)}));var i=e.reduce((function(e,t){return e.push.apply(e,t.errors),e}),[]);this.errors.add(i),this.fields.filter(r).forEach((function(t){var n=A(e,(function(e){return e.id===t.id}));t.setFlags({pending:!1,valid:n.valid,validated:!0})}))},Ye.prototype._shouldSkip=function(e,t){return!1!==e.bails&&(!(!e.isDisabled||!Q().useConstraintAttrs)||!e.isRequired&&(m(t)||""===t||R(t)))},Ye.prototype._shouldBail=function(e){return void 0!==e.bails?e.bails:this.fastExit},Ye.prototype._validate=function(e,t,n){var r=this;void 0===n&&(n={});var i=n.initial,a=Object.keys(e.rules).filter(ce.isRequireRule);if(e.forceRequired=!1,a.forEach((function(n){var i=ce.getOptions(n),a=r._test(e,t,{name:n,params:e.rules[n],options:i});if(x(a.then))throw k("Require rules cannot be async");if(!L(a))throw k("Require rules has to return an object (see docs)");!0===a.data.required&&(e.forceRequired=!0)})),this._shouldSkip(e,t))return Promise.resolve({valid:!0,id:e.id,field:e.name,scope:e.scope,errors:[]});var o=[],s=[],u=!1;return x(e.checkValueChanged)&&(e.flags.changed=e.checkValueChanged()),Object.keys(e.rules).filter((function(e){return!i||!ce.has(e)||ce.isImmediate(e)})).some((function(n){var i=ce.getOptions(n),a=r._test(e,t,{name:n,params:e.rules[n],options:i});return x(a.then)?o.push(a):!a.valid&&r._shouldBail(e)?(s.push.apply(s,a.errors),u=!0):o.push(new Promise((function(e){return e(a)}))),u})),u?Promise.resolve({valid:!1,errors:s,id:e.id,field:e.name,scope:e.scope}):Promise.all(o).then((function(t){return t.reduce((function(e,t){var n;return t.valid||(n=e.errors).push.apply(n,t.errors),e.valid=e.valid&&t.valid,e}),{valid:!0,errors:s,id:e.id,field:e.name,scope:e.scope})}))},Object.defineProperties(Ye.prototype,Se),Object.defineProperties(Ye,je);var Oe=function(e){return L(e)?Object.keys(e).reduce((function(t,n){return t[n]=Oe(e[n]),t}),{}):x(e)?e("{0}",["{1}","{2}","{3}"]):e},Ee=function(e,t){this.i18n=e,this.rootKey=t},Ce={locale:{configurable:!0}};Ce.locale.get=function(){return this.i18n.locale},Ce.locale.set=function(e){M("Cannot set locale from the validator when using vue-i18n, use i18n.locale setter instead")},Ee.prototype.getDateFormat=function(e){return this.i18n.getDateTimeFormat(e||this.locale)},Ee.prototype.setDateFormat=function(e,t){this.i18n.setDateTimeFormat(e||this.locale,t)},Ee.prototype.getMessage=function(e,t,n){var r=this.rootKey+".messages."+t,i=n;return Array.isArray(n)&&(i=[].concat.apply([],n)),this.i18n.te(r)?this.i18n.t(r,i):this.i18n.te(r,this.i18n.fallbackLocale)?this.i18n.t(r,this.i18n.fallbackLocale,i):this.i18n.t(this.rootKey+".messages._default",i)},Ee.prototype.getAttribute=function(e,t,n){void 0===n&&(n="");var r=this.rootKey+".attributes."+t;return this.i18n.te(r)?this.i18n.t(r):n},Ee.prototype.getFieldMessage=function(e,t,n,r){var i=this.rootKey+".custom."+t+"."+n;return this.i18n.te(i)?this.i18n.t(i,r):this.getMessage(e,n,r)},Ee.prototype.merge=function(e){var t=this;Object.keys(e).forEach((function(n){var r,i=N({},y(n+"."+t.rootKey,t.i18n.messages,{})),a=N(i,function(e){var t={};return e.messages&&(t.messages=Oe(e.messages)),e.custom&&(t.custom=Oe(e.custom)),e.attributes&&(t.attributes=e.attributes),m(e.dateFormat)||(t.dateFormat=e.dateFormat),t}(e[n]));t.i18n.mergeLocaleMessage(n,((r={})[t.rootKey]=a,r)),a.dateFormat&&t.i18n.setDateTimeFormat(n,a.dateFormat)}))},Ee.prototype.setMessage=function(e,t,n){var r,i;this.merge(((i={})[e]={messages:(r={},r[t]=n,r)},i))},Ee.prototype.setAttribute=function(e,t,n){var r,i;this.merge(((i={})[e]={attributes:(r={},r[t]=n,r)},i))},Object.defineProperties(Ee.prototype,Ce);var Ae,He,Pe,Ne={aggressive:function(){return{on:["input"]}},eager:function(e){return e.errors.length?{on:["input"]}:{on:["change","blur"]}},passive:function(){return{on:[]}},lazy:function(){return{on:["change"]}}},$e=function(e,t){var n;this.configure(e),Pe=this,t&&(Ae=t),this._validator=(n=new Ye(null,{fastExit:e&&e.fastExit},this),ke=n,n),this._initVM(this.config),this._initI18n(this.config)},Ie={i18nDriver:{configurable:!0},config:{configurable:!0}},Fe={i18nDriver:{configurable:!0},config:{configurable:!0}};$e.setI18nDriver=function(e,t){G.setDriver(e,t)},$e.configure=function(e){ee(e)},$e.setMode=function(e,t){if(ee({mode:e}),t){if(!x(t))throw new Error("A mode implementation must be a function");Ne[e]=t}},$e.use=function(e,t){return void 0===t&&(t={}),x(e)?Pe?void e({Validator:Ye,ErrorBag:X,Rules:Ye.rules},t):(He||(He=[]),void He.push({plugin:e,options:t})):M("The plugin must be a callable function")},$e.install=function(e,t){Ae&&e===Ae||(Ae=e,Pe=new $e(t),Ye.$vee=Pe,function(){try{var e=Object.defineProperty({},"passive",{get:function(){pe=!0}});window.addEventListener("testPassive",null,e),window.removeEventListener("testPassive",null,e)}catch(e){pe=!1}}(),Ae.mixin(xe),Ae.directive("validate",Te),He&&(He.forEach((function(e){var t=e.plugin,n=e.options;$e.use(t,n)})),He=null))},Ie.i18nDriver.get=function(){return G.getDriver()},Fe.i18nDriver.get=function(){return G.getDriver()},Ie.config.get=function(){return Q()},Fe.config.get=function(){return Q()},$e.prototype._initVM=function(e){var t=this;this._vm=new Ae({data:function(){return{errors:t._validator.errors,fields:t._validator.fields}}})},$e.prototype._initI18n=function(e){var t=this,n=e.dictionary,r=e.i18n,i=e.i18nRootKey,a=e.locale,o=function(){n&&t.i18nDriver.merge(n),t._validator.errors.regenerate()};r?($e.setI18nDriver("i18n",new Ee(r,i)),r._vm.$watch("locale",o)):"undefined"!=typeof window&&this._vm.$on("localeChanged",o),n&&this.i18nDriver.merge(n),a&&!r&&this._validator.localize(a)},$e.prototype.configure=function(e){ee(e)},Object.defineProperties($e.prototype,Ie),Object.defineProperties($e,Fe),$e.mixin=xe,$e.directive=Te,$e.Validator=Ye,$e.ErrorBag=X;var We,Re={_default:function(e){return"The "+e+" value is not valid"},after:function(e,t){var n=t[0];return"The "+e+" must be after "+(t[1]?"or equal to ":"")+n},alpha:function(e){return"The "+e+" field may only contain alphabetic characters"},alpha_dash:function(e){return"The "+e+" field may contain alpha-numeric characters as well as dashes and underscores"},alpha_num:function(e){return"The "+e+" field may only contain alpha-numeric characters"},alpha_spaces:function(e){return"The "+e+" field may only contain alphabetic characters as well as spaces"},before:function(e,t){var n=t[0];return"The "+e+" must be before "+(t[1]?"or equal to ":"")+n},between:function(e,t){return"The "+e+" field must be between "+t[0]+" and "+t[1]},confirmed:function(e){return"The "+e+" confirmation does not match"},credit_card:function(e){return"The "+e+" field is invalid"},date_between:function(e,t){return"The "+e+" must be between "+t[0]+" and "+t[1]},date_format:function(e,t){return"The "+e+" must be in the format "+t[0]},decimal:function(e,t){void 0===t&&(t=[]);var n=t[0];return void 0===n&&(n="*"),"The "+e+" field must be numeric and may contain"+(n&&"*"!==n?" "+n:"")+" decimal points"},digits:function(e,t){return"The "+e+" field must be numeric and contains exactly "+t[0]+" digits"},dimensions:function(e,t){return"The "+e+" field must be "+t[0]+" pixels by "+t[1]+" pixels"},email:function(e){return"The "+e+" field must be a valid email"},excluded:function(e){return"The "+e+" field must be a valid value"},ext:function(e){return"The "+e+" field must be a valid file"},image:function(e){return"The "+e+" field must be an image"},included:function(e){return"The "+e+" field must be a valid value"},integer:function(e){return"The "+e+" field must be an integer"},ip:function(e){return"The "+e+" field must be a valid ip address"},ip_or_fqdn:function(e){return"The "+e+" field must be a valid ip address or FQDN"},length:function(e,t){var n=t[0],r=t[1];return r?"The "+e+" length must be between "+n+" and "+r:"The "+e+" length must be "+n},max:function(e,t){return"The "+e+" field may not be greater than "+t[0]+" characters"},max_value:function(e,t){return"The "+e+" field must be "+t[0]+" or less"},mimes:function(e){return"The "+e+" field must have a valid file type"},min:function(e,t){return"The "+e+" field must be at least "+t[0]+" characters"},min_value:function(e,t){return"The "+e+" field must be "+t[0]+" or more"},numeric:function(e){return"The "+e+" field may only contain numeric characters"},regex:function(e){return"The "+e+" field format is invalid"},required:function(e){return"The "+e+" field is required"},required_if:function(e,t){return"The "+e+" field is required when the "+t[0]+" field has this value"},size:function(e,t){return"The "+e+" size must be less than "+function(e){var t=1024,n=0==(e=Number(e)*t)?0:Math.floor(Math.log(e)/Math.log(t));return 1*(e/Math.pow(t,n)).toFixed(2)+" "+["Byte","KB","MB","GB","TB","PB","EB","ZB","YB"][n]}(t[0])},url:function(e){return"The "+e+" field is not a valid URL"}},ze={name:"en",messages:Re,attributes:{}};function Be(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}"undefined"!=typeof VeeValidate&&VeeValidate.Validator.localize(((We={})[ze.name]=ze,We));function Ve(e){var t=new Date(e.getTime()),n=t.getTimezoneOffset();return t.setSeconds(0,0),6e4*n+t.getTime()%6e4}var Ue=36e5,qe=6e4,Je={dateTimeDelimeter:/[T ]/,plainTime:/:/,timeZoneDelimeter:/[Z ]/i,YY:/^(\d{2})$/,YYY:[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],YYYY:/^(\d{4})/,YYYYY:[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],MM:/^-(\d{2})$/,DDD:/^-?(\d{3})$/,MMDD:/^-?(\d{2})-?(\d{2})$/,Www:/^-?W(\d{2})$/,WwwD:/^-?W(\d{2})-?(\d{1})$/,HH:/^(\d{2}([.,]\d*)?)$/,HHMM:/^(\d{2}):?(\d{2}([.,]\d*)?)$/,HHMMSS:/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,timezone:/([Z+-].*)$/,timezoneZ:/^(Z)$/,timezoneHH:/^([+-])(\d{2})$/,timezoneHHMM:/^([+-])(\d{2}):?(\d{2})$/};function Ge(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");if(null===e)return new Date(NaN);var n=t||{},r=null==n.additionalDigits?2:Be(n.additionalDigits);if(2!==r&&1!==r&&0!==r)throw new RangeError("additionalDigits must be 0, 1 or 2");if(e instanceof Date||"object"==typeof e&&"[object Date]"===Object.prototype.toString.call(e))return new Date(e.getTime());if("number"==typeof e||"[object Number]"===Object.prototype.toString.call(e))return new Date(e);if("string"!=typeof e&&"[object String]"!==Object.prototype.toString.call(e))return new Date(NaN);var i=Xe(e),a=Ze(i.date,r),o=a.year,s=a.restDateString,u=Ke(s,o);if(isNaN(u))return new Date(NaN);if(u){var l,c=u.getTime(),d=0;if(i.time&&(d=Qe(i.time),isNaN(d)))return new Date(NaN);if(i.timezone){if(l=et(i.timezone),isNaN(l))return new Date(NaN)}else l=Ve(new Date(c+d)),l=Ve(new Date(c+d+l));return new Date(c+d+l)}return new Date(NaN)}function Xe(e){var t,n={},r=e.split(Je.dateTimeDelimeter);if(Je.plainTime.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1],Je.timeZoneDelimeter.test(n.date)&&(n.date=e.split(Je.timeZoneDelimeter)[0],t=e.substr(n.date.length,e.length))),t){var i=Je.timezone.exec(t);i?(n.time=t.replace(i[1],""),n.timezone=i[1]):n.time=t}return n}function Ze(e,t){var n,r=Je.YYY[t],i=Je.YYYYY[t];if(n=Je.YYYY.exec(e)||i.exec(e)){var a=n[1];return{year:parseInt(a,10),restDateString:e.slice(a.length)}}if(n=Je.YY.exec(e)||r.exec(e)){var o=n[1];return{year:100*parseInt(o,10),restDateString:e.slice(o.length)}}return{year:null}}function Ke(e,t){if(null===t)return null;var n,r,i,a;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=Je.MM.exec(e))return r=new Date(0),at(t,i=parseInt(n[1],10)-1)?(r.setUTCFullYear(t,i),r):new Date(NaN);if(n=Je.DDD.exec(e)){r=new Date(0);var o=parseInt(n[1],10);return function(e,t){if(t<1)return!1;var n=it(e);if(n&&t>366)return!1;if(!n&&t>365)return!1;return!0}(t,o)?(r.setUTCFullYear(t,0,o),r):new Date(NaN)}if(n=Je.MMDD.exec(e)){r=new Date(0),i=parseInt(n[1],10)-1;var s=parseInt(n[2],10);return at(t,i,s)?(r.setUTCFullYear(t,i,s),r):new Date(NaN)}if(n=Je.Www.exec(e))return ot(t,a=parseInt(n[1],10)-1)?tt(t,a):new Date(NaN);if(n=Je.WwwD.exec(e)){a=parseInt(n[1],10)-1;var u=parseInt(n[2],10)-1;return ot(t,a,u)?tt(t,a,u):new Date(NaN)}return null}function Qe(e){var t,n,r;if(t=Je.HH.exec(e))return st(n=parseFloat(t[1].replace(",",".")))?n%24*Ue:NaN;if(t=Je.HHMM.exec(e))return st(n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")))?n%24*Ue+r*qe:NaN;if(t=Je.HHMMSS.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var i=parseFloat(t[3].replace(",","."));return st(n,r,i)?n%24*Ue+r*qe+1e3*i:NaN}return null}function et(e){var t,n,r;if(t=Je.timezoneZ.exec(e))return 0;if(t=Je.timezoneHH.exec(e))return r=parseInt(t[2],10),ut()?(n=r*Ue,"+"===t[1]?-n:n):NaN;if(t=Je.timezoneHHMM.exec(e)){r=parseInt(t[2],10);var i=parseInt(t[3],10);return ut(r,i)?(n=r*Ue+i*qe,"+"===t[1]?-n:n):NaN}return 0}function tt(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var i=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+i),r}var nt=[31,28,31,30,31,30,31,31,30,31,30,31],rt=[31,29,31,30,31,30,31,31,30,31,30,31];function it(e){return e%400==0||e%4==0&&e%100!=0}function at(e,t,n){if(t<0||t>11)return!1;if(null!=n){if(n<1)return!1;var r=it(e);if(r&&n>rt[t])return!1;if(!r&&n>nt[t])return!1}return!0}function ot(e,t,n){return!(t<0||t>52)&&(null==n||!(n<0||n>6))}function st(e,t,n){return(null==e||!(e<0||e>=25))&&((null==t||!(t<0||t>=60))&&(null==n||!(n<0||n>=60)))}function ut(e,t){return null==t||!(t<0||t>59)}function lt(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Ge(e,n).getTime(),i=Be(t);return new Date(r+i)}function ct(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=Ge(e,t);return!isNaN(n)}var dt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function ft(e){return function(t){var n=t||{},r=n.width?String(n.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}var ht={date:ft({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:ft({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:ft({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},pt={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function mt(e){return function(t,n){var r=n||{},i=r.width?String(r.width):e.defaultWidth;return("formatting"===(r.context?String(r.context):"standalone")&&e.formattingValues?e.formattingValues[i]||e.formattingValues[e.defaultFormattingWidth]:e.values[i]||e.values[e.defaultWidth])[e.argumentCallback?e.argumentCallback(t):t]}}var vt={ordinalNumber:function(e,t){var n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:mt({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:mt({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return Number(e)-1}}),month:mt({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:mt({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:mt({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaulFormattingWidth:"wide"})};function _t(e){return function(t,n){var r=String(t),i=n||{},a=i.width,o=a&&e.matchPatterns[a]||e.matchPatterns[e.defaultMatchWidth],s=r.match(o);if(!s)return null;var u,l=s[0],c=a&&e.parsePatterns[a]||e.parsePatterns[e.defaultParseWidth];return u="[object Array]"===Object.prototype.toString.call(c)?c.findIndex((function(e){return e.test(r)})):function(e,t){for(var n in e)if(e.hasOwnProperty(n)&&t(e[n]))return n}(c,(function(e){return e.test(r)})),u=e.valueCallback?e.valueCallback(u):u,{value:u=i.valueCallback?i.valueCallback(u):u,rest:r.slice(l.length)}}}var yt,gt={ordinalNumber:(yt={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}},function(e,t){var n=String(e),r=t||{},i=n.match(yt.matchPattern);if(!i)return null;var a=i[0],o=n.match(yt.parsePattern);if(!o)return null;var s=yt.valueCallback?yt.valueCallback(o[0]):o[0];return{value:s=r.valueCallback?r.valueCallback(s):s,rest:n.slice(a.length)}}),era:_t({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:_t({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:_t({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:_t({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:_t({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},bt={formatDistance:function(e,t,n){var r;return n=n||{},r="string"==typeof dt[e]?dt[e]:1===t?dt[e].one:dt[e].other.replace("{{count}}",t),n.addSuffix?n.comparison>0?"in "+r:r+" ago":r},formatLong:ht,formatRelative:function(e,t,n,r){return pt[e]},localize:vt,match:gt,options:{weekStartsOn:0,firstWeekContainsDate:1}},wt=864e5;function Mt(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=1,r=Ge(e,t),i=r.getUTCDay(),a=(i=a.getTime()?r+1:n.getTime()>=s.getTime()?r:r-1}function Lt(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=kt(e,t),r=new Date(0);r.setUTCFullYear(n,0,4),r.setUTCHours(0,0,0,0);var i=Mt(r,t);return i}var xt=6048e5;function Dt(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=Ge(e,t),r=Mt(n,t).getTime()-Lt(n,t).getTime();return Math.round(r/xt)+1}function Tt(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=t||{},r=n.locale,i=r&&r.options&&r.options.weekStartsOn,a=null==i?0:Be(i),o=null==n.weekStartsOn?a:Be(n.weekStartsOn);if(!(o>=0&&o<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var s=Ge(e,n),u=s.getUTCDay(),l=(u=1&&u<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var l=new Date(0);l.setUTCFullYear(r+1,0,u),l.setUTCHours(0,0,0,0);var c=Tt(l,t),d=new Date(0);d.setUTCFullYear(r,0,u),d.setUTCHours(0,0,0,0);var f=Tt(d,t);return n.getTime()>=c.getTime()?r+1:n.getTime()>=f.getTime()?r:r-1}function St(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=t||{},r=n.locale,i=r&&r.options&&r.options.firstWeekContainsDate,a=null==i?1:Be(i),o=null==n.firstWeekContainsDate?a:Be(n.firstWeekContainsDate),s=Yt(e,t),u=new Date(0);u.setUTCFullYear(s,0,o),u.setUTCHours(0,0,0,0);var l=Tt(u,t);return l}var jt=6048e5;function Ot(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=Ge(e,t),r=Tt(n,t).getTime()-St(n,t).getTime();return Math.round(r/jt)+1}var Et="midnight",Ct="noon",At="morning",Ht="afternoon",Pt="evening",Nt="night",$t={G:function(e,t,n){var r=e.getUTCFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n,r){var i=e.getUTCFullYear(),a=i>0?i:1-i;return"yy"===t?It(a%100,2):"yo"===t?n.ordinalNumber(a,{unit:"year"}):It(a,t.length)},Y:function(e,t,n,r){var i=Yt(e,r),a=i>0?i:1-i;return"YY"===t?It(a%100,2):"Yo"===t?n.ordinalNumber(a,{unit:"year"}):It(a,t.length)},R:function(e,t,n,r){return It(kt(e,r),t.length)},u:function(e,t,n,r){return It(e.getUTCFullYear(),t.length)},Q:function(e,t,n,r){var i=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(i);case"QQ":return It(i,2);case"Qo":return n.ordinalNumber(i,{unit:"quarter"});case"QQQ":return n.quarter(i,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(i,{width:"narrow",context:"formatting"});default:return n.quarter(i,{width:"wide",context:"formatting"})}},q:function(e,t,n,r){var i=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(i);case"qq":return It(i,2);case"qo":return n.ordinalNumber(i,{unit:"quarter"});case"qqq":return n.quarter(i,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(i,{width:"narrow",context:"standalone"});default:return n.quarter(i,{width:"wide",context:"standalone"})}},M:function(e,t,n,r){var i=e.getUTCMonth();switch(t){case"M":return String(i+1);case"MM":return It(i+1,2);case"Mo":return n.ordinalNumber(i+1,{unit:"month"});case"MMM":return n.month(i,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(i,{width:"narrow",context:"formatting"});default:return n.month(i,{width:"wide",context:"formatting"})}},L:function(e,t,n,r){var i=e.getUTCMonth();switch(t){case"L":return String(i+1);case"LL":return It(i+1,2);case"Lo":return n.ordinalNumber(i+1,{unit:"month"});case"LLL":return n.month(i,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(i,{width:"narrow",context:"standalone"});default:return n.month(i,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){var i=Ot(e,r);return"wo"===t?n.ordinalNumber(i,{unit:"week"}):It(i,t.length)},I:function(e,t,n,r){var i=Dt(e,r);return"Io"===t?n.ordinalNumber(i,{unit:"week"}):It(i,t.length)},d:function(e,t,n,r){var i=e.getUTCDate();return"do"===t?n.ordinalNumber(i,{unit:"date"}):It(i,t.length)},D:function(e,t,n,r){var i=function(e,t){if(arguments.length<1)throw new TypeError("1 argument required, but only "+arguments.length+" present");var n=Ge(e,t),r=n.getTime();n.setUTCMonth(0,1),n.setUTCHours(0,0,0,0);var i=n.getTime(),a=r-i;return Math.floor(a/wt)+1}(e,r);return"Do"===t?n.ordinalNumber(i,{unit:"dayOfYear"}):It(i,t.length)},E:function(e,t,n,r){var i=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return n.day(i,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(i,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(i,{width:"short",context:"formatting"});default:return n.day(i,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){var i=e.getUTCDay(),a=(i-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return It(a,2);case"eo":return n.ordinalNumber(a,{unit:"day"});case"eee":return n.day(i,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(i,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(i,{width:"short",context:"formatting"});default:return n.day(i,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){var i=e.getUTCDay(),a=(i-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return It(a,t.length);case"co":return n.ordinalNumber(a,{unit:"day"});case"ccc":return n.day(i,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(i,{width:"narrow",context:"standalone"});case"cccccc":return n.day(i,{width:"short",context:"standalone"});default:return n.day(i,{width:"wide",context:"standalone"})}},i:function(e,t,n,r){var i=e.getUTCDay(),a=0===i?7:i;switch(t){case"i":return String(a);case"ii":return It(a,t.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(i,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(i,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(i,{width:"short",context:"formatting"});default:return n.day(i,{width:"wide",context:"formatting"})}},a:function(e,t,n){var r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){var r,i=e.getUTCHours();switch(r=12===i?Ct:0===i?Et:i/12>=1?"pm":"am",t){case"b":case"bb":case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(e,t,n){var r,i=e.getUTCHours();switch(r=i>=17?Pt:i>=12?Ht:i>=4?At:Nt,t){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(e,t,n,r){var i=e.getUTCHours()%12;return 0===i&&(i=12),"ho"===t?n.ordinalNumber(i,{unit:"hour"}):It(i,t.length)},H:function(e,t,n,r){var i=e.getUTCHours();return"Ho"===t?n.ordinalNumber(i,{unit:"hour"}):It(i,t.length)},K:function(e,t,n,r){var i=e.getUTCHours()%12;return"Ko"===t?n.ordinalNumber(i,{unit:"hour"}):It(i,t.length)},k:function(e,t,n,r){var i=e.getUTCHours();return 0===i&&(i=24),"ko"===t?n.ordinalNumber(i,{unit:"hour"}):It(i,t.length)},m:function(e,t,n,r){var i=e.getUTCMinutes();return"mo"===t?n.ordinalNumber(i,{unit:"minute"}):It(i,t.length)},s:function(e,t,n,r){var i=e.getUTCSeconds();return"so"===t?n.ordinalNumber(i,{unit:"second"}):It(i,t.length)},S:function(e,t,n,r){var i=t.length,a=e.getUTCMilliseconds();return It(Math.floor(a*Math.pow(10,i-3)),i)},X:function(e,t,n,r){var i=(r._originalDate||e).getTimezoneOffset();if(0===i)return"Z";switch(t){case"X":return Wt(i);case"XXXX":case"XX":return Ft(i);default:return Ft(i,":")}},x:function(e,t,n,r){var i=(r._originalDate||e).getTimezoneOffset();switch(t){case"x":return Wt(i);case"xxxx":case"xx":return Ft(i);default:return Ft(i,":")}},O:function(e,t,n,r){var i=(r._originalDate||e).getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+Rt(i,":");default:return"GMT"+Ft(i,":")}},z:function(e,t,n,r){var i=(r._originalDate||e).getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+Rt(i,":");default:return"GMT"+Ft(i,":")}},t:function(e,t,n,r){var i=r._originalDate||e;return It(Math.floor(i.getTime()/1e3),t.length)},T:function(e,t,n,r){return It((r._originalDate||e).getTime(),t.length)}};function It(e,t){for(var n=e<0?"-":"",r=Math.abs(e).toString();r.length0?"-":"+",i=Math.abs(e);return r+It(Math.floor(i/60),2)+n+It(i%60,2)}function Wt(e,t){return e%60==0?(e>0?"-":"+")+It(Math.abs(e)/60,2):Ft(e,t)}function Rt(e,t){var n=e>0?"-":"+",r=Math.abs(e),i=Math.floor(r/60),a=r%60;if(0===a)return n+String(i);var o=t||"";return n+String(i)+o+It(a,2)}function zt(e,t,n){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}}function Bt(e,t,n){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}}var Vt={p:Bt,P:function(e,t,n){var r,i=e.match(/(P+)(p+)?/),a=i[1],o=i[2];if(!o)return zt(e,t);switch(a){case"P":r=t.dateTime({width:"short"});break;case"PP":r=t.dateTime({width:"medium"});break;case"PPP":r=t.dateTime({width:"long"});break;default:r=t.dateTime({width:"full"})}return r.replace("{{date}}",zt(a,t)).replace("{{time}}",Bt(o,t))}};function Ut(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Be(t);return lt(e,-r,n)}var qt=["D","DD","YY","YYYY"];function Jt(e){return-1!==qt.indexOf(e)}function Gt(e){throw new RangeError("`options.awareOfUnicodeTokens` must be set to `true` to use `"+e+"` token; see: https://git.io/fxCyr")}var Xt=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Zt=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,Kt=/^'(.*?)'?$/,Qt=/''/g;function en(e){return e.match(Kt)[1].replace(Qt,"'")}function tn(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Ge(e,n),i=Ge(t,n);return r.getTime()>i.getTime()}function nn(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Ge(e,n),i=Ge(t,n);return r.getTime()=0&&s<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var u=Ge(e,n),l=Be(t),c=u.getUTCDay(),d=l%7,f=(d+7)%7,h=(f0,i=r?t:1-t;if(i<=50)n=e||100;else{var a=i+50;n=e+100*Math.floor(a/100)-(e>=a%100?100:0)}return r?n:1-n}var Nn=[31,28,31,30,31,30,31,31,30,31,30,31],$n=[31,29,31,30,31,30,31,31,30,31,30,31];function In(e){return e%400==0||e%4==0&&e%100!=0}var Fn={G:{priority:140,parse:function(e,t,n,r){switch(t){case"G":case"GG":case"GGG":return n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"});case"GGGGG":return n.era(e,{width:"narrow"});default:return n.era(e,{width:"wide"})||n.era(e,{width:"abbreviated"})||n.era(e,{width:"narrow"})}},set:function(e,t,n){return e.setUTCFullYear(1===t?10:-9,0,1),e.setUTCHours(0,0,0,0),e}},y:{priority:130,parse:function(e,t,n,r){var i=function(e){return{year:e,isTwoDigitYear:"yy"===t}};switch(t){case"y":return Cn(4,e,i);case"yo":return n.ordinalNumber(e,{unit:"year",valueCallback:i});default:return Cn(t.length,e,i)}},validate:function(e,t,n){return t.isTwoDigitYear||t.year>0},set:function(e,t,n){var r=Yt(e,n);if(t.isTwoDigitYear){var i=Pn(t.year,r);return e.setUTCFullYear(i,0,1),e.setUTCHours(0,0,0,0),e}var a=r>0?t.year:1-t.year;return e.setUTCFullYear(a,0,1),e.setUTCHours(0,0,0,0),e}},Y:{priority:130,parse:function(e,t,n,r){var i=function(e){return{year:e,isTwoDigitYear:"YY"===t}};switch(t){case"Y":return Cn(4,e,i);case"Yo":return n.ordinalNumber(e,{unit:"year",valueCallback:i});default:return Cn(t.length,e,i)}},validate:function(e,t,n){return t.isTwoDigitYear||t.year>0},set:function(e,t,n){var r=e.getUTCFullYear();if(t.isTwoDigitYear){var i=Pn(t.year,r);return e.setUTCFullYear(i,0,n.firstWeekContainsDate),e.setUTCHours(0,0,0,0),Tt(e,n)}var a=r>0?t.year:1-t.year;return e.setUTCFullYear(a,0,n.firstWeekContainsDate),e.setUTCHours(0,0,0,0),Tt(e,n)}},R:{priority:130,parse:function(e,t,n,r){return An("R"===t?4:t.length,e)},set:function(e,t,n){var r=new Date(0);return r.setUTCFullYear(t,0,4),r.setUTCHours(0,0,0,0),Mt(r)}},u:{priority:130,parse:function(e,t,n,r){return An("u"===t?4:t.length,e)},set:function(e,t,n){return e.setUTCFullYear(t,0,1),e.setUTCHours(0,0,0,0),e}},Q:{priority:120,parse:function(e,t,n,r){switch(t){case"Q":case"QQ":return Cn(t.length,e);case"Qo":return n.ordinalNumber(e,{unit:"quarter"});case"QQQ":return n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"});case"QQQQQ":return n.quarter(e,{width:"narrow",context:"formatting"});default:return n.quarter(e,{width:"wide",context:"formatting"})||n.quarter(e,{width:"abbreviated",context:"formatting"})||n.quarter(e,{width:"narrow",context:"formatting"})}},validate:function(e,t,n){return t>=1&&t<=4},set:function(e,t,n){return e.setUTCMonth(3*(t-1),1),e.setUTCHours(0,0,0,0),e}},q:{priority:120,parse:function(e,t,n,r){switch(t){case"q":case"qq":return Cn(t.length,e);case"qo":return n.ordinalNumber(e,{unit:"quarter"});case"qqq":return n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"});case"qqqqq":return n.quarter(e,{width:"narrow",context:"standalone"});default:return n.quarter(e,{width:"wide",context:"standalone"})||n.quarter(e,{width:"abbreviated",context:"standalone"})||n.quarter(e,{width:"narrow",context:"standalone"})}},validate:function(e,t,n){return t>=1&&t<=4},set:function(e,t,n){return e.setUTCMonth(3*(t-1),1),e.setUTCHours(0,0,0,0),e}},M:{priority:110,parse:function(e,t,n,r){var i=function(e){return e-1};switch(t){case"M":return jn(on,e,i);case"MM":return Cn(2,e,i);case"Mo":return n.ordinalNumber(e,{unit:"month",valueCallback:i});case"MMM":return n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"});case"MMMMM":return n.month(e,{width:"narrow",context:"formatting"});default:return n.month(e,{width:"wide",context:"formatting"})||n.month(e,{width:"abbreviated",context:"formatting"})||n.month(e,{width:"narrow",context:"formatting"})}},validate:function(e,t,n){return t>=0&&t<=11},set:function(e,t,n){return e.setUTCMonth(t,1),e.setUTCHours(0,0,0,0),e}},L:{priority:110,parse:function(e,t,n,r){var i=function(e){return e-1};switch(t){case"L":return jn(on,e,i);case"LL":return Cn(2,e,i);case"Lo":return n.ordinalNumber(e,{unit:"month",valueCallback:i});case"LLL":return n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"});case"LLLLL":return n.month(e,{width:"narrow",context:"standalone"});default:return n.month(e,{width:"wide",context:"standalone"})||n.month(e,{width:"abbreviated",context:"standalone"})||n.month(e,{width:"narrow",context:"standalone"})}},validate:function(e,t,n){return t>=0&&t<=11},set:function(e,t,n){return e.setUTCMonth(t,1),e.setUTCHours(0,0,0,0),e}},w:{priority:100,parse:function(e,t,n,r){switch(t){case"w":return jn(ln,e);case"wo":return n.ordinalNumber(e,{unit:"week"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=1&&t<=53},set:function(e,t,n){return Tt(function(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Ge(e,n),i=Be(t),a=Ot(r,n)-i;return r.setUTCDate(r.getUTCDate()-7*a),r}(e,t,n),n)}},I:{priority:100,parse:function(e,t,n,r){switch(t){case"I":return jn(ln,e);case"Io":return n.ordinalNumber(e,{unit:"week"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=1&&t<=53},set:function(e,t,n){return Mt(function(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Ge(e,n),i=Be(t),a=Dt(r,n)-i;return r.setUTCDate(r.getUTCDate()-7*a),r}(e,t,n),n)}},d:{priority:90,parse:function(e,t,n,r){switch(t){case"d":return jn(sn,e);case"do":return n.ordinalNumber(e,{unit:"date"});default:return Cn(t.length,e)}},validate:function(e,t,n){var r=In(e.getUTCFullYear()),i=e.getUTCMonth();return r?t>=1&&t<=$n[i]:t>=1&&t<=Nn[i]},set:function(e,t,n){return e.setUTCDate(t),e.setUTCHours(0,0,0,0),e}},D:{priority:90,parse:function(e,t,n,r){switch(t){case"D":case"DD":return jn(un,e);case"Do":return n.ordinalNumber(e,{unit:"date"});default:return Cn(t.length,e)}},validate:function(e,t,n){return In(e.getUTCFullYear())?t>=1&&t<=366:t>=1&&t<=365},set:function(e,t,n){return e.setUTCMonth(0,t),e.setUTCHours(0,0,0,0),e}},E:{priority:90,parse:function(e,t,n,r){switch(t){case"E":case"EE":case"EEE":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"EEEEE":return n.day(e,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}},validate:function(e,t,n){return t>=0&&t<=6},set:function(e,t,n){return(e=an(e,t,n)).setUTCHours(0,0,0,0),e}},e:{priority:90,parse:function(e,t,n,r){var i=function(e){var t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"e":case"ee":return Cn(t.length,e,i);case"eo":return n.ordinalNumber(e,{unit:"day",valueCallback:i});case"eee":return n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});case"eeeee":return n.day(e,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"});default:return n.day(e,{width:"wide",context:"formatting"})||n.day(e,{width:"abbreviated",context:"formatting"})||n.day(e,{width:"short",context:"formatting"})||n.day(e,{width:"narrow",context:"formatting"})}},validate:function(e,t,n){return t>=0&&t<=6},set:function(e,t,n){return(e=an(e,t,n)).setUTCHours(0,0,0,0),e}},c:{priority:90,parse:function(e,t,n,r){var i=function(e){var t=7*Math.floor((e-1)/7);return(e+r.weekStartsOn+6)%7+t};switch(t){case"c":case"cc":return Cn(t.length,e,i);case"co":return n.ordinalNumber(e,{unit:"day",valueCallback:i});case"ccc":return n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});case"ccccc":return n.day(e,{width:"narrow",context:"standalone"});case"cccccc":return n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"});default:return n.day(e,{width:"wide",context:"standalone"})||n.day(e,{width:"abbreviated",context:"standalone"})||n.day(e,{width:"short",context:"standalone"})||n.day(e,{width:"narrow",context:"standalone"})}},validate:function(e,t,n){return t>=0&&t<=6},set:function(e,t,n){return(e=an(e,t,n)).setUTCHours(0,0,0,0),e}},i:{priority:90,parse:function(e,t,n,r){var i=function(e){return 0===e?7:e};switch(t){case"i":case"ii":return Cn(t.length,e);case"io":return n.ordinalNumber(e,{unit:"day"});case"iii":return n.day(e,{width:"abbreviated",context:"formatting",valueCallback:i})||n.day(e,{width:"short",context:"formatting",valueCallback:i})||n.day(e,{width:"narrow",context:"formatting",valueCallback:i});case"iiiii":return n.day(e,{width:"narrow",context:"formatting",valueCallback:i});case"iiiiii":return n.day(e,{width:"short",context:"formatting",valueCallback:i})||n.day(e,{width:"narrow",context:"formatting",valueCallback:i});default:return n.day(e,{width:"wide",context:"formatting",valueCallback:i})||n.day(e,{width:"abbreviated",context:"formatting",valueCallback:i})||n.day(e,{width:"short",context:"formatting",valueCallback:i})||n.day(e,{width:"narrow",context:"formatting",valueCallback:i})}},validate:function(e,t,n){return t>=1&&t<=7},set:function(e,t,n){return e=function(e,t,n){if(arguments.length<2)throw new TypeError("2 arguments required, but only "+arguments.length+" present");var r=Be(t);r%7==0&&(r-=7);var i=1,a=Ge(e,n),o=a.getUTCDay(),s=((r%7+7)%7=1&&t<=12},set:function(e,t,n){var r=e.getUTCHours()>=12;return r&&t<12?e.setUTCHours(t+12,0,0,0):r||12!==t?e.setUTCHours(t,0,0,0):e.setUTCHours(0,0,0,0),e}},H:{priority:70,parse:function(e,t,n,r){switch(t){case"H":return jn(cn,e);case"Ho":return n.ordinalNumber(e,{unit:"hour"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=0&&t<=23},set:function(e,t,n){return e.setUTCHours(t,0,0,0),e}},K:{priority:70,parse:function(e,t,n,r){switch(t){case"K":return jn(fn,e);case"Ko":return n.ordinalNumber(e,{unit:"hour"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=0&&t<=11},set:function(e,t,n){return e.getUTCHours()>=12&&t<12?e.setUTCHours(t+12,0,0,0):e.setUTCHours(t,0,0,0),e}},k:{priority:70,parse:function(e,t,n,r){switch(t){case"k":return jn(dn,e);case"ko":return n.ordinalNumber(e,{unit:"hour"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=1&&t<=24},set:function(e,t,n){var r=t<=24?t%24:t;return e.setUTCHours(r,0,0,0),e}},m:{priority:60,parse:function(e,t,n,r){switch(t){case"m":return jn(pn,e);case"mo":return n.ordinalNumber(e,{unit:"minute"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=0&&t<=59},set:function(e,t,n){return e.setUTCMinutes(t,0,0),e}},s:{priority:50,parse:function(e,t,n,r){switch(t){case"s":return jn(mn,e);case"so":return n.ordinalNumber(e,{unit:"second"});default:return Cn(t.length,e)}},validate:function(e,t,n){return t>=0&&t<=59},set:function(e,t,n){return e.setUTCSeconds(t,0),e}},S:{priority:40,parse:function(e,t,n,r){return Cn(t.length,e,(function(e){return Math.floor(e*Math.pow(10,3-t.length))}))},set:function(e,t,n){return e.setUTCMilliseconds(t),e}},X:{priority:20,parse:function(e,t,n,r){switch(t){case"X":return On(xn,e);case"XX":return On(Dn,e);case"XXXX":return On(Tn,e);case"XXXXX":return On(Sn,e);default:return On(Yn,e)}},set:function(e,t,n){return new Date(e.getTime()-t)}},x:{priority:20,parse:function(e,t,n,r){switch(t){case"x":return On(xn,e);case"xx":return On(Dn,e);case"xxxx":return On(Tn,e);case"xxxxx":return On(Sn,e);default:return On(Yn,e)}},set:function(e,t,n){return new Date(e.getTime()-t)}},t:{priority:10,parse:function(e,t,n,r){return En(e)},set:function(e,t,n){return new Date(1e3*t)}},T:{priority:10,parse:function(e,t,n,r){return En(e)},set:function(e,t,n){return new Date(t)}}},Wn=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Rn=/^'(.*?)'?$/,zn=/''/g,Bn=/\S/;function Vn(e){var t=new Date(0);return t.setFullYear(e.getUTCFullYear(),e.getUTCMonth(),e.getUTCDate()),t.setHours(e.getUTCHours(),e.getUTCMinutes(),e.getUTCSeconds(),e.getUTCMilliseconds()),t}function Un(e){return e.match(Rn)[1].replace(zn,"'")}function qn(e,t){if("string"!=typeof e)return ct(e)?e:null;var n=function(e,t,n,r){if(arguments.length<3)throw new TypeError("3 arguments required, but only "+arguments.length+" present");var i=String(e),a=String(t),o=r||{},s=o.locale||bt;if(!s.match)throw new RangeError("locale must contain match property");var u=s.options&&s.options.firstWeekContainsDate,l=null==u?1:Be(u),c=null==o.firstWeekContainsDate?l:Be(o.firstWeekContainsDate);if(!(c>=1&&c<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var d=s.options&&s.options.weekStartsOn,f=null==d?0:Be(d),h=null==o.weekStartsOn?f:Be(o.weekStartsOn);if(!(h>=0&&h<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(""===a)return""===i?Ge(n,o):new Date(NaN);var p,m={firstWeekContainsDate:c,weekStartsOn:h,locale:s},v=[{priority:20,set:Vn,index:0}],_=a.match(Wn);for(p=0;p<_.length;p++){var y=_[p];!o.awareOfUnicodeTokens&&Jt(y)&&Gt(y);var g=y[0],b=Fn[g];if(b){var w=b.parse(i,y,s.match,m);if(!w)return new Date(NaN);v.push({priority:b.priority,set:b.set,validate:b.validate,value:w.value,index:v.length}),i=w.rest}else{if("''"===y?y="'":"'"===g&&(y=Un(y)),0!==i.indexOf(y))return new Date(NaN);i=i.slice(y.length)}}if(i.length>0&&Bn.test(i))return new Date(NaN);var M=v.map((function(e){return e.priority})).sort((function(e,t){return t-e})).filter((function(e,t,n){return n.indexOf(e)===t})).map((function(e){return v.filter((function(t){return t.priority===e})).reverse()})).map((function(e){return e[0]})),k=Ge(n,o);if(isNaN(k))return new Date(NaN);var L=Ut(k,Ve(k));for(p=0;p=1&&u<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var l=a.options&&a.options.weekStartsOn,c=null==l?0:Be(l),d=null==i.weekStartsOn?c:Be(i.weekStartsOn);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!a.localize)throw new RangeError("locale must contain localize property");if(!a.formatLong)throw new RangeError("locale must contain formatLong property");var f=Ge(e,i);if(!ct(f,i))return"Invalid Date";var h=Ve(f),p=Ut(f,h,i),m={firstWeekContainsDate:u,weekStartsOn:d,locale:a,_originalDate:f};return r.match(Zt).map((function(e){var t=e[0];return"p"===t||"P"===t?(0,Vt[t])(e,a.formatLong,m):e})).join("").match(Xt).map((function(e){if("''"===e)return"'";var t=e[0];if("'"===t)return en(e);var n=$t[t];return n?(!i.awareOfUnicodeTokens&&Jt(e)&&Gt(e),n(p,e,a.localize,m)):e})).join("")}(n,t)===e?n:null}var Jn={validate:function(e,t){void 0===t&&(t={});var n=t.targetValue,r=t.inclusion;void 0===r&&(r=!1);var i=t.format;return void 0===i&&(i=r,r=!1),e=qn(e,i),n=qn(n,i),!(!e||!n)&&(tn(e,n)||r&&rn(e,n))},options:{hasTarget:!0,isDate:!0},paramNames:["targetValue","inclusion","format"]},Gn={en:/^[A-Z]*$/i,cs:/^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]*$/i,da:/^[A-ZÆØÅ]*$/i,de:/^[A-ZÄÖÜß]*$/i,es:/^[A-ZÁÉÍÑÓÚÜ]*$/i,fa:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,fr:/^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]*$/i,it:/^[A-Z\xC0-\xFF]*$/i,lt:/^[A-ZĄČĘĖĮŠŲŪŽ]*$/i,nl:/^[A-ZÉËÏÓÖÜ]*$/i,hu:/^[A-ZÁÉÍÓÖŐÚÜŰ]*$/i,pl:/^[A-ZĄĆĘŚŁŃÓŻŹ]*$/i,pt:/^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]*$/i,ru:/^[А-ЯЁ]*$/i,sk:/^[A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ]*$/i,sr:/^[A-ZČĆŽŠĐ]*$/i,sv:/^[A-ZÅÄÖ]*$/i,tr:/^[A-ZÇĞİıÖŞÜ]*$/i,uk:/^[А-ЩЬЮЯЄІЇҐ]*$/i,ar:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]*$/,az:/^[A-ZÇƏĞİıÖŞÜ]*$/i},Xn={en:/^[A-Z\s]*$/i,cs:/^[A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ\s]*$/i,da:/^[A-ZÆØÅ\s]*$/i,de:/^[A-ZÄÖÜß\s]*$/i,es:/^[A-ZÁÉÍÑÓÚÜ\s]*$/i,fa:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی\s]*$/,fr:/^[A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ\s]*$/i,it:/^[A-Z\xC0-\xFF\s]*$/i,lt:/^[A-ZĄČĘĖĮŠŲŪŽ\s]*$/i,nl:/^[A-ZÉËÏÓÖÜ\s]*$/i,hu:/^[A-ZÁÉÍÓÖŐÚÜŰ\s]*$/i,pl:/^[A-ZĄĆĘŚŁŃÓŻŹ\s]*$/i,pt:/^[A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ\s]*$/i,ru:/^[А-ЯЁ\s]*$/i,sk:/^[A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ\s]*$/i,sr:/^[A-ZČĆŽŠĐ\s]*$/i,sv:/^[A-ZÅÄÖ\s]*$/i,tr:/^[A-ZÇĞİıÖŞÜ\s]*$/i,uk:/^[А-ЩЬЮЯЄІЇҐ\s]*$/i,ar:/^[ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ\s]*$/,az:/^[A-ZÇƏĞİıÖŞÜ\s]*$/i},Zn={en:/^[0-9A-Z]*$/i,cs:/^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ]*$/i,da:/^[0-9A-ZÆØÅ]$/i,de:/^[0-9A-ZÄÖÜß]*$/i,es:/^[0-9A-ZÁÉÍÑÓÚÜ]*$/i,fa:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی]*$/,fr:/^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ]*$/i,it:/^[0-9A-Z\xC0-\xFF]*$/i,lt:/^[0-9A-ZĄČĘĖĮŠŲŪŽ]*$/i,hu:/^[0-9A-ZÁÉÍÓÖŐÚÜŰ]*$/i,nl:/^[0-9A-ZÉËÏÓÖÜ]*$/i,pl:/^[0-9A-ZĄĆĘŚŁŃÓŻŹ]*$/i,pt:/^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ]*$/i,ru:/^[0-9А-ЯЁ]*$/i,sk:/^[0-9A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ]*$/i,sr:/^[0-9A-ZČĆŽŠĐ]*$/i,sv:/^[0-9A-ZÅÄÖ]*$/i,tr:/^[0-9A-ZÇĞİıÖŞÜ]*$/i,uk:/^[0-9А-ЩЬЮЯЄІЇҐ]*$/i,ar:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ]*$/,az:/^[0-9A-ZÇƏĞİıÖŞÜ]*$/i},Kn={en:/^[0-9A-Z_-]*$/i,cs:/^[0-9A-ZÁČĎÉĚÍŇÓŘŠŤÚŮÝŽ_-]*$/i,da:/^[0-9A-ZÆØÅ_-]*$/i,de:/^[0-9A-ZÄÖÜß_-]*$/i,es:/^[0-9A-ZÁÉÍÑÓÚÜ_-]*$/i,fa:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰپژگچکی_-]*$/,fr:/^[0-9A-ZÀÂÆÇÉÈÊËÏÎÔŒÙÛÜŸ_-]*$/i,it:/^[0-9A-Z\xC0-\xFF_-]*$/i,lt:/^[0-9A-ZĄČĘĖĮŠŲŪŽ_-]*$/i,nl:/^[0-9A-ZÉËÏÓÖÜ_-]*$/i,hu:/^[0-9A-ZÁÉÍÓÖŐÚÜŰ_-]*$/i,pl:/^[0-9A-ZĄĆĘŚŁŃÓŻŹ_-]*$/i,pt:/^[0-9A-ZÃÁÀÂÇÉÊÍÕÓÔÚÜ_-]*$/i,ru:/^[0-9А-ЯЁ_-]*$/i,sk:/^[0-9A-ZÁÄČĎÉÍĹĽŇÓŔŠŤÚÝŽ_-]*$/i,sr:/^[0-9A-ZČĆŽŠĐ_-]*$/i,sv:/^[0-9A-ZÅÄÖ_-]*$/i,tr:/^[0-9A-ZÇĞİıÖŞÜ_-]*$/i,uk:/^[0-9А-ЩЬЮЯЄІЇҐ_-]*$/i,ar:/^[٠١٢٣٤٥٦٧٨٩0-9ءآأؤإئابةتثجحخدذرزسشصضطظعغفقكلمنهوىيًٌٍَُِّْٰ_-]*$/,az:/^[0-9A-ZÇƏĞİıÖŞÜ_-]*$/i},Qn=function(e,t){void 0===t&&(t={});var n=t.locale;return Array.isArray(e)?e.every((function(e){return Qn(e,[n])})):n?(Gn[n]||Gn.en).test(e):Object.keys(Gn).some((function(t){return Gn[t].test(e)}))},er={validate:Qn,paramNames:["locale"]},tr=function(e,t){void 0===t&&(t={});var n=t.locale;return Array.isArray(e)?e.every((function(e){return tr(e,[n])})):n?(Kn[n]||Kn.en).test(e):Object.keys(Kn).some((function(t){return Kn[t].test(e)}))},nr={validate:tr,paramNames:["locale"]},rr=function(e,t){void 0===t&&(t={});var n=t.locale;return Array.isArray(e)?e.every((function(e){return rr(e,[n])})):n?(Zn[n]||Zn.en).test(e):Object.keys(Zn).some((function(t){return Zn[t].test(e)}))},ir={validate:rr,paramNames:["locale"]},ar=function(e,t){void 0===t&&(t={});var n=t.locale;return Array.isArray(e)?e.every((function(e){return ar(e,[n])})):n?(Xn[n]||Xn.en).test(e):Object.keys(Xn).some((function(t){return Xn[t].test(e)}))},or={validate:ar,paramNames:["locale"]},sr={validate:function(e,t){void 0===t&&(t={});var n=t.targetValue,r=t.inclusion;void 0===r&&(r=!1);var i=t.format;return void 0===i&&(i=r,r=!1),e=qn(e,i),n=qn(n,i),!(!e||!n)&&(nn(e,n)||r&&rn(e,n))},options:{hasTarget:!0,isDate:!0},paramNames:["targetValue","inclusion","format"]},ur=function(e,t){void 0===t&&(t={});var n=t.min,r=t.max;return Array.isArray(e)?e.every((function(e){return ur(e,{min:n,max:r})})):Number(n)<=e&&Number(r)>=e},lr={validate:ur,paramNames:["min","max"]},cr={validate:function(e,t){var n=t.targetValue;return String(e)===String(n)},options:{hasTarget:!0},paramNames:["targetValue"]};function dr(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function fr(e,t){return e(t={exports:{}},t.exports),t.exports}var hr=fr((function(e,t){function n(e){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},n(e)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){if(!("string"==typeof e||e instanceof String)){var t;throw t=null===e?"null":"object"===(t=n(e))&&e.constructor&&e.constructor.hasOwnProperty("name")?e.constructor.name:"a ".concat(t),new TypeError("Expected string but received ".concat(t,"."))}},e.exports=t.default,e.exports.default=t.default}));dr(hr);var pr=fr((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e){(0,n.default)(e);var t=e.replace(/[- ]+/g,"");if(!r.test(t))return!1;for(var i,a,o,s=0,u=t.length-1;u>=0;u--)i=t.substring(u,u+1),a=parseInt(i,10),s+=o&&(a*=2)>=10?a%10+1:a,o=!o;return!(s%10!=0||!t)};var n=function(e){return e&&e.__esModule?e:{default:e}}(hr);var r=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11}|6[27][0-9]{14})$/;e.exports=t.default,e.exports.default=t.default})),mr=dr(pr),vr={validate:function(e){return mr(String(e))}},_r={validate:function(e,t){void 0===t&&(t={});var n=t.min,r=t.max,i=t.inclusivity;void 0===i&&(i="()");var a=t.format;void 0===a&&(a=i,i="()");var o=qn(String(n),a),s=qn(String(r),a),u=qn(String(e),a);return!!(o&&s&&u)&&("()"===i?tn(u,o)&&nn(u,s):"(]"===i?tn(u,o)&&(rn(u,s)||nn(u,s)):"[)"===i?nn(u,s)&&(rn(u,o)||tn(u,o)):rn(u,s)||rn(u,o)||nn(u,s)&&tn(u,o))},options:{isDate:!0},paramNames:["min","max","inclusivity","format"]},yr={validate:function(e,t){return!!qn(e,t.format)},options:{isDate:!0},paramNames:["format"]},gr=function(e,t){void 0===t&&(t={});var n=t.decimals;void 0===n&&(n="*");var r=t.separator;if(void 0===r&&(r="."),m(e)||""===e)return!1;if(Array.isArray(e))return e.every((function(e){return gr(e,{decimals:n,separator:r})}));if(0===Number(n))return/^-?\d*$/.test(e);if(!new RegExp("^[-+]?\\d*(\\"+r+"\\d"+("*"===n?"+":"{1,"+n+"}")+")?([eE]{1}[-]?\\d+)?$").test(e))return!1;var i=parseFloat(e);return i==i},br={validate:gr,paramNames:["decimals","separator"]},wr=function(e,t){var n=t[0];if(Array.isArray(e))return e.every((function(e){return wr(e,[n])}));var r=String(e);return/^[0-9]*$/.test(r)&&r.length===Number(n)},Mr={validate:wr},kr=/\.(jpg|svg|jpeg|png|bmp|gif)$/i,Lr={validate:function(e,t){var n=t[0],r=t[1],i=S(e).filter((function(e){return kr.test(e.name)}));return 0!==i.length&&Promise.all(i.map((function(e){return function(e,t,n){var r=window.URL||window.webkitURL;return new Promise((function(i){var a=new Image;a.onerror=function(){return i({valid:!1})},a.onload=function(){return i({valid:a.width===Number(t)&&a.height===Number(n)})},a.src=r.createObjectURL(e)}))}(e,n,r)})))}},xr=fr((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=arguments.length>1?arguments[1]:void 0;for(var n in t)void 0===e[n]&&(e[n]=t[n]);return e},e.exports=t.default,e.exports.default=t.default}));dr(xr);var Dr=fr((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){var i,a;(0,n.default)(e),"object"===r(t)?(i=t.min||0,a=t.max):(i=arguments[1],a=arguments[2]);var o=encodeURI(e).split(/%..|./).length-1;return o>=i&&(void 0===a||o<=a)};var n=function(e){return e&&e.__esModule?e:{default:e}}(hr);function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}e.exports=t.default,e.exports.default=t.default}));dr(Dr);var Tr=fr((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){(0,n.default)(e),(t=(0,r.default)(t,a)).allow_trailing_dot&&"."===e[e.length-1]&&(e=e.substring(0,e.length-1));for(var i=e.split("."),o=0;o63)return!1;if(t.require_tld){var s=i.pop();if(!i.length||!/^([a-z\u00a1-\uffff]{2,}|xn[a-z0-9-]{2,})$/i.test(s))return!1;if(/[\s\u2002-\u200B\u202F\u205F\u3000\uFEFF\uDB40\uDC20]/.test(s))return!1}for(var u,l=0;l1&&void 0!==arguments[1]?arguments[1]:"";if((0,n.default)(t),!(a=String(a)))return e(t,4)||e(t,6);if("4"===a){if(!r.test(t))return!1;var o=t.split(".").sort((function(e,t){return e-t}));return o[3]<=255}if("6"===a){var s=t.split(":"),u=!1,l=e(s[s.length-1],4),c=l?7:8;if(s.length>c)return!1;if("::"===t)return!0;"::"===t.substr(0,2)?(s.shift(),s.shift(),u=!0):"::"===t.substr(t.length-2)&&(s.pop(),s.pop(),u=!0);for(var d=0;d0&&d=1:s.length===c}return!1};var n=function(e){return e&&e.__esModule?e:{default:e}}(hr);var r=/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/,i=/^[0-9A-F]{1,4}$/i;e.exports=t.default,e.exports.default=t.default})),jr=dr(Sr),Or=fr((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if((0,n.default)(e),(t=(0,r.default)(t,u)).require_display_name||t.allow_display_name){var s=e.match(l);if(s)e=s[1];else if(t.require_display_name)return!1}var m=e.split("@"),v=m.pop(),_=m.join("@"),y=v.toLowerCase();if(t.domain_specific_validation&&("gmail.com"===y||"googlemail.com"===y)){var g=(_=_.toLowerCase()).split("+")[0];if(!(0,i.default)(g.replace(".",""),{min:6,max:30}))return!1;for(var b=g.split("."),w=0;w$/i,c=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i,d=/^[a-z\d]+$/,f=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i,h=/^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i,p=/^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;e.exports=t.default,e.exports.default=t.default})),Er=dr(Or);var Cr={validate:function(e,t){void 0===t&&(t={});var n=t.multiple;void 0===n&&(n=!1);var r=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&-1===t.indexOf(r)&&(n[r]=e[r]);return n}(t,["multiple"]),i=r;n&&!Array.isArray(e)&&(e=String(e).split(",").map((function(e){return e.trim()})));var a=j({},i);return Array.isArray(e)?e.every((function(e){return Er(String(e),a)})):Er(String(e),a)}},Ar=function(e,t){return Array.isArray(e)?e.every((function(e){return Ar(e,t)})):Y(t).some((function(t){return t==e}))},Hr={validate:Ar},Pr={validate:function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];return!Ar.apply(void 0,e)}},Nr={validate:function(e,t){var n=new RegExp(".("+t.join("|")+")$","i");return S(e).every((function(e){return n.test(e.name)}))}},$r={validate:function(e){return(Array.isArray(e)?e:[e]).every((function(e){return/\.(jpg|svg|jpeg|png|bmp|gif)$/i.test(e.name)}))}},Ir={validate:function(e){return Array.isArray(e)?e.every((function(e){return/^-?[0-9]+$/.test(String(e))})):/^-?[0-9]+$/.test(String(e))}},Fr={validate:function(e,t){void 0===t&&(t={});var n=t.version;return void 0===n&&(n=4),m(e)&&(e=""),Array.isArray(e)?e.every((function(e){return jr(e,n)})):jr(e,n)},paramNames:["version"]},Wr={validate:function(e){return m(e)&&(e=""),Array.isArray(e)?e.every((function(e){return jr(e,"")||Yr(e)})):jr(e,"")||Yr(e)}},Rr={validate:function(e,t){return void 0===t&&(t=[]),e===t[0]}},zr={validate:function(e,t){return void 0===t&&(t=[]),e!==t[0]}},Br={validate:function(e,t){var n=t[0],r=t[1];return void 0===r&&(r=void 0),!m(e)&&(n=Number(n),"number"==typeof e&&(e=String(e)),e.length||(e=Y(e)),function(e,t,n){return void 0===n?e.length===t:(n=Number(n),e.length>=t&&e.length<=n)}(e,n,r))}},Vr=function(e,t){var n=t[0];return m(e)?n>=0:Array.isArray(e)?e.every((function(e){return Vr(e,[n])})):String(e).length<=n},Ur={validate:Vr},qr=function(e,t){var n=t[0];return!m(e)&&""!==e&&(Array.isArray(e)?e.length>0&&e.every((function(e){return qr(e,[n])})):Number(e)<=n)},Jr={validate:qr},Gr={validate:function(e,t){var n=new RegExp(t.join("|").replace("*",".+")+"$","i");return S(e).every((function(e){return n.test(e.type)}))}},Xr=function(e,t){var n=t[0];return!m(e)&&(Array.isArray(e)?e.every((function(e){return Xr(e,[n])})):String(e).length>=n)},Zr={validate:Xr},Kr=function(e,t){var n=t[0];return!m(e)&&""!==e&&(Array.isArray(e)?e.length>0&&e.every((function(e){return Kr(e,[n])})):Number(e)>=n)},Qr={validate:Kr},ei=/^[٠١٢٣٤٥٦٧٨٩]+$/,ti=/^[0-9]+$/,ni={validate:function(e){var t=function(e){var t=String(e);return ti.test(t)||ei.test(t)};return Array.isArray(e)?e.every(t):t(e)}},ri=function(e,t){var n=t.expression;return"string"==typeof n&&(n=new RegExp(n)),Array.isArray(e)?e.every((function(e){return ri(e,{expression:n})})):n.test(String(e))},ii={validate:ri,paramNames:["expression"]},ai={validate:function(e,t){void 0===t&&(t=[]);var n=t[0];return void 0===n&&(n=!1),!m(e)&&!R(e)&&((!1!==e||!n)&&!!String(e).trim().length)}},oi={validate:function(e,t){void 0===t&&(t=[]);var n=t[0],r=t.slice(1).includes(String(n).trim());if(!r)return{valid:!0,data:{required:r}};var i=R(e)||[!1,null,void 0].includes(e);return{valid:!(i=i||!String(e).trim().length),data:{required:r}}},options:{hasTarget:!0,computesRequired:!0}},si={validate:function(e,t){var n=t[0];if(isNaN(n))return!1;var r=1024*Number(n);return S(e).every((function(e){return e.size<=r}))}},ui=fr((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){if((0,n.default)(e),!e||e.length>=2083||/[\s<>]/.test(e))return!1;if(0===e.indexOf("mailto:"))return!1;var o,l,d,f,h,p,m,v;if(t=(0,a.default)(t,s),m=e.split("#"),e=m.shift(),m=e.split("?"),e=m.shift(),(m=e.split("://")).length>1){if(o=m.shift().toLowerCase(),t.require_valid_protocol&&-1===t.protocols.indexOf(o))return!1}else{if(t.require_protocol)return!1;if("//"===e.substr(0,2)){if(!t.allow_protocol_relative_urls)return!1;m[0]=e.substr(2)}}if(""===(e=m.join("://")))return!1;if(m=e.split("/"),""===(e=m.shift())&&!t.require_host)return!0;if((m=e.split("@")).length>1){if(t.disallow_auth)return!1;if((l=m.shift()).indexOf(":")>=0&&l.split(":").length>2)return!1}f=m.join("@"),p=null,v=null;var _=f.match(u);_?(d="",v=_[1],p=_[2]||null):(m=f.split(":"),d=m.shift(),m.length&&(p=m.join(":")));if(null!==p&&(h=parseInt(p,10),!/^[0-9]+$/.test(p)||h<=0||h>65535))return!1;if(!((0,i.default)(d)||(0,r.default)(d,t)||v&&(0,i.default)(v,6)))return!1;if(d=d||v,t.host_whitelist&&!c(d,t.host_whitelist))return!1;if(t.host_blacklist&&c(d,t.host_blacklist))return!1;return!0};var n=o(hr),r=o(Tr),i=o(Sr),a=o(xr);function o(e){return e&&e.__esModule?e:{default:e}}var s={protocols:["http","https","ftp"],require_tld:!0,require_protocol:!1,require_host:!0,require_valid_protocol:!0,allow_underscores:!1,allow_trailing_dot:!1,allow_protocol_relative_urls:!1},u=/^\[([^\]]+)\](?::([0-9]+))?$/;function l(e){return"[object RegExp]"===Object.prototype.toString.call(e)}function c(e,t){for(var n=0;n0&&this.syncValue(t[0]),this.validateSilent().then((function(t){return e.applyResult(t),t}))},validateSilent:function(){var e,t,n=this;return this.setFlags({pending:!0}),pi.verify(this.value,this.rules,{name:this.name,values:(e=this,t=e.$_veeObserver.refs,e.fieldDeps.reduce((function(e,n){return t[n]?(e[n]=t[n].value,e):e}),{})),bails:this.bails}).then((function(e){return n.setFlags({pending:!1}),n.isRequired||n.setFlags({valid:e.valid,invalid:!e.valid}),e}))},applyResult:function(e){var t=e.errors,n=e.failedRules;this.messages=t,this.failedRules=j({},n),this.setFlags({valid:!t.length,changed:this.value!==this.initialValue,invalid:!!t.length,validated:!0})},registerField:function(){pi||(pi=Le()||new Ye(null,{fastExit:Q().fastExit})),function(e){m(e.id)&&e.id===e.vid&&(e.id=mi,mi++);var t=e.id,n=e.vid;if(e.isDeactivated||t===n&&e.$_veeObserver.refs[t])return;t!==n&&e.$_veeObserver.refs[t]===e&&e.$_veeObserver.unsubscribe({vid:t});e.$_veeObserver.subscribe(e),e.id=n}(this)}}};function _i(e){return{errors:e.messages,flags:e.flags,classes:e.classes,valid:e.isValid,failedRules:e.failedRules,reset:function(){return e.reset()},validate:function(){for(var t=[],n=arguments.length;n--;)t[n]=arguments[n];return e.validate.apply(e,t)},aria:{"aria-invalid":e.flags.invalid?"true":"false","aria-required":e.isRequired?"true":"false"}}}function yi(e){return(x(e.mode)?e.mode:Ne[e.mode])({errors:e.messages,value:e.value,flags:e.flags})}function gi(e){this.initialized||(this.initialValue=e.value);var t=function(e,t){return!(e._ignoreImmediate||!e.immediate)||e.value!==t.value||!!e._needsValidation||!e.initialized&&void 0===t.value}(this,e);this._needsValidation=!1,this.value=e.value,this._ignoreImmediate=!0,t&&this.validateSilent().then(this.immediate||this.flags.validated?this.applyResult:function(e){return e})}function bi(e){var t=e.$veeHandler,n=yi(e);return t&&e.$veeDebounce===e.debounce||(t=g((function(){e.$nextTick((function(){var t=e.validateSilent();e._pendingValidation=t,t.then((function(n){t===e._pendingValidation&&(e.applyResult(n),e._pendingValidation=null)}))}))}),n.debounce||e.debounce),e.$veeHandler=t,e.$veeDebounce=e.debounce),{onInput:function(t){e.syncValue(t),e.setFlags({dirty:!0,pristine:!1})},onBlur:function(){e.setFlags({touched:!0,untouched:!1})},onValidate:t}}function wi(e){var t=te(e);this._inputEventName=this._inputEventName||oe(e,t),gi.call(this,t);var n=bi(this),r=n.onInput,i=n.onBlur,a=n.onValidate;ae(e,this._inputEventName,r),ae(e,"blur",i),this.normalizedEvents.forEach((function(t){ae(e,t,a)})),this.initialized=!0}function Mi(e,t,n){void 0===n&&(n=!0);var r=e.$_veeObserver.refs;if(e._veeWatchers||(e._veeWatchers={}),!r[t]&&n)return e.$once("hook:mounted",(function(){Mi(e,t,!1)}));!x(e._veeWatchers[t])&&r[t]&&(e._veeWatchers[t]=r[t].$watch("value",(function(){e.flags.validated&&(e._needsValidation=!0,e.validate())})))}var ki={pristine:"every",dirty:"some",touched:"some",untouched:"every",valid:"every",invalid:"some",pending:"some",validated:"every"};var Li=0,xi={name:"ValidationObserver",provide:function(){return{$_veeObserver:this}},inject:{$_veeObserver:{from:"$_veeObserver",default:function(){return this.$vnode.context.$_veeObserver?this.$vnode.context.$_veeObserver:null}}},props:{tag:{type:String,default:"span"},slim:{type:Boolean,default:!1}},data:function(){return{vid:"obs_"+Li++,refs:{},observers:[],persistedStore:{}}},computed:{ctx:function(){var e=this,t={errors:{},validate:function(t){var n=e.validate(t);return{then:function(e){return n.then((function(t){return t&&x(e)?Promise.resolve(e()):Promise.resolve(t)}))}}},reset:function(){return e.reset()}};return F(this.refs).concat(Object.keys(this.persistedStore).map((function(t){return{vid:t,flags:e.persistedStore[t].flags,messages:e.persistedStore[t].errors}})),this.observers).reduce((function(e,t){return Object.keys(ki).forEach((function(n){var r,i,a=t.flags||t.ctx;n in e?e[n]=(r=e[n],i=a[n],[r,i][ki[n]]((function(e){return e}))):e[n]=a[n]})),e.errors[t.vid]=t.messages||F(t.ctx.errors).reduce((function(e,t){return e.concat(t)}),[]),e}),t)}},created:function(){this.$_veeObserver&&this.$_veeObserver.subscribe(this,"observer")},activated:function(){this.$_veeObserver&&this.$_veeObserver.subscribe(this,"observer")},deactivated:function(){this.$_veeObserver&&this.$_veeObserver.unsubscribe(this,"observer")},beforeDestroy:function(){this.$_veeObserver&&this.$_veeObserver.unsubscribe(this,"observer")},render:function(e){var t=this.$slots.default||this.$scopedSlots.default||[];return x(t)&&(t=t(this.ctx)),this.slim?se(e,t):e(this.tag,{on:this.$listeners,attrs:this.$attrs},t)},methods:{subscribe:function(e,t){var n;void 0===t&&(t="provider"),"observer"!==t?(this.refs=Object.assign({},this.refs,((n={})[e.vid]=e,n)),e.persist&&this.persistedStore[e.vid]&&this.restoreProviderState(e)):this.observers.push(e)},unsubscribe:function(e,t){var n=e.vid;void 0===t&&(t="provider"),"provider"===t&&this.removeProvider(n);var r=C(this.observers,(function(e){return e.vid===n}));-1!==r&&this.observers.splice(r,1)},validate:function(e){void 0===e&&(e={silent:!1});var t=e.silent;return Promise.all(F(this.refs).map((function(e){return e[t?"validateSilent":"validate"]().then((function(e){return e.valid}))})).concat(this.observers.map((function(e){return e.validate({silent:t})})))).then((function(e){return e.every((function(e){return e}))}))},reset:function(){var e=this;return Object.keys(this.persistedStore).forEach((function(t){e.$delete(e.persistedStore,t)})),F(this.refs).concat(this.observers).forEach((function(e){return e.reset()}))},restoreProviderState:function(e){var t=this.persistedStore[e.vid];e.setFlags(t.flags),e.applyResult(t),this.$delete(this.persistedStore,e.vid)},removeProvider:function(e){var t,n=this.refs[e];n&&n.persist&&(this.persistedStore=j({},this.persistedStore,((t={})[e]={flags:n.flags,errors:n.messages,failedRules:n.failedRules},t))),this.$delete(this.refs,e)}}};Object.keys(di).forEach((function(e){Ye.extend(e,di[e].validate,j({},di[e].options,{paramNames:di[e].paramNames}))})),Ye.localize({en:ze});$e.version="2.2.15",$e.mapFields=function(e){if(!e)return function(){return hi(this.$validator.flags)};var t=function(e){return Array.isArray(e)?e.reduce((function(e,t){return W(t,".")?e[t.split(".")[1]]=t:e[t]=t,e}),{}):e}(e);return Object.keys(t).reduce((function(e,n){var r=t[n];return e[n]=function(){if(this.$validator.flags[r])return this.$validator.flags[r];if("*"===t[n])return hi(this.$validator.flags,!1);if(r.indexOf(".")<=0)return{};var e=r.split("."),i=e[0],a=e.slice(1);return i=this.$validator.flags["$"+i],"*"===(a=a.join("."))&&i?hi(i):i&&i[a]?i[a]:{}},e}),{})},$e.ValidationProvider=vi,$e.ValidationObserver=xi,$e.withValidation=function(e,t){void 0===t&&(t=null);var n=x(e)?e.options:e;n.$__veeInject=!1;var r={name:(n.name||"AnonymousHoc")+"WithValidation",props:j({},vi.props),data:vi.data,computed:j({},vi.computed),methods:j({},vi.methods),$__veeInject:!1,beforeDestroy:vi.beforeDestroy,inject:vi.inject};t||(t=function(e){return e});var i=n.model&&n.model.event||"input";return r.render=function(e){var r;this.registerField();var a=_i(this),o=j({},this.$listeners),s=te(this.$vnode);this._inputEventName=this._inputEventName||oe(this.$vnode,s),gi.call(this,s);var u=bi(this),l=u.onInput,c=u.onBlur,d=u.onValidate;ie(o,i,l),ie(o,"blur",c),this.normalizedEvents.forEach((function(e,t){ie(o,e,d)}));var f,h,p=(re(this.$vnode)||{prop:"value"}).prop,m=j({},this.$attrs,((r={})[p]=s.value,r),t(a));return e(n,{attrs:this.$attrs,props:m,on:o},(f=this.$slots,h=this.$vnode.context,Object.keys(f).reduce((function(e,t){return f[t].forEach((function(e){e.context||(f[t].context=h,e.data||(e.data={}),e.data.slot=t)})),e.concat(f[t])}),[])))},r};const Di=$e;var Ti=n(7137),Yi=n.n(Ti),Si=function(){return Si=Object.assign||function(e){for(var t,n=1,r=arguments.length;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function Ei(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,i,a=n.call(e),o=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)o.push(r.value)}catch(e){i={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(i)throw i.error}}return o}function Ci(e,t,n){if(n||2===arguments.length)for(var r,i=0,a=t.length;i0})))return this.next(t,n);var h=Ui(d.map((function(e){return e.entrySet}))),p=Ui(Object.keys(a).map((function(e){return a[e].configuration})));return{transitions:f,entrySet:h,exitSet:Ui(d.map((function(e){return e.exitSet}))),configuration:p,source:t,actions:Ui(Object.keys(a).map((function(e){return a[e].actions})))}},e.prototype._transition=function(e,t,n){return na(e)?this.transitionLeafNode(e,t,n):1===Object.keys(e).length?this.transitionCompoundNode(e,t,n):this.transitionParallelNode(e,t,n)},e.prototype.getTransitionData=function(e,t){return this._transition(e.value,e,la(t))},e.prototype.next=function(e,t){var n,r,i,a=this,o=t.name,s=[],u=[];try{for(var l=Oi(this.getCandidates(o)),c=l.next();!c.done;c=l.next()){var d=c.value,f=d.cond,h=d.in,p=e.context,m=!h||(na(h)&&to(h)?e.matches(Fi(this.getStateNodeById(h).path,this.delimiter)):Ni(Fi(h,this.delimiter),Bi(this.path.slice(0,-2))(e.value))),v=!1;try{v=!f||da(this.machine,f,p,t,e)}catch(e){throw new Error("Unable to evaluate guard '".concat(f.name||f.type,"' in transition for event '").concat(o,"' in state node '").concat(this.id,"':\n").concat(e.message))}if(v&&m){void 0!==d.target&&(u=d.target),s.push.apply(s,Ci([],Ei(d.actions),!1)),i=d;break}}}catch(e){n={error:e}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}if(i){if(!u.length)return{transitions:[i],entrySet:[],exitSet:[],configuration:e.value?[this]:[],source:e,actions:s};var _=Ui(u.map((function(t){return a.getRelativeStateNodes(t,e.historyValue)}))),y=!!i.internal;return{transitions:[i],entrySet:y?[]:Ui(_.map((function(e){return a.nodesFromChild(e)}))),exitSet:y?[]:[this],configuration:_,source:e,actions:s}}},e.prototype.nodesFromChild=function(e){if(e.escapes(this))return[];for(var t=[],n=e;n&&n!==this;)t.push(n),n=n.parent;return t.push(this),t},e.prototype.escapes=function(e){if(this===e)return!1;for(var t=this.parent;t;){if(t===e)return!1;t=t.parent}return!0},e.prototype.getActions=function(e,t,n,r){var i,a,o,s,u=va([],r?this.getStateNodes(r.value):[this]),l=e.configuration.length?va(u,e.configuration):u;try{for(var c=Oi(l),d=c.next();!d.done;d=c.next()){ba(u,p=d.value)||e.entrySet.push(p)}}catch(e){i={error:e}}finally{try{d&&!d.done&&(a=c.return)&&a.call(c)}finally{if(i)throw i.error}}try{for(var f=Oi(u),h=f.next();!h.done;h=f.next()){var p;ba(l,p=h.value)&&!ba(e.exitSet,p.parent)||e.exitSet.push(p)}}catch(e){o={error:e}}finally{try{h&&!h.done&&(s=f.return)&&s.call(f)}finally{if(o)throw o.error}}var m=Ui(e.entrySet.map((function(r){var i=[];if("final"!==r.type)return i;var a=r.parent;if(!a.parent)return i;i.push(za(r.id,r.doneData),za(a.id,r.doneData?Gi(r.doneData,t,n):void 0));var o=a.parent;return"parallel"===o.type&&pa(o).every((function(t){return wa(e.configuration,t)}))&&i.push(za(o.id)),i})));e.exitSet.sort((function(e,t){return t.order-e.order})),e.entrySet.sort((function(e,t){return e.order-t.order}));var v=new Set(e.entrySet),_=new Set(e.exitSet),y=Ei([Ui(Array.from(v).map((function(e){return Ci(Ci([],Ei(e.activities.map((function(e){return function(e){var t=Fa(e);return{type:oa.Start,activity:t,exec:void 0}}(e)}))),!1),Ei(e.onEntry),!1)}))).concat(m.map(Wa)),Ui(Array.from(_).map((function(e){return Ci(Ci([],Ei(e.onExit),!1),Ei(e.activities.map((function(e){return function(e){var t=ta(e)?e:Fa(e);return{type:oa.Stop,activity:t,exec:void 0}}(e)}))),!1)})))],2),g=y[0],b=y[1];return Ia(b.concat(e.actions).concat(g),this.machine.options.actions)},e.prototype.transition=function(e,t,n){void 0===e&&(e=this.initialState);var r,i,a=la(t);if(e instanceof Ua)r=void 0===n?e:this.resolveState(Ua.from(e,n));else{var o=na(e)?this.resolve(Wi(this.getResolvedPath(e))):this.resolve(e),s=null!=n?n:this.machine.context;r=this.resolveState(Ua.from(o,s))}if(this.strict&&!this.events.includes(a.name)&&(i=a.name,!/^(done|error)\./.test(i)))throw new Error("Machine '".concat(this.id,"' does not accept event '").concat(a.name,"'"));var u=this._transition(r.value,r,a)||{transitions:[],configuration:[],entrySet:[],exitSet:[],source:r,actions:[]},l=va([],this.getStateNodes(r.value)),c=u.configuration.length?va(l,u.configuration):l;return u.configuration=Ci([],Ei(c),!1),this.resolveTransition(u,r,r.context,a)},e.prototype.resolveRaisedTransition=function(e,t,n){var r,i=e.actions;return(e=this.transition(e,t))._event=n,e.event=n.data,(r=e.actions).unshift.apply(r,Ci([],Ei(i),!1)),e},e.prototype.resolveTransition=function(e,t,n,r){var i,a,o=this;void 0===r&&(r=Pa);var s=e.configuration,u=!t||e.transitions.length>0,l=u?ga(this.machine,s):void 0,c=t?t.historyValue?t.historyValue:e.source?this.machine.historyValue(t.value):void 0:void 0,d=this.getActions(e,n,r,t),f=t?Si({},t.activities):{};try{for(var h=Oi(d),p=h.next();!p.done;p=h.next()){var m=p.value;m.type===ka?f[m.activity.id||m.activity.type]=m:m.type===La&&(f[m.activity.id||m.activity.type]=!1)}}catch(e){i={error:e}}finally{try{p&&!p.done&&(a=h.return)&&a.call(h)}finally{if(i)throw i.error}}var v,_,y=Ei(Ba(this,t,n,r,d,this.machine.config.preserveActionOrder),2),g=y[0],b=y[1],w=Ei(Xi(g,(function(e){return e.type===xa||e.type===Da&&e.to===sa.Internal})),2),M=w[0],k=w[1],L=g.filter((function(e){var t;return e.type===ka&&(null===(t=e.activity)||void 0===t?void 0:t.type)===Ea})),x=L.reduce((function(e,t){return e[t.activity.id]=Ga(t.activity,o.machine,b,r),e}),t?Si({},t.children):{}),D=u?e.configuration:t?t.configuration:[],T=wa(D,this),Y=new Ua({value:l||t.value,context:b,_event:r,_sessionid:t?t._sessionid:null,historyValue:l?c?(v=c,_=l,{current:_,states:Zi(v,_)}):void 0:t?t.historyValue:void 0,history:!l||e.source?t:void 0,actions:l?k:[],activities:l?f:t?t.activities:{},events:[],configuration:D,transitions:e.transitions,children:x,done:T,tags:Ma(D),machine:this}),S=n!==b;Y.changed=r.name===Ca||S;var j=Y.history;j&&delete j.history;var O=!T&&(this._transient||s.some((function(e){return e._transient})));if(!(u||O&&r.name!==Ka))return Y;var E=Y;if(!T)for(O&&(E=this.resolveRaisedTransition(E,{type:Ya},r));M.length;){var C=M.shift();E=this.resolveRaisedTransition(E,C._event,r)}var A=E.changed||(j?!!E.actions.length||S||typeof j.value!=typeof E.value||!Va(E.value,j.value):void 0);return E.changed=A,E.history=j,E},e.prototype.getStateNode=function(e){if(to(e))return this.machine.getStateNodeById(e);if(!this.states)throw new Error("Unable to retrieve child state '".concat(e,"' from '").concat(this.id,"'; no child states exist."));var t=this.states[e];if(!t)throw new Error("Child state '".concat(e,"' does not exist on '").concat(this.id,"'"));return t},e.prototype.getStateNodeById=function(e){var t=to(e)?e.slice("#".length):e;if(t===this.id)return this;var n=this.machine.idMap[t];if(!n)throw new Error("Child state node '#".concat(t,"' does not exist on machine '").concat(this.id,"'"));return n},e.prototype.getStateNodeByPath=function(e){if("string"==typeof e&&to(e))try{return this.getStateNodeById(e.slice(1))}catch(e){}for(var t=Ii(e,this.delimiter).slice(),n=this;t.length;){var r=t.shift();if(!r.length)break;n=n.getStateNode(r)}return n},e.prototype.resolve=function(e){var t,n=this;if(!e)return this.initialStateValue||eo;switch(this.type){case"parallel":return Ri(this.initialStateValue,(function(t,r){return t?n.getStateNode(r).resolve(e[r]||t):eo}));case"compound":if(na(e)){var r=this.getStateNode(e);return"parallel"===r.type||"compound"===r.type?((t={})[e]=r.initialStateValue,t):e}return Object.keys(e).length?Ri(e,(function(e,t){return e?n.getStateNode(t).resolve(e):eo})):this.initialStateValue||{};default:return e||eo}},e.prototype.getResolvedPath=function(e){if(to(e)){var t=this.machine.idMap[e.slice("#".length)];if(!t)throw new Error("Unable to find state node '".concat(e,"'"));return t.path}return Ii(e,this.delimiter)},Object.defineProperty(e.prototype,"initialStateValue",{get:function(){var e,t;if(this.__cache.initialStateValue)return this.__cache.initialStateValue;if("parallel"===this.type)t=zi(this.states,(function(e){return e.initialStateValue||eo}),(function(e){return!("history"===e.type)}));else if(void 0!==this.initial){if(!this.states[this.initial])throw new Error("Initial state '".concat(this.initial,"' not found on '").concat(this.key,"'"));t=ha(this.states[this.initial])?this.initial:((e={})[this.initial]=this.states[this.initial].initialStateValue,e)}else t={};return this.__cache.initialStateValue=t,this.__cache.initialStateValue},enumerable:!1,configurable:!0}),e.prototype.getInitialState=function(e,t){this._init();var n=this.getStateNodes(e);return this.resolveTransition({configuration:n,entrySet:n,exitSet:[],transitions:[],source:void 0,actions:[]},void 0,null!=t?t:this.machine.context,void 0)},Object.defineProperty(e.prototype,"initialState",{get:function(){var e=this.initialStateValue;if(!e)throw new Error("Cannot retrieve initial state from simple state '".concat(this.id,"'."));return this.getInitialState(e)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"target",{get:function(){var e;if("history"===this.type){var t=this.config;e=na(t.target)&&to(t.target)?Wi(this.machine.getStateNodeById(t.target).path.slice(this.path.length-1)):t.target}return e},enumerable:!1,configurable:!0}),e.prototype.getRelativeStateNodes=function(e,t,n){return void 0===n&&(n=!0),n?"history"===e.type?e.resolveHistory(t):e.initialStateNodes:[e]},Object.defineProperty(e.prototype,"initialStateNodes",{get:function(){var e=this;return ha(this)?[this]:"compound"!==this.type||this.initial?Ui(Vi(this.initialStateValue).map((function(t){return e.getFromRelativePath(t)}))):[this]},enumerable:!1,configurable:!0}),e.prototype.getFromRelativePath=function(e){if(!e.length)return[this];var t=Ei(e),n=t[0],r=t.slice(1);if(!this.states)throw new Error("Cannot retrieve subPath '".concat(n,"' from node with no states"));var i=this.getStateNode(n);if("history"===i.type)return i.resolveHistory();if(!this.states[n])throw new Error("Child state '".concat(n,"' does not exist on '").concat(this.id,"'"));return this.states[n].getFromRelativePath(r)},e.prototype.historyValue=function(e){if(Object.keys(this.states).length)return{current:e||this.initialStateValue,states:zi(this.states,(function(t,n){if(!e)return t.historyValue();var r=na(e)?void 0:e[n];return t.historyValue(r||t.initialStateValue)}),(function(e){return!e.history}))}},e.prototype.resolveHistory=function(e){var t=this;if("history"!==this.type)return[this];var n=this.parent;if(!e){var r=this.target;return r?Ui(Vi(r).map((function(e){return n.getFromRelativePath(e)}))):n.initialStateNodes}var i,a,o=(i=n.path,a="states",function(e){var t,n,r=e;try{for(var o=Oi(i),s=o.next();!s.done;s=o.next()){var u=s.value;r=r[a][u]}}catch(e){t={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(t)throw t.error}}return r})(e).current;return na(o)?[n.getStateNode(o)]:Ui(Vi(o).map((function(e){return"deep"===t.history?n.getFromRelativePath(e):[n.states[e[0]]]})))},Object.defineProperty(e.prototype,"stateIds",{get:function(){var e=this,t=Ui(Object.keys(this.states).map((function(t){return e.states[t].stateIds})));return[this.id].concat(t)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"events",{get:function(){var e,t,n,r;if(this.__cache.events)return this.__cache.events;var i=this.states,a=new Set(this.ownEvents);if(i)try{for(var o=Oi(Object.keys(i)),s=o.next();!s.done;s=o.next()){var u=i[s.value];if(u.states)try{for(var l=(n=void 0,Oi(u.events)),c=l.next();!c.done;c=l.next()){var d=c.value;a.add("".concat(d))}}catch(e){n={error:e}}finally{try{c&&!c.done&&(r=l.return)&&r.call(l)}finally{if(n)throw n.error}}}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=o.return)&&t.call(o)}finally{if(e)throw e.error}}return this.__cache.events=Array.from(a)},enumerable:!1,configurable:!0}),Object.defineProperty(e.prototype,"ownEvents",{get:function(){var e=new Set(this.transitions.filter((function(e){return!(!e.target&&!e.actions.length&&e.internal)})).map((function(e){return e.eventType})));return Array.from(e)},enumerable:!1,configurable:!0}),e.prototype.resolveTarget=function(e){var t=this;if(void 0!==e)return e.map((function(e){if(!na(e))return e;var n=e[0]===t.delimiter;if(n&&!t.parent)return t.getStateNodeByPath(e.slice(1));var r=n?t.key+e:e;if(!t.parent)return t.getStateNodeByPath(r);try{return t.parent.getStateNodeByPath(r)}catch(e){throw new Error("Invalid transition definition for state node '".concat(t.id,"':\n").concat(e.message))}}))},e.prototype.formatTransition=function(e){var t=this,n=function(e){if(void 0!==e&&""!==e)return Ji(e)}(e.target),r="internal"in e?e.internal:!n||n.some((function(e){return na(e)&&e[0]===t.delimiter})),i=this.machine.options.guards,a=this.resolveTarget(n),o=Si(Si({},e),{actions:Ia(Ji(e.actions)),cond:ra(e.cond,i),target:a,source:this,internal:r,eventType:e.event,toJSON:function(){return Si(Si({},o),{target:o.target?o.target.map((function(e){return"#".concat(e.id)})):void 0,source:"#".concat(t.id)})}});return o},e.prototype.formatTransitions=function(){var e,t,n,r=this;if(this.config.on)if(Array.isArray(this.config.on))n=this.config.on;else{var i=this.config.on,a=Qa,o=i[a],s=void 0===o?[]:o,u=ji(i,["*"]);n=Ui(Object.keys(u).map((function(e){var t=ca(e,u[e]);return t})).concat(ca(Qa,s)))}else n=[];var l=this.config.always?ca("",this.config.always):[],c=this.config.onDone?ca(String(za(this.id)),this.config.onDone):[];var d=Ui(this.invoke.map((function(e){var t=[];return e.onDone&&t.push.apply(t,Ci([],Ei(ca(String(function(e,t){var n="".concat(oa.DoneInvoke,".").concat(e);return{type:n,data:t,toString:function(){return n}}}(e.id)),e.onDone)),!1)),e.onError&&t.push.apply(t,Ci([],Ei(ca(String(function(e,t){var n="".concat(oa.ErrorPlatform,".").concat(e);return{type:n,data:t,toString:function(){return n}}}(e.id)),e.onError)),!1)),t}))),f=this.after,h=Ui(Ci(Ci(Ci(Ci([],Ei(c),!1),Ei(d),!1),Ei(n),!1),Ei(l),!1).map((function(e){return Ji(e).map((function(e){return r.formatTransition(e)}))})));try{for(var p=Oi(f),m=p.next();!m.done;m=p.next()){var v=m.value;h.push(v)}}catch(t){e={error:t}}finally{try{m&&!m.done&&(t=p.return)&&t.call(p)}finally{if(e)throw e.error}}return h},e}();const ro={name:"KanbanBoard",props:{stages:{type:Array,required:!0},blocks:{type:Array,required:!0},config:{type:Object,default:()=>({})},stateMachineConfig:{type:Object,default:null},idProp:{type:String,default:"id"},statusProp:{type:String,default:"status"}},data:()=>({machine:null}),computed:{localBlocks(){return this.blocks}},methods:{getBlocks(e){return this.localBlocks.filter((t=>t[this.statusProp]===e))},findPossibleTransitions(e){return this.machine.config.states[e].on||{}},findTransition(e,t){const n=e.dataset.status,r=t.dataset.status,i=this.findPossibleTransitions(r);return Object.keys(i).find((e=>i[e]===n))},accepts(e,t,n){if(!this.machine)return!0;const r=t.dataset.status,i=n.dataset.status;return Object.values(this.findPossibleTransitions(i)).includes(r)},allowedTargets(e,t){const n=this.localBlocks.find((t=>t[this.idProp]===e.dataset.blockId));return this.drake.containers.filter((e=>this.config.accepts(n,e,t)))},forbiddenTargets(e,t){return this.drake.containers.filter((n=>!this.allowedTargets(e,t).includes(n)))}},updated(){this.drake.containers=this.$refs.list,this.drake.mirrorContainer=this.$el},mounted(){this.config.accepts=this.config.accepts||this.accepts,this.config.mirrorContainer=this.$el,this.drake=Yi()(this.$refs.list,this.config).on("drag",((e,t)=>{this.$emit("drag",e,t),e.classList.add("is-moving"),this.allowedTargets(e,t).forEach((e=>e.classList.add("allowed"))),this.forbiddenTargets(e,t).forEach((e=>e.classList.add("forbidden")))})).on("dragend",(e=>{this.$emit("dragend",e),e.classList.remove("is-moving"),this.drake.containers.forEach((e=>e.classList.remove("allowed","forbidden"))),window.setTimeout((()=>{e.classList.add("is-moved"),window.setTimeout((()=>{e.classList.remove("is-moved")}),600)}),100)})).on("drop",((e,t,n,r)=>{this.$emit("drop",e,t,n,r);let i=0;for(i=0;i{this.$emit("cancel",e,t,n)})).on("remove",((e,t,n)=>{this.$emit("remove",e,t,n)})).on("shadow",((e,t,n)=>{this.$emit("shadow",e,t,n)})).on("over",((e,t,n)=>{this.$emit("over",e,t,n)})).on("out",((e,t,n)=>{this.$emit("out",e,t,n)})).on("cloned",((e,t,n)=>{this.$emit("cloned",e,t,n)})),this.$emit("init",this.drake)},created(){this.stateMachineConfig&&(this.machine=function(e,t,n){return void 0===n&&(n=e.context),new no(e,t,n)}(this.stateMachineConfig))}};var io=function(e,t,n,r,i,a,o,s){var u,l="function"==typeof e?e.options:e;if(t&&(l.render=t,l.staticRenderFns=n,l._compiled=!0),r&&(l.functional=!0),a&&(l._scopeId="data-v-"+a),o?(u=function(e){(e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext)||"undefined"==typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),i&&i.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(o)},l._ssrRegister=u):i&&(u=s?function(){i.call(this,(l.functional?this.parent:this).$root.$options.shadowRoot)}:i),u)if(l.functional){l._injectStyles=u;var c=l.render;l.render=function(e,t){return u.call(t),c(e,t)}}else{var d=l.beforeCreate;l.beforeCreate=d?[].concat(d,u):[u]}return{exports:e,options:l}}(ro,(function(){var e=this,t=e.$createElement,n=e._self._c||t;return n("div",{staticClass:"drag-container"},[n("ul",{staticClass:"drag-list"},e._l(e.stages,(function(t){var r;return n("li",{key:t,staticClass:"drag-column",class:(r={},r["drag-column-"+t]=!0,r)},[n("span",{staticClass:"drag-column-header"},[e._t(t,(function(){return[n("h2",[e._v(e._s(t))])]}))],2),e._v(" "),n("div",{staticClass:"drag-options"}),e._v(" "),n("ul",{ref:"list",refInFor:!0,staticClass:"drag-inner-list",attrs:{"data-status":t}},e._l(e.getBlocks(t),(function(t){return n("li",{key:t[e.idProp],staticClass:"drag-item",attrs:{"data-block-id":t[e.idProp]}},[e._t(t[e.idProp],(function(){return[n("strong",[e._v(e._s(t[e.statusProp]))]),e._v(" "),n("div",[e._v(e._s(t[e.idProp]))])]}))],2)})),0),e._v(" "),n("div",{staticClass:"drag-column-footer"},[e._t("footer-"+t)],2)])})),0)])}),[],!1,null,null,null);const ao=io.exports,oo={install(e){e.component("kanban-board",ao)}};var so=n(9444),uo=n.n(so),lo=n(3379),co=n.n(lo),fo=n(4630),ho={insert:"head",singleton:!1};co()(fo.Z,ho);fo.Z.locals;n(9101);var po=n(4837),mo=n.n(po),vo=n(9948),_o=n.n(vo),yo=n(2953),go=n.n(yo),bo=n(4910),wo=n.n(bo),Mo=n(3786),ko=n.n(Mo),Lo=n(4374),xo=n.n(Lo),Do=n(107),To=n.n(Do),Yo=n(1888),So=n.n(Yo),jo=n(4051),Oo=n.n(jo);n(951),n(2002);window.moment=n(381),window.Vue=i(),window.VeeValidate=Di,i().use(Di,{dictionary:{ar:mo(),de:_o(),es:go(),fa:wo(),fr:ko(),nl:xo(),tr:To(),hi_IN:So(),zh_CN:Oo()},events:"input|change|blur"}),i().prototype.$http=axios,window.eventBus=new(i()),i().use(oo),i().use(c,{name:"Timeago",locale:"en",locales:{ar:n(8137),tr:n(1062)}}),i().component("draggable",o()),i().component("vue-cal",uo()),$((function(){var e=new(i())({el:"#app",data:function(){return{pageLoaded:!1,modalIds:{},isMenuOpen:"true"==localStorage.getItem("crm-sidebar")}},mounted:function(){var e=this;this.$validator.localize(document.documentElement.lang),setTimeout((function(){e.pageLoaded=!0,e.disableAutoComplete()})),this.addServerErrors(),this.addFlashMessages(),window.addFlashMessages=function(t){e.$refs.flashes.addFlash(t)}},methods:{onSubmit:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";this.toggleButtonDisable(!0),"undefined"!=typeof tinyMCE&&tinyMCE.triggerSave(),this.$validator.validateAll(n||null).then((function(n){n?e.target.submit():(t.activateAutoScroll(),t.toggleButtonDisable(!1),eventBus.$emit("onFormError"))}))},activateAutoScroll:function(e){var t=document.querySelector(".control-error:first-of-type");t&&t.scrollIntoView({behavior:"smooth",block:"end",inline:"nearest"})},toggleButtonDisable:function(e){for(var t=document.getElementsByTagName("button"),n=0;n0&&void 0!==arguments[0]?arguments[0]:null;for(var t in serverErrors){var n=[];t.split(".").forEach((function(e,t){t?n.push("["+e+"]"):n.push(e)}));var r=n.join(""),i=this.$validator.fields.find({name:r,scope:e});i&&this.$validator.errors.add({id:i.id,field:r,msg:serverErrors[t][0],scope:e})}},addFlashMessages:function(){if("undefined"!=typeof flashMessages){var e=this.$refs.flashes;flashMessages.forEach((function(t){e.addFlash(t)}),this)}},openModal:function(e){this.$set(this.modalIds,e,!0),this.disableAutoComplete()},closeModal:function(e){this.$set(this.modalIds,e,!1)},toggleMenu:function(){this.isMenuOpen=!this.isMenuOpen,localStorage.setItem("crm-sidebar",this.isMenuOpen)},disableAutoComplete:function(){queueMicrotask((function(){$(".date-container input").attr("autocomplete","off"),$(".datetime-container input").attr("autocomplete","off")}))}}});window.app=e}))},9101:(e,t,n)=>{if(window._=n(6486),window.axios=n(9669),window.$=window.jQuery=n(9755),window.axios){window.axios.defaults.headers.common["X-Requested-With"]="XMLHttpRequest";var r=document.head.querySelector('meta[name="csrf-token"]');r?window.axios.defaults.headers.common["X-CSRF-TOKEN"]=r.content:console.error("CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token")}},8514:(e,t,n)=>{"use strict";var r=n(6115);e.exports=function(e,t,n){e&&r((function(){e.apply(n||null,t||[])}))}},5229:(e,t,n)=>{"use strict";var r=n(2584),i=n(8514);e.exports=function(e,t){var n=t||{},a={};return void 0===e&&(e={}),e.on=function(t,n){return a[t]?a[t].push(n):a[t]=[n],e},e.once=function(t,n){return n._once=!0,e.on(t,n),e},e.off=function(t,n){var r=arguments.length;if(1===r)delete a[t];else if(0===r)a={};else{var i=a[t];if(!i)return e;i.splice(i.indexOf(n),1)}return e},e.emit=function(){var t=r(arguments);return e.emitterSnapshot(t.shift()).apply(this,t)},e.emitterSnapshot=function(t){var o=(a[t]||[]).slice(0);return function(){var a=r(arguments),s=this||e;if("error"===t&&!1!==n.throws&&!o.length)throw 1===a.length?a[0]:a;return o.forEach((function(r){n.async?i(r,a,s):r.apply(s,a),r._once&&e.off(t,r)})),e}},e}},1808:(e,t,n)=>{"use strict";var r=n(9638),i=n(4874),a=n.g.document,o=function(e,t,n,r){return e.addEventListener(t,n,r)},s=function(e,t,n,r){return e.removeEventListener(t,n,r)},u=[];function l(e,t,n){var r=function(e,t,n){var r,i;for(r=0;r{"use strict";var r=[],i="",a=/^on/;for(i in n.g)a.test(i)&&r.push(i.slice(2));e.exports=r},4630:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(3645),i=n.n(r)()((function(e){return e[1]}));i.push([e.id,'.vuecal__weekdays-headings{border-bottom:1px solid #ddd;margin-bottom:-1px}.vuecal--view-with-time .vuecal__weekdays-headings,.vuecal--week-numbers .vuecal__weekdays-headings{padding-left:3em}.vuecal--view-with-time.vuecal--twelve-hour .vuecal__weekdays-headings{font-size:.9em;padding-left:4em}.vuecal--overflow-x.vuecal--view-with-time .vuecal__weekdays-headings{padding-left:0}.vuecal__heading{align-items:center;font-weight:400;height:2.8em;justify-content:center;overflow:hidden;position:relative;text-align:center;width:100%}.vuecal__heading>.vuecal__flex{align-items:normal!important;height:100%;width:100%}.vuecal--sticky-split-labels .vuecal__heading{height:3.4em}.vuecal--day-view .vuecal__heading,.vuecal--month-view .vuecal__heading,.vuecal--week-view .vuecal__heading{width:14.2857%}.vuecal--hide-weekends.vuecal--day-view .vuecal__heading,.vuecal--hide-weekends.vuecal--month-view .vuecal__heading,.vuecal--hide-weekends.vuecal--week-view .vuecal__heading,.vuecal--years-view .vuecal__heading{width:20%}.vuecal--year-view .vuecal__heading{width:33.33%}.vuecal__heading .weekday-label{align-items:center;display:flex;flex-shrink:0;justify-content:center}.vuecal--small .vuecal__heading .small,.vuecal--xsmall .vuecal__heading .xsmall{display:block}.vuecal--small .vuecal__heading .full,.vuecal--small .vuecal__heading .xsmall,.vuecal--xsmall .vuecal__heading .full,.vuecal--xsmall .vuecal__heading .small,.vuecal__heading .small,.vuecal__heading .xsmall{display:none}.vuecal .vuecal__split-days-headers{align-items:center}@media screen and (max-width:550px){.vuecal__heading{line-height:1.2}.vuecal--small .vuecal__heading .small,.vuecal--xsmall .vuecal__heading .xsmall,.vuecal__heading .small{display:block}.vuecal--small .vuecal__heading .full,.vuecal--small .vuecal__heading .xsmall,.vuecal--xsmall .vuecal__heading .full,.vuecal--xsmall .vuecal__heading .small,.vuecal__heading .full,.vuecal__heading .xsmall{display:none}.vuecal--overflow-x .vuecal__heading .full,.vuecal--small.vuecal--overflow-x .vuecal__heading .small,.vuecal--xsmall.vuecal--overflow-x .vuecal__heading .xsmall{display:block}.vuecal--overflow-x .vuecal__heading .small,.vuecal--overflow-x .vuecal__heading .xsmall,.vuecal--small.vuecal--overflow-x .vuecal__heading .full,.vuecal--small.vuecal--overflow-x .vuecal__heading .xsmall,.vuecal--xsmall.vuecal--overflow-x .vuecal__heading .full,.vuecal--xsmall.vuecal--overflow-x .vuecal__heading .small{display:none}}@media screen and (max-width:450px){.vuecal--small .vuecal__heading .xsmall,.vuecal--xsmall .vuecal__heading .xsmall,.vuecal__heading .xsmall{display:block}.vuecal--small .vuecal__heading .full,.vuecal--small .vuecal__heading .small,.vuecal--xsmall .vuecal__heading .full,.vuecal--xsmall .vuecal__heading .small,.vuecal__heading .full,.vuecal__heading .small{display:none}.vuecal--small.vuecal--overflow-x .vuecal__heading .small,.vuecal--xsmall.vuecal--overflow-x .vuecal__heading .xsmall{display:block}.vuecal--small.vuecal--overflow-x .vuecal__heading .full,.vuecal--small.vuecal--overflow-x .vuecal__heading .xsmall,.vuecal--xsmall.vuecal--overflow-x .vuecal__heading .full,.vuecal--xsmall.vuecal--overflow-x .vuecal__heading .small{display:none}}.vuecal__header button{font-family:inherit;outline:none}.vuecal__menu{background-color:rgba(0,0,0,.02);justify-content:center;list-style-type:none;margin:0;padding:0}.vuecal__view-btn{background:none;border:none;border-bottom:0 solid;box-sizing:border-box;color:inherit;cursor:pointer;font-size:1.3em;height:2.2em;padding:.3em 1em;transition:.2s}.vuecal__view-btn--active{background:hsla(0,0%,100%,.15);border-bottom-width:2px}.vuecal__title-bar{align-items:center;background-color:rgba(0,0,0,.1);display:flex;font-size:1.4em;justify-content:space-between;line-height:1.3;min-height:2em;text-align:center}.vuecal--xsmall .vuecal__title-bar{font-size:1.3em}.vuecal__title{justify-content:center;position:relative}.vuecal__title button{background:none;border:none;cursor:pointer}.vuecal__title button.slide-fade--left-leave-active,.vuecal__title button.slide-fade--right-leave-active{width:100%}.vuecal__today-btn{align-items:center;background:none;border:none;display:flex;font-size:.8em;position:relative}.vuecal__today-btn span.default{cursor:pointer;font-size:.8em;padding:3px 6px;text-transform:uppercase}.vuecal__arrow{background:none;border:none;cursor:pointer;position:relative;white-space:nowrap;z-index:1}.vuecal__arrow--prev{margin-left:.6em}.vuecal__arrow--next{margin-right:.6em}.vuecal__arrow i.angle{border:solid;border-width:0 2px 2px 0;display:inline-block;padding:.25em;transform:rotate(-45deg)}.vuecal__arrow--prev i.angle{border-width:2px 0 0 2px}.vuecal__arrow--highlighted,.vuecal__today-btn--highlighted,.vuecal__view-btn--highlighted{background-color:rgba(0,0,0,.04);position:relative}.vuecal__arrow--highlighted *,.vuecal__today-btn--highlighted *,.vuecal__view-btn--highlighted *{pointer-events:none}.vuecal__arrow--highlighted:after,.vuecal__arrow--highlighted:before,.vuecal__today-btn--highlighted:after,.vuecal__today-btn--highlighted:before,.vuecal__view-btn--highlighted:after,.vuecal__view-btn--highlighted:before{-webkit-animation:sonar .8s ease-out infinite;animation:sonar .8s ease-out infinite;background-color:inherit;content:"";left:50%;pointer-events:none;position:absolute;top:50%}.vuecal__arrow--highlighted:before,.vuecal__today-btn--highlighted:before,.vuecal__view-btn--highlighted:before{border-radius:3em;height:3em;margin-left:-1.5em;margin-top:-1.5em;width:3em}.vuecal__arrow--highlighted:after,.vuecal__today-btn--highlighted:after,.vuecal__view-btn--highlighted:after{-webkit-animation-delay:.1s;animation-delay:.1s;-webkit-animation-duration:1.5s;animation-duration:1.5s;border-radius:2.6em;height:2.6em;margin-left:-1.3em;margin-top:-1.3em;width:2.6em}@-webkit-keyframes sonar{0%,20%{opacity:1}to{opacity:0;transform:scale(2.5)}}@keyframes sonar{0%,20%{opacity:1}to{opacity:0;transform:scale(2.5)}}@media screen and (max-width:450px){.vuecal__title{font-size:.9em}.vuecal__view-btn{padding-left:.6em;padding-right:.6em}}@media screen and (max-width:350px){.vuecal__view-btn{font-size:1.1em}}.vuecal__event{background-color:hsla(0,0%,97%,.8);box-sizing:border-box;color:#666;left:0;overflow:hidden;position:relative;transition:box-shadow .3s,left .3s,width .3s;width:100%;z-index:1}.vuecal--no-time .vuecal__event{min-height:8px}.vuecal:not(.vuecal--dragging-event) .vuecal__event:hover{z-index:2}.vuecal__cell .vuecal__event *{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text}.vuecal--view-with-time .vuecal__event:not(.vuecal__event--all-day){position:absolute}.vuecal--view-with-time .vuecal__bg .vuecal__event--all-day{bottom:0;opacity:.6;position:absolute;right:0;top:0;width:auto;z-index:0}.vuecal--view-with-time .vuecal__all-day .vuecal__event--all-day{left:0;position:relative}.vuecal__event--background{z-index:0}.vuecal__event--focus,.vuecal__event:focus{box-shadow:1px 1px 6px rgba(0,0,0,.2);outline:none;z-index:3}.vuecal__event.vuecal__event--dragging{opacity:.7}.vuecal__event.vuecal__event--static{opacity:0;transition:opacity .1s}@-moz-document url-prefix(){.vuecal__event.vuecal__event--dragging{opacity:1}}.vuecal__event-resize-handle{background-color:hsla(0,0%,100%,.3);bottom:0;cursor:ns-resize;height:1em;left:0;opacity:0;position:absolute;right:0;transform:translateY(110%);transition:.3s}.vuecal__event--focus .vuecal__event-resize-handle,.vuecal__event--resizing .vuecal__event-resize-handle,.vuecal__event:focus .vuecal__event-resize-handle,.vuecal__event:hover .vuecal__event-resize-handle{opacity:1;transform:translateY(0)}.vuecal__event--dragging .vuecal__event-resize-handle{display:none}.vuecal__event-delete{align-items:center;background-color:rgba(221,51,51,.85);color:#fff;cursor:pointer;display:flex;flex-direction:column;height:1.4em;justify-content:center;left:0;line-height:1.4em;position:absolute;right:0;top:0;transform:translateY(-110%);transition:.3s;z-index:0}.vuecal__event .vuecal__event-delete{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vuecal--full-height-delete .vuecal__event-delete{bottom:0;height:auto}.vuecal--full-height-delete .vuecal__event-delete:before{background-image:url(\'data:image/svg+xml;utf8,\');content:"";display:block;height:1.8em;width:1.7em}.vuecal__event--deletable .vuecal__event-delete{transform:translateY(0);z-index:1}.vuecal__event--deletable.vuecal__event--dragging .vuecal__event-delete{opacity:0;transition:none}.vuecal--month-view .vuecal__event-title{font-size:.85em}.vuecal--short-events .vuecal__event-title{overflow:hidden;padding:0 3px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.vuecal__event-content,.vuecal__event-title{-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto}.vuecal__event-title--edit{background-image:url(\'data:image/svg+xml;utf8,\');background-position:120% .15em;background-repeat:no-repeat;background-size:.4em;border-bottom:1px solid transparent;color:inherit;outline:none;text-align:center;transition:.3s;width:100%}.vuecal__event-title--edit:focus,.vuecal__event-title--edit:hover{background-position:99% .15em;background-size:1.2em;border-color:rgba(0,0,0,.4)}.vuecal__cell{align-items:center;display:flex;justify-content:center;position:relative;text-align:center;transition:background-color .15s ease-in-out;width:100%}.vuecal__cells.month-view .vuecal__cell,.vuecal__cells.week-view .vuecal__cell{width:14.2857%}.vuecal--hide-weekends .vuecal__cells.month-view .vuecal__cell,.vuecal--hide-weekends .vuecal__cells.week-view .vuecal__cell,.vuecal__cells.years-view .vuecal__cell{width:20%}.vuecal__cells.year-view .vuecal__cell{width:33.33%}.vuecal__cells.day-view .vuecal__cell{flex:1}.vuecal--overflow-x.vuecal--day-view .vuecal__cell{width:auto}.vuecal--click-to-navigate .vuecal__cell:not(.vuecal__cell--disabled){cursor:pointer}.vuecal--day-view.vuecal--no-time .vuecal__cell:not(.vuecal__cell--has-splits),.vuecal--view-with-time .vuecal__cell,.vuecal--week-view.vuecal--no-time .vuecal__cell:not(.vuecal__cell--has-splits){display:block}.vuecal__cell.vuecal__cell--has-splits{display:flex;flex-direction:row}.vuecal__cell:before{border:1px solid hsla(0,0%,77%,.25);bottom:-1px;content:"";left:0;position:absolute;right:-1px;top:0;z-index:0}.vuecal--overflow-x.vuecal--day-view .vuecal__cell:before{bottom:0}.vuecal__cell--current,.vuecal__cell--today{background-color:rgba(240,240,255,.4);z-index:1}.vuecal__cell--selected{background-color:rgba(235,255,245,.4);z-index:2}.vuecal--day-view .vuecal__cell--selected{background:none}.vuecal__cell--out-of-scope{color:rgba(0,0,0,.25)}.vuecal__cell--disabled{color:rgba(0,0,0,.25);cursor:not-allowed}.vuecal__cell--highlighted:not(.vuecal__cell--has-splits),.vuecal__cell-split.vuecal__cell-split--highlighted{background-color:rgba(0,0,0,.04);transition-duration:5ms}.vuecal__cell-content{height:100%;outline:none;position:relative;width:100%}.vuecal--month-view .vuecal__cell-content,.vuecal--year-view .vuecal__cell-content,.vuecal--years-view .vuecal__cell-content{justify-content:center}.vuecal__cell-split{display:flex;flex-direction:column;flex-grow:1;height:100%;position:relative;transition:background-color .15s ease-in-out}.vuecal__cell-events{width:100%}.vuecal__cell-events-count{background:#999;border-radius:12px;color:#fff;font-size:10px;height:12px;left:50%;line-height:12px;min-width:12px;padding:0 3px;top:65%;transform:translateX(-50%)}.vuecal__cell .vuecal__special-hours,.vuecal__cell-events-count{box-sizing:border-box;position:absolute}.vuecal__cell .vuecal__special-hours{left:0;right:0}.vuecal--overflow-x.vuecal--week-view .vuecal__cell,.vuecal__cell-split{overflow:hidden}.vuecal__no-event{color:#aaa;justify-self:flex-start;margin-bottom:auto;padding-top:1em}.vuecal__all-day .vuecal__no-event{display:none}.vuecal__now-line{border-top:1px solid;color:red;height:0;left:0;opacity:.6;position:absolute;width:100%;z-index:1}.vuecal__now-line:before{border:5px solid transparent;border-left-color:currentcolor;content:"";left:0;position:absolute;top:-6px}.vuecal{box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);height:100%}.vuecal *,.vuecal--has-touch :not(.vuecal__event-title--edit){-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.vuecal--has-touch :not(.vuecal__event-title--edit){-webkit-touch-callout:none}.vuecal .clickable{cursor:pointer}.vuecal--drag-creating-event,.vuecal--resizing-event{cursor:ns-resize}.vuecal--dragging-event{cursor:move;cursor:-webkit-grabbing;cursor:grabbing}.vuecal .dragging-helper{background:rgba(138,190,230,.8);border:1px solid #61a9e0;height:40px;position:absolute;width:60px;z-index:10}.vuecal--xsmall{font-size:.9em}.vuecal__flex{display:flex;flex-direction:row}.vuecal__flex[column]{flex-direction:column}.vuecal__flex[column],.vuecal__flex[grow]{flex:1 1 auto}.vuecal__flex[grow]{width:100%}.vuecal__flex[wrap]{flex-wrap:wrap}.vuecal__split-days-headers.slide-fade--right-leave-active{display:none}.vuecal--week-numbers.vuecal--month-view .vuecal__split-days-headers{margin-left:3em}.vuecal--day-view:not(.vuecal--overflow-x) .vuecal__split-days-headers{height:2.2em;margin-left:3em}.vuecal--day-view.vuecal--twelve-hour:not(.vuecal--overflow-x) .vuecal__split-days-headers{margin-left:4em}.vuecal__split-days-headers .day-split-header{align-items:center;display:flex;flex-basis:0;flex-grow:1;height:100%;justify-content:center}.vuecal__split-days-headers .vuecal--day-view.vuecal--overflow-x.vuecal--sticky-split-labels .day-split-header{height:1.5em}.vuecal__body{overflow:hidden;position:relative}.vuecal__all-day{flex-shrink:0;margin-bottom:-1px;min-height:1.7em}.vuecal__all-day-text{align-items:center;border-bottom:1px solid #ddd;box-sizing:border-box;color:#999;display:flex;flex-shrink:0;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;justify-content:flex-end;padding-right:2px;width:3em}.vuecal__all-day-text span{font-size:.85em;line-height:1.1;text-align:right}.vuecal--twelve-hour .vuecal__all-day>span{width:4em}.vuecal__bg{-webkit-overflow-scrolling:touch;margin-bottom:1px;min-height:60px;overflow:auto;overflow-x:hidden;position:relative;width:100%}.vuecal--no-time .vuecal__bg{display:flex;flex:1 1 auto;overflow:auto}.vuecal__week-numbers{flex-shrink:0!important;width:3em}.vuecal__week-numbers .vuecal__week-number-cell{align-items:center;font-size:.9em;justify-content:center;justify-items:center;opacity:.4}.vuecal__scrollbar-check{bottom:0;left:0;overflow:scroll;position:absolute;right:0;top:0;visibility:hidden;z-index:-1}.vuecal__scrollbar-check div{height:120%}.vuecal__time-column{flex-shrink:0;height:100%;width:3em}.vuecal--twelve-hour .vuecal__time-column{font-size:.9em;width:4em}.vuecal--overflow-x.vuecal--week-view .vuecal__time-column{box-shadow:0 1px 1px rgba(0,0,0,.3);margin-top:2.8em}.vuecal--overflow-x.vuecal--week-view.vuecal--sticky-split-labels .vuecal__time-column{margin-top:3.4em}.vuecal--overflow-x.vuecal--day-view.vuecal--sticky-split-labels .vuecal__time-column{margin-top:1.5em}.vuecal__time-column .vuecal__time-cell{color:#999;font-size:.9em;padding-right:2px;text-align:right}.vuecal__time-column .vuecal__time-cell-line:before{border-top:1px solid hsla(0,0%,77%,.3);content:"";left:0;position:absolute;right:0}.vuecal__cells{margin:0 1px 1px 0}.vuecal--overflow-x.vuecal--day-view .vuecal__cells{margin:0}.vuecal--events-on-month-view.vuecal--short-events .vuecal__cells{width:99.9%}.vuecal--overflow-x.vuecal--day-view .vuecal__cells,.vuecal--overflow-x.vuecal--week-view .vuecal__cells{flex-wrap:nowrap;overflow:auto}.slide-fade--left-enter-active,.slide-fade--left-leave-active,.slide-fade--right-enter-active,.slide-fade--right-leave-active{transition:.25s ease-out}.slide-fade--left-enter,.slide-fade--right-leave-to{opacity:0;transform:translateX(-15px)}.slide-fade--left-leave-to,.slide-fade--right-enter{opacity:0;transform:translateX(15px)}.slide-fade--left-leave-active,.slide-fade--right-leave-active{height:100%;position:absolute!important}.vuecal__title-bar .slide-fade--left-leave-active,.vuecal__title-bar .slide-fade--right-leave-active{height:auto;left:0;right:0}.vuecal__heading .slide-fade--left-leave-active,.vuecal__heading .slide-fade--right-leave-active{align-items:center;display:flex}.vuecal--green-theme .vuecal__cell-events-count,.vuecal--green-theme .vuecal__menu{background-color:#42b983;color:#fff}.vuecal--green-theme .vuecal__title-bar{background-color:#e4f5ef}.vuecal--green-theme .vuecal__cell--current,.vuecal--green-theme .vuecal__cell--today{background-color:rgba(240,240,255,.4)}.vuecal--green-theme:not(.vuecal--day-view) .vuecal__cell--selected{background-color:rgba(235,255,245,.4)}.vuecal--green-theme .vuecal__cell--selected:before{border-color:rgba(66,185,131,.5)}.vuecal--green-theme .vuecal__cell--highlighted:not(.vuecal__cell--has-splits),.vuecal--green-theme .vuecal__cell-split--highlighted{background-color:rgba(195,255,225,.5)}.vuecal--green-theme .vuecal__arrow--highlighted,.vuecal--green-theme .vuecal__today-btn--highlighted,.vuecal--green-theme .vuecal__view-btn--highlighted{background-color:rgba(136,236,191,.25)}.vuecal--blue-theme .vuecal__cell-events-count,.vuecal--blue-theme .vuecal__menu{background-color:rgba(66,163,185,.8);color:#fff}.vuecal--blue-theme .vuecal__title-bar{background-color:rgba(0,165,188,.3)}.vuecal--blue-theme .vuecal__cell--current,.vuecal--blue-theme .vuecal__cell--today{background-color:rgba(240,240,255,.4)}.vuecal--blue-theme:not(.vuecal--day-view) .vuecal__cell--selected{background-color:rgba(235,253,255,.4)}.vuecal--blue-theme .vuecal__cell--selected:before{border-color:rgba(115,191,204,.5)}.vuecal--blue-theme .vuecal__cell--highlighted:not(.vuecal__cell--has-splits),.vuecal--blue-theme .vuecal__cell-split--highlighted{background-color:rgba(0,165,188,.06)}.vuecal--blue-theme .vuecal__arrow--highlighted,.vuecal--blue-theme .vuecal__today-btn--highlighted,.vuecal--blue-theme .vuecal__view-btn--highlighted{background-color:rgba(66,163,185,.2)}.vuecal--rounded-theme .vuecal__weekdays-headings{border:none}.vuecal--rounded-theme .vuecal__cell,.vuecal--rounded-theme .vuecal__cell:before{background:none;border:none}.vuecal--rounded-theme .vuecal__cell--out-of-scope{opacity:.4}.vuecal--rounded-theme .vuecal__cell-content{border:1px solid transparent;border-radius:30px;color:#333;flex-grow:0;height:30px;width:30px}.vuecal--rounded-theme.vuecal--day-view .vuecal__cell-content{background:none;width:auto}.vuecal--rounded-theme.vuecal--year-view .vuecal__cell{width:33.33%}.vuecal--rounded-theme.vuecal--year-view .vuecal__cell-content{width:85px}.vuecal--rounded-theme.vuecal--years-view .vuecal__cell-content{width:52px}.vuecal--rounded-theme .vuecal__cell{background-color:transparent!important}.vuecal--rounded-theme.vuecal--green-theme:not(.vuecal--day-view) .vuecal__cell-content{background-color:#f1faf7}.vuecal--rounded-theme.vuecal--green-theme:not(.vuecal--day-view) .vuecal__cell--today .vuecal__cell-content{background-color:#42b983;color:#fff}.vuecal--rounded-theme.vuecal--green-theme .vuecal--day-view .vuecal__cell--today:before{background-color:rgba(66,185,131,.05)}.vuecal--rounded-theme.vuecal--green-theme:not(.vuecal--day-view) .vuecal__cell--selected .vuecal__cell-content{border-color:#42b983}.vuecal--rounded-theme.vuecal--green-theme .vuecal__cell--highlighted:not(.vuecal__cell--has-splits),.vuecal--rounded-theme.vuecal--green-theme .vuecal__cell-split--highlighted{background-color:rgba(195,255,225,.5)}.vuecal--rounded-theme.vuecal--blue-theme:not(.vuecal--day-view) .vuecal__cell-content{background-color:rgba(100,182,255,.2)}.vuecal--rounded-theme.vuecal--blue-theme:not(.vuecal--day-view) .vuecal__cell--today .vuecal__cell-content{background-color:#8fb7e4;color:#fff}.vuecal--rounded-theme.vuecal--blue-theme .vuecal--day-view .vuecal__cell--today:before{background-color:rgba(143,183,228,.1)}.vuecal--rounded-theme.vuecal--blue-theme:not(.vuecal--day-view) .vuecal__cell--selected .vuecal__cell-content{border-color:#61a9e0}.vuecal--rounded-theme.vuecal--blue-theme .vuecal__cell--highlighted:not(.vuecal__cell--has-splits),.vuecal--rounded-theme.vuecal--blue-theme .vuecal__cell-split--highlighted{background-color:rgba(0,165,188,.06)}.vuecal--date-picker .vuecal__title-bar{font-size:1.2em}.vuecal--date-picker .vuecal__heading{font-weight:500;height:2.2em;opacity:.4}.vuecal--date-picker .vuecal__weekdays-headings{border:none}.vuecal--date-picker .vuecal__body{margin-left:1px}.vuecal--date-picker .vuecal__cell,.vuecal--date-picker .vuecal__cell:before{background:none;border:none}.vuecal--date-picker .vuecal__cell-content{border:1px solid transparent;border-radius:25px;flex-grow:0;height:26px;transition:background-color .2s cubic-bezier(.39,.58,.57,1)}.vuecal--date-picker.vuecal--years-view .vuecal__cell-content{flex:0;height:24px;padding:0 4px}.vuecal--date-picker.vuecal--year-view .vuecal__cell-content{flex:0;padding:0 15px}.vuecal--date-picker.vuecal--month-view .vuecal__cell-content{width:26px}.vuecal--date-picker:not(.vuecal--day-view) .vuecal__cell-content:hover{background-color:rgba(0,0,0,.1)}.vuecal--date-picker:not(.vuecal--day-view) .vuecal__cell--selected .vuecal__cell-content{background-color:#42b982;color:#fff}.vuecal--date-picker:not(.vuecal--day-view) .vuecal__cell--current .vuecal__cell-content,.vuecal--date-picker:not(.vuecal--day-view) .vuecal__cell--today .vuecal__cell-content{border-color:#42b982}',""]);const a=i},3645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var a=0;a{var r=n.g.CustomEvent;e.exports=function(){try{var e=new r("cat",{detail:{foo:"bar"}});return"cat"===e.type&&"bar"===e.detail.foo}catch(e){}return!1}()?r:"undefined"!=typeof document&&"function"==typeof document.createEvent?function(e,t){var n=document.createEvent("CustomEvent");return t?n.initCustomEvent(e,t.bubbles,t.cancelable,t.detail):n.initCustomEvent(e,!1,!1,void 0),n}:function(e,t){var n=document.createEventObject();return n.type=e,t?(n.bubbles=Boolean(t.bubbles),n.cancelable=Boolean(t.cancelable),n.detail=t.detail):(n.bubbles=!1,n.cancelable=!1,n.detail=void 0),n}},3561:e=>{e.exports=function(e){var t=new Date(e.getTime()),n=t.getTimezoneOffset();return t.setSeconds(0,0),6e4*n+t.getTime()%6e4}},3374:(e,t,n)=>{var r=n(1884);e.exports=function(e,t){var n=r(e).getTime(),i=r(t).getTime();return ni?1:0}},3558:(e,t,n)=>{var r=n(1884);e.exports=function(e,t){var n=r(e).getTime(),i=r(t).getTime();return n>i?-1:n{var r=n(1884);e.exports=function(e,t){var n=r(e),i=r(t);return 12*(n.getFullYear()-i.getFullYear())+(n.getMonth()-i.getMonth())}},8081:(e,t,n)=>{var r=n(1884);e.exports=function(e,t){var n=r(e),i=r(t);return n.getTime()-i.getTime()}},1387:(e,t,n)=>{var r=n(1884),i=n(1924),a=n(3374);e.exports=function(e,t){var n=r(e),o=r(t),s=a(n,o),u=Math.abs(i(n,o));return n.setMonth(n.getMonth()-s*u),s*(u-(a(n,o)===-s))}},7977:(e,t,n)=>{var r=n(8081);e.exports=function(e,t){var n=r(e,t)/1e3;return n>0?Math.floor(n):Math.ceil(n)}},3332:(e,t,n)=>{var r=n(3558),i=n(1884),a=n(7977),o=n(1387),s=n(7479),u=43200;e.exports=function(e,t,n){var l=n||{},c=r(e,t),d=l.locale,f=s.distanceInWords.localize;d&&d.distanceInWords&&d.distanceInWords.localize&&(f=d.distanceInWords.localize);var h,p,m={addSuffix:Boolean(l.addSuffix),comparison:c};c>0?(h=i(e),p=i(t)):(h=i(t),p=i(e));var v,_=a(p,h),y=p.getTimezoneOffset()-h.getTimezoneOffset(),g=Math.round(_/60)-y;if(g<2)return l.includeSeconds?_<5?f("lessThanXSeconds",5,m):_<10?f("lessThanXSeconds",10,m):_<20?f("lessThanXSeconds",20,m):_<40?f("halfAMinute",null,m):f(_<60?"lessThanXMinutes":"xMinutes",1,m):0===g?f("lessThanXMinutes",1,m):f("xMinutes",g,m);if(g<45)return f("xMinutes",g,m);if(g<90)return f("aboutXHours",1,m);if(g<1440)return f("aboutXHours",Math.round(g/60),m);if(g<2520)return f("xDays",1,m);if(g{var r=n(3332);e.exports=function(e,t){return r(Date.now(),e,t)}},4286:e=>{e.exports=function(e){return e instanceof Date}},8854:e=>{var t=["M","MM","Q","D","DD","DDD","DDDD","d","E","W","WW","YY","YYYY","GG","GGGG","H","HH","h","hh","m","mm","s","ss","S","SS","SSS","Z","ZZ","X","x"];e.exports=function(e){var n=[];for(var r in e)e.hasOwnProperty(r)&&n.push(r);var i=t.concat(n).sort().reverse();return new RegExp("(\\[[^\\[]*\\])|(\\\\)?("+i.join("|")+"|.)","g")}},2565:e=>{e.exports=function(){var e={lessThanXSeconds:{one:"أقل من ثانية واحدة",other:"أقل من {{count}} ثواني"},xSeconds:{one:"ثانية واحدة",other:"{{count}} ثواني"},halfAMinute:"نصف دقيقة",lessThanXMinutes:{one:"أقل من دقيقة",other:"أقل من {{count}} دقيقة"},xMinutes:{one:"دقيقة واحدة",other:"{{count}} دقائق"},aboutXHours:{one:"ساعة واحدة تقريباً",other:"{{count}} ساعات تقريباً"},xHours:{one:"ساعة واحدة",other:"{{count}} ساعات"},xDays:{one:"يوم واحد",other:"{{count}} أيام"},aboutXMonths:{one:"شهر واحد تقريباً",other:"{{count}} أشهر تقريباً"},xMonths:{one:"شهر واحد",other:"{{count}} أشهر"},aboutXYears:{one:"عام واحد تقريباً",other:"{{count}} أعوام تقريباً"},xYears:{one:"عام واحد",other:"{{count}} أعوام"},overXYears:{one:"أكثر من عام",other:"أكثر من {{count}} أعوام"},almostXYears:{one:"عام واحد تقريباً",other:"{{count}} أعوام تقريباً"}};return{localize:function(t,n,r){var i;return r=r||{},i="string"==typeof e[t]?e[t]:1===n?e[t].one:e[t].other.replace("{{count}}",n),r.addSuffix?r.comparison>0?"في خلال "+i:"منذ "+i:i}}}},1883:(e,t,n)=>{var r=n(8854);e.exports=function(){var e=["يناير","فبراير","مارس","أبريل","مايو","يونيو","يوليو","أغسطس","سبتمبر","أكتوبر","نوفمبر","ديسمبر"],t=["كانون الثاني يناير","شباط فبراير","آذار مارس","نيسان أبريل","أيار مايو","حزيران يونيو","تموز يوليو","آب أغسطس","أيلول سبتمبر","تشرين الأول أكتوبر","تشرين الثاني نوفمبر","كانون الأول ديسمبر"],n=["ح","ن","ث","ر","خ","ج","س"],i=["أحد","إثنين","ثلاثاء","أربعاء","خميس","جمعة","سبت"],a=["الأحد","الإثنين","الثلاثاء","الأربعاء","الخميس","الجمعة","السبت"],o=["صباح","مساء"],s=["ص","م"],u=["صباحاً","مساءاً"],l={MMM:function(t){return e[t.getMonth()]},MMMM:function(e){return t[e.getMonth()]},dd:function(e){return n[e.getDay()]},ddd:function(e){return i[e.getDay()]},dddd:function(e){return a[e.getDay()]},A:function(e){return e.getHours()/12>=1?o[1]:o[0]},a:function(e){return e.getHours()/12>=1?s[1]:s[0]},aa:function(e){return e.getHours()/12>=1?u[1]:u[0]}};return["M","D","DDD","d","Q","W"].forEach((function(e){l[e+"o"]=function(t,n){return r=n[e](t),String(r);var r}})),{formatters:l,formattingTokensRegExp:r(l)}}},8137:(e,t,n)=>{var r=n(2565),i=n(1883);e.exports={distanceInWords:r(),format:i()}},2894:e=>{e.exports=function(){var e={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};return{localize:function(t,n,r){var i;return r=r||{},i="string"==typeof e[t]?e[t]:1===n?e[t].one:e[t].other.replace("{{count}}",n),r.addSuffix?r.comparison>0?"in "+i:i+" ago":i}}}},664:(e,t,n)=>{var r=n(8854);e.exports=function(){var e=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],t=["January","February","March","April","May","June","July","August","September","October","November","December"],n=["Su","Mo","Tu","We","Th","Fr","Sa"],i=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],a=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],o=["AM","PM"],s=["am","pm"],u=["a.m.","p.m."],l={MMM:function(t){return e[t.getMonth()]},MMMM:function(e){return t[e.getMonth()]},dd:function(e){return n[e.getDay()]},ddd:function(e){return i[e.getDay()]},dddd:function(e){return a[e.getDay()]},A:function(e){return e.getHours()/12>=1?o[1]:o[0]},a:function(e){return e.getHours()/12>=1?s[1]:s[0]},aa:function(e){return e.getHours()/12>=1?u[1]:u[0]}};return["M","D","DDD","d","Q","W"].forEach((function(e){l[e+"o"]=function(t,n){return function(e){var t=e%100;if(t>20||t<10)switch(t%10){case 1:return e+"st";case 2:return e+"nd";case 3:return e+"rd"}return e+"th"}(n[e](t))}})),{formatters:l,formattingTokensRegExp:r(l)}}},7479:(e,t,n)=>{var r=n(2894),i=n(664);e.exports={distanceInWords:r(),format:i()}},2860:e=>{e.exports=function(){var e={lessThanXSeconds:{one:"bir saniyeden az",other:"{{count}} saniyeden az"},xSeconds:{one:"1 saniye",other:"{{count}} saniye"},halfAMinute:"yarım dakika",lessThanXMinutes:{one:"bir dakikadan az",other:"{{count}} dakikadan az"},xMinutes:{one:"1 dakika",other:"{{count}} dakika"},aboutXHours:{one:"yaklaşık 1 saat",other:"yaklaşık {{count}} saat"},xHours:{one:"1 saat",other:"{{count}} saat"},xDays:{one:"1 gün",other:"{{count}} gün"},aboutXMonths:{one:"yaklaşık 1 ay",other:"yaklaşık {{count}} ay"},xMonths:{one:"1 ay",other:"{{count}} ay"},aboutXYears:{one:"yaklaşık 1 yıl",other:"yaklaşık {{count}} yıl"},xYears:{one:"1 yıl",other:"{{count}} yıl"},overXYears:{one:"1 yıldan fazla",other:"{{count}} yıldan fazla"},almostXYears:{one:"neredeyse 1 yıl",other:"neredeyse {{count}} yıl"}},t=["lessThanXSeconds","lessThanXMinutes","overXYears"];return{localize:function(n,r,i){var a;if(i=i||{},a="string"==typeof e[n]?e[n]:1===r?e[n].one:e[n].other.replace("{{count}}",r),i.addSuffix){var o="";return t.indexOf(n)>-1&&(o=" bir süre"),i.comparison>0?a+o+" içinde":a+o+" önce"}return a}}}},7791:(e,t,n)=>{var r=n(8854);e.exports=function(){var e=["Oca","Şub","Mar","Nis","May","Haz","Tem","Ağu","Eyl","Eki","Kas","Ara"],t=["Ocak","Şubat","Mart","Nisan","Mayıs","Haziran","Temmuz","Ağustos","Eylül","Ekim","Kasım","Aralık"],n=["Pz","Pt","Sa","Ça","Pe","Cu","Ct"],i=["Paz","Pts","Sal","Çar","Per","Cum","Cts"],a=["Pazar","Pazartesi","Salı","Çarşamba","Perşembe","Cuma","Cumartesi"],o=["ÖÖ","ÖS"],s=["öö","ös"],u=["ö.ö.","ö.s."],l={MMM:function(t){return e[t.getMonth()]},MMMM:function(e){return t[e.getMonth()]},dd:function(e){return n[e.getDay()]},ddd:function(e){return i[e.getDay()]},dddd:function(e){return a[e.getDay()]},A:function(e){return e.getHours()/12>=1?o[1]:o[0]},a:function(e){return e.getHours()/12>=1?s[1]:s[0]},aa:function(e){return e.getHours()/12>=1?u[1]:u[0]}};return["M","D","DDD","d","Q","W"].forEach((function(e){l[e+"o"]=function(t,n){return function(e){var t={1:"'inci",2:"'inci",3:"'üncü",4:"'üncü",5:"'inci",6:"'ıncı",7:"'inci",8:"'inci",9:"'uncu",10:"'uncu",20:"'inci",30:"'uncu",50:"'inci",60:"'ıncı",70:"'inci",80:"'inci",90:"'ıncı",100:"'üncü"};if(0===e)return"0'ıncı";var n=e%10,r=e%100-n,i=e>=100?100:null;return e+(t[n]||t[r]||t[i])}(n[e](t))}})),{formatters:l,formattingTokensRegExp:r(l)}}},1062:(e,t,n)=>{var r=n(2860),i=n(7791);e.exports={distanceInWords:r(),format:i()}},1884:(e,t,n)=>{var r=n(3561),i=n(4286),a=36e5,o=6e4,s=/[T ]/,u=/:/,l=/^(\d{2})$/,c=[/^([+-]\d{2})$/,/^([+-]\d{3})$/,/^([+-]\d{4})$/],d=/^(\d{4})/,f=[/^([+-]\d{4})/,/^([+-]\d{5})/,/^([+-]\d{6})/],h=/^-(\d{2})$/,p=/^-?(\d{3})$/,m=/^-?(\d{2})-?(\d{2})$/,v=/^-?W(\d{2})$/,_=/^-?W(\d{2})-?(\d{1})$/,y=/^(\d{2}([.,]\d*)?)$/,g=/^(\d{2}):?(\d{2}([.,]\d*)?)$/,b=/^(\d{2}):?(\d{2}):?(\d{2}([.,]\d*)?)$/,w=/([Z+-].*)$/,M=/^(Z)$/,k=/^([+-])(\d{2})$/,L=/^([+-])(\d{2}):?(\d{2})$/;function x(e,t,n){t=t||0,n=n||0;var r=new Date(0);r.setUTCFullYear(e,0,4);var i=7*t+n+1-(r.getUTCDay()||7);return r.setUTCDate(r.getUTCDate()+i),r}e.exports=function(e,t){if(i(e))return new Date(e.getTime());if("string"!=typeof e)return new Date(e);var n=(t||{}).additionalDigits;n=null==n?2:Number(n);var D=function(e){var t,n={},r=e.split(s);u.test(r[0])?(n.date=null,t=r[0]):(n.date=r[0],t=r[1]);if(t){var i=w.exec(t);i?(n.time=t.replace(i[1],""),n.timezone=i[1]):n.time=t}return n}(e),T=function(e,t){var n,r=c[t],i=f[t];if(n=d.exec(e)||i.exec(e)){var a=n[1];return{year:parseInt(a,10),restDateString:e.slice(a.length)}}if(n=l.exec(e)||r.exec(e)){var o=n[1];return{year:100*parseInt(o,10),restDateString:e.slice(o.length)}}return{year:null}}(D.date,n),Y=T.year,S=function(e,t){if(null===t)return null;var n,r,i;if(0===e.length)return(r=new Date(0)).setUTCFullYear(t),r;if(n=h.exec(e))return r=new Date(0),i=parseInt(n[1],10)-1,r.setUTCFullYear(t,i),r;if(n=p.exec(e)){r=new Date(0);var a=parseInt(n[1],10);return r.setUTCFullYear(t,0,a),r}if(n=m.exec(e)){r=new Date(0),i=parseInt(n[1],10)-1;var o=parseInt(n[2],10);return r.setUTCFullYear(t,i,o),r}if(n=v.exec(e))return x(t,parseInt(n[1],10)-1);if(n=_.exec(e)){return x(t,parseInt(n[1],10)-1,parseInt(n[2],10)-1)}return null}(T.restDateString,Y);if(S){var j,O=S.getTime(),E=0;if(D.time&&(E=function(e){var t,n,r;if(t=y.exec(e))return(n=parseFloat(t[1].replace(",",".")))%24*a;if(t=g.exec(e))return n=parseInt(t[1],10),r=parseFloat(t[2].replace(",",".")),n%24*a+r*o;if(t=b.exec(e)){n=parseInt(t[1],10),r=parseInt(t[2],10);var i=parseFloat(t[3].replace(",","."));return n%24*a+r*o+1e3*i}return null}(D.time)),D.timezone)j=function(e){var t,n;if(t=M.exec(e))return 0;if(t=k.exec(e))return n=60*parseInt(t[2],10),"+"===t[1]?-n:n;if(t=L.exec(e))return n=60*parseInt(t[2],10)+parseInt(t[3],10),"+"===t[1]?-n:n;return 0}(D.timezone)*o;else{var C=O+E,A=new Date(C);j=r(A);var H=new Date(C);H.setDate(A.getDate()+1);var P=r(H)-r(A);P>0&&(j+=P)}return new Date(O+E+j)}return new Date(e)}},9425:e=>{"use strict";var t={};function n(e){var n=t[e];return n?n.lastIndex=0:t[e]=n=new RegExp("(?:^|\\s)"+e+"(?:\\s|$)","g"),n}e.exports={add:function(e,t){var r=e.className;r.length?n(t).test(r)||(e.className+=" "+t):e.className=t},rm:function(e,t){e.className=e.className.replace(n(t)," ").trim()}}},7137:(e,t,n)=>{"use strict";var r=n(5229),i=n(1808),a=n(9425),o=document,s=o.documentElement;function u(e,t,r,a){n.g.navigator.pointerEnabled?i[t](e,{mouseup:"pointerup",mousedown:"pointerdown",mousemove:"pointermove"}[r],a):n.g.navigator.msPointerEnabled?i[t](e,{mouseup:"MSPointerUp",mousedown:"MSPointerDown",mousemove:"MSPointerMove"}[r],a):(i[t](e,{mouseup:"touchend",mousedown:"touchstart",mousemove:"touchmove"}[r],a),i[t](e,r,a))}function l(e){if(void 0!==e.touches)return e.touches.length;if(void 0!==e.which&&0!==e.which)return e.which;if(void 0!==e.buttons)return e.buttons;var t=e.button;return void 0!==t?1&t?1:2&t?3:4&t?2:0:void 0}function c(e){var t=e.getBoundingClientRect();return{left:t.left+d("scrollLeft","pageXOffset"),top:t.top+d("scrollTop","pageYOffset")}}function d(e,t){return void 0!==n.g[t]?n.g[t]:s.clientHeight?s[e]:o.body[e]}function f(e,t,n){var r,i=(e=e||{}).className||"";return e.className+=" gu-hide",r=o.elementFromPoint(t,n),e.className=i,r}function h(){return!1}function p(){return!0}function m(e){return e.width||e.right-e.left}function v(e){return e.height||e.bottom-e.top}function _(e){return e.parentNode===o?null:e.parentNode}function y(e){return"INPUT"===e.tagName||"TEXTAREA"===e.tagName||"SELECT"===e.tagName||g(e)}function g(e){return!!e&&("false"!==e.contentEditable&&("true"===e.contentEditable||g(_(e))))}function b(e){return e.nextElementSibling||function(){var t=e;do{t=t.nextSibling}while(t&&1!==t.nodeType);return t}()}function w(e,t){var n=function(e){return e.targetTouches&&e.targetTouches.length?e.targetTouches[0]:e.changedTouches&&e.changedTouches.length?e.changedTouches[0]:e}(t),r={pageX:"clientX",pageY:"clientY"};return e in r&&!(e in n)&&r[e]in n&&(e=r[e]),n[e]}e.exports=function(e,t){var n,d,g,M,k,L,x,D,T,Y,S,j=arguments.length;1===j&&!1===Array.isArray(e)&&(t=e,e=[]);var O,E=null,C=t||{};void 0===C.moves&&(C.moves=p),void 0===C.accepts&&(C.accepts=p),void 0===C.invalid&&(C.invalid=q),void 0===C.containers&&(C.containers=e||[]),void 0===C.isContainer&&(C.isContainer=h),void 0===C.copy&&(C.copy=!1),void 0===C.copySortSource&&(C.copySortSource=!1),void 0===C.revertOnSpill&&(C.revertOnSpill=!1),void 0===C.removeOnSpill&&(C.removeOnSpill=!1),void 0===C.direction&&(C.direction="vertical"),void 0===C.ignoreInputTextSelection&&(C.ignoreInputTextSelection=!0),void 0===C.mirrorContainer&&(C.mirrorContainer=o.body);var A=r({containers:C.containers,start:V,end:J,cancel:Q,remove:K,destroy:I,canMove:B,dragging:!1});return!0===C.removeOnSpill&&A.on("over",ie).on("out",ae),P(),A;function H(e){return-1!==A.containers.indexOf(e)||C.isContainer(e)}function P(e){var t=e?"remove":"add";u(s,t,"mousedown",W),u(s,t,"mouseup",X)}function N(e){u(s,e?"remove":"add","mousemove",R)}function $(e){var t=e?"remove":"add";i[t](s,"selectstart",F),i[t](s,"click",F)}function I(){P(!0),X({})}function F(e){O&&e.preventDefault()}function W(e){if(L=e.clientX,x=e.clientY,!(1!==l(e)||e.metaKey||e.ctrlKey)){var t=e.target,n=z(t);n&&(O=n,N(),"mousedown"===e.type&&(y(t)?t.focus():e.preventDefault()))}}function R(e){if(O)if(0!==l(e)){if(!(void 0!==e.clientX&&Math.abs(e.clientX-L)<=(C.slideFactorX||0)&&void 0!==e.clientY&&Math.abs(e.clientY-x)<=(C.slideFactorY||0))){if(C.ignoreInputTextSelection){var t=w("clientX",e)||0,n=w("clientY",e)||0;if(y(o.elementFromPoint(t,n)))return}var r=O;N(!0),$(),J(),U(r);var i=c(g);M=w("pageX",e)-i.left,k=w("pageY",e)-i.top,a.add(Y||g,"gu-transit"),oe(),re(e)}}else X({})}function z(e){if(!(A.dragging&&n||H(e))){for(var t=e;_(e)&&!1===H(_(e));){if(C.invalid(e,t))return;if(!(e=_(e)))return}var r=_(e);if(r)if(!C.invalid(e,t))if(C.moves(e,r,t,b(e)))return{item:e,source:r}}}function B(e){return!!z(e)}function V(e){var t=z(e);t&&U(t)}function U(e){ce(e.item,e.source)&&(Y=e.item.cloneNode(!0),A.emit("cloned",Y,e.item,"copy")),d=e.source,g=e.item,D=T=b(e.item),A.dragging=!0,A.emit("drag",g,d)}function q(){return!1}function J(){if(A.dragging){var e=Y||g;Z(e,_(e))}}function G(){O=!1,N(!0),$(!0)}function X(e){if(G(),A.dragging){var t=Y||g,r=w("clientX",e)||0,i=w("clientY",e)||0,a=ne(f(n,r,i),r,i);a&&(Y&&C.copySortSource||!Y||a!==d)?Z(t,a):C.removeOnSpill?K():Q()}}function Z(e,t){var n=_(e);Y&&C.copySortSource&&t===d&&n.removeChild(g),te(t)?A.emit("cancel",e,d,d):A.emit("drop",e,t,d,T),ee()}function K(){if(A.dragging){var e=Y||g,t=_(e);t&&t.removeChild(e),A.emit(Y?"cancel":"remove",e,t,d),ee()}}function Q(e){if(A.dragging){var t=arguments.length>0?e:C.revertOnSpill,n=Y||g,r=_(n),i=te(r);!1===i&&t&&(Y?r&&r.removeChild(Y):d.insertBefore(n,D)),i||t?A.emit("cancel",n,d,d):A.emit("drop",n,r,d,T),ee()}}function ee(){var e=Y||g;G(),se(),e&&a.rm(e,"gu-transit"),S&&clearTimeout(S),A.dragging=!1,E&&A.emit("out",e,E,d),A.emit("dragend",e),d=g=Y=D=T=S=E=null}function te(e,t){var r;return r=void 0!==t?t:n?T:b(Y||g),e===d&&r===D}function ne(e,t,n){for(var r=e;r&&!i();)r=_(r);return r;function i(){if(!1===H(r))return!1;var i=ue(r,e),a=le(r,i,t,n);return!!te(r,a)||C.accepts(g,r,d,a)}}function re(e){if(n){e.preventDefault();var t=w("clientX",e)||0,r=w("clientY",e)||0,i=t-M,a=r-k;n.style.left=i+"px",n.style.top=a+"px";var o=Y||g,s=f(n,t,r),u=ne(s,t,r),l=null!==u&&u!==E;(l||null===u)&&(E&&m("out"),E=u,l&&m("over"));var c=_(o);if(u!==d||!Y||C.copySortSource){var h,p=ue(u,s);if(null!==p)h=le(u,p,t,r);else{if(!0!==C.revertOnSpill||Y)return void(Y&&c&&c.removeChild(o));h=D,u=d}(null===h&&l||h!==o&&h!==b(o))&&(T=h,u.insertBefore(o,h),A.emit("shadow",o,u,d))}else c&&c.removeChild(o)}function m(e){A.emit(e,o,E,d)}}function ie(e){a.rm(e,"gu-hide")}function ae(e){A.dragging&&a.add(e,"gu-hide")}function oe(){if(!n){var e=g.getBoundingClientRect();(n=g.cloneNode(!0)).style.width=m(e)+"px",n.style.height=v(e)+"px",a.rm(n,"gu-transit"),a.add(n,"gu-mirror"),C.mirrorContainer.appendChild(n),u(s,"add","mousemove",re),a.add(C.mirrorContainer,"gu-unselectable"),A.emit("cloned",n,g,"mirror")}}function se(){n&&(a.rm(C.mirrorContainer,"gu-unselectable"),u(s,"remove","mousemove",re),_(n).removeChild(n),n=null)}function ue(e,t){for(var n=t;n!==e&&_(n)!==e;)n=_(n);return n===s?null:n}function le(e,t,n,r){var i="horizontal"===C.direction,a=t!==e?function(){var e=t.getBoundingClientRect();if(i)return o(n>e.left+m(e)/2);return o(r>e.top+v(e)/2)}():function(){var t,a,o,s=e.children.length;for(t=0;tn)return a;if(!i&&o.top+o.height/2>r)return a}return null}();return a;function o(e){return e?b(t):t}}function ce(e,t){return"boolean"==typeof C.copy?C.copy:C.copy(e,t)}}},9755:function(e,t){var n;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(r,i){"use strict";var a=[],o=Object.getPrototypeOf,s=a.slice,u=a.flat?function(e){return a.flat.call(e)}:function(e){return a.concat.apply([],e)},l=a.push,c=a.indexOf,d={},f=d.toString,h=d.hasOwnProperty,p=h.toString,m=p.call(Object),v={},_=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},g=r.document,b={type:!0,src:!0,nonce:!0,noModule:!0};function w(e,t,n){var r,i,a=(n=n||g).createElement("script");if(a.text=e,t)for(r in b)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&a.setAttribute(r,i);n.head.appendChild(a).parentNode.removeChild(a)}function M(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[f.call(e)]||"object":typeof e}var k="3.6.0",L=function(e,t){return new L.fn.init(e,t)};function x(e){var t=!!e&&"length"in e&&e.length,n=M(e);return!_(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}L.fn=L.prototype={jquery:k,constructor:L,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=L.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return L.each(this,e)},map:function(e){return this.pushStack(L.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(L.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(L.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),V=new RegExp(N+"|>"),U=new RegExp(F),q=new RegExp("^"+$+"$"),J={ID:new RegExp("^#("+$+")"),CLASS:new RegExp("^\\.("+$+")"),TAG:new RegExp("^("+$+"|[*])"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+P+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},G=/HTML$/i,X=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},ae=function(){f()},oe=be((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{C.apply(j=A.call(w.childNodes),w.childNodes),j[w.childNodes.length].nodeType}catch(e){C={apply:j.length?function(e,t){E.apply(e,A.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,i){var a,s,l,c,d,p,_,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!i&&(f(t),t=t||h,m)){if(11!==w&&(d=Q.exec(e)))if(a=d[1]){if(9===w){if(!(l=t.getElementById(a)))return r;if(l.id===a)return r.push(l),r}else if(y&&(l=y.getElementById(a))&&g(t,l)&&l.id===a)return r.push(l),r}else{if(d[2])return C.apply(r,t.getElementsByTagName(e)),r;if((a=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return C.apply(r,t.getElementsByClassName(a)),r}if(n.qsa&&!T[e+" "]&&(!v||!v.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(_=e,y=t,1===w&&(V.test(e)||B.test(e))){for((y=ee.test(e)&&_e(t.parentNode)||t)===t&&n.scope||((c=t.getAttribute("id"))?c=c.replace(re,ie):t.setAttribute("id",c=b)),s=(p=o(e)).length;s--;)p[s]=(c?"#"+c:":scope")+" "+ge(p[s]);_=p.join(",")}try{return C.apply(r,y.querySelectorAll(_)),r}catch(t){T(e,!0)}finally{c===b&&t.removeAttribute("id")}}}return u(e.replace(R,"$1"),t,r,i)}function ue(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function le(e){return e[b]=!0,e}function ce(e){var t=h.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function fe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function he(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function pe(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function me(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&oe(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ve(e){return le((function(t){return t=+t,le((function(n,r){for(var i,a=e([],n.length,t),o=a.length;o--;)n[i=a[o]]&&(n[i]=!(r[i]=n[i]))}))}))}function _e(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},a=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!G.test(t||n&&n.nodeName||"HTML")},f=se.setDocument=function(e){var t,i,o=e?e.ownerDocument||e:w;return o!=h&&9===o.nodeType&&o.documentElement?(p=(h=o).documentElement,m=!a(h),w!=h&&(i=h.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",ae,!1):i.attachEvent&&i.attachEvent("onunload",ae)),n.scope=ce((function(e){return p.appendChild(e).appendChild(h.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ce((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ce((function(e){return e.appendChild(h.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=K.test(h.getElementsByClassName),n.getById=ce((function(e){return p.appendChild(e).id=b,!h.getElementsByName||!h.getElementsByName(b).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,i,a=t.getElementById(e);if(a){if((n=a.getAttributeNode("id"))&&n.value===e)return[a];for(i=t.getElementsByName(e),r=0;a=i[r++];)if((n=a.getAttributeNode("id"))&&n.value===e)return[a]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,a=t.getElementsByTagName(e);if("*"===e){for(;n=a[i++];)1===n.nodeType&&r.push(n);return r}return a},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},_=[],v=[],(n.qsa=K.test(h.querySelectorAll))&&(ce((function(e){var t;p.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+P+")"),e.querySelectorAll("[id~="+b+"-]").length||v.push("~="),(t=h.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")})),ce((function(e){e.innerHTML="";var t=h.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),p.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")}))),(n.matchesSelector=K.test(y=p.matches||p.webkitMatchesSelector||p.mozMatchesSelector||p.oMatchesSelector||p.msMatchesSelector))&&ce((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),_.push("!=",F)})),v=v.length&&new RegExp(v.join("|")),_=_.length&&new RegExp(_.join("|")),t=K.test(p.compareDocumentPosition),g=t||K.test(p.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},Y=t?function(e,t){if(e===t)return d=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==h||e.ownerDocument==w&&g(w,e)?-1:t==h||t.ownerDocument==w&&g(w,t)?1:c?H(c,e)-H(c,t):0:4&r?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,r=0,i=e.parentNode,a=t.parentNode,o=[e],s=[t];if(!i||!a)return e==h?-1:t==h?1:i?-1:a?1:c?H(c,e)-H(c,t):0;if(i===a)return fe(e,t);for(n=e;n=n.parentNode;)o.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;o[r]===s[r];)r++;return r?fe(o[r],s[r]):o[r]==w?-1:s[r]==w?1:0},h):h},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(f(e),n.matchesSelector&&m&&!T[t+" "]&&(!_||!_.test(t))&&(!v||!v.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){T(t,!0)}return se(t,h,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=h&&f(e),g(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=h&&f(e);var i=r.attrHandle[t.toLowerCase()],a=i&&S.call(r.attrHandle,t.toLowerCase())?i(e,t,!m):void 0;return void 0!==a?a:n.attributes||!m?e.getAttribute(t):(a=e.getAttributeNode(t))&&a.specified?a.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],i=0,a=0;if(d=!n.detectDuplicates,c=!n.sortStable&&e.slice(0),e.sort(Y),d){for(;t=e[a++];)t===e[a]&&(i=r.push(a));for(;i--;)e.splice(r[i],1)}return c=null,e},i=se.getText=function(e){var t,n="",r=0,a=e.nodeType;if(a){if(1===a||9===a||11===a){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===a||4===a)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},r=se.selectors={cacheLength:50,createPseudo:le,match:J,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return J.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=o(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=L[e+" "];return t||(t=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+e+"("+N+"|$)"))&&L(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=se.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var a="nth"!==e.slice(0,3),o="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,d,f,h,p,m=a!==o?"nextSibling":"previousSibling",v=t.parentNode,_=s&&t.nodeName.toLowerCase(),y=!u&&!s,g=!1;if(v){if(a){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===_:1===f.nodeType)return!1;p=m="only"===e&&!p&&"nextSibling"}return!0}if(p=[o?v.firstChild:v.lastChild],o&&y){for(g=(h=(l=(c=(d=(f=v)[b]||(f[b]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===M&&l[1])&&l[2],f=h&&v.childNodes[h];f=++h&&f&&f[m]||(g=h=0)||p.pop();)if(1===f.nodeType&&++g&&f===t){c[e]=[M,h,g];break}}else if(y&&(g=h=(l=(c=(d=(f=t)[b]||(f[b]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===M&&l[1]),!1===g)for(;(f=++h&&f&&f[m]||(g=h=0)||p.pop())&&((s?f.nodeName.toLowerCase()!==_:1!==f.nodeType)||!++g||(y&&((c=(d=f[b]||(f[b]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]=[M,g]),f!==t)););return(g-=i)===r||g%r==0&&g/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return i[b]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?le((function(e,n){for(var r,a=i(e,t),o=a.length;o--;)e[r=H(e,a[o])]=!(n[r]=a[o])})):function(e){return i(e,0,n)}):i}},pseudos:{not:le((function(e){var t=[],n=[],r=s(e.replace(R,"$1"));return r[b]?le((function(e,t,n,i){for(var a,o=r(e,null,i,[]),s=e.length;s--;)(a=o[s])&&(e[s]=!(t[s]=a))})):function(e,i,a){return t[0]=e,r(t,null,a,n),t[0]=null,!n.pop()}})),has:le((function(e){return function(t){return se(e,t).length>0}})),contains:le((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||i(t)).indexOf(e)>-1}})),lang:le((function(e){return q.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===p},focus:function(e){return e===h.activeElement&&(!h.hasFocus||h.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return X.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve((function(){return[0]})),last:ve((function(e,t){return[t-1]})),eq:ve((function(e,t,n){return[n<0?n+t:n]})),even:ve((function(e,t){for(var n=0;nt?t:n;--r>=0;)e.push(r);return e})),gt:ve((function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Me(e,t,n,r,i){for(var a,o=[],s=0,u=e.length,l=null!=t;s-1&&(a[l]=!(o[l]=d))}}else _=Me(_===o?_.splice(p,_.length):_),i?i(null,o,_,u):C.apply(o,_)}))}function Le(e){for(var t,n,i,a=e.length,o=r.relative[e[0].type],s=o||r.relative[" "],u=o?1:0,c=be((function(e){return e===t}),s,!0),d=be((function(e){return H(t,e)>-1}),s,!0),f=[function(e,n,r){var i=!o&&(r||n!==l)||((t=n).nodeType?c(e,n,r):d(e,n,r));return t=null,i}];u1&&we(f),u>1&&ge(e.slice(0,u-1).concat({value:" "===e[u-2].type?"*":""})).replace(R,"$1"),n,u0,i=e.length>0,a=function(a,o,s,u,c){var d,p,v,_=0,y="0",g=a&&[],b=[],w=l,k=a||i&&r.find.TAG("*",c),L=M+=null==w?1:Math.random()||.1,x=k.length;for(c&&(l=o==h||o||c);y!==x&&null!=(d=k[y]);y++){if(i&&d){for(p=0,o||d.ownerDocument==h||(f(d),s=!m);v=e[p++];)if(v(d,o||h,s)){u.push(d);break}c&&(M=L)}n&&((d=!v&&d)&&_--,a&&g.push(d))}if(_+=y,n&&y!==_){for(p=0;v=t[p++];)v(g,b,o,s);if(a){if(_>0)for(;y--;)g[y]||b[y]||(b[y]=O.call(u));b=Me(b)}C.apply(u,b),c&&!a&&b.length>0&&_+t.length>1&&se.uniqueSort(u)}return c&&(M=L,l=w),g};return n?le(a):a}(a,i)),s.selector=e}return s},u=se.select=function(e,t,n,i){var a,u,l,c,d,f="function"==typeof e&&e,h=!i&&o(e=f.selector||e);if(n=n||[],1===h.length){if((u=h[0]=h[0].slice(0)).length>2&&"ID"===(l=u[0]).type&&9===t.nodeType&&m&&r.relative[u[1].type]){if(!(t=(r.find.ID(l.matches[0].replace(te,ne),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(u.shift().value.length)}for(a=J.needsContext.test(e)?0:u.length;a--&&(l=u[a],!r.relative[c=l.type]);)if((d=r.find[c])&&(i=d(l.matches[0].replace(te,ne),ee.test(u[0].type)&&_e(t.parentNode)||t))){if(u.splice(a,1),!(e=i.length&&ge(u)))return C.apply(n,i),n;break}}return(f||s(e,h))(i,t,!m,n,!t||ee.test(e)&&_e(t.parentNode)||t),n},n.sortStable=b.split("").sort(Y).join("")===b,n.detectDuplicates=!!d,f(),n.sortDetached=ce((function(e){return 1&e.compareDocumentPosition(h.createElement("fieldset"))})),ce((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||de("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ce((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||de("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ce((function(e){return null==e.getAttribute("disabled")}))||de(P,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),se}(r);L.find=D,L.expr=D.selectors,L.expr[":"]=L.expr.pseudos,L.uniqueSort=L.unique=D.uniqueSort,L.text=D.getText,L.isXMLDoc=D.isXML,L.contains=D.contains,L.escapeSelector=D.escape;var T=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&L(e).is(n))break;r.push(e)}return r},Y=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},S=L.expr.match.needsContext;function j(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var O=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function E(e,t,n){return _(t)?L.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?L.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?L.grep(e,(function(e){return c.call(t,e)>-1!==n})):L.filter(t,e,n)}L.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?L.find.matchesSelector(r,e)?[r]:[]:L.find.matches(e,L.grep(t,(function(e){return 1===e.nodeType})))},L.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(L(e).filter((function(){for(t=0;t1?L.uniqueSort(n):n},filter:function(e){return this.pushStack(E(this,e||[],!1))},not:function(e){return this.pushStack(E(this,e||[],!0))},is:function(e){return!!E(this,"string"==typeof e&&S.test(e)?L(e):e||[],!1).length}});var C,A=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(L.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||C,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:A.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof L?t[0]:t,L.merge(this,L.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:g,!0)),O.test(r[1])&&L.isPlainObject(t))for(r in t)_(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=g.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):_(e)?void 0!==n.ready?n.ready(e):e(L):L.makeArray(e,this)}).prototype=L.fn,C=L(g);var H=/^(?:parents|prev(?:Until|All))/,P={children:!0,contents:!0,next:!0,prev:!0};function N(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}L.fn.extend({has:function(e){var t=L(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&L.find.matchesSelector(n,e))){a.push(n);break}return this.pushStack(a.length>1?L.uniqueSort(a):a)},index:function(e){return e?"string"==typeof e?c.call(L(e),this[0]):c.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(L.uniqueSort(L.merge(this.get(),L(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),L.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,"parentNode")},parentsUntil:function(e,t,n){return T(e,"parentNode",n)},next:function(e){return N(e,"nextSibling")},prev:function(e){return N(e,"previousSibling")},nextAll:function(e){return T(e,"nextSibling")},prevAll:function(e){return T(e,"previousSibling")},nextUntil:function(e,t,n){return T(e,"nextSibling",n)},prevUntil:function(e,t,n){return T(e,"previousSibling",n)},siblings:function(e){return Y((e.parentNode||{}).firstChild,e)},children:function(e){return Y(e.firstChild)},contents:function(e){return null!=e.contentDocument&&o(e.contentDocument)?e.contentDocument:(j(e,"template")&&(e=e.content||e),L.merge([],e.childNodes))}},(function(e,t){L.fn[e]=function(n,r){var i=L.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=L.filter(r,i)),this.length>1&&(P[e]||L.uniqueSort(i),H.test(e)&&i.reverse()),this.pushStack(i)}}));var $=/[^\x20\t\r\n\f]+/g;function I(e){return e}function F(e){throw e}function W(e,t,n,r){var i;try{e&&_(i=e.promise)?i.call(e).done(t).fail(n):e&&_(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}L.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return L.each(e.match($)||[],(function(e,n){t[n]=!0})),t}(e):L.extend({},e);var t,n,r,i,a=[],o=[],s=-1,u=function(){for(i=i||e.once,r=t=!0;o.length;s=-1)for(n=o.shift();++s-1;)a.splice(n,1),n<=s&&s--})),this},has:function(e){return e?L.inArray(e,a)>-1:a.length>0},empty:function(){return a&&(a=[]),this},disable:function(){return i=o=[],a=n="",this},disabled:function(){return!a},lock:function(){return i=o=[],n||t||(a=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],o.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},L.extend({Deferred:function(e){var t=[["notify","progress",L.Callbacks("memory"),L.Callbacks("memory"),2],["resolve","done",L.Callbacks("once memory"),L.Callbacks("once memory"),0,"resolved"],["reject","fail",L.Callbacks("once memory"),L.Callbacks("once memory"),1,"rejected"]],n="pending",i={state:function(){return n},always:function(){return a.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return L.Deferred((function(n){L.each(t,(function(t,r){var i=_(e[r[4]])&&e[r[4]];a[r[1]]((function(){var e=i&&i.apply(this,arguments);e&&_(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,i?[e]:arguments)}))})),e=null})).promise()},then:function(e,n,i){var a=0;function o(e,t,n,i){return function(){var s=this,u=arguments,l=function(){var r,l;if(!(e=a&&(n!==F&&(s=void 0,u=[r]),t.rejectWith(s,u))}};e?c():(L.Deferred.getStackHook&&(c.stackTrace=L.Deferred.getStackHook()),r.setTimeout(c))}}return L.Deferred((function(r){t[0][3].add(o(0,r,_(i)?i:I,r.notifyWith)),t[1][3].add(o(0,r,_(e)?e:I)),t[2][3].add(o(0,r,_(n)?n:F))})).promise()},promise:function(e){return null!=e?L.extend(e,i):i}},a={};return L.each(t,(function(e,r){var o=r[2],s=r[5];i[r[1]]=o.add,s&&o.add((function(){n=s}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),o.add(r[3].fire),a[r[0]]=function(){return a[r[0]+"With"](this===a?void 0:this,arguments),this},a[r[0]+"With"]=o.fireWith})),i.promise(a),e&&e.call(a,a),a},when:function(e){var t=arguments.length,n=t,r=Array(n),i=s.call(arguments),a=L.Deferred(),o=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?s.call(arguments):n,--t||a.resolveWith(r,i)}};if(t<=1&&(W(e,a.done(o(n)).resolve,a.reject,!t),"pending"===a.state()||_(i[n]&&i[n].then)))return a.then();for(;n--;)W(i[n],o(n),a.reject);return a.promise()}});var R=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;L.Deferred.exceptionHook=function(e,t){r.console&&r.console.warn&&e&&R.test(e.name)&&r.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},L.readyException=function(e){r.setTimeout((function(){throw e}))};var z=L.Deferred();function B(){g.removeEventListener("DOMContentLoaded",B),r.removeEventListener("load",B),L.ready()}L.fn.ready=function(e){return z.then(e).catch((function(e){L.readyException(e)})),this},L.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--L.readyWait:L.isReady)||(L.isReady=!0,!0!==e&&--L.readyWait>0||z.resolveWith(g,[L]))}}),L.ready.then=z.then,"complete"===g.readyState||"loading"!==g.readyState&&!g.documentElement.doScroll?r.setTimeout(L.ready):(g.addEventListener("DOMContentLoaded",B),r.addEventListener("load",B));var V=function(e,t,n,r,i,a,o){var s=0,u=e.length,l=null==n;if("object"===M(n))for(s in i=!0,n)V(e,t,s,n[s],!0,a,o);else if(void 0!==r&&(i=!0,_(r)||(o=!0),l&&(o?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(L(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each((function(){Q.remove(this,e)}))}}),L.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=K.get(e,t),n&&(!r||Array.isArray(n)?r=K.access(e,t,L.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=L.queue(e,t),r=n.length,i=n.shift(),a=L._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete a.stop,i.call(e,(function(){L.dequeue(e,t)}),a)),!r&&a&&a.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return K.get(e,n)||K.access(e,n,{empty:L.Callbacks("once memory").add((function(){K.remove(e,[t+"queue",n])}))})}}),L.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,ye=/^$|^module$|\/(?:java|ecma)script/i;pe=g.createDocumentFragment().appendChild(g.createElement("div")),(me=g.createElement("input")).setAttribute("type","radio"),me.setAttribute("checked","checked"),me.setAttribute("name","t"),pe.appendChild(me),v.checkClone=pe.cloneNode(!0).cloneNode(!0).lastChild.checked,pe.innerHTML="",v.noCloneChecked=!!pe.cloneNode(!0).lastChild.defaultValue,pe.innerHTML="",v.option=!!pe.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function be(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&j(e,t)?L.merge([e],n):n}function we(e,t){for(var n=0,r=e.length;n",""]);var Me=/<|&#?\w+;/;function ke(e,t,n,r,i){for(var a,o,s,u,l,c,d=t.createDocumentFragment(),f=[],h=0,p=e.length;h-1)i&&i.push(a);else if(l=se(a),o=be(d.appendChild(a),"script"),l&&we(o),n)for(c=0;a=o[c++];)ye.test(a.type||"")&&n.push(a);return d}var Le=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function De(){return!1}function Te(e,t){return e===function(){try{return g.activeElement}catch(e){}}()==("focus"===t)}function Ye(e,t,n,r,i,a){var o,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Ye(e,s,n,r,t[s],a);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=De;else if(!i)return e;return 1===a&&(o=i,i=function(e){return L().off(e),o.apply(this,arguments)},i.guid=o.guid||(o.guid=L.guid++)),e.each((function(){L.event.add(this,t,i,r,n)}))}function Se(e,t,n){n?(K.set(e,t,!1),L.event.add(e,t,{namespace:!1,handler:function(e){var r,i,a=K.get(this,t);if(1&e.isTrigger&&this[t]){if(a.length)(L.event.special[t]||{}).delegateType&&e.stopPropagation();else if(a=s.call(arguments),K.set(this,t,a),r=n(this,t),this[t](),a!==(i=K.get(this,t))||r?K.set(this,t,!1):i={},a!==i)return e.stopImmediatePropagation(),e.preventDefault(),i&&i.value}else a.length&&(K.set(this,t,{value:L.event.trigger(L.extend(a[0],L.Event.prototype),a.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===K.get(e,t)&&L.event.add(e,t,xe)}L.event={global:{},add:function(e,t,n,r,i){var a,o,s,u,l,c,d,f,h,p,m,v=K.get(e);if(X(e))for(n.handler&&(n=(a=n).handler,i=a.selector),i&&L.find.matchesSelector(oe,i),n.guid||(n.guid=L.guid++),(u=v.events)||(u=v.events=Object.create(null)),(o=v.handle)||(o=v.handle=function(t){return void 0!==L&&L.event.triggered!==t.type?L.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match($)||[""]).length;l--;)h=m=(s=Le.exec(t[l])||[])[1],p=(s[2]||"").split(".").sort(),h&&(d=L.event.special[h]||{},h=(i?d.delegateType:d.bindType)||h,d=L.event.special[h]||{},c=L.extend({type:h,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&L.expr.match.needsContext.test(i),namespace:p.join(".")},a),(f=u[h])||((f=u[h]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,p,o)||e.addEventListener&&e.addEventListener(h,o)),d.add&&(d.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,c):f.push(c),L.event.global[h]=!0)},remove:function(e,t,n,r,i){var a,o,s,u,l,c,d,f,h,p,m,v=K.hasData(e)&&K.get(e);if(v&&(u=v.events)){for(l=(t=(t||"").match($)||[""]).length;l--;)if(h=m=(s=Le.exec(t[l])||[])[1],p=(s[2]||"").split(".").sort(),h){for(d=L.event.special[h]||{},f=u[h=(r?d.delegateType:d.bindType)||h]||[],s=s[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),o=a=f.length;a--;)c=f[a],!i&&m!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(f.splice(a,1),c.selector&&f.delegateCount--,d.remove&&d.remove.call(e,c));o&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,p,v.handle)||L.removeEvent(e,h,v.handle),delete u[h])}else for(h in u)L.event.remove(e,h+t[l],n,r,!0);L.isEmptyObject(u)&&K.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,a,o,s=new Array(arguments.length),u=L.event.fix(e),l=(K.get(this,"events")||Object.create(null))[u.type]||[],c=L.event.special[u.type]||{};for(s[0]=u,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(a=[],o={},n=0;n-1:L.find(i,this,null,[l]).length),o[i]&&a.push(r);a.length&&s.push({elem:l,handlers:a})}return l=this,u\s*$/g;function Ce(e,t){return j(e,"table")&&j(11!==t.nodeType?t:t.firstChild,"tr")&&L(e).children("tbody")[0]||e}function Ae(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,a,o,s;if(1===t.nodeType){if(K.hasData(e)&&(s=K.get(e).events))for(i in K.remove(t,"handle events"),s)for(n=0,r=s[i].length;n1&&"string"==typeof p&&!v.checkClone&&Oe.test(p))return e.each((function(i){var a=e.eq(i);m&&(t[0]=p.call(this,i,a.html())),$e(a,t,n,r)}));if(f&&(a=(i=ke(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=a),a||r)){for(s=(o=L.map(be(i,"script"),Ae)).length;d0&&we(o,!u&&be(e,"script")),s},cleanData:function(e){for(var t,n,r,i=L.event.special,a=0;void 0!==(n=e[a]);a++)if(X(n)){if(t=n[K.expando]){if(t.events)for(r in t.events)i[r]?L.event.remove(n,r):L.removeEvent(n,r,t.handle);n[K.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),L.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return V(this,(function(e){return void 0===e?L.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return $e(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ce(this,e).appendChild(e)}))},prepend:function(){return $e(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Ce(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return $e(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return $e(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(L.cleanData(be(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return L.clone(this,e,t)}))},html:function(e){return V(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!je.test(e)&&!ge[(_e.exec(e)||["",""])[1].toLowerCase()]){e=L.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-a-u-s-.5))||0),u}function nt(e,t,n){var r=We(e),i=(!v.boxSizingReliable()||n)&&"border-box"===L.css(e,"boxSizing",!1,r),a=i,o=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Fe.test(o)){if(!n)return o;o="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&j(e,"tr")||"auto"===o||!parseFloat(o)&&"inline"===L.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===L.css(e,"boxSizing",!1,r),(a=s in e)&&(o=e[s])),(o=parseFloat(o)||0)+tt(e,t,n||(i?"border":"content"),a,r,o)+"px"}function rt(e,t,n,r,i){return new rt.prototype.init(e,t,n,r,i)}L.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,a,o,s=G(t),u=Ze.test(t),l=e.style;if(u||(t=Ge(s)),o=L.cssHooks[t]||L.cssHooks[s],void 0===n)return o&&"get"in o&&void 0!==(i=o.get(e,!1,r))?i:l[t];"string"===(a=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ce(e,t,i),a="number"),null!=n&&n==n&&("number"!==a||u||(n+=i&&i[3]||(L.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),o&&"set"in o&&void 0===(n=o.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,a,o,s=G(t);return Ze.test(t)||(t=Ge(s)),(o=L.cssHooks[t]||L.cssHooks[s])&&"get"in o&&(i=o.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(a=parseFloat(i),!0===n||isFinite(a)?a||0:i):i}}),L.each(["height","width"],(function(e,t){L.cssHooks[t]={get:function(e,n,r){if(n)return!Xe.test(L.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?nt(e,t,r):Re(e,Ke,(function(){return nt(e,t,r)}))},set:function(e,n,r){var i,a=We(e),o=!v.scrollboxSize()&&"absolute"===a.position,s=(o||r)&&"border-box"===L.css(e,"boxSizing",!1,a),u=r?tt(e,t,r,s,a):0;return s&&o&&(u-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(a[t])-tt(e,t,"border",!1,a)-.5)),u&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=L.css(e,t)),et(0,n,u)}}})),L.cssHooks.marginLeft=Ve(v.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Re(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),L.each({margin:"",padding:"",border:"Width"},(function(e,t){L.cssHooks[e+t]={expand:function(n){for(var r=0,i={},a="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+ae[r]+t]=a[r]||a[r-2]||a[0];return i}},"margin"!==e&&(L.cssHooks[e+t].set=et)})),L.fn.extend({css:function(e,t){return V(this,(function(e,t,n){var r,i,a={},o=0;if(Array.isArray(t)){for(r=We(e),i=t.length;o1)}}),L.Tween=rt,rt.prototype={constructor:rt,init:function(e,t,n,r,i,a){this.elem=e,this.prop=n,this.easing=i||L.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=a||(L.cssNumber[n]?"":"px")},cur:function(){var e=rt.propHooks[this.prop];return e&&e.get?e.get(this):rt.propHooks._default.get(this)},run:function(e){var t,n=rt.propHooks[this.prop];return this.options.duration?this.pos=t=L.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rt.propHooks._default.set(this),this}},rt.prototype.init.prototype=rt.prototype,rt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=L.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){L.fx.step[e.prop]?L.fx.step[e.prop](e):1!==e.elem.nodeType||!L.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:L.style(e.elem,e.prop,e.now+e.unit)}}},rt.propHooks.scrollTop=rt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},L.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},L.fx=rt.prototype.init,L.fx.step={};var it,at,ot=/^(?:toggle|show|hide)$/,st=/queueHooks$/;function ut(){at&&(!1===g.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(ut):r.setTimeout(ut,L.fx.interval),L.fx.tick())}function lt(){return r.setTimeout((function(){it=void 0})),it=Date.now()}function ct(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ae[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function dt(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),a=0,o=i.length;a1)},removeAttr:function(e){return this.each((function(){L.removeAttr(this,e)}))}}),L.extend({attr:function(e,t,n){var r,i,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return void 0===e.getAttribute?L.prop(e,t,n):(1===a&&L.isXMLDoc(e)||(i=L.attrHooks[t.toLowerCase()]||(L.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void L.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=L.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&j(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match($);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?L.removeAttr(e,n):e.setAttribute(n,n),n}},L.each(L.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=pt[t]||L.find.attr;pt[t]=function(e,t,r){var i,a,o=t.toLowerCase();return r||(a=pt[o],pt[o]=i,i=null!=n(e,t,r)?o:null,pt[o]=a),i}}));var mt=/^(?:input|select|textarea|button)$/i,vt=/^(?:a|area)$/i;function _t(e){return(e.match($)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function gt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match($)||[]}L.fn.extend({prop:function(e,t){return V(this,L.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[L.propFix[e]||e]}))}}),L.extend({prop:function(e,t,n){var r,i,a=e.nodeType;if(3!==a&&8!==a&&2!==a)return 1===a&&L.isXMLDoc(e)||(t=L.propFix[t]||t,i=L.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=L.find.attr(e,"tabindex");return t?parseInt(t,10):mt.test(e.nodeName)||vt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),v.optSelected||(L.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),L.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){L.propFix[this.toLowerCase()]=this})),L.fn.extend({addClass:function(e){var t,n,r,i,a,o,s,u=0;if(_(e))return this.each((function(t){L(this).addClass(e.call(this,t,yt(this)))}));if((t=gt(e)).length)for(;n=this[u++];)if(i=yt(n),r=1===n.nodeType&&" "+_t(i)+" "){for(o=0;a=t[o++];)r.indexOf(" "+a+" ")<0&&(r+=a+" ");i!==(s=_t(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,a,o,s,u=0;if(_(e))return this.each((function(t){L(this).removeClass(e.call(this,t,yt(this)))}));if(!arguments.length)return this.attr("class","");if((t=gt(e)).length)for(;n=this[u++];)if(i=yt(n),r=1===n.nodeType&&" "+_t(i)+" "){for(o=0;a=t[o++];)for(;r.indexOf(" "+a+" ")>-1;)r=r.replace(" "+a+" "," ");i!==(s=_t(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):_(e)?this.each((function(n){L(this).toggleClass(e.call(this,n,yt(this),t),t)})):this.each((function(){var t,i,a,o;if(r)for(i=0,a=L(this),o=gt(e);t=o[i++];)a.hasClass(t)?a.removeClass(t):a.addClass(t);else void 0!==e&&"boolean"!==n||((t=yt(this))&&K.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":K.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+_t(yt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;L.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=_(e),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,L(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=L.map(i,(function(e){return null==e?"":e+""}))),(t=L.valHooks[this.type]||L.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))}))):i?(t=L.valHooks[i.type]||L.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n:void 0}}),L.extend({valHooks:{option:{get:function(e){var t=L.find.attr(e,"value");return null!=t?t:_t(L.text(e))}},select:{get:function(e){var t,n,r,i=e.options,a=e.selectedIndex,o="select-one"===e.type,s=o?null:[],u=o?a+1:i.length;for(r=a<0?u:o?a:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),a}}}}),L.each(["radio","checkbox"],(function(){L.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=L.inArray(L(e).val(),t)>-1}},v.checkOn||(L.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),v.focusin="onfocusin"in r;var wt=/^(?:focusinfocus|focusoutblur)$/,Mt=function(e){e.stopPropagation()};L.extend(L.event,{trigger:function(e,t,n,i){var a,o,s,u,l,c,d,f,p=[n||g],m=h.call(e,"type")?e.type:e,v=h.call(e,"namespace")?e.namespace.split("."):[];if(o=f=s=n=n||g,3!==n.nodeType&&8!==n.nodeType&&!wt.test(m+L.event.triggered)&&(m.indexOf(".")>-1&&(v=m.split("."),m=v.shift(),v.sort()),l=m.indexOf(":")<0&&"on"+m,(e=e[L.expando]?e:new L.Event(m,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=v.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:L.makeArray(t,[e]),d=L.event.special[m]||{},i||!d.trigger||!1!==d.trigger.apply(n,t))){if(!i&&!d.noBubble&&!y(n)){for(u=d.delegateType||m,wt.test(u+m)||(o=o.parentNode);o;o=o.parentNode)p.push(o),s=o;s===(n.ownerDocument||g)&&p.push(s.defaultView||s.parentWindow||r)}for(a=0;(o=p[a++])&&!e.isPropagationStopped();)f=o,e.type=a>1?u:d.bindType||m,(c=(K.get(o,"events")||Object.create(null))[e.type]&&K.get(o,"handle"))&&c.apply(o,t),(c=l&&o[l])&&c.apply&&X(o)&&(e.result=c.apply(o,t),!1===e.result&&e.preventDefault());return e.type=m,i||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(p.pop(),t)||!X(n)||l&&_(n[m])&&!y(n)&&((s=n[l])&&(n[l]=null),L.event.triggered=m,e.isPropagationStopped()&&f.addEventListener(m,Mt),n[m](),e.isPropagationStopped()&&f.removeEventListener(m,Mt),L.event.triggered=void 0,s&&(n[l]=s)),e.result}},simulate:function(e,t,n){var r=L.extend(new L.Event,n,{type:e,isSimulated:!0});L.event.trigger(r,null,t)}}),L.fn.extend({trigger:function(e,t){return this.each((function(){L.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return L.event.trigger(e,t,n,!0)}}),v.focusin||L.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){L.event.simulate(t,e.target,L.event.fix(e))};L.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,i=K.access(r,t);i||r.addEventListener(e,n,!0),K.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=K.access(r,t)-1;i?K.access(r,t,i):(r.removeEventListener(e,n,!0),K.remove(r,t))}}}));var kt=r.location,Lt={guid:Date.now()},xt=/\?/;L.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new r.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||L.error("Invalid XML: "+(n?L.map(n.childNodes,(function(e){return e.textContent})).join("\n"):e)),t};var Dt=/\[\]$/,Tt=/\r?\n/g,Yt=/^(?:submit|button|image|reset|file)$/i,St=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))L.each(t,(function(t,i){n||Dt.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)}));else if(n||"object"!==M(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}L.param=function(e,t){var n,r=[],i=function(e,t){var n=_(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!L.isPlainObject(e))L.each(e,(function(){i(this.name,this.value)}));else for(n in e)jt(n,e[n],t,i);return r.join("&")},L.fn.extend({serialize:function(){return L.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=L.prop(this,"elements");return e?L.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!L(this).is(":disabled")&&St.test(this.nodeName)&&!Yt.test(e)&&(this.checked||!ve.test(e))})).map((function(e,t){var n=L(this).val();return null==n?null:Array.isArray(n)?L.map(n,(function(e){return{name:t.name,value:e.replace(Tt,"\r\n")}})):{name:t.name,value:n.replace(Tt,"\r\n")}})).get()}});var Ot=/%20/g,Et=/#.*$/,Ct=/([?&])_=[^&]*/,At=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ht=/^(?:GET|HEAD)$/,Pt=/^\/\//,Nt={},$t={},It="*/".concat("*"),Ft=g.createElement("a");function Wt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,a=t.toLowerCase().match($)||[];if(_(n))for(;r=a[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Rt(e,t,n,r){var i={},a=e===$t;function o(s){var u;return i[s]=!0,L.each(e[s]||[],(function(e,s){var l=s(t,n,r);return"string"!=typeof l||a||i[l]?a?!(u=l):void 0:(t.dataTypes.unshift(l),o(l),!1)})),u}return o(t.dataTypes[0])||!i["*"]&&o("*")}function zt(e,t){var n,r,i=L.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&L.extend(!0,e,r),e}Ft.href=kt.href,L.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(kt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":L.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,L.ajaxSettings),t):zt(L.ajaxSettings,e)},ajaxPrefilter:Wt(Nt),ajaxTransport:Wt($t),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var n,i,a,o,s,u,l,c,d,f,h=L.ajaxSetup({},t),p=h.context||h,m=h.context&&(p.nodeType||p.jquery)?L(p):L.event,v=L.Deferred(),_=L.Callbacks("once memory"),y=h.statusCode||{},b={},w={},M="canceled",k={readyState:0,getResponseHeader:function(e){var t;if(l){if(!o)for(o={};t=At.exec(a);)o[t[1].toLowerCase()+" "]=(o[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=o[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return l?a:null},setRequestHeader:function(e,t){return null==l&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)k.always(e[k.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||M;return n&&n.abort(t),x(0,t),this}};if(v.promise(k),h.url=((e||h.url||kt.href)+"").replace(Pt,kt.protocol+"//"),h.type=t.method||t.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match($)||[""],null==h.crossDomain){u=g.createElement("a");try{u.href=h.url,u.href=u.href,h.crossDomain=Ft.protocol+"//"+Ft.host!=u.protocol+"//"+u.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=L.param(h.data,h.traditional)),Rt(Nt,h,t,k),l)return k;for(d in(c=L.event&&h.global)&&0==L.active++&&L.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Ht.test(h.type),i=h.url.replace(Et,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(Ot,"+")):(f=h.url.slice(i.length),h.data&&(h.processData||"string"==typeof h.data)&&(i+=(xt.test(i)?"&":"?")+h.data,delete h.data),!1===h.cache&&(i=i.replace(Ct,"$1"),f=(xt.test(i)?"&":"?")+"_="+Lt.guid+++f),h.url=i+f),h.ifModified&&(L.lastModified[i]&&k.setRequestHeader("If-Modified-Since",L.lastModified[i]),L.etag[i]&&k.setRequestHeader("If-None-Match",L.etag[i])),(h.data&&h.hasContent&&!1!==h.contentType||t.contentType)&&k.setRequestHeader("Content-Type",h.contentType),k.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+It+"; q=0.01":""):h.accepts["*"]),h.headers)k.setRequestHeader(d,h.headers[d]);if(h.beforeSend&&(!1===h.beforeSend.call(p,k,h)||l))return k.abort();if(M="abort",_.add(h.complete),k.done(h.success),k.fail(h.error),n=Rt($t,h,t,k)){if(k.readyState=1,c&&m.trigger("ajaxSend",[k,h]),l)return k;h.async&&h.timeout>0&&(s=r.setTimeout((function(){k.abort("timeout")}),h.timeout));try{l=!1,n.send(b,x)}catch(e){if(l)throw e;x(-1,e)}}else x(-1,"No Transport");function x(e,t,o,u){var d,f,g,b,w,M=t;l||(l=!0,s&&r.clearTimeout(s),n=void 0,a=u||"",k.readyState=e>0?4:0,d=e>=200&&e<300||304===e,o&&(b=function(e,t,n){for(var r,i,a,o,s=e.contents,u=e.dataTypes;"*"===u[0];)u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)a=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){a=i;break}o||(o=i)}a=a||o}if(a)return a!==u[0]&&u.unshift(a),n[a]}(h,k,o)),!d&&L.inArray("script",h.dataTypes)>-1&&L.inArray("json",h.dataTypes)<0&&(h.converters["text script"]=function(){}),b=function(e,t,n,r){var i,a,o,s,u,l={},c=e.dataTypes.slice();if(c[1])for(o in e.converters)l[o.toLowerCase()]=e.converters[o];for(a=c.shift();a;)if(e.responseFields[a]&&(n[e.responseFields[a]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=a,a=c.shift())if("*"===a)a=u;else if("*"!==u&&u!==a){if(!(o=l[u+" "+a]||l["* "+a]))for(i in l)if((s=i.split(" "))[1]===a&&(o=l[u+" "+s[0]]||l["* "+s[0]])){!0===o?o=l[i]:!0!==l[i]&&(a=s[0],c.unshift(s[1]));break}if(!0!==o)if(o&&e.throws)t=o(t);else try{t=o(t)}catch(e){return{state:"parsererror",error:o?e:"No conversion from "+u+" to "+a}}}return{state:"success",data:t}}(h,b,k,d),d?(h.ifModified&&((w=k.getResponseHeader("Last-Modified"))&&(L.lastModified[i]=w),(w=k.getResponseHeader("etag"))&&(L.etag[i]=w)),204===e||"HEAD"===h.type?M="nocontent":304===e?M="notmodified":(M=b.state,f=b.data,d=!(g=b.error))):(g=M,!e&&M||(M="error",e<0&&(e=0))),k.status=e,k.statusText=(t||M)+"",d?v.resolveWith(p,[f,M,k]):v.rejectWith(p,[k,M,g]),k.statusCode(y),y=void 0,c&&m.trigger(d?"ajaxSuccess":"ajaxError",[k,h,d?f:g]),_.fireWith(p,[k,M]),c&&(m.trigger("ajaxComplete",[k,h]),--L.active||L.event.trigger("ajaxStop")))}return k},getJSON:function(e,t,n){return L.get(e,t,n,"json")},getScript:function(e,t){return L.get(e,void 0,t,"script")}}),L.each(["get","post"],(function(e,t){L[t]=function(e,n,r,i){return _(n)&&(i=i||r,r=n,n=void 0),L.ajax(L.extend({url:e,type:t,dataType:i,data:n,success:r},L.isPlainObject(e)&&e))}})),L.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),L._evalUrl=function(e,t,n){return L.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){L.globalEval(e,t,n)}})},L.fn.extend({wrapAll:function(e){var t;return this[0]&&(_(e)&&(e=e.call(this[0])),t=L(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return _(e)?this.each((function(t){L(this).wrapInner(e.call(this,t))})):this.each((function(){var t=L(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=_(e);return this.each((function(n){L(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){L(this).replaceWith(this.childNodes)})),this}}),L.expr.pseudos.hidden=function(e){return!L.expr.pseudos.visible(e)},L.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},L.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(e){}};var Bt={0:200,1223:204},Vt=L.ajaxSettings.xhr();v.cors=!!Vt&&"withCredentials"in Vt,v.ajax=Vt=!!Vt,L.ajaxTransport((function(e){var t,n;if(v.cors||Vt&&!e.crossDomain)return{send:function(i,a){var o,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(o in e.xhrFields)s[o]=e.xhrFields[o];for(o in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(o,i[o]);t=function(e){return function(){t&&(t=n=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?a(0,"error"):a(s.status,s.statusText):a(Bt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),n=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&r.setTimeout((function(){t&&n()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),L.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),L.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return L.globalEval(e),e}}}),L.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),L.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,i){t=L("':i=g.settings.video_template_callback?g.settings.video_template_callback(j):'"}return i};return{dataToHtml:g}}),g("l",["8"],function(a){return a("tinymce.util.Promise")}),g("i",["k","l"],function(a,b){var c=function(a,c,d){var e={};return new b(function(b,f){var g=function(d){return d.html&&(e[a.source1]=d),b({url:a.source1,html:d.html?d.html:c(a)})};e[a.source1]?g(e[a.source1]):d({url:a.source1},g,f)})},d=function(a,c){return new b(function(b){b({html:c(a),url:a.source1})})},e=function(b){return function(c){return a.dataToHtml(b,c)}},f=function(a,b){var f=a.settings.media_url_resolver;return f?c(b,e(a),f):d(b,e(a))};return{getEmbedHtml:f}}),g("j",[],function(){var a=function(a,b){a.state.set("oldVal",a.value()),b.state.set("oldVal",b.value())},b=function(a,b){var c=a.find("#width")[0],d=a.find("#height")[0],e=a.find("#constrain")[0];c&&d&&e&&b(c,d,e.checked())},c=function(b,c,d){var e=b.state.get("oldVal"),f=c.state.get("oldVal"),g=b.value(),h=c.value();d&&e&&f&&g&&h&&(g!==e?(h=Math.round(g/e*h),isNaN(h)||c.value(h)):(g=Math.round(h/f*g),isNaN(g)||b.value(g))),a(b,c)},d=function(c){b(c,a)},e=function(a){b(a,c)},f=function(a){var b=function(){a(function(a){e(a)})};return{type:"container",label:"Dimensions",layout:"flex",align:"center",spacing:5,items:[{name:"width",type:"textbox",maxLength:5,size:5,onchange:b,ariaLabel:"Width"},{type:"label",text:"x"},{name:"height",type:"textbox",maxLength:5,size:5,onchange:b,ariaLabel:"Height"},{name:"constrain",type:"checkbox",checked:!0,text:"Constrain proportions"}]}};return{createUi:f,syncSize:d,updateSize:e}}),g("7",["g","h","6","i","f","3","d","j"],function(a,b,c,d,e,f,g,h){var i=g.ie&&g.ie<=8?"onChange":"onInput",j=function(a){return function(b){var c=b&&b.msg?"Media embed handler error: "+b.msg:"Media embed handler threw unknown error.";a.notificationManager.open({type:"error",text:c})}},k=function(a){var c=a.selection.getNode(),d=c.getAttribute("data-ephox-embed-iri");return d?{source1:d,"data-ephox-embed-iri":d,width:e.getMaxWidth(c),height:e.getMaxHeight(c)}:c.getAttribute("data-mce-object")?b.htmlToData(a.settings.media_scripts,a.serializer.serialize(c,{selection:!0})):{}},l=function(a){var b=a.selection.getNode();if(b.getAttribute("data-mce-object")||b.getAttribute("data-ephox-embed-iri"))return a.selection.getContent()},m=function(a,c){return function(d){var e=d.html,g=a.find("#embed")[0],i=f.extend(b.htmlToData(c.settings.media_scripts,e),{source1:d.url});a.fromJSON(i),g&&(g.value(e),h.updateSize(a))}},n=function(a,b){var c,d,e=a.dom.select("img[data-mce-object]");for(c=0;c=0;d--)b[c]===e[d]&&e.splice(d,1);a.selection.select(e[0])},o=function(a,b){var c=a.dom.select("img[data-mce-object]");a.insertContent(b),n(a,c),a.nodeChanged()},p=function(a,b){var e=a.toJSON();e.embed=c.updateHtml(e.embed,e),e.embed?o(b,e.embed):d.getEmbedHtml(b,e).then(function(a){o(b,a.html)})["catch"](j(b))},q=function(a,b){f.each(b,function(b,c){a.find("#"+c).value(b)})},r=function(a){var e,g,n=[{name:"source1",type:"filepicker",filetype:"media",size:40,autofocus:!0,label:"Source",onpaste:function(){setTimeout(function(){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))["catch"](j(a))},1)},onchange:function(b){d.getEmbedHtml(a,e.toJSON()).then(m(e,a))["catch"](j(a)),q(e,b.meta)},onbeforecall:function(a){a.meta=e.toJSON()}}],o=[],r=function(a){a(e),g=e.toJSON(),e.find("#embed").value(c.updateHtml(g.embed,g))};if(a.settings.media_alt_source!==!1&&o.push({name:"source2",type:"filepicker",filetype:"media",size:40,label:"Alternative source"}),a.settings.media_poster!==!1&&o.push({name:"poster",type:"filepicker",filetype:"image",size:40,label:"Poster"}),a.settings.media_dimensions!==!1){var s=h.createUi(r);n.push(s)}g=k(a);var t={id:"mcemediasource",type:"textbox",flex:1,name:"embed",value:l(a),multiline:!0,rows:5,label:"Source"},u=function(){g=f.extend({},b.htmlToData(a.settings.media_scripts,this.value())),this.parent().parent().fromJSON(g)};t[i]=u,e=a.windowManager.open({title:"Insert/edit media",data:g,bodyType:"tabpanel",body:[{title:"General",type:"form",items:n},{title:"Embed",type:"container",layout:"flex",direction:"column",align:"stretch",padding:10,spacing:10,items:[{type:"label",text:"Paste your embed code below:",forId:"mcemediasource"},t]},{title:"Advanced",type:"form",items:o}],onSubmit:function(){h.updateSize(e),p(e,a)}}),h.syncSize(e)};return{showDialog:r}}),g("0",["1","2","3","4","5","6","7"],function(a,b,c,d,e,f,g){var h=function(b){b.on("ResolveName",function(a){var b;1===a.target.nodeType&&(b=a.target.getAttribute("data-mce-object"))&&(a.name=b)}),b.on("preInit",function(){var f=b.schema.getSpecialElements();c.each("video audio iframe object".split(" "),function(a){f[a]=new RegExp("]*>","gi")});var g=b.schema.getBoolAttrs();c.each("webkitallowfullscreen mozallowfullscreen allowfullscreen".split(" "),function(a){g[a]={}}),b.parser.addNodeFilter("iframe,video,audio,object,embed,script",d.placeHolderConverter(b)),b.serializer.addAttributeFilter("data-mce-object",function(c,d){for(var f,g,h,i,j,k,l,m,n=c.length;n--;)if(f=c[n],f.parent){for(l=f.attr(d),g=new a(l,1),"audio"!==l&&"script"!==l&&(m=f.attr("class"),m&&m.indexOf("mce-preview-object")!==-1?g.attr({width:f.firstChild.attr("width"),height:f.firstChild.attr("height")}):g.attr({width:f.attr("width"),height:f.attr("height")})),g.attr({style:f.attr("style")}),i=f.attributes,h=i.length;h--;){var o=i[h].name;0===o.indexOf("data-mce-p-")&&g.attr(o.substr(11),i[h].value)}"script"===l&&g.attr("type","text/javascript"),j=f.attr("data-mce-html"),j&&(k=new a("#text",3),k.raw=!0,k.value=e.sanitize(b,unescape(j)),g.append(k)),f.replace(g)}})}),b.on("click keyup",function(){var a=b.selection.getNode();a&&b.dom.hasClass(a,"mce-preview-object")&&b.dom.getAttrib(a,"data-mce-selected")&&a.setAttribute("data-mce-selected","2")}),b.on("ObjectSelected",function(a){var b=a.target.getAttribute("data-mce-object");"audio"!==b&&"script"!==b||a.preventDefault()}),b.on("objectResized",function(a){var b,c=a.target;c.getAttribute("data-mce-object")&&(b=c.getAttribute("data-mce-html"),b&&(b=unescape(b),c.setAttribute("data-mce-html",escape(f.updateHtml(b,{width:a.width,height:a.height})))))}),this.showDialog=function(){g.showDialog(b)},b.addButton("media",{tooltip:"Insert/edit media",onclick:this.showDialog,stateSelector:["img[data-mce-object]","span[data-mce-object]","div[data-ephox-embed-iri]"]}),b.addMenuItem("media",{icon:"media",text:"Media",onclick:this.showDialog,context:"insert",prependToContext:!0}),b.on("setContent",function(){b.$("span.mce-preview-object").each(function(a,c){var d=b.$(c);0===d.find("span.mce-shim",c).length&&d.append('')})}),b.addCommand("mceMedia",this.showDialog)};return b.add("media",h),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/mention/plugin.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/mention/plugin.js new file mode 100644 index 0000000..e15cfa5 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/mention/plugin.js @@ -0,0 +1,416 @@ +/*global tinymce, module, require, define, global, self */ + +;(function (f) { + 'use strict'; + + // CommonJS + if (typeof exports === 'object' && typeof module !== 'undefined') { + module.exports = f(require('jquery')); + + // RequireJS + } else if (typeof define === 'function' && define.amd) { + define(['jquery'], f); + + // ',j=a.settings.directionality?' dir="'+a.settings.directionality+'"':"";if(b=""+f+'"+a.getContent()+i+"",e)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(b);else{var k=this.getEl("body").firstChild.contentWindow.document;k.open(),k.write(b),k.close()}}})}),a.addButton("preview",{title:"Preview",cmd:"mcePreview"}),a.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/print/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/print/plugin.min.js new file mode 100644 index 0000000..eccf5ad --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/print/plugin.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i0){var d=a[b];if(!d)throw"Invalid capture group";c+=a[0].indexOf(d),a[0]=d}return[c,c+a[0].length,[a[0]]]}function h(b){var c;if(3===b.nodeType)return b.data;if(o[b.nodeName]&&!n[b.nodeName])return"";if(c="",a(b))return"\n";if((n[b.nodeName]||p[b.nodeName])&&(c+="\n"),b=b.firstChild)do c+=h(b);while(b=b.nextSibling);return c}function i(b,c,d){var e,f,g,h,i=[],j=0,k=b,l=c.shift(),m=0;a:for(;;){if((n[k.nodeName]||p[k.nodeName]||a(k))&&j++,3===k.nodeType&&(!f&&k.length+j>=l[1]?(f=k,h=l[1]-j):e&&i.push(k),!e&&k.length+j>l[0]&&(e=k,g=l[0]-j),j+=k.length),e&&f){if(k=d({startNode:e,startNodeIndex:g,endNode:f,endNodeIndex:h,innerNodes:i,match:l[2],matchIndex:m}),j-=f.length-h,e=null,f=null,i=[],l=c.shift(),m++,!l)break}else if(o[k.nodeName]&&!n[k.nodeName]||!k.firstChild){if(k.nextSibling){k=k.nextSibling;continue}}else if(!a(k)){k=k.firstChild;continue}for(;;){if(k.nextSibling){k=k.nextSibling;break}if(k.parentNode===b)break a;k=k.parentNode}}}function j(a){var b;if("function"!=typeof a){var c=a.nodeType?a:m.createElement(a);b=function(a,b){var d=c.cloneNode(!1);return d.setAttribute("data-mce-index",b),a&&d.appendChild(m.createTextNode(a)),d}}else b=a;return function(a){var c,d,e,f=a.startNode,g=a.endNode,h=a.matchIndex;if(f===g){var i=f;e=i.parentNode,a.startNodeIndex>0&&(c=m.createTextNode(i.data.substring(0,a.startNodeIndex)),e.insertBefore(c,i));var j=b(a.match[0],h);return e.insertBefore(j,i),a.endNodeIndex0}var l=this,m=-1;l.init=function(a){a.addMenuItem("searchreplace",{text:"Find and replace",shortcut:"Meta+F",onclick:d,separator:"before",context:"edit"}),a.addButton("searchreplace",{tooltip:"Find and replace",shortcut:"Meta+F",onclick:d}),a.addCommand("SearchReplace",d),a.shortcuts.add("Meta+F","",d)},l.find=function(a,b,c){a=a.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&"),a=c?"\\b"+a+"\\b":a;var d=f(new RegExp(a,b?"g":"gi"));return d&&(m=-1,m=i(!0)),d},l.next=function(){var a=i(!0);a!==-1&&(m=a)},l.prev=function(){var a=i(!1);a!==-1&&(m=a)},l.replace=function(c,d,f){var i,n,o,p,q,r,s=m;for(d=d!==!1,o=a.getBody(),n=b.grep(b.toArray(o.getElementsByTagName("span")),k),i=0;im&&n[i].setAttribute("data-mce-index",q-1)}return a.undoManager.add(),m=s,d?(r=h(s+1).length>0,l.next()):(r=h(s-1).length>0,l.prev()),!f&&r},l.done=function(c){var d,f,h,i;for(f=b.toArray(a.getBody().getElementsByTagName("span")),d=0;d=i.end?(f=l,h=i.end-k):e&&j.push(l),!e&&l.length+k>i.start&&(e=l,g=i.start-k),k+=l.length),e&&f){if(l=d({startNode:e,startNodeIndex:g,endNode:f,endNodeIndex:h,innerNodes:j,match:i.text,matchIndex:m}),k-=f.length-h,e=null,f=null,j=[],i=c.shift(),m++,!i)break}else if(y[l.nodeName]&&!x[l.nodeName]||!l.firstChild){if(l.nextSibling){l=l.nextSibling;continue}}else if(!a(l)){l=l.firstChild;continue}for(;;){if(l.nextSibling){l=l.nextSibling;break}if(l.parentNode===b)break a;l=l.parentNode}}}function g(a){function b(b,c){var d=A[c];d.stencil||(d.stencil=a(d));var e=d.stencil.cloneNode(!1);return e.setAttribute("data-mce-index",c),b&&e.appendChild(B.doc.createTextNode(b)),e}return function(a){var c,d,e,f=a.startNode,g=a.endNode,h=a.matchIndex,i=B.doc;if(f===g){var j=f;e=j.parentNode,a.startNodeIndex>0&&(c=i.createTextNode(j.data.substring(0,a.startNodeIndex)),e.insertBefore(c,j));var k=b(a.match,h);return e.insertBefore(k,j),a.endNodeIndex0&&d.insertNode(c.dom.doc.createTextNode(b)),d}function u(){return A.splice(0,A.length),o(),this}var v,w,x,y,z,A=[],B=c.dom;return x=c.schema.getBlockElements(),y=c.schema.getWhiteSpaceElements(),z=c.schema.getShortEndedElements(),w=e(b),{text:w,matches:A,each:l,filter:k,reset:u,matchFromElement:p,elementFromMatch:q,find:n,add:r,wrap:m,unwrap:o,replace:t,rangeFromMatch:s,indexOf:j}}}),h("9",tinymce.util.Tools.resolve),g("2",["9"],function(a){return a("tinymce.PluginManager")}),g("3",["9"],function(a){return a("tinymce.util.Tools")}),g("4",["9"],function(a){return a("tinymce.ui.Menu")}),g("5",["9"],function(a){return a("tinymce.dom.DOMUtils")}),g("6",["9"],function(a){return a("tinymce.util.XHR")}),g("7",["9"],function(a){return a("tinymce.util.URI")}),g("8",["9"],function(a){return a("tinymce.util.JSON")}),g("0",["1","2","3","4","5","6","7","8"],function(a,b,c,d,e,f,g,h){return b.add("spellchecker",function(i,j){function k(){return F.textMatcher||(F.textMatcher=new a(i.getBody(),i)),F.textMatcher}function l(a,b){var d=[];return c.each(b,function(a){d.push({selectable:!0,text:a.name,data:a.value})}),d}function m(a){for(var b in a)return!1;return!0}function n(a,b){var f=[],g=B[a];c.each(g,function(a){f.push({text:a,onclick:function(){i.insertContent(i.dom.encode(a)),i.dom.remove(b),s()}})}),f.push({text:"-"}),E&&f.push({text:"Add to Dictionary",onclick:function(){t(a,b)}}),f.push.apply(f,[{text:"Ignore",onclick:function(){u(a,b)}},{text:"Ignore all",onclick:function(){u(a,b,!0)}}]),D=new d({items:f,context:"contextmenu",onautohide:function(a){a.target.className.indexOf("spellchecker")!=-1&&a.preventDefault()},onhide:function(){D.remove(),D=null}}),D.renderTo(document.body);var h=e.DOM.getPos(i.getContentAreaContainer()),j=i.dom.getPos(b[0]),k=i.dom.getRoot();"BODY"==k.nodeName?(j.x-=k.ownerDocument.documentElement.scrollLeft||k.scrollLeft,j.y-=k.ownerDocument.documentElement.scrollTop||k.scrollTop):(j.x-=k.scrollLeft,j.y-=k.scrollTop),h.x+=j.x,h.y+=j.y,D.moveTo(h.x,h.y+b[0].offsetHeight)}function o(){return i.getParam("spellchecker_wordchar_pattern")||new RegExp('[^\\s!"#$%&()*+,-./:;<=>?@[\\]^_{|}`\xa7\xa9\xab\xae\xb1\xb6\xb7\xb8\xbb\xbc\xbd\xbe\xbf\xd7\xf7\xa4\u201d\u201c\u201e\xa0\u2002\u2003\u2009]+',"g")}function p(a,b,d,e){var k={method:a,lang:G.spellchecker_language},l="";k["addToDictionary"==a?"word":"text"]=b,c.each(k,function(a,b){l&&(l+="&"),l+=b+"="+encodeURIComponent(a)}),f.send({url:new g(j).toAbsolute(G.spellchecker_rpc_url),type:"post",content_type:"application/x-www-form-urlencoded",data:l,success:function(a){if(a=h.parse(a))a.error?e(a.error):d(a);else{var b=i.translate("Server response wasn't proper JSON.");e(b)}},error:function(){var a=i.translate("The spelling service was not found: (")+G.spellchecker_rpc_url+i.translate(")");e(a)}})}function q(a,b,c,d){var e=G.spellchecker_callback||p;e.call(F,a,b,c,d)}function r(){function a(a){i.notificationManager.open({text:a,type:"error"}),i.setProgressState(!1),v()}v()||(i.setProgressState(!0),q("spellcheck",k().text,z,a),i.focus())}function s(){i.dom.select("span.mce-spellchecker-word").length||v()}function t(a,b){i.setProgressState(!0),q("addToDictionary",a,function(){i.setProgressState(!1),i.dom.remove(b,!0),s()},function(a){i.notificationManager.open({text:a,type:"error"}),i.setProgressState(!1)})}function u(a,b,d){i.selection.collapse(),d?c.each(i.dom.select("span.mce-spellchecker-word"),function(b){b.getAttribute("data-mce-word")==a&&i.dom.remove(b,!0)}):i.dom.remove(b,!0),s()}function v(){if(k().reset(),F.textMatcher=null,C)return C=!1,i.fire("SpellcheckEnd"),!0}function w(a){var b=a.getAttribute("data-mce-index");return"number"==typeof b?""+b:b}function x(a){var b,d=[];if(b=c.toArray(i.getBody().getElementsByTagName("span")),b.length)for(var e=0;e0){var d=i.dom.createRng();d.setStartBefore(c[0]),d.setEndAfter(c[c.length-1]),i.selection.setRng(d),n(b.getAttribute("data-mce-word"),c)}}}),i.addMenuItem("spellchecker",{text:"Spellcheck",context:"tools",onclick:r,selectable:!0,onPostRender:function(){var a=this;a.active(C),i.on("SpellcheckStart SpellcheckEnd",function(){a.active(C)})}});var I={tooltip:"Spellcheck",onclick:r,onPostRender:function(){var a=this;i.on("SpellcheckStart SpellcheckEnd",function(){a.active(C)})}};A.length>1&&(I.type="splitbutton",I.menu=A,I.onshow=y,I.onselect=function(a){G.spellchecker_language=a.control.settings.data}),i.addButton("spellchecker",I),i.addCommand("mceSpellCheck",r),i.on("remove",function(){D&&(D.remove(),D=null)}),i.on("change",s),this.getTextMatcher=k,this.getWordCharPattern=o,this.markErrors=z,this.getLanguage=function(){return G.spellchecker_language},G.spellchecker_language=G.spellchecker_language||G.language||"en"}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/tabfocus/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/tabfocus/plugin.min.js new file mode 100644 index 0000000..b0c95f8 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/tabfocus/plugin.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i0){for(l=h+1;l=0;l--)if(g(j[l]))return j[l];return null}var h,j,k,l;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(k=c.explode(a.getParam("tab_focus",a.getParam("tabfocus_elements",":prev,:next"))),1==k.length&&(k[1]=k[0],k[0]=":prev"),j=b.shiftKey?":prev"==k[0]?g(-1):i.get(k[0]):":next"==k[1]?g(1):i.get(k[1]))){var m=d.get(j.id||j.name);j.id&&m?m.focus():e.setTimeout(function(){f.webkit||window.focus(),j.focus()},10),b.preventDefault()}}var i=b.DOM;a.on("init",function(){a.inline&&i.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",g),f.gecko?a.on("keypress keydown",h):a.on("keydown",h)})}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/table/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/table/plugin.min.js new file mode 100644 index 0000000..b9d5079 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/table/plugin.min.js @@ -0,0 +1,2 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i9)&&(b.hasChildNodes()||(b.innerHTML='
'))}var c=function(a){return function(b,c){b&&(c=parseInt(c,10),1===c||0===c?b.removeAttribute(a,1):b.setAttribute(a,c,1))}},d=function(a){return function(b){return parseInt(b.getAttribute(a)||1,10)}};return{setColSpan:c("colSpan"),setRowSpan:c("rowspan"),getColSpan:d("colSpan"),getRowSpan:d("rowSpan"),setSpanVal:function(a,b,d){c(b)(a,d)},getSpanVal:function(a,b){return d(b)(a)},paddCell:b}}),g("c",["6","b"],function(a,b){var c=function(a,b,c){return a[c]?a[c][b]:null},d=function(a,b,d){var e=c(a,b,d);return e?e.elm:null},e=function(a,b,e,f){var g,h,i=0,j=d(a,b,e);for(g=e;(f>0?g=0)&&(h=c(a,b,g),j===h.elm);g+=f)i++;return i},f=function(a,b,c){for(var d,e=a[c],f=b;f'),!1},"childNodes"),d=q(d,!1),p(d),g(d,"rowSpan",1),g(d,"colSpan",1),f?d.appendChild(f):c.paddCell(d),d}function z(){var a,b=ca.createRng();return e(ca.select("tr",i),function(a){0===a.cells.length&&ca.remove(a)}),0===ca.select("tr",i).length?(b.setStartBefore(i),b.setEndBefore(i),ba.setRng(b),void ca.remove(i)):(e(ca.select("thead,tbody,tfoot",i),function(a){0===a.rows.length&&ca.remove(a)}),n(),void(_&&(a=Z[Math.min(Z.length-1,_.y)],a&&(ba.select(a[Math.min(a.length-1,_.x)].elm,!0),ba.collapse(!0)))))}function A(a,b,c,d){var e,f,g,h,i;for(e=Z[b][a].elm.parentNode,g=1;g<=c;g++)if(e=ca.getNext(e,"tr")){for(f=a;f>=0;f--)if(i=Z[b+g][f].elm,i.parentNode==e){for(h=1;h<=d;h++)ca.insertAfter(y(i),i);break}if(f==-1)for(h=1;h<=d;h++)e.insertBefore(y(e.cells[0]),e.cells[0])}}function B(){e(Z,function(a,b){e(a,function(a,c){var d,e,h;if(u(a)&&(a=a.elm,d=f(a,"colspan"),e=f(a,"rowspan"),d>1||e>1)){for(g(a,"rowSpan",1),g(a,"colSpan",1),h=0;hc)&&d.push(a[e]);return d}function D(b){return a.grep(b,function(a){return a.real===!1})}function E(a){for(var b=[],c=0;c1&&(x=1),g(o,"colSpan",w),g(o,"rowSpan",x),m=i;m<=k;m++)for(l=h;l<=j;l++)Z[m]&&Z[m][l]&&(b=Z[m][l].elm,b!=o&&(q=a.grep(b.childNodes),e(q,function(a){o.appendChild(a)}),q.length&&(q=a.grep(o.childNodes),s=0,e(q,function(a){"BR"==a.nodeName&&s++0&&Z[b-1][h]&&(l=Z[b-1][h].elm,m=f(l,"rowSpan"),m>1)){g(l,"rowSpan",m+1);continue}}else if(m=f(c,"rowspan"),m>1){g(c,"rowSpan",m+1);continue}k=y(c),g(k,"colSpan",c.colSpan),j.appendChild(k),d=c}j.hasChildNodes()&&(a?i.parentNode.insertBefore(j,i):ca.insertAfter(j,i))}}function J(a,b){b=b||v().length||1;for(var c=0;c1?g(c,"colSpan",b-1):ca.remove(c)}),b.push(d))})}),z()}function P(){function a(a){var b,c;e(a.cells,function(a){var c=f(a,"rowSpan");c>1&&(g(a,"rowSpan",c-1),b=T(a),A(b.x,b.y,1,1))}),b=T(a.cells[0]),e(Z[b.y],function(a){var b;a=a.elm,a!=c&&(b=f(a,"rowSpan"),b<=1?ca.remove(a):g(a,"rowSpan",b-1),c=a)})}var b;b=v(),l(i)&&b.length==i.rows.length||(e(b.reverse(),function(b){a(b)}),z())}function Q(){var a=v();if(!l(i)||a.length!=i.rows.length)return ca.remove(a),z(),a}function R(){var a=v();return e(a,function(b,c){a[c]=q(b,!0)}),a}function S(b,c){var h,i,j,l=[];b&&(h=d.splitAt(Z,_.x,_.y,c),i=h.row,a.each(h.cells,p),j=a.map(b,function(a){return a.cloneNode(!0)}),e(j,function(a,b,d){var h,j,k,m,n=a.cells.length,q=0;for(o(a),h=0;h1&&(q--,b+k>d.length?(k=d.length-b,g(j,"rowSpan",k),l.push(d.length-1)):l.push(b+k-1)),p(j);for(e(l,function(a){b<=a&&q++}),h=q;h<$;h++)a.appendChild(y(a.cells[n-1]));for(h=$;h1?g(j,"colSpan",m-1):ca.remove(j);c?i.parentNode.insertBefore(a,i):i=ca.insertAfter(a,i)}),k())}function T(a){var b;return e(Z,function(c,d){return e(c,function(c,e){if(c.elm==a)return b={x:e,y:d},!1}),!b}),b}function U(a){_=T(a)}function V(){var a,b;return a=b=0,e(Z,function(c,d){e(c,function(c,e){var f,g;u(c)&&(c=Z[d][e],e>a&&(a=e),d>b&&(b=d),c.real&&(f=c.colspan-1,g=c.rowspan-1,f&&e+f>a&&(a=e+f),g&&d+g>b&&(b=d+g)))})}),{x:a,y:b}}function W(a){var b,c,d,e,f,g,h,i,j,l;if(aa=T(a),_&&aa){for(b=Math.min(_.x,aa.x),c=Math.min(_.y,aa.y),d=Math.max(_.x,aa.x),e=Math.max(_.y,aa.y),f=d,g=e,l=c;l<=e;l++)for(j=b;j<=d;j++)a=Z[l][j],a.real&&(h=a.colspan-1,i=a.rowspan-1,h&&j+h>f&&(f=j+h),i&&l+i>g&&(g=l+i));for(k(),l=c;l<=g;l++)for(j=b;j<=f;j++)Z[l][j]&&ca.setAttrib(Z[l][j].elm,"data-mce-selected","1")}}function X(a,b){var c,d,e;c=T(a),d=c.y*$+c.x;do{if(d+=b,e=r(d%$,Math.floor(d/$)),!e)break;if(e.elm!=a)return ba.select(e.elm,!0),ca.isEmpty(e.elm)&&ba.collapse(!0),!0}while(e.elm==a);return!1}function Y(b){if(_){var c=d.splitAt(Z,_.x,_.y,b);a.each(c.cells,p)}}var Z,$,_,aa,ba=h.selection,ca=ba.dom;i=i||ca.getParent(ba.getStart(!0),"table"),n(),j=j||ca.getParent(ba.getStart(!0),"th,td"),j&&(_=T(j),aa=V(),j=r(_.x,_.y)),a.extend(this,{deleteTable:x,split:B,merge:H,insertRow:I,insertRows:J,insertCol:K,insertCols:L,splitCols:Y,deleteCols:O,deleteRows:P,cutRows:Q,copyRows:R,pasteRows:S,getPos:T,setStartCell:U,setEndCell:W,moveRelIdx:X,refresh:n})}}),g("d",["a"],function(a){return a("tinymce.util.VK")}),g("e",["a"],function(a){return a("tinymce.util.Delay")}),g("2",["d","e","8","6","b"],function(a,b,c,d,e){var f=d.each,g=e.getSpanVal;return function(h){function i(){function c(c){function d(a,b){var d=a?"previousSibling":"nextSibling",f=h.dom.getParent(b,"tr"),g=f[d];if(g)return r(h,b,g,a),c.preventDefault(),!0;var i=h.dom.getParent(f,"table"),l=f.parentNode,m=l.nodeName.toLowerCase();if("tbody"===m||m===(a?"tfoot":"thead")){var n=e(a,i,l,"tbody");if(null!==n)return j(a,n,b)}return k(a,f,d,i)}function e(a,b,c,d){var e=h.dom.select(">"+d,b),f=e.indexOf(c);if(a&&0===f||!a&&f===e.length-1)return i(a,b);if(f===-1){var g="thead"===c.tagName.toLowerCase()?0:e.length-1;return e[g]}return e[f+(a?-1:1)]}function i(a,b){var c=a?"thead":"tfoot",d=h.dom.select(">"+c,b);return 0!==d.length?d[0]:null}function j(a,b,d){var e=l(b,a);return e&&r(h,d,e,a),c.preventDefault(),!0}function k(a,b,e,f){var g=f[e];if(g)return m(g),!0;var i=h.dom.getParent(f,"td,th");if(i)return d(a,i,c);var j=l(b,!a);return m(j),c.preventDefault(),!1}function l(a,b){var c=a&&a[b?"lastChild":"firstChild"];return c&&"BR"===c.nodeName?h.dom.getParent(c,"td,th"):c}function m(a){h.selection.setCursorLocation(a,0)}function n(){return u==a.UP||u==a.DOWN}function o(a){var b=a.selection.getNode(),c=a.dom.getParent(b,"tr");return null!==c}function p(a){for(var b=0,c=a;c.previousSibling;)c=c.previousSibling,b+=g(c,"colspan");return b}function q(a,b){var c=0,d=0;return f(a.children,function(a,e){if(c+=g(a,"colspan"),d=e,c>b)return!1}),d}function r(a,b,c,d){var e=p(h.dom.getParent(b,"td,th")),f=q(c,e),g=c.childNodes[f],i=l(g,d);m(i||g)}function s(a){var b=h.selection.getNode(),c=h.dom.getParent(b,"td,th"),d=h.dom.getParent(a,"td,th");return c&&c!==d&&t(c,d)}function t(a,b){return h.dom.getParent(a,"TABLE")===h.dom.getParent(b,"TABLE")}var u=c.keyCode;if(n()&&o(h)){var v=h.selection.getNode();b.setEditorTimeout(h,function(){s(v)&&d(!c.shiftKey&&u===a.UP,v,c)},0)}}h.on("KeyDown",function(a){c(a)})}function j(){function a(a,b){var c,d=b.ownerDocument,e=d.createRange();return e.setStartBefore(b),e.setEnd(a.endContainer,a.endOffset),c=d.createElement("body"),c.appendChild(e.cloneContents()),0===c.innerHTML.replace(/<(br|img|object|embed|input|textarea)[^>]*>/gi,"-").replace(/<[^>]+>/g,"").length}h.on("KeyDown",function(b){var c,d,e=h.dom;37!=b.keyCode&&38!=b.keyCode||(c=h.selection.getRng(),d=e.getParent(c.startContainer,"table"),d&&h.getBody().firstChild==d&&a(c,d)&&(c=e.createRng(),c.setStartBefore(d),c.setEndBefore(d),h.selection.setRng(c),b.preventDefault()))})}function k(){h.on("KeyDown SetContent VisualAid",function(){var a;for(a=h.getBody().lastChild;a;a=a.previousSibling)if(3==a.nodeType){if(a.nodeValue.length>0)break}else if(1==a.nodeType&&("BR"==a.tagName||!a.getAttribute("data-mce-bogus")))break;a&&"TABLE"==a.nodeName&&(h.settings.forced_root_block?h.dom.add(h.getBody(),h.settings.forced_root_block,h.settings.forced_root_block_attrs,c.ie&&c.ie<10?" ":'
'):h.dom.add(h.getBody(),"br",{"data-mce-bogus":"1"}))}),h.on("PreProcess",function(a){var b=a.node.lastChild;b&&("BR"==b.nodeName||1==b.childNodes.length&&("BR"==b.firstChild.nodeName||"\xa0"==b.firstChild.nodeValue))&&b.previousSibling&&"TABLE"==b.previousSibling.nodeName&&h.dom.remove(b)})}function l(){function a(a,b,c,d){var e,f,g,h=3,i=a.dom.getParent(b.startContainer,"TABLE");return i&&(e=i.parentNode),f=b.startContainer.nodeType==h&&0===b.startOffset&&0===b.endOffset&&d&&("TR"==c.nodeName||c==e),g=("TD"==c.nodeName||"TH"==c.nodeName)&&!d,f||g}function b(){var b=h.selection.getRng(),c=h.selection.getNode(),d=h.dom.getParent(b.startContainer,"TD,TH");if(a(h,b,c,d)){d||(d=c);for(var e=d.lastChild;e.lastChild;)e=e.lastChild;3==e.nodeType&&(b.setEnd(e,e.data.length),h.selection.setRng(b))}}h.on("KeyDown",function(){b()}),h.on("MouseDown",function(a){2!=a.button&&b()})}function m(){function b(a){h.selection.select(a,!0),h.selection.collapse(!0)}function c(a){h.$(a).empty(),e.paddCell(a)}h.on("keydown",function(e){if((e.keyCode==a.DELETE||e.keyCode==a.BACKSPACE)&&!e.isDefaultPrevented()){var f,g,i,j;if(f=h.dom.getParent(h.selection.getStart(),"table")){if(g=h.dom.select("td,th",f),i=d.grep(g,function(a){return!!h.dom.getAttrib(a,"data-mce-selected")}),0===i.length)return j=h.dom.getParent(h.selection.getStart(),"td,th"),void(h.selection.isCollapsed()&&j&&h.dom.isEmpty(j)&&(e.preventDefault(),c(j),b(j)));e.preventDefault(),h.undoManager.transact(function(){g.length==i.length?h.execCommand("mceTableDelete"):(d.each(i,c),b(i[0]))})}}})}function n(){var b="\ufeff",c=function(a){return h.dom.isEmpty(a)||a.firstChild===a.lastChild&&f(a.firstChild)},d=function(a){return a&&"CAPTION"==a.nodeName&&"TABLE"==a.parentNode.nodeName},e=function(a,b){var c=b.firstChild;do if(c===a)return!0;while(c=c.firstChild);return!1},f=function(a){if(3===a.nodeType){if(a.data===b)return!0;a=a.parentNode}return 1===a.nodeType&&a.hasAttribute("data-mce-caret")},g=function(a){var b=h.selection.getRng();return!b.startOffset&&!b.startContainer.previousSibling&&e(b.startContainer,a)},i=function(a,c){var d;d=c?h.dom.create("p",{"data-mce-caret":"after","data-mce-bogus":"all"},'
'):a.ownerDocument.createTextNode(b),a.appendChild(d)},j=function(a,d){var e=a.lastChild,g=h.selection.getRng(),j=g.startContainer,k=g.startOffset;c(a)?(a.innerHTML=b,j=a.lastChild,k=0):f(e)||i(a,h.dom.isBlock(e)),h.selection.setCursorLocation(j,k)},k=function(a){var b=h.selection.getRng(),c=h.dom.createRng(),d=a.firstChild;b.commonAncestorContainer===a.parentNode&&e(b.startContainer,a)&&(c.setStart(a,0),1===d.nodeType?c.setEnd(a,a.childNodes.length):c.setEnd(d,d.nodeValue.length),h.selection.setRng(c))};h.on("keydown",function(b){if(!(b.keyCode!==a.DELETE&&b.keyCode!==a.BACKSPACE||b.isDefaultPrevented())){var e=h.dom.getParent(h.selection.getStart(),"caption");d(e)&&(h.selection.isCollapsed()?(j(e),(c(e)||b.keyCode===a.BACKSPACE&&g(e))&&b.preventDefault()):(k(e),h.undoManager.transact(function(){h.execCommand("Delete"),j(e)}),b.preventDefault()))}})}n(),m(),c.webkit&&(i(),l()),c.gecko&&(j(),k()),c.ie>9&&(j(),k())}}),g("7",["a"],function(a){return a("tinymce.dom.TreeWalker")}),g("3",["1","7","6"],function(a,b,c){return function(d,e){function f(a){d.getBody().style.webkitUserSelect="",(a||p)&&(d.$("td[data-mce-selected],th[data-mce-selected]").removeAttr("data-mce-selected"),p=!1)}function g(a,b){return!(!a||!b)&&a===o.getParent(b,"table")}function h(b){var c,f,h=b.target;if(!m&&!n&&h!==l&&(l=h,k&&j)){if(f=o.getParent(h,"td,th"),g(k,f)||(f=o.getParent(k,"td,th")),j===f&&!p)return;if(e(!0),g(k,f)){b.preventDefault(),i||(i=new a(d,k,j),d.getBody().style.webkitUserSelect="none"),i.setEndCell(f),p=!0,c=d.selection.getSel();try{c.removeAllRanges?c.removeAllRanges():c.empty()}catch(a){}}}}var i,j,k,l,m,n,o=d.dom,p=!0,q=function(){j=i=k=l=null,e(!1)};return d.on("SelectionChange",function(a){p&&a.stopImmediatePropagation()},!0),d.on("MouseDown",function(a){2==a.button||m||n||(f(),j=o.getParent(a.target,"td,th"),k=o.getParent(j,"table"))}),d.on("mouseover",h),d.on("remove",function(){o.unbind(d.getDoc(),"mouseover",h),f()}),d.on("MouseUp",function(){function a(a,d){var f=new b(a,a);do{if(3==a.nodeType&&0!==c.trim(a.nodeValue).length)return void(d?e.setStart(a,0):e.setEnd(a,a.nodeValue.length));if("BR"==a.nodeName)return void(d?e.setStartBefore(a):e.setEndBefore(a))}while(a=d?f.next():f.prev())}var e,f,g,h,k,l=d.selection;if(j){if(i&&(d.getBody().style.webkitUserSelect=""),f=o.select("td[data-mce-selected],th[data-mce-selected]"),f.length>0){e=o.createRng(),h=f[0],e.setStartBefore(h),e.setEndAfter(h),a(h,1),g=new b(h,o.getParent(f[0],"table"));do if("TD"==h.nodeName||"TH"==h.nodeName){if(!o.getAttrib(h,"data-mce-selected"))break;k=h}while(h=g.next());a(k),l.setRng(e)}d.nodeChanged(),q()}}),d.on("KeyUp Drop SetContent",function(a){f("setcontent"==a.type),q(),m=!1}),d.on("ObjectResizeStart ObjectResized",function(a){m="objectresized"!=a.type}),d.on("dragstart",function(){n=!0}),d.on("drop dragend",function(){n=!1}),{clear:f}}}),g("4",["6","8"],function(a,b){var c=a.each;return function(d){function e(){var a=d.settings.color_picker_callback;if(a)return function(){var b=this;a.call(d,function(a){b.value(a).fire("change")},b.value())}}function f(a){return{title:"Advanced",type:"form",defaults:{onchange:function(){l(a,this.parents().reverse()[0],"style"==this.name())}},items:[{label:"Style",name:"style",type:"textbox"},{type:"form",padding:0,formItemDefaults:{layout:"grid",alignH:["start","right"]},defaults:{size:7},items:[{label:"Border color",type:"colorbox",name:"borderColor",onaction:e()},{label:"Background color",type:"colorbox",name:"backgroundColor",onaction:e()}]}]}}function g(a){return a?a.replace(/px$/,""):""}function h(a){return/^[0-9]+$/.test(a)&&(a+="px"),a}function i(a){c("left center right".split(" "),function(b){d.formatter.remove("align"+b,{},a)})}function j(a){c("top middle bottom".split(" "),function(b){d.formatter.remove("valign"+b,{},a)})}function k(b,c,d){function e(b,d){return d=d||[],a.each(b,function(a){var b={text:a.text||a.title};a.menu?b.menu=e(a.menu):(b.value=a.value,c&&c(b)),d.push(b)}),d}return e(b,d||[])}function l(a,b,c){var d=b.toJSON(),e=a.parseStyle(d.style);c?(b.find("#borderColor").value(e["border-color"]||"")[0].fire("change"),b.find("#backgroundColor").value(e["background-color"]||"")[0].fire("change")):(e["border-color"]=d.borderColor,e["background-color"]=d.backgroundColor),b.find("#style").value(a.serializeStyle(a.parseStyle(a.serializeStyle(e))))}function m(a,b,c){var d=a.parseStyle(a.getAttrib(c,"style"));d["border-color"]&&(b.borderColor=d["border-color"]),d["background-color"]&&(b.backgroundColor=d["background-color"]),b.style=a.serializeStyle(d)}function n(a,b,d){var e=a.parseStyle(a.getAttrib(b,"style"));c(d,function(a){e[a.name]=a.value}),a.setAttrib(b,"style",a.serializeStyle(a.parseStyle(a.serializeStyle(e))))}var o=this;o.tableProps=function(){o.table(!0)},o.table=function(e){function j(){function c(a,b,d){if("TD"===a.tagName||"TH"===a.tagName)v.setStyle(a,b,d);else if(a.children)for(var e=0;e',p.insertBefore(e,p.firstChild)),i(p),w.align&&d.formatter.apply("align"+w.align,{},p),d.focus(),d.addVisual()})}function o(a,b){function c(a,c){for(var d=0;d1?p={width:"",height:"",scope:"","class":"",align:"",style:"",type:o.nodeName.toLowerCase()}:(p={width:g(r.getStyle(o,"width")||r.getAttrib(o,"width")),height:g(r.getStyle(o,"height")||r.getAttrib(o,"height")),scope:r.getAttrib(o,"scope"),"class":r.getAttrib(o,"class")},p.type=o.nodeName.toLowerCase(),c("left center right".split(" "),function(a){d.formatter.matchNode(o,"align"+a)&&(p.align=a)}),c("top middle bottom".split(" "),function(a){d.formatter.matchNode(o,"valign"+a)&&(p.valign=a)}),m(r,p,o)),d.settings.table_cell_class_list&&(q={name:"class",type:"listbox",label:"Class",values:k(d.settings.table_cell_class_list,function(a){a.value&&(a.textStyle=function(){return d.formatter.getCssText({block:"td",classes:[a.value]})})})});var t={type:"form",layout:"flex",direction:"column",labelGapCalc:"children",padding:0,items:[{type:"form",layout:"grid",columns:2,labelGapCalc:!1,padding:0,defaults:{type:"textbox",maxWidth:50},items:[{label:"Width",name:"width"},{label:"Height",name:"height"},{label:"Cell type",name:"type",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"Cell",value:"td"},{text:"Header cell",value:"th"}]},{label:"Scope",name:"scope",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Row",value:"row"},{text:"Column",value:"col"},{text:"Row group",value:"rowgroup"},{text:"Column group",value:"colgroup"}]},{label:"H Align",name:"align",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"V Align",name:"valign",type:"listbox",text:"None",minWidth:90,maxWidth:null,values:[{text:"None",value:""},{text:"Top",value:"top"},{text:"Middle",value:"middle"},{text:"Bottom",value:"bottom"}]}]},q]};d.settings.table_cell_advtab!==!1?d.windowManager.open({title:"Cell properties",bodyType:"tabpanel",data:p,body:[{title:"General",type:"form",items:t},f(r)],onsubmit:n}):d.windowManager.open({title:"Cell properties",data:p,body:t,onsubmit:n})}},o.row=function(){function b(a,b,c){(1===u.length||c)&&t.setAttrib(a,b,c)}function e(a,b,c){(1===u.length||c)&&t.setStyle(a,b,c)}function j(){var f,g,j;l(t,this),r=a.extend(r,this.toJSON()),d.undoManager.transact(function(){var a=r.type;c(u,function(c){b(c,"scope",r.scope),b(c,"style",r.style),b(c,"class",r["class"]),e(c,"height",h(r.height)),a!==c.parentNode.nodeName.toLowerCase()&&(f=t.getParent(c,"table"),g=c.parentNode,j=t.select(a,f)[0],j||(j=t.create(a),f.firstChild?f.insertBefore(j,f.firstChild):f.appendChild(j)),j.appendChild(c),g.hasChildNodes()||t.remove(g)),1===u.length&&i(c),r.align&&d.formatter.apply("align"+r.align,{},c)}),d.focus()})}var n,o,p,q,r,s,t=d.dom,u=[];n=d.dom.getParent(d.selection.getStart(),"table"),o=d.dom.getParent(d.selection.getStart(),"td,th"),c(n.rows,function(a){c(a.cells,function(b){if(t.getAttrib(b,"data-mce-selected")||b==o)return u.push(a),!1})}),p=u[0],p&&(u.length>1?r={height:"",scope:"","class":"",align:"",type:p.parentNode.nodeName.toLowerCase()}:(r={height:g(t.getStyle(p,"height")||t.getAttrib(p,"height")),scope:t.getAttrib(p,"scope"),"class":t.getAttrib(p,"class")},r.type=p.parentNode.nodeName.toLowerCase(),c("left center right".split(" "),function(a){d.formatter.matchNode(p,"align"+a)&&(r.align=a)}),m(t,r,p)),d.settings.table_row_class_list&&(q={name:"class",type:"listbox",label:"Class",values:k(d.settings.table_row_class_list,function(a){a.value&&(a.textStyle=function(){return d.formatter.getCssText({block:"tr",classes:[a.value]})})})}),s={type:"form",columns:2,padding:0,defaults:{type:"textbox"},items:[{type:"listbox",name:"type",label:"Row type",text:"Header",maxWidth:null,values:[{text:"Header",value:"thead"},{text:"Body",value:"tbody"},{text:"Footer",value:"tfoot"}]},{type:"listbox",name:"align",label:"Alignment",text:"None",maxWidth:null,values:[{text:"None",value:""},{text:"Left",value:"left"},{text:"Center",value:"center"},{text:"Right",value:"right"}]},{label:"Height",name:"height"},q]},d.settings.table_row_advtab!==!1?d.windowManager.open({title:"Row properties",data:r,bodyType:"tabpanel",body:[{title:"General",type:"form",items:s},f(t)],onsubmit:j}):d.windowManager.open({title:"Row properties",data:r,body:s,onsubmit:j}))}}}),g("5",["6","d"],function(a,b){var c;return function(d){function e(a,b){return{index:a,y:d.dom.getPos(b).y}}function f(a,b){return{index:a,y:d.dom.getPos(b).y+b.offsetHeight}}function g(a,b){return{index:a,x:d.dom.getPos(b).x}}function h(a,b){return{index:a,x:d.dom.getPos(b).x+b.offsetWidth}}function i(){var a=d.getBody().dir;return"rtl"===a}function j(){return d.inline}function k(){return j?d.getBody().ownerDocument.body:d.getBody()}function l(a,b){return i()?h(a,b):g(a,b)}function m(a,b){return i()?g(a,b):h(a,b)}function n(a,b){return o(a,"width")/o(b,"width")*100}function o(a,b){var c=d.dom.getStyle(a,b,!0),e=parseInt(c,10);return e}function p(a){var b=o(a,"width"),c=o(a.parentElement,"width");return b/c*100}function q(a,b){var c=o(a,"width");return b/c*100}function r(a,b){var c=o(a.parentElement,"width");return b/c*100}function s(a,b,c){for(var d=[],e=1;e0?s(e,f,g):[],k=h.length>0?s(l,m,h):[];w(j,a.offsetWidth,i),x(k,a.offsetHeight,i)}function F(a,b,c,d){if(b<0||b>=a.length-1)return"";var e=a[b];if(e)e={value:e,delta:0};else for(var f=a.slice(0,b).reverse(),g=0;g0?e:f}function I(b,c,d){for(var e=C(b),f=a.map(e,function(a){return l(a.colIndex,a.element).x}),g=[],h=0;h1?F(f,h):H(e[h].element,c,d);j=j?j:va,g.push(j)}return g}function J(a){var b=G(a,"height"),c=parseInt(b,10);return Q(b)&&(c=0),!isNaN(c)&&c>0?c:o(a,"height")}function K(b){for(var c=D(b),d=a.map(c,function(a){return e(a.rowIndex,a.element).y}),f=[],g=0;g1?F(d,g):J(c[g].element);i=i?i:wa,f.push(i)}return f}function L(b,c,d,e,f){function g(b){return a.map(b,function(){return 0})}function h(){var a;if(f)a=[100-l[0]];else{var b=Math.max(e,l[0]+d);a=[b-l[0]]}return a}function i(a,b){var c,f=g(l.slice(0,a)),h=g(l.slice(b+1));if(d>=0){var i=Math.max(e,l[b]-d);c=f.concat([d,i-l[b]]).concat(h)}else{var j=Math.max(e,l[a]+d),k=l[a]-j;c=f.concat([j-l[a],k]).concat(h)}return c}function j(a,b){var c,f=g(l.slice(0,b));if(d>=0)c=f.concat([d]);else{var h=Math.max(e,l[b]+d);c=f.concat([h-l[b]])}return c}var k,l=b.slice(0);return k=0===b.length?[]:1===b.length?h():0===c?i(0,1):c>0&&c=1&&S(c,b,a)}else if(_(ia)){var g=parseInt(d.dom.getAttrib(ia,pa),10),h=d.dom.getPos(ia).y;a=parseInt(d.dom.getAttrib(ia,oa),10),b=h-g,Math.abs(b)>=1&&T(c,b,a)}u(c),d.nodeChanged()}}function Z(a,b){ha=ha?ha:W(),ga=!0,d.dom.addClass(a,xa),ia=a,X(ha,b),d.dom.add(k(),ha)}function $(a){return d.dom.hasClass(a,qa)}function _(a){return d.dom.hasClass(a,ma)}function aa(a){ja=void 0!==ja?ja:a.clientX;var b=a.clientX-ja;ja=a.clientX;var c=d.dom.getPos(ia).x;d.dom.setStyle(ia,"left",c+b+"px")}function ba(a){ka=void 0!==ka?ka:a.clientY;var b=a.clientY-ka;ka=a.clientY;var c=d.dom.getPos(ia).y;d.dom.setStyle(ia,"top",c+b+"px")}function ca(a){ja=void 0,Z(a,aa)}function da(a){ka=void 0,Z(a,ba)}function ea(a){var b=a.target,e=d.getBody();if(d.$.contains(e,c)||c===e)if($(b)){a.preventDefault();var f=d.dom.getPos(b).x;d.dom.setAttrib(b,ta,f),ca(b)}else if(_(b)){a.preventDefault();var g=d.dom.getPos(b).y;d.dom.setAttrib(b,pa,g),da(b)}else t()}var fa,ga,ha,ia,ja,ka,la="mce-resize-bar",ma="mce-resize-bar-row",na="row-resize",oa="data-row",pa="data-initial-top",qa="mce-resize-bar-col",ra="col-resize",sa="data-col",ta="data-initial-left",ua=4,va=10,wa=10,xa="mce-resize-bar-dragging",ya=new RegExp(/(\d+(\.\d+)?%)/),za=new RegExp(/px|em/);return d.on("init",function(){d.dom.bind(k(),"mousedown",ea)}),d.on("ObjectResized",function(b){var c=b.target;if("TABLE"===c.nodeName){var e=[];a.each(c.rows,function(b){a.each(b.cells,function(a){var b=d.dom.getStyle(a,"width",!0);e.push({cell:a,width:b})})}),a.each(e,function(a){d.dom.setStyle(a.cell,"width",a.width),d.dom.setAttrib(a.cell,"width",null)})}}),d.on("mouseover",function(a){if(!ga){var b=d.dom.getParent(a.target,"table");("TABLE"===a.target.nodeName||b)&&(c=b,u(b))}}),d.on("keydown",function(a){switch(a.keyCode){case b.LEFT:case b.RIGHT:case b.UP:case b.DOWN:t()}}),d.on("remove",function(){t(),d.dom.unbind(k(),"mousedown",ea)}),{adjustWidth:S,adjustHeight:T,clearBars:t,drawBars:E,determineDeltas:L,getTableGrid:z,getTableDetails:y,getWidths:I,getPixelHeights:K,isPercentageBasedSize:Q,isPixelBasedSize:R,recalculateWidths:N,recalculateCellHeights:O,recalculateRowHeights:P}}}),g("9",["a"],function(a){return a("tinymce.PluginManager")}),g("0",["1","2","3","4","5","6","7","8","9"],function(a,b,c,d,e,f,g,h,i){function j(f){function g(a){return function(){f.execCommand(a)}}function i(a,b){var c,d,e,g;for(e='',c=0;c",d=0;d"+(h.ie&&h.ie<10?" ":"
")+"";e+=""}return e+="
",f.undoManager.transact(function(){f.insertContent(e),g=f.dom.get("__mce"),f.dom.setAttrib(g,"id",null),f.$("tr",g).each(function(a,b){f.fire("newrow",{node:b}),f.$("th,td",b).each(function(a,b){f.fire("newcell",{node:b})})}),f.dom.setAttribs(g,f.settings.table_default_attributes||{}),f.dom.setStyles(g,f.settings.table_default_styles||{})}),g}function j(a,b,c){function d(){var d,e,g,h={},i=0;e=f.dom.select("td[data-mce-selected],th[data-mce-selected]"),d=e[0],d||(d=f.selection.getStart()),c&&e.length>0?(k(e,function(a){return h[a.parentNode.parentNode.nodeName]=1}),k(h,function(a){i+=a}),g=1!==i):g=!f.dom.getParent(d,b),a.disabled(g),f.selection.selectorChanged(b,function(b){a.disabled(!b)})}f.initialized?d():f.on("init",d)}function l(){j(this,"table")}function m(){j(this,"td,th")}function n(){j(this,"td,th",!0)}function o(){var a="";a='';for(var b=0;b<10;b++){a+="";for(var c=0;c<10;c++)a+='';a+=""}return a+="
",a+=''}function p(a,b,c){var d,e,g,h,i,j=c.getEl().getElementsByTagName("table")[0],k=c.isRtl()||"tl-tr"==c.parent().rel;for(j.nextSibling.innerHTML=a+1+" x "+(b+1),k&&(a=9-a),e=0;e<10;e++)for(d=0;d<10;d++)h=j.rows[e].childNodes[d].firstChild,i=(k?d>=a:d<=a)&&e<=b,f.dom.toggleClass(h,"mce-active",i),i&&(g=h);return g.parentNode}function q(){f.addButton("tableprops",{title:"Table properties",onclick:y.tableProps,icon:"table"}),f.addButton("tabledelete",{title:"Delete table",onclick:g("mceTableDelete")}),f.addButton("tablecellprops",{title:"Cell properties",onclick:g("mceTableCellProps")}),f.addButton("tablemergecells",{title:"Merge cells",onclick:g("mceTableMergeCells")}),f.addButton("tablesplitcells",{title:"Split cell",onclick:g("mceTableSplitCells")}),f.addButton("tableinsertrowbefore",{title:"Insert row before",onclick:g("mceTableInsertRowBefore")}),f.addButton("tableinsertrowafter",{title:"Insert row after",onclick:g("mceTableInsertRowAfter")}),f.addButton("tabledeleterow",{title:"Delete row",onclick:g("mceTableDeleteRow")}),f.addButton("tablerowprops",{title:"Row properties",onclick:g("mceTableRowProps")}),f.addButton("tablecutrow",{title:"Cut row",onclick:g("mceTableCutRow")}),f.addButton("tablecopyrow",{title:"Copy row",onclick:g("mceTableCopyRow")}),f.addButton("tablepasterowbefore",{title:"Paste row before",onclick:g("mceTablePasteRowBefore")}),f.addButton("tablepasterowafter",{title:"Paste row after",onclick:g("mceTablePasteRowAfter")}),f.addButton("tableinsertcolbefore",{title:"Insert column before",onclick:g("mceTableInsertColBefore")}),f.addButton("tableinsertcolafter",{title:"Insert column after",onclick:g("mceTableInsertColAfter")}),f.addButton("tabledeletecol",{title:"Delete column",onclick:g("mceTableDeleteCol")})}function r(a){var b=f.dom.is(a,"table")&&f.getBody().contains(a);return b}function s(){var a=f.settings.table_toolbar;""!==a&&a!==!1&&(a||(a="tableprops tabledelete | tableinsertrowbefore tableinsertrowafter tabledeleterow | tableinsertcolbefore tableinsertcolafter tabledeletecol"),f.addContextToolbar(r,a))}function t(){return v}function u(a){v=a}var v,w,x=this,y=new d(f);!f.settings.object_resizing||f.settings.table_resize_bars===!1||f.settings.object_resizing!==!0&&"table"!==f.settings.object_resizing||(w=e(f)),f.settings.table_grid===!1?f.addMenuItem("inserttable",{text:"Table",icon:"table",context:"table",onclick:y.table}):f.addMenuItem("inserttable",{text:"Table",icon:"table",context:"table",ariaHideMenu:!0,onclick:function(a){a.aria&&(this.parent().hideAll(),a.stopImmediatePropagation(),y.table())},onshow:function(){p(0,0,this.menu.items()[0])},onhide:function(){var a=this.menu.items()[0].getEl().getElementsByTagName("a");f.dom.removeClass(a,"mce-active"),f.dom.addClass(a[0],"mce-active")},menu:[{type:"container",html:o(),onPostRender:function(){this.lastX=this.lastY=0},onmousemove:function(a){var b,c,d=a.target;"A"==d.tagName.toUpperCase()&&(b=parseInt(d.getAttribute("data-mce-x"),10),c=parseInt(d.getAttribute("data-mce-y"),10),(this.isRtl()||"tl-tr"==this.parent().rel)&&(b=9-b),b===this.lastX&&c===this.lastY||(p(b,c,a.control),this.lastX=b,this.lastY=c))},onclick:function(a){var b=this;"A"==a.target.tagName.toUpperCase()&&(a.preventDefault(),a.stopPropagation(),b.parent().cancel(),f.undoManager.transact(function(){i(b.lastX+1,b.lastY+1)}),f.addVisual())}}]}),f.addMenuItem("tableprops",{text:"Table properties",context:"table",onPostRender:l,onclick:y.tableProps}),f.addMenuItem("deletetable",{text:"Delete table",context:"table",onPostRender:l,cmd:"mceTableDelete"}),f.addMenuItem("cell",{separator:"before",text:"Cell",context:"table",menu:[{text:"Cell properties",onclick:g("mceTableCellProps"),onPostRender:m},{text:"Merge cells",onclick:g("mceTableMergeCells"),onPostRender:n},{text:"Split cell",onclick:g("mceTableSplitCells"),onPostRender:m}]}),f.addMenuItem("row",{text:"Row",context:"table",menu:[{text:"Insert row before",onclick:g("mceTableInsertRowBefore"),onPostRender:m},{text:"Insert row after",onclick:g("mceTableInsertRowAfter"),onPostRender:m},{text:"Delete row",onclick:g("mceTableDeleteRow"),onPostRender:m},{text:"Row properties",onclick:g("mceTableRowProps"),onPostRender:m},{text:"-"},{text:"Cut row",onclick:g("mceTableCutRow"),onPostRender:m},{text:"Copy row",onclick:g("mceTableCopyRow"),onPostRender:m},{text:"Paste row before",onclick:g("mceTablePasteRowBefore"),onPostRender:m},{text:"Paste row after",onclick:g("mceTablePasteRowAfter"),onPostRender:m}]}),f.addMenuItem("column",{text:"Column",context:"table",menu:[{text:"Insert column before",onclick:g("mceTableInsertColBefore"),onPostRender:m},{text:"Insert column after",onclick:g("mceTableInsertColAfter"),onPostRender:m},{text:"Delete column",onclick:g("mceTableDeleteCol"),onPostRender:m}]});var z=[];k("inserttable tableprops deletetable | cell row column".split(" "),function(a){"|"==a?z.push({text:"-"}):z.push(f.menuItems[a])}),f.addButton("table",{type:"menubutton",title:"Table",menu:z}),h.isIE||f.on("click",function(a){a=a.target,"TABLE"===a.nodeName&&(f.selection.select(a),f.nodeChanged())}),x.quirks=new b(f),f.on("Init",function(){x.cellSelection=new c(f,function(a){a&&w&&w.clearBars()}),x.resizeBars=w}),f.on("PreInit",function(){f.serializer.addAttributeFilter("data-mce-cell-padding,data-mce-border,data-mce-border-color",function(a,b){for(var c=a.length;c--;)a[c].attr(b,null)})}),k({mceTableSplitCells:function(a){a.split()},mceTableMergeCells:function(a){var b;b=f.dom.getParent(f.selection.getStart(),"th,td"),f.dom.select("td[data-mce-selected],th[data-mce-selected]").length?a.merge():y.merge(a,b)},mceTableInsertRowBefore:function(a){a.insertRows(!0)},mceTableInsertRowAfter:function(a){a.insertRows()},mceTableInsertColBefore:function(a){a.insertCols(!0)},mceTableInsertColAfter:function(a){a.insertCols()},mceTableDeleteCol:function(a){a.deleteCols()},mceTableDeleteRow:function(a){a.deleteRows()},mceTableCutRow:function(a){v=a.cutRows()},mceTableCopyRow:function(a){v=a.copyRows()},mceTablePasteRowBefore:function(a){a.pasteRows(v,!0)},mceTablePasteRowAfter:function(a){a.pasteRows(v)},mceSplitColsBefore:function(a){a.splitCols(!0)},mceSplitColsAfter:function(a){a.splitCols(!1)},mceTableDelete:function(a){w&&w.clearBars(),a.deleteTable()}},function(b,c){f.addCommand(c,function(){var c=new a(f);c&&(b(c),f.execCommand("mceRepaint"),x.cellSelection.clear())})}),k({mceInsertTable:y.table,mceTableProps:function(){y.table(!0)},mceTableRowProps:y.row,mceTableCellProps:y.cell},function(a,b){f.addCommand(b,function(b,c){a(c)})}),q(),s(),f.settings.table_tab_navigation!==!1&&f.on("keydown",function(b){var c,d,e;9==b.keyCode&&(c=f.dom.getParent(f.selection.getStart(),"th,td"),c&&(b.preventDefault(),d=new a(f),e=b.shiftKey?-1:1,f.undoManager.transact(function(){!d.moveRelIdx(c,e)&&e>0&&(d.insertRow(),d.refresh(),d.moveRelIdx(c,e))})))}),x.insertTable=i,x.setClipboardRows=u,x.getClipboardRows=t}var k=f.each;return i.add("table",j),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/template/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/template/plugin.min.js new file mode 100644 index 0000000..e097c3f --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/template/plugin.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i")==-1){var c="";d.each(b.contentCSS,function(a){c+=''});var e=b.settings.body_class||"";e.indexOf("=")!=-1&&(e=b.getParam("body_class","","hash"),e=e[b.id]||""),a=""+c+''+a+""}a=j(a,"template_preview_replace_values");var f=g.find("iframe")[0].getEl().contentWindow.document;f.open(),f.write(a),f.close()}var f=a.control.value();f.url?e.send({url:f.url,success:function(a){h=a,c(h)}}):(h=f.content,c(h)),g.find("#description")[0].text(a.control.value().description)}var g,h,i=[];if(!c||0===c.length){var l=b.translate("No templates defined.");return void b.notificationManager.open({text:l,type:"info"})}d.each(c,function(a){i.push({selected:!i.length,text:a.title,value:{url:a.url,content:a.content,description:a.description}})}),g=b.windowManager.open({title:"Insert template",layout:"flex",direction:"column",align:"stretch",padding:15,spacing:10,items:[{type:"form",flex:0,padding:0,items:[{type:"container",label:"Templates",items:{type:"listbox",label:"Templates",name:"template",values:i,onselect:f}}]},{type:"label",name:"description",label:"Description",text:"\xa0"},{type:"iframe",flex:1,border:1}],onsubmit:function(){k(!1,h)},minWidth:Math.min(a.DOM.getViewPort().w,b.getParam("template_popup_width",600)),minHeight:Math.min(a.DOM.getViewPort().h,b.getParam("template_popup_height",500))}),g.find("listbox")[0].fire("select")}function h(a,c){function d(a,b){if(a=""+a,a.length0&&(f=k.create("div",null),f.appendChild(g[0].cloneNode(!0))),d.each(k.select("*",f),function(a){e(a,b.getParam("template_cdate_classes","cdate").replace(/\s+/g,"|"))&&(a.innerHTML=h(b.getParam("template_cdate_format",b.getLang("template.cdate_format")))),e(a,b.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(a.innerHTML=h(b.getParam("template_mdate_format",b.getLang("template.mdate_format")))),e(a,b.getParam("template_selected_content_classes","selcontent").replace(/\s+/g,"|"))&&(a.innerHTML=l)}),i(f),b.execCommand("mceInsertContent",!1,f.innerHTML),b.addVisual()}b.addCommand("mceInsertTemplate",k),b.addButton("template",{title:"Insert template",onclick:f(g)}),b.addMenuItem("template",{text:"Template",onclick:f(g),context:"insert"}),b.on("PreProcess",function(a){var c=b.dom;d.each(c.select("div",a.node),function(a){c.hasClass(a,"mceTmpl")&&(d.each(c.select("*",a),function(a){c.hasClass(a,b.getParam("template_mdate_classes","mdate").replace(/\s+/g,"|"))&&(a.innerHTML=h(b.getParam("template_mdate_format",b.getLang("template.mdate_format"))))}),i(a))})})}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/textcolor/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/textcolor/plugin.min.js new file mode 100644 index 0000000..4b2f012 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/textcolor/plugin.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i
'+(c?"×":"")+"
"}var c,d,g,h,i,j,k,n,o=this,p=o._id,q=0;for(n=o.settings.origin,c=f(n),c.push({text:e("No color"),color:"transparent"}),g='',h=c.length-1,j=0;j",i=0;ih?g+="":(d=c[k],g+=a(d.color,d.text));g+=""}if(b.settings.color_picker_callback){for(g+='",g+="",i=0;ib.start.length?-1:a.start.length0},e=function(b,e,f,g){var h,i,j=a(b);for(i=0;i0?a.splitText(d):a,a.splitText(c-d-e),a.deleteData(0,b.start.length),a.deleteData(a.data.length-b.end.length,b.end.length),a},e=function(a,b,e){var f,g,h,i,j,k,l,m,n,o,p;if(f=a.selection,g=a.dom,f.isCollapsed()&&(h=f.getRng(!0),i=h.startContainer,j=h.startOffset,l=i.data,o=e===!0?1:0,3==i.nodeType&&(n=c.findEndPattern(b,l,j,o),void 0!==n&&(k=Math.max(0,j-o),k=l.lastIndexOf(n.start,k-n.end.length-1),k!==-1&&(m=g.createRng(),m.setStart(i,k),m.setEnd(i,j-o),n=c.findPattern(b,m.toString()),n&&n.end&&!(i.data.length<=n.start.length+n.end.length))))))return p=a.formatter.get(n.format),p&&p[0].inline?(a.undoManager.transact(function(){i=d(i,n,j,k,o),a.formatter.apply(n.format,{},i)}),i):void 0},f=function(d,e){var f,g,h,i,j,k,l,m,n,o,p;if(f=d.selection,g=d.dom,f.isCollapsed()&&(l=g.getParent(f.getStart(),"p"))){for(n=new a(l,l);j=n.next();)if(3==j.nodeType){i=j;break}if(i){if(m=c.findPattern(e,i.data),!m)return;if(o=f.getRng(!0),h=o.startContainer,p=o.startOffset,i==h&&(p=Math.max(0,p-m.start.length)),b.trim(i.data).length==m.start.length)return;m.format&&(k=d.formatter.get(m.format),k&&k[0].block&&(i.deleteData(0,m.start.length),d.formatter.apply(m.format,{},i),o.setStart(h,p),o.collapse(!0),f.setRng(o))),m.cmd&&d.undoManager.transact(function(){i.deleteData(0,m.start.length),d.execCommand(m.cmd)})}}};return{applyInlineFormat:e,applyBlockFormat:f}}),g("5",["3","4"],function(a,b){function c(a,c){var d,e;e=b.applyInlineFormat(a,c,!1),e&&(d=a.dom.createRng(),d.setStart(e,e.data.length),d.setEnd(e,e.data.length),a.selection.setRng(d)),b.applyBlockFormat(a,c)}function d(a,c){var d,e,f,g,h;d=b.applyInlineFormat(a,c,!0),d&&(h=a.dom,e=d.data.slice(-1),/[\u00a0 ]/.test(e)&&(d.deleteData(d.data.length-1,1),f=h.doc.createTextNode(e),d.nextSibling?h.insertAfter(f,d.nextSibling):d.parentNode.appendChild(f),g=h.createRng(),g.setStart(f,1),g.setEnd(f,1),a.selection.setRng(g)))}var e=function(a,b,c){for(var d=0;d',e="";return d+a.dom.encode(c)+e}function l(a){var b=m(a);return'
'+b+"
"}function m(a){var c,d,e,f,g="",h=i(a),l=j(h)-1;if(!h.length)return"";for(g+=k(a.headerTag,b.translate("Table of Contents")),c=0;c";else for(d=l;d
  • ";if(g+=''+e.title+"",f!==e.level&&f)for(d=e.level;d>f;d--)g+="
  • ";else g+="
  • ",f||(g+="");l=e.level}return g}var n,o=a.$,p={depth:3,headerTag:"h2",className:"mce-toc"},q=function(a){var b=0;return function(){var c=(new Date).getTime().toString(32);return a+c+(b++).toString(32)}},r=q("mcetoc_");a.on("PreInit",function(){var b=a.settings,c=parseInt(b.toc_depth,10)||0;n={depth:c>=1&&c<=9?c:p.depth,headerTag:d(b.toc_header)?b.toc_header:p.headerTag,className:b.toc_class?a.dom.encode(b.toc_class):p.className}}),a.on("PreProcess",function(a){var b=o("."+n.className,a.node);b.length&&(b.removeAttr("contentEditable"),b.find("[contenteditable]").removeAttr("contentEditable"))}),a.on("SetContent",function(){var a=o("."+n.className);a.length&&(a.attr("contentEditable",!1),a.children(":first-child").attr("contentEditable",!0))});var s=function(b){return!b.length||a.dom.getParents(b[0],".mce-offscreen-selection").length>0};a.addCommand("mceInsertToc",function(){var b=o("."+n.className);s(b)?a.insertContent(l(n)):a.execCommand("mceUpdateToc")}),a.addCommand("mceUpdateToc",function(){var b=o("."+n.className);b.length&&a.undoManager.transact(function(){b.html(m(n))})}),a.addButton("toc",{tooltip:"Table of Contents",cmd:"mceInsertToc",icon:"toc",onPostRender:f}),a.addButton("tocupdate",{tooltip:"Update",cmd:"mceUpdateToc",icon:"reload"}),a.addContextToolbar(e,"tocupdate"),a.addMenuItem("toc",{text:"Table of Contents",context:"insert",cmd:"mceInsertToc",onPostRender:f})}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/css/visualblocks.css b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/css/visualblocks.css new file mode 100644 index 0000000..1df311a --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/css/visualblocks.css @@ -0,0 +1,154 @@ +.mce-visualblocks p { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhCQAJAJEAAAAAAP///7u7u////yH5BAEAAAMALAAAAAAJAAkAAAIQnG+CqCN/mlyvsRUpThG6AgA7); + background-repeat: no-repeat; +} + +.mce-visualblocks h1 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGu1JuxHoAfRNRW3TWXyF2YiRUAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks h2 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8Hybbx4oOuqgTynJd6bGlWg3DkJzoaUAAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks h3 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIZjI8Hybbx4oOuqgTynJf2Ln2NOHpQpmhAAQA7); + background-repeat: no-repeat; +} + +.mce-visualblocks h4 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxInR0zqeAdhtJlXwV1oCll2HaWgAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks h5 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjane4iq5GlW05GgIkIZUAAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks h6 { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhDgAKAIABALu7u////yH5BAEAAAEALAAAAAAOAAoAAAIajI8HybbxIoiuwjan04jep1iZ1XRlAo5bVgAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks div:not([data-mce-bogus]) { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhEgAKAIABALu7u////yH5BAEAAAEALAAAAAASAAoAAAIfjI9poI0cgDywrhuxfbrzDEbQM2Ei5aRjmoySW4pAAQA7); + background-repeat: no-repeat; +} + +.mce-visualblocks section { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhKAAKAIABALu7u////yH5BAEAAAEALAAAAAAoAAoAAAI5jI+pywcNY3sBWHdNrplytD2ellDeSVbp+GmWqaDqDMepc8t17Y4vBsK5hDyJMcI6KkuYU+jpjLoKADs=); + background-repeat: no-repeat; +} + +.mce-visualblocks article { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhKgAKAIABALu7u////yH5BAEAAAEALAAAAAAqAAoAAAI6jI+pywkNY3wG0GBvrsd2tXGYSGnfiF7ikpXemTpOiJScasYoDJJrjsG9gkCJ0ag6KhmaIe3pjDYBBQA7); + background-repeat: no-repeat; +} + +.mce-visualblocks blockquote { + padding-top: 10px; + border: 1px dashed #BBB; + background-image: url(data:image/gif;base64,R0lGODlhPgAKAIABALu7u////yH5BAEAAAEALAAAAAA+AAoAAAJPjI+py+0Knpz0xQDyuUhvfoGgIX5iSKZYgq5uNL5q69asZ8s5rrf0yZmpNkJZzFesBTu8TOlDVAabUyatguVhWduud3EyiUk45xhTTgMBBQA7); + background-repeat: no-repeat; +} + +.mce-visualblocks address { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhLQAKAIABALu7u////yH5BAEAAAEALAAAAAAtAAoAAAI/jI+pywwNozSP1gDyyZcjb3UaRpXkWaXmZW4OqKLhBmLs+K263DkJK7OJeifh7FicKD9A1/IpGdKkyFpNmCkAADs=); + background-repeat: no-repeat; +} + +.mce-visualblocks pre { + padding-top: 10px; + border: 1px dashed #BBB; + margin-left: 3px; + background-image: url(data:image/gif;base64,R0lGODlhFQAKAIABALu7uwAAACH5BAEAAAEALAAAAAAVAAoAAAIjjI+ZoN0cgDwSmnpz1NCueYERhnibZVKLNnbOq8IvKpJtVQAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks figure { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhJAAKAIAAALu7u////yH5BAEAAAEALAAAAAAkAAoAAAI0jI+py+2fwAHUSFvD3RlvG4HIp4nX5JFSpnZUJ6LlrM52OE7uSWosBHScgkSZj7dDKnWAAgA7); + background-repeat: no-repeat; +} + +.mce-visualblocks hgroup { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhJwAKAIABALu7uwAAACH5BAEAAAEALAAAAAAnAAoAAAI3jI+pywYNI3uB0gpsRtt5fFnfNZaVSYJil4Wo03Hv6Z62uOCgiXH1kZIIJ8NiIxRrAZNMZAtQAAA7); + background-repeat: no-repeat; +} + +.mce-visualblocks aside { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhHgAKAIABAKqqqv///yH5BAEAAAEALAAAAAAeAAoAAAItjI+pG8APjZOTzgtqy7I3f1yehmQcFY4WKZbqByutmW4aHUd6vfcVbgudgpYCADs=); + background-repeat: no-repeat; +} + +.mce-visualblocks figcaption { + border: 1px dashed #BBB; +} + +.mce-visualblocks ul { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIAAALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybGuYnqUVSjvw26DzzXiqIDlVwAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks ol { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybH6HHt0qourxC6CvzXieHyeWQAAOw==); + background-repeat: no-repeat; +} + +.mce-visualblocks dl { + padding-top: 10px; + border: 1px dashed #BBB; + margin: 0 0 1em 3px; + background-image: url(data:image/gif;base64,R0lGODlhDQAKAIABALu7u////yH5BAEAAAEALAAAAAANAAoAAAIXjI8GybEOnmOvUoWznTqeuEjNSCqeGRUAOw==); + background-repeat: no-repeat; +} diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/plugin.min.js new file mode 100644 index 0000000..067eaac --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/visualblocks/plugin.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e1)throw c.error("HTML does not have a single root node",a),"HTML must have a single root node";return h(f.childNodes[0])},f=function(a,b){var c=b||d,e=c.createElement(a);return h(e)},g=function(a,b){var c=b||d,e=c.createTextNode(a);return h(e)},h=function(c){if(null===c||void 0===c)throw new b("Node cannot be null or undefined");return{dom:a.constant(c)}};return{fromHtml:e,fromTag:f,fromText:g,fromDom:h}}),g("e",[],function(){var a={"\xa0":"nbsp","\xad":"shy"},b=function(a,b){var c,d="";for(c in a)d+=c;return new RegExp("["+d+"]",b?"g":"")},c=function(a){var b,c="";for(b in a)c&&(c+=","),c+="span.mce-"+a[b];return c};return{charMap:a,regExp:b(a),regExpGlobal:b(a,!0),selector:c(a),charMapToRegExp:b,charMapToSelector:c}}),g("i",[],function(){return{ATTRIBUTE:2,CDATA_SECTION:4,COMMENT:8,DOCUMENT:9,DOCUMENT_TYPE:10,DOCUMENT_FRAGMENT:11,ELEMENT:1,TEXT:3,PROCESSING_INSTRUCTION:7,ENTITY_REFERENCE:5,ENTITY:6,NOTATION:12}}),g("g",["i"],function(a){var b=function(a){var b=a.dom().nodeName;return b.toLowerCase()},c=function(a){return a.dom().nodeType},d=function(a){return a.dom().nodeValue},e=function(a){return function(b){return c(b)===a}},f=function(d){return c(d)===a.COMMENT||"#comment"===b(d)},g=e(a.ELEMENT),h=e(a.TEXT),i=e(a.DOCUMENT);return{name:b,type:c,value:d,isElement:g,isText:h,isDocument:i,isComment:f}}),g("j",["e"],function(a){var b=function(b){return''+b+""};return{wrapCharWithSpan:b}}),g("f",["3","4","g","e","j"],function(a,b,c,d,e){var f=function(a){return c.isText(a)&&void 0!==c.value(a)&&d.regExp.test(c.value(a))},g=function(c,d){var e=[],f=c.dom(),h=a.map(f.childNodes,b.fromDom);return a.each(h,function(a){d(a)&&(e=e.concat([a])),e=e.concat(g(a,d))}),e},h=function(a,b){for(;a.parentNode;){if(a.parentNode===b)return a;a=a.parentNode}},i=function(a){return a.replace(d.regExpGlobal,e.wrapCharWithSpan)};return{isMatch:f,filterDescendants:g,findParentElm:h,replaceWithSpans:i}}),g("5",["e","f","3","4","g"],function(a,b,c,d,e){var f=function(a,f){var g,h,i=b.filterDescendants(d.fromDom(f),b.isMatch);c.each(i,function(c){var d=b.replaceWithSpans(e.value(c));for(h=a.dom.create("div",null,d);g=h.lastChild;)a.dom.insertAfter(g,c.dom());a.dom.remove(c.dom())})},g=function(b,d){var e=b.dom.select(a.selector,d);c.each(e,function(a){b.dom.remove(a,1)})},h=function(a){var c=a.getBody(),d=a.selection.getBookmark(),e=b.findParentElm(a.selection.getNode(),c);e=void 0!==e?e:c,g(a,e),f(a,e),a.selection.moveToBookmark(d)};return{show:f,hide:g,toggle:h}}),g("0",["1","2","3","4","5"],function(a,b,c,d,e){return a.add("visualchars",function(a){var c,d=this,f=function(){var b=this;a.on("VisualChars",function(a){b.active(a.state)})},g=b.debounce(function(){e.toggle(a)},300);a.settings.forced_root_block!==!1&&a.on("keydown",function(b){d.state===!0&&(13===b.keyCode?e.toggle(a):g())}),a.addCommand("mceVisualChars",function(){var b,f=a.getBody(),g=a.selection;c=!c,d.state=c,a.fire("VisualChars",{state:c}),b=g.getBookmark(),c===!0?e.show(a,f):e.hide(a,f),g.moveToBookmark(b)}),a.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:f}),a.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:f,selectable:!0,context:"view",prependToContext:!0})}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/wordcount/plugin.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/wordcount/plugin.min.js new file mode 100644 index 0000000..32c197c --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/plugins/wordcount/plugin.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;ia.length-1&&0!==c)&&((f!==b.ALETTER||g!==b.ALETTER)&&(e=a[c+2],(f!==b.ALETTER||g!==b.MIDLETTER&&g!==b.MIDNUMLET&&g!==b.AT||e!==b.ALETTER)&&(d=a[c-1],(f!==b.MIDLETTER&&f!==b.MIDNUMLET&&g!==b.AT||g!==b.ALETTER||d!==b.ALETTER)&&((f!==b.NUMERIC&&f!==b.ALETTER||g!==b.NUMERIC&&g!==b.ALETTER)&&((f!==b.MIDNUM&&f!==b.MIDNUMLET||g!==b.NUMERIC||d!==b.NUMERIC)&&((f!==b.NUMERIC||g!==b.MIDNUM&&g!==b.MIDNUMLET||e!==b.NUMERIC)&&(f!==b.EXTEND&&f!==b.FORMAT&&d!==b.EXTEND&&d!==b.FORMAT&&g!==b.EXTEND&&g!==b.FORMAT&&((f!==b.CR||g!==b.LF)&&(f===b.NEWLINE||f===b.CR||f===b.LF||(g===b.NEWLINE||g===b.CR||g===b.LF||(f!==b.KATAKANA||g!==b.KATAKANA)&&((g!==b.EXTENDNUMLET||f!==b.ALETTER&&f!==b.NUMERIC&&f!==b.KATAKANA&&f!==b.EXTENDNUMLET)&&((f!==b.EXTENDNUMLET||g!==b.ALETTER&&g!==b.NUMERIC&&g!==b.KATAKANA)&&f!==b.AT))))))))))))};return{isWordBoundary:c}}),g("3",["5","6","7"],function(a,b,c){var d=a.EMPTY_STRING,e=a.WHITESPACE,f=a.PUNCTUATION,g=function(a){return"http"===a||"https"===a},h=function(a,b){var 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 + + + Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce-small.ttf b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce-small.ttf new file mode 100644 index 0000000000000000000000000000000000000000..a983e2dc4cb30880fffe00e1f0879be4d95eb4cc GIT binary patch literal 9304 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.eot b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.eot new file mode 100644 index 0000000000000000000000000000000000000000..f99c13f32f5c968849f08a3d8a399157bfb0cccb GIT binary patch literal 17572 zcmdsfd3+pKo#%U1eW)dMt6P0kt97_r?e3N(t97(WE!&b@wru%O6f1Uo#KeglTk(M% z%U1{)GE>-$0W%3+t{Jik7VBil1_FE*$ZkUBGqnR`2R7l851V0tnXrN^83YL*K7pA8 zR$bcf?^Tu5lI?hy{p>$m-LKw#|L*s?AKSnfgX2s>p#0(N5~ui0W96w77Rm7cF8vdo z;)|aEJHw8!d)Rx~adv=BATz+W!#~8%vSVyNJB5@O+l7=<>@-TAK-nbgVtLjn$}X*q zMC!1L=}cyw+jewx*VI;h1}V?MjUPC^fAW9cefj4o)Bx9WX#eR+qz4(3XxtTtj=lHp z2P&T$Kzt8l{hv5IvHxIIMV zXRo31?^bO;U-~H;oxzgO6=q)+TrdwZQulZkV{W+UqqK(K* z!%SAR(K)kfW-Z!y0&S?GjTe@*!RKC0x{`8YRiZD^7~i6dC|i^b%6g?==}`(wm(roE zRN9p4==0HUMF%1;MykS3h93*p)IM8#uGWS5mCs)c=-=?-jAJ%6Wo-fYi>pM_3+=yi z8diGFz<>-_vWSP`RAF|1rM=gspDp7sW~H|JFXyoN^=49lw&oA@$bC=T+X zQq19<^QLoZv7orvWlwF@;gfo}O$kl~mA0^c@^DqH=km3aKdXy}Pu{p_Sqn)~i7{Xq z!*<9-DZHQxH)%qcbwc7jxDyZ%r3VcO0WTLFsHm#5{0euUipujZ*6JR=HhtF_nYr0e@<&`xwUy9P>8Kb zw(Ll^G<(;r^ES7nceEte#0r6d(rcbjRaHDtT~}4zSY2J=aeIPQRds>tc(oOOIHRf= zINptTRb6!;UR4!BsS1%FuMX5zRRu--e>bN!&f*(3Z-|>Z*F|8CY3b&H%Y|4h-Q02@ zzkYrGKudEv7AssH_^`jOa=xW1^jF?;RdwCx)GT$KRcFPhLRFP@{_48wDtnaHsN)m| z41zugI#bWGtd+I10%2oMw#|Aqdm6EPHnoVRiXq;|y9#j8wCYt;(Xd)5rU~+8E$pAp zCiFyh+8+-4d6FAO35a7zOrNMXO!$&Mhm6kD99aX>x>fH%LdZ;sKY zuc@`QiFY=&>Xz49y6|>QG+INiuW2+fdhrwUi898n&0!XnYi%mMB$~L-{1EvPnkwmG zKh^Yyx#5INtbmmUyjVQvDyFbB>%cD9*h*A|JJ5{z5OEfhTM}MCXbY)FRCVN94oC?y zgs-gG1geOjcG0p*4@M)5r(^)q-Z1{rJM7Tn(G;q3Qm<++)iX z0W_rgxS9>{n39zSxgu$VQ%`)pFWYux+wiO3mj3o_6A7kk;^C)9Px0{UkGR1>^Qiwl z(YHoIJCF4iIf#AM;{_im3Nl`U5P-Y`BLhmWMK;mxA_SObPYw4(mT|!&C?n?;f(@mE zb)d*X1u6wTU^kY7umirbmiP8>&7TYK{s8yGH@_L+Ps*-J-<8U^-yioKsPy?NulVBr ziW={_Xjfg+D&YCIApDrG(j~7824m>zT>Ak9&z07*`E^q5Lin9(J=T5>AP9Mp*)+WyYS0lVN++Ql zy_Y?JRW4tO|5xjpbAx3UK^EL_klu1$^2xn&qgA@W0zYQ0)3x`eq!@YQh^7G*4Vl9K zQPVgx4BmKyHETZ@QxxptAGXr%7tqCwVQA*xBe25YhK9A5m;t!f0M{-C{VN>u@sJFc zGPuTxQ_P_ViRoN3!FOl>J#h}12n`X&-;!MwR?n8PW~(Q@K)MU0YlO?< zZi^Bcf^_SWX3{jRND2K?moh79BE=GVtxO_{crZ5`9%abPeQXqPNYKz7Yvf+y9VxZg z9FV*LIT~q_lqR{*Jt!3iWwj?S)Ph|={*JsA``w1H#Q zVMlxgL4%ZQ39cY#JQt9?3M5~5F)tHQbEl(_p1YtQNo?#RNBaAZ(3FM$z7Dl=PdyNXeOYgqd+Iyx0?vj|}GPVUK8Zkq!y~%mm>xeR#9|$Bwdr*8!R3}9b-vFq0 z3?v&uX-)|2Pz=KW3js1KJ?N0Or{==?{8Y0 zY~GMgZ)i@gZR*&WPVelf>rMnhlVf9(p+KU$PNcQ0*tvUeKEHSO&J`=SXIl5G+0n5b zt*tx8MziYv*39;mlD>TC&ef~$99r)9x@aGLm~%Dp3h~5i;_F&k*2Vo1Z>+a*Y;tm} zu{Y+8_(dxJT69^ostT{zs?_n7Tk6A&;mS(9>bI;so>~fz0+p99Gg>LD|*=9O?jx@Cml5ZtDVOIDQBP)cgmkba>66fI?km^8n@d9!h7!Yh8 z955gO*wH&$N6XNUnJ$J2+8|GZURrXd0!s->P^o&Z$nKmMRsnDm*Z`QMp&Q94X**wh z-#4X-bLR$~uZHIJk|qa}rJ&&?BA0Nq0qyI+QIe}!rc7Fu)7~6mYf&jcW)srsKYr-B z=RQQ!C4Y`}+mflY{ki7|XP~N@7 z$Ig3)HGPhKKf3wO$-%KdJG5rap+6fNoV;^$^!uPtsk$A<^i3o-lEAr1KenR|d*hxT zQy6elU~5SeTS}i~l5Wd}B*TQ{Xy5L#FejQG0M>%0H^~xPLXnT&_L;LAHk|#;ZMOeI z2buUhTFo(a|Mv9}Z{N=20|Uo*_IV@gx9^t?XNrzLJ66_=Xil26ai8#?ocZZUb9-Dn zaZ5+XEhn^idvk<=N6q65;R^7C@W5?b%GQ8`hlmEjT1MP4Q$8~Q891Ub3*9%HFn|N_ z&DThF=7IWfxSkxTBH4tAEJCDgfcT0|OpNb{=6jr3)`R{ z7RF^TkoSN)4+2LE(E=vg#!2xngutsas;zLZ;c7bM74`vIj{z8N(%rq_;zIB9ak;2) zF;y&vrt7jsi;;lZN3TS-Hj$`BGO=%Se0uvsd|U#lKv}E})@y!|G_H-0C$c8i3|{tm zFlv*T8cz;?g6C=MASQ$_0Cq}lvl&~vC8<`#sXHtVR_h(}g*4Sg1H$|aOkIQA zVQL}_l~>32n#q!&tQb6OxOhN=bM=jsUu(o= zz6{Z_K;osG0*^_7AY!=;&<4i~21_iM3`%;iqy=RPmh>QmUgv>WsBr)tKn-gRA49}G z%}v{Qm4S@IxFgA_!n8*$U1)P;(JNH(!l2AS=L%6tTOdZ=-KyH%t#8_-cW1kO&rVN2 zUUl=mf6k+1!O)3bQPFXy2o=uW*+V;g%Y%p3m}0$&^I$NL%XL-@yjqTt3_?ZBOKBjp zkhHQST0yRA<6&&72uj~E~IBo!yW^soiUPJ4!8?B z)&pVTf_MXrgG8hfWs(fNd-vJ(>(B1)*6ZU9TUuJSG{oychx8KKG{^go+}z%N^O1f& zWsW!XDe?OHxYE~TPGLyE9eYpu7*3rmop4_8QVWi>WeH-7{RtrH{X2f)XgG%t<+M6I6wdT^1D>^uH~ua_}-=V+;me<&rKqDb)s9N zb)2%-kuW_4q_aLY=Yj19P^#;;bp(qm)DgxF$M%8gN?2b8TBifcVN1G3D}K(6MGcu> zBuU^J&6)c2G@3-4$s4rU>N@Y;e-A2r#eF=B#10xxjOMkojs@6m~ZTkjVi~@yS8* zQ_@&?5IBf$M4Jnsu?A32mvm!d!qmxu#NY@BB-79h$JJlMG;obDpsvC$`yCa1Htgogf`v&{z05J4`<1IqBq6TDc?QrEB659$s7oC<%f2 zFUDy-me1|jyoX@`pLED_(+sN=_VFCg={(7&b#rP8U_Nby2(;PU_gt7i$~7{TtwYsR zF6B)@bcSSEE<$;{3bYK6AqT2^i$F6Nhq4(*hyhKIfkR1iN|W`zk@i`p@&A=u-&x)QBvdPWPSim?z}JFpz6O?gm8~MHBBaeCP64Cfw>SeVs5!xl#cPSJ zeyORR_z*xgsdY|wYVelW>xpoH*h^Su((k#U6L--#({y90-Ci<~Ow6dHNgAMs*|KXB zYi3!DQ5HunSktr$?M$4?kaAYf3o?ww9Dq!Q4gTuKy#co?;H|EayfI%qTkZC_-9G95 zPwjhtx7p~jtQ@eLjD;J#6>fRhElZWv?tr&4Qf1kJieZu z{PBDLXia|n&OMpFeotpl`O`;GLZtrh!hb!fVLT1&)hyJvu zz0;jtu}k4OhDB_LeD#!Ufb$)}c0ywp;xA55`nig4S7(pf+0!*BlZt~>I$Kd>k=>P- zyEe7Dr8BZhYT(fZzDmMekf+YKB|oq?p>4gT?dFR|200HkW@1MB)6(h# z?XLSidN#9WBs1*xyO;IH$5!v?%17kQE?t>3XLw?wA`u-yqkNQC0!Nr zILojRwwoOVmV$eb$Vi|`yfq5Gfly4OWl4G@^h;SVJf9bxFRxlMW-l3Zb7eBOS1=(M z0=&^qvXf-ff16Jx5+m=XcQXI(5qdW!5{=U2wbNf3XlolFcergJ-(Rby*WJ8spiNqT zIGI2E?h$(DlZQv%P4DbbUENUjx*2s=I|JVuXlq>~*D3O#l-awd4XEm6cmy3>435GQiYekgX96%>?nWUYc=( zbtb_(x?ttt_F7YqI%HO3k!{18t7X%eH6YGvl2~Wrm{@YGHs;uvp<1fDGd_@n8HnH?SoHS%olSGTO>(Zh{v$SSQZ_Li22^J|>46y{JHa=n^ z4z&I&`*NVw@o6RJ7jdDVg-}^<3)o+_Ue&mjw;ZyEmuw~WLUAk{%zO|@l|mE~D#GR9 z&$-P5WD=c7ATO4O^m71c}q1B`NXQ-WRqAfzO1P;yp2(bQ_Vn<+46}QQJvdoJa5*cuyu*!q8l6if4l}Fei za#H1nUAuOfm-v?@k9q5E^Y>{hl#*X8a`cX~V zWk{{oy-1n0LYDl#{1hNA2(6I$pcLYuJ6G)OUdCgQ8V;2RCCVjmAqb`KTuPUTwYg=uR2f@O20B$UAeKidNder;Jdz`%;l1) zOpXV`ndar0NK|ewY+BX7sT)>J+olP9p$<3X7`M*2q6OQ!u0WOXhHaBju9ylHtwS_b zzCXQl{AeFp)W_GI{EJ=r-P<-ceu|G@$S%apsSERkvuD>|BF1);uq{8N3 z&c{&LDM927JZbI?0V7G)!d7BrIjAfJa0nb7MN_~i?0Xs-3K6sJ-mVPJsBky4kSQu@ zsr5ZgJ#A_KMe~_`=ChI~zPXU$_cm`C z9c$T#XXsCg%STtPKH51mG;?X+8>N>Xd~oJF-=XnTa1D!P$of1!k>%F5nOW9|48WCW z3i$-O=7SaY-4DO zKCr@{;t!gq{{y`~L6$&~mbCbUCeL9h9U4HktYX-^0z3lDDNWJ^`I7dV7k)GQTdJwi z*zACG`IgdWZ;=dGjxlu|3qUPtpb4PrpmPfD9FZjtCj)rNp+z@*VS7|@(j{+-E_0dx zb=k(~Gv+06MHd%!A<|A!FVgR#8<+95u4Pg48LrP?;_al{6f_3WAG7uRT0kh-rDz$7 zi@JjSwg9aTwiyLi0(3sEn~d%vNJdLvvNSa%jqfSF-N~mr`II>&>3UyFNfY^uPl@c! zdrCUxqdx~9$YzW4C~kLzvlv{U5=Sv|$_q0{N}ifU^L;H-IC?*hz-IGLzh%e_=9(7j zo!BTwfKbW!(wDeFbAkN=3uwsW!d{W*U7fwf?%rHaFHs-dWQuxXxcl7I35$UoO~Fts zod|h0RyHaP6^R{t_wGnkG$@Ug8$F@=$&))}edozZ&gH>f+QGW&-FIx=ddKeSx`W!T zLD|(lytlJ+?{GW%6!VdEz-=9AWgy_z8B5s>OKVyg>;57RXr-~>$!+?!lfg(sLqtmA zZQd>}SwcNy#7M!!7E6fjjCHOt{L`wHUZ$x@SP^RZ^dV^dS zWVY=j4ry={Bl;?#HMDu@J7t_}#VJumAlo89OfJ6xviUVU1<r1cEz%);V zvBg;7g)u3RysjD(DK25M@&nRBg{wyKB%loN0yw+6W8eYPK;-BQZlNEa1;-fJQ|Jq0+{r={ugRFcLCngQ;Y0h>5_2hYI`Cdest7b!s8$GN)& z>#8h7H{95yl)AD4K%eQi$D)mUq!^Bm0n7#zMD&WSZZGYgYc3FHx{*5D>A?3WF?hCPd0-BMBn z>1EZk;f3gDYW_4FwMf)0q;Tb&h#GFrSnbKv=2X~^+U69s$j3#5k0T;!!t-CN0J@?v ziaSyob7PE(j~8KUg4r7uE({(a@M!Q3lrwC8k8&KprBOI8HQU)TS*NUm)E?%HZKrbh zU4<8tijym$Rn$S#xWmi1CNoLHjzY4LL5Dz%G{NncKUkq9(qHy?c$zw11*lT4GRWleBTx)+mHis`buC+VntX)Z0{zTT03XdU=1Y;9^+xDx7 zROtF`-wg#hPU)RBCcmpKm83GYW<{`=rRy%jWn$CaS@ zLtYF*j^ABjepc4z7zs$`Svh!}r{W{?Srz74?1u(CGq5eT%;NmUjkG<@GGhu0t}ZhJ z+{eIj;Lf2{k3h_Y}LpK876?$38GF(V0(g*z&CN9*^})9b7gNzuCf_ zF*`^<;c+W5*rb{}cortAZk(zKp9~&I&3Is|>cL?xOjl$8v3)!BY6idXn=nZTJGNXz zH^TVi6w&Ba!o^?_z)O0dJsb|JwfWlGuo^C1D2qvlkWz~r6(!nB7s_LNU>+iT@ zJsj?`%{N^Zo@35!H<61`lw6>JUiJRf3EebEwVLf{e+C zl9cE=vNebEYzSw(1L95%@iwqQ;+Q!9G+!}a*~^>FAMfR9p5ANzSb7yN-n=M7tiu#& z>NwWH4Hj9Xiv-e?!xf3&TI><)<;!Z9s8UNf&d-*hLzu*h}g0 zpAjr^o!<4C(z`^|L=+Zek@&OHyR1#O%KS`v+=^m+L=O$Y7iwXV!!H5o_pW4Y0kMGM zAjmYNHwC{eAne0EB9agAB5?tF2-hS7>5wyV)L`hKbCgDsAi;oe`cKk-cV|uiKeH+b z{CHjt|Kb;pKQ}$6;}q9Gyn^;rJg6srCk~Q_{I^{dq9r?1cn?@DSxHol;&7VnJ8{Q9 zz9esHImEdKW%71?V@W$yzSmBBX-QrK;^f#8M|H~5$STVWINkOc{3$pME(wP?hZFha zYgQWTgx`*pc-xLs-XH3mww!vci`yWnb-vB(g{dy`xDG#1R-V$yU0#xASaF(@D75x<-sQ6gL-&DNri}}WV->-~Uj#YlK@}(-R>Ri?H z)eJ`To2nnHe!lwG{)B(b|Aha!Kr(P9@Ly_J&3!=@>JQ}^RUB+-)SPmCq*NE}O?OFWVI$NFG>bA3(@yDg5Qf8Tbd0b{Br*mc(yN S4xrR19F>Jx9kYDL=l=i@ywbP; literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.svg b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.svg new file mode 100644 index 0000000..8d4fcbd --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.svg @@ -0,0 +1,245 @@ + + + + Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.ttf b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.ttf new file mode 100644 index 0000000000000000000000000000000000000000..16536bfd7a292e7090b9d4e0ae61061da9bc042f GIT binary patch literal 17408 zcmdsed3+pKo#%U1eW)dMt6P0kt97_r?e3O!v|4JFTDB#*Y}xXmC|2zFh=~(9w&DXH z@)bgc%oH|bf|&#_*9_SNi*Yh!0s%e?WH%x6nc4xe1Do*4hs`p;Ojtpd41$CYp8%7< zs!RL*y{eX4vK-Ns>n%b&QBjq``@%_j4P5!UD zFaL}&-T>EgaNp@kr283@#^6^RJo?_d@2`An0P)?7^?&@(#J&Snov{F8gRdjM_Ye}? zpL6swwq`lv%MTqpbMMck(EAbJg!X=O^u+#s-<|l$t&FYhNB-=wefLhX2iYeWTi1tp z{P@0O6IX5xIT1(u{KDjk(`PVFJVVoz&t!R)Ut-9YJ|(??l#f_G{{_o)58~wy$FLVa z8e_k_S2pGhrpa)~q_rqLaS@>2$Tc9(@?}w~fjM{->FZF>$t0x3r(34g*Q#Fgz1H?K zK2tGMH4~T#&os`o%(TvQ%&0R1Gizt|{rt(FfBqM}zxeFyM_zyN^_Sl`@`mxo?|ymj zTybtr^cJ6H)2*+u*SxQ_{*28q(MD*dVJ0ow$jz*rS%Ws7KpU!P+GlIe)jBZ0 z^7)Ga{Tp7Kam=QstSyPL!b;KfLi_KWhLxT(Fd&0DSOo(-@k9W>d?1NH9>KgK>$AFp znM~KYUSyi2ji|CQ%Vd2Hi83<{uBq^~IYY*e1+jx&XeX29$wad&90*17iSAxC(35sI zaV4qZ6%4tMmquDI@*+w&-^9c62Oo-#CCqrDvoj%0Cpr@wWQTM`c1d6LxQlVO$K&SH zjtYm#x%9h-qR5|}5=F-oV-d+EUy&U0?9)_C9(Q{m#vo0__Ady3tbZ2O|VQEJe*UW?al&uO>A%iH5(bkwN%ZyBRC>xH)%V`*e1 zU(8v0Bn4|yBAxY zDJZUp9qUbJoB$5-Pd29kG-?l(vHp30EC4p-DgcH7!rc*sQQj&^5LPO0l|*5yyj%XG z=384DwYexB^Zn-g$)D32TW)P0@Z}?`<1O2hEzRz=Yu(K)$?Yxi)seh!p!k|AP*oN6 zRo7KjH&$0yxSTG3RaKp@I$CYTA5N)i3XXRpUR77^i&j+yP^v=YN2`5xRaJfw|3A%1 zjkD7
    qE0fV3qg3i>lG;3uYEKk_jlWwzK&8|i)pG_^o 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 N%EGLUS-#`*e*qFO!Ds*g literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.woff b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/fonts/tinymce.woff new file mode 100644 index 0000000000000000000000000000000000000000..74b50f4c3001da7fdfffd8638213dcf1a396da78 GIT binary patch literal 17484 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 C+YCGa literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/loader.gif b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/loader.gif new file mode 100644 index 0000000000000000000000000000000000000000..c69e937232b24ea30f01c68bbd2ebc798dcecfcb GIT binary patch literal 2608 zcmdVcdr(tX9tZGC9yiG~=H_*Q-0%n(kWqP*D#hw{AQu8;1%gl-Hrf&{2?48KX;hHy z3Ze*zEz4t3XdUFyLbNPUYlA`|B}P=N1fqtL1*}S;87#|-W9v<#G;ul(e%d3)N(^9c$d2Dz{7}?ErjNd;{EMKkCsk21~b9Gvg zDo<7L=3Z5HNbVlZUcm1eg#o#CZCJU`3IYHwM->zCd?uYrF3vKFeM}v?f+%s?E>ly|3W25ry9#NNbTx-}0ON58dTrs^ix{_1O0Wh~SVSBlH)Ajn zPn^Gbjz}PCtN@#keR&hK&Dhl-b$kZ8^S)x#dh0{7X=X%CCJk7P1PSO>T&S8I4{#Lg zb5#)o=;!ZP*1nM{cI4@(x7o27*SA()NHmrn67aN@Pmi~(i_SnrjYnwh36aG%!@i0d zqbvfa44f|?OG4ntP|nbjhEl1)Yp6ZN@yjy zy4==QmLy%t;ps3R?~f2KfTTI|2?q8dFd6^z5GF+Xa&Y)sjG)hxit80pPcOP zJ z*LW{SyGHD%hUotV+W%I}fBLAIx!8|7#}$;clKQ+{&FjDqGQ2ZNx(lYM3*%~}ILnao zM`aui55~ZFJlu^!5rdA9Q_7H68H_;##u{x(Yn-vSfIRCb^Nqsg zGRS!Egm>h+o<}LeV4&CLReo9FrDjDvs}8?JwC)#Qs|ie=r?~xUh)&*d`Fx>FG}%X# zNdtDHBKhLPC0wpooFDAQKL%*6T|ULH$=wX!NhcasgD3d;-d$I6yRK3yN+E~C1335_iLOt+*9uvSZ`>*KA}vm}08wRq=>5l|t*Na&jR z-C1&C`nkEk#sB|@yyt-#fXngP04My zm7u$Q%EJbHp`>~`5W&L{W!6`y&}LMS;jfUpgO~7TLVMRZ9IC)IZp0A${`yp0{&wco z#1nx@XMkhqeK%7?RE7JdLr1^nwFfaJ0Q&Lv?WNJ%9}VSJsNY2+UYs2%EU0J~ayFXv zi*?7KCXQHkD)O6!0Q%4N+HTODHxJ{kQSuQX$l-rSwkwh(zMkdfzxyGwl@yHC)C4p< z&n2%8#M?)Q@mgHL1ot8`SFdSEj9ye|jHy+U8#@HoUExG=@AVkRAe_qYm4EpzK6L*& zh`)26?V#f4#_h^P9G^%>h2-H3)$QP zQovu6J9qDvsxqweDdNNa!Lb?L4_UF{tLX_nN7r0U_vF14YKcGR-*Gl} zx3oG)bzf|65dBxD-;2ZCp??K;+TuQ9onnK?==5hzbkb^r_g>z4#D8mcv8(+XdoszA zCx-qhdgxMNMotj}SiL_6V(tLcsK7(M(r(%u<}QrVfOvyK6_;~NOTlPGfX@M7S5YQF z&*$(ylJMHJt^_aQeu{C6NaTE$G3HNN@_SnN8YcaKn%`)F@~L1x+ah7-gEJPpc6w%3 zyX}r+Qk$4RHZzfH){e~F*qJ{d*L8a6n4;U?+{de0-t)mal#TVxe)3F}^UBh+zd T)6_**#cgp_+?JL9(ew3BlNF>u literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/object.gif b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/skins/lightgray/img/object.gif new file mode 100644 index 0000000000000000000000000000000000000000..cccd7f023fb80908cb33bb7d9604236cd21b7ae7 GIT binary patch literal 152 zcmV;J0B8S4Nk%w1VG#fg0J9GO<>lo+KR<78Z?v?uS65g4{r%Y3*xlXT%F4>`@9+2b z_ww@cot>Tk|Nk>HGXMYpA^8LW000jFEC2ui01*HU000C<(8)=wd#<&tyXIMjHBV`d zBSi|xsj3(;nD0kQ0aJq8eLH~x02P|t2!_J&Wqb%0io?#xDtr{background-color:#fafafa}.mce-container .mce-table-striped thead>tr th{font-weight:bold}.mce-container .mce-table-striped td,.mce-container .mce-table-striped th{padding:5px}.mce-container .mce-table-striped tr:nth-child(even){background-color:#fafafa}.mce-container .mce-table-striped tbody>tr:hover{background-color:#e1e1e1}.mce-branding-powered-by{background-color:#f0f0f0;position:absolute;right:0;bottom:0;width:91px;height:9px;margin-right:-1px;margin-bottom:-1px;border:1px solid #c5c5c5;border-width:1px 1px 0 1px;padding:6px 6px 0 6px;background-image:url('data:image/gif;base64,R0lGODlhXwAJAIABAIiIiAAAACH5BAEKAAEALAAAAABfAAkAAAJxhBGpy+2PUnzqGNpmPNJqDIZSJY4m+KXLF3At2V6xPFfuvMF6J6fINTnhTr9XcaRC6pKvFYlZjDIszaXRSA3ijlXo9AlWindaldSJthJ55XAz6+ZWbVCOdojP77p8J8vlUSI4SHEnaEiYqOhARdhIWAAAOw');background-repeat:no-repeat;background-position:center center}.mce-croprect-container{position:absolute;top:0;left:0}.mce-croprect-handle{position:absolute;top:0;left:0;width:20px;height:20px;border:2px solid white}.mce-croprect-handle-nw{border-width:2px 0 0 2px;margin:-2px 0 0 -2px;cursor:nw-resize;top:100px;left:100px}.mce-croprect-handle-ne{border-width:2px 2px 0 0;margin:-2px 0 0 -20px;cursor:ne-resize;top:100px;left:200px}.mce-croprect-handle-sw{border-width:0 0 2px 2px;margin:-20px 2px 0 -2px;cursor:sw-resize;top:200px;left:100px}.mce-croprect-handle-se{border-width:0 2px 2px 0;margin:-20px 0 0 -20px;cursor:se-resize;top:200px;left:200px}.mce-croprect-handle-move{position:absolute;cursor:move;border:0}.mce-croprect-block{opacity:.3;filter:alpha(opacity=30);zoom:1;position:absolute;background:black}.mce-croprect-handle:focus{border-color:#3498db}.mce-croprect-handle-move:focus{outline:1px solid #3498db}.mce-imagepanel{overflow:auto;background:black}.mce-imagepanel-bg{position:absolute;background:url('data:image/gif;base64,R0lGODdhDAAMAIABAMzMzP///ywAAAAADAAMAAACFoQfqYeabNyDMkBQb81Uat85nxguUAEAOw==')}.mce-imagepanel img{position:absolute}.mce-imagetool.mce-btn .mce-ico{display:block;width:20px;height:20px;text-align:center;line-height:20px;font-size:20px;padding:5px}.mce-arrow-up{margin-top:12px}.mce-arrow-down{margin-top:-12px}.mce-arrow:before,.mce-arrow:after{position:absolute;left:50%;display:block;width:0;height:0;border-style:solid;border-color:transparent;content:""}.mce-arrow.mce-arrow-up:before{top:-9px;border-bottom-color:rgba(0,0,0,0.2);border-width:0 9px 9px;margin-left:-9px}.mce-arrow.mce-arrow-down:before{bottom:-9px;border-top-color:rgba(0,0,0,0.2);border-width:9px 9px 0;margin-left:-9px}.mce-arrow.mce-arrow-up:after{top:-8px;border-bottom-color:#f0f0f0;border-width:0 8px 8px;margin-left:-8px}.mce-arrow.mce-arrow-down:after{bottom:-8px;border-top-color:#f0f0f0;border-width:8px 8px 0;margin-left:-8px}.mce-arrow.mce-arrow-left:before,.mce-arrow.mce-arrow-left:after{margin:0}.mce-arrow.mce-arrow-left:before{left:8px}.mce-arrow.mce-arrow-left:after{left:9px}.mce-arrow.mce-arrow-right:before,.mce-arrow.mce-arrow-right:after{left:auto;margin:0}.mce-arrow.mce-arrow-right:before{right:8px}.mce-arrow.mce-arrow-right:after{right:9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:before{left:-9px;top:50%;border-right-color:rgba(0,0,0,0.2);border-width:9px 9px 9px 0;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left:after{left:-8px;top:50%;border-right-color:#f0f0f0;border-width:8px 8px 8px 0;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-left{margin-left:12px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:before{right:-9px;top:50%;border-left-color:rgba(0,0,0,0.2);border-width:9px 0 9px 9px;margin-top:-9px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right:after{right:-8px;top:50%;border-left-color:#f0f0f0;border-width:8px 0 8px 8px;margin-top:-8px}.mce-arrow.mce-arrow-center.mce-arrow.mce-arrow-right{margin-left:-14px}.mce-edit-aria-container>.mce-container-body{display:flex}.mce-edit-aria-container>.mce-container-body .mce-edit-area{flex:1}.mce-edit-aria-container>.mce-container-body .mce-sidebar>.mce-container-body{display:flex;align-items:stretch;height:100%}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel{min-width:250px;max-width:250px;position:relative}.mce-edit-aria-container>.mce-container-body .mce-sidebar-panel>.mce-container-body{position:absolute;width:100%;height:100%;overflow:auto;top:0;left:0}.mce-sidebar-toolbar{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-sidebar-toolbar .mce-btn.mce-active,.mce-sidebar-toolbar .mce-btn.mce-active:hover{border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-sidebar-toolbar .mce-btn.mce-active button,.mce-sidebar-toolbar .mce-btn.mce-active:hover button,.mce-sidebar-toolbar .mce-btn.mce-active button i,.mce-sidebar-toolbar .mce-btn.mce-active:hover button i{color:#fff;text-shadow:1px 1px none}.mce-sidebar-panel{border:0 solid rgba(0,0,0,0.2);border-left-width:1px}.mce-container,.mce-container-body{display:block}.mce-autoscroll{overflow:hidden}.mce-scrollbar{position:absolute;width:7px;height:100%;top:2px;right:2px;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-scrollbar-h{top:auto;right:auto;left:2px;bottom:2px;width:100%;height:7px}.mce-scrollbar-thumb{position:absolute;background-color:#000;border:1px solid #888;border-color:rgba(85,85,85,0.6);width:5px;height:100%}.mce-scrollbar-h .mce-scrollbar-thumb{width:100%;height:5px}.mce-scrollbar:hover,.mce-scrollbar.mce-active{background-color:#AAA;opacity:.6;filter:alpha(opacity=60);zoom:1}.mce-scroll{position:relative}.mce-panel{border:0 solid #cacaca;border:0 solid rgba(0,0,0,0.2);background-color:#f0f0f0}.mce-floatpanel{position:absolute}.mce-floatpanel.mce-fixed{position:fixed}.mce-floatpanel .mce-arrow,.mce-floatpanel .mce-arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.mce-floatpanel .mce-arrow{border-width:11px}.mce-floatpanel .mce-arrow:after{border-width:10px;content:""}.mce-floatpanel.mce-popover{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;top:0;left:0;background:#FFF;border:1px solid rgba(0,0,0,0.2);border:1px solid rgba(0,0,0,0.25)}.mce-floatpanel.mce-popover.mce-bottom{margin-top:10px;*margin-top:0}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:rgba(0,0,0,0.2);border-bottom-color:rgba(0,0,0,0.25);top:-11px}.mce-floatpanel.mce-popover.mce-bottom>.mce-arrow:after{top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#FFF}.mce-floatpanel.mce-popover.mce-bottom.mce-start{margin-left:-22px}.mce-floatpanel.mce-popover.mce-bottom.mce-start>.mce-arrow{left:20px}.mce-floatpanel.mce-popover.mce-bottom.mce-end{margin-left:22px}.mce-floatpanel.mce-popover.mce-bottom.mce-end>.mce-arrow{right:10px;left:auto}.mce-fullscreen{border:0;padding:0;margin:0;overflow:hidden;height:100%}div.mce-fullscreen{position:fixed;top:0;left:0}#mce-modal-block{opacity:0;filter:alpha(opacity=0);zoom:1;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}#mce-modal-block.mce-in{opacity:.3;filter:alpha(opacity=30);zoom:1}.mce-window-move{cursor:move}.mce-window{filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;background:#FFF;position:fixed;top:0;left:0;opacity:0;transform:scale(.1);transition:transform 100ms ease-in,opacity 150ms ease-in}.mce-window.mce-in{transform:scale(1);opacity:1}.mce-window-head{padding:9px 15px;border-bottom:1px solid #c5c5c5;position:relative}.mce-window-head .mce-close{position:absolute;right:0;top:0;height:38px;width:38px;text-align:center;cursor:pointer}.mce-window-head .mce-close i{color:#858585}.mce-close:hover i{color:#adadad}.mce-window-head .mce-title{line-height:20px;font-size:20px;font-weight:bold;text-rendering:optimizelegibility;padding-right:20px}.mce-window .mce-container-body{display:block}.mce-foot{display:block;background-color:#FFF;border-top:1px solid #c5c5c5}.mce-window-head .mce-dragh{position:absolute;top:0;left:0;cursor:move;width:90%;height:100%}.mce-window iframe{width:100%;height:100%}.mce-window-body .mce-listbox{border-color:#ccc}.mce-rtl .mce-window-head .mce-close{position:absolute;right:auto;left:15px}.mce-rtl .mce-window-head .mce-dragh{left:auto;right:0}.mce-rtl .mce-window-head .mce-title{direction:rtl;text-align:right}.mce-tooltip{position:absolute;padding:5px;opacity:.8;filter:alpha(opacity=80);zoom:1}.mce-tooltip-inner{font-size:11px;background-color:#000;color:white;max-width:200px;padding:5px 8px 4px 8px;text-align:center;white-space:normal}.mce-tooltip-arrow{position:absolute;width:0;height:0;line-height:0;border:5px dashed #000}.mce-tooltip-arrow-n{border-bottom-color:#000}.mce-tooltip-arrow-s{border-top-color:#000}.mce-tooltip-arrow-e{border-left-color:#000}.mce-tooltip-arrow-w{border-right-color:#000}.mce-tooltip-nw,.mce-tooltip-sw{margin-left:-14px}.mce-tooltip-ne,.mce-tooltip-se{margin-left:14px}.mce-tooltip-n .mce-tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-nw .mce-tooltip-arrow{top:0;left:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-ne .mce-tooltip-arrow{top:0;right:10px;border-bottom-style:solid;border-top:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-s .mce-tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-sw .mce-tooltip-arrow{bottom:0;left:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-se .mce-tooltip-arrow{bottom:0;right:10px;border-top-style:solid;border-bottom:none;border-left-color:transparent;border-right-color:transparent}.mce-tooltip-e .mce-tooltip-arrow{right:0;top:50%;margin-top:-5px;border-left-style:solid;border-right:none;border-top-color:transparent;border-bottom-color:transparent}.mce-tooltip-w .mce-tooltip-arrow{left:0;top:50%;margin-top:-5px;border-right-style:solid;border-left:none;border-top-color:transparent;border-bottom-color:transparent}.mce-progress{display:inline-block;position:relative;height:20px}.mce-progress .mce-bar-container{display:inline-block;width:100px;height:100%;margin-right:8px;border:1px solid #ccc;overflow:hidden}.mce-progress .mce-text{display:inline-block;margin-top:auto;margin-bottom:auto;font-size:14px;width:40px;color:#333}.mce-bar{display:block;width:0;height:100%;background-color:#d7d7d7;-webkit-transition:width .2s ease;transition:width .2s ease}.mce-notification{position:absolute;background-color:#F0F0F0;padding:5px;margin-top:5px;border-width:1px;border-style:solid;border-color:#CCCCCC;transition:transform 100ms ease-in,opacity 150ms ease-in;opacity:0}.mce-notification.mce-in{opacity:1}.mce-notification-success{background-color:#dff0d8;border-color:#d6e9c6}.mce-notification-info{background-color:#d9edf7;border-color:#779ECB}.mce-notification-warning{background-color:#fcf8e3;border-color:#faebcc}.mce-notification-error{background-color:#f2dede;border-color:#ebccd1}.mce-notification.mce-has-close{padding-right:15px}.mce-notification .mce-ico{margin-top:5px}.mce-notification-inner{display:inline-block;font-size:14px;margin:5px 8px 4px 8px;text-align:center;white-space:normal;color:#31708f}.mce-notification-inner a{text-decoration:underline;cursor:pointer}.mce-notification .mce-progress{margin-right:8px}.mce-notification .mce-progress .mce-text{margin-top:5px}.mce-notification *,.mce-notification .mce-progress .mce-text{color:#333333}.mce-notification .mce-progress .mce-bar-container{border-color:#CCCCCC}.mce-notification .mce-progress .mce-bar-container .mce-bar{background-color:#333333}.mce-notification-success *,.mce-notification-success .mce-progress .mce-text{color:#3c763d}.mce-notification-success .mce-progress .mce-bar-container{border-color:#d6e9c6}.mce-notification-success .mce-progress .mce-bar-container .mce-bar{background-color:#3c763d}.mce-notification-info *,.mce-notification-info .mce-progress .mce-text{color:#31708f}.mce-notification-info .mce-progress .mce-bar-container{border-color:#779ECB}.mce-notification-info .mce-progress .mce-bar-container .mce-bar{background-color:#31708f}.mce-notification-warning *,.mce-notification-warning .mce-progress .mce-text{color:#8a6d3b}.mce-notification-warning .mce-progress .mce-bar-container{border-color:#faebcc}.mce-notification-warning .mce-progress .mce-bar-container .mce-bar{background-color:#8a6d3b}.mce-notification-error *,.mce-notification-error .mce-progress .mce-text{color:#a94442}.mce-notification-error .mce-progress .mce-bar-container{border-color:#ebccd1}.mce-notification-error .mce-progress .mce-bar-container .mce-bar{background-color:#a94442}.mce-notification .mce-close{position:absolute;top:6px;right:8px;font-size:20px;font-weight:bold;line-height:20px;color:#858585;cursor:pointer;height:20px;overflow:hidden}.mce-abs-layout{position:relative}body .mce-abs-layout-item,.mce-abs-end{position:absolute}.mce-abs-end{width:1px;height:1px}.mce-container-body.mce-abs-layout{overflow:hidden}.mce-btn{border:1px solid #b1b1b1;border-color:transparent transparent transparent transparent;position:relative;text-shadow:0 1px 1px rgba(255,255,255,0.75);display:inline-block;*display:inline;*zoom:1;background-color:#f0f0f0}.mce-btn:hover,.mce-btn:focus{color:#333;background-color:#e3e3e3;border-color:#ccc}.mce-btn.mce-disabled button,.mce-btn.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-btn.mce-active,.mce-btn.mce-active:hover{background-color:#dbdbdb;border-color:#ccc}.mce-btn:active{background-color:#e0e0e0;border-color:#ccc}.mce-btn button{padding:4px 8px;font-size:14px;line-height:20px;*line-height:16px;cursor:pointer;color:#333;text-align:center;overflow:visible;-webkit-appearance:none}.mce-btn button::-moz-focus-inner{border:0;padding:0}.mce-btn i{text-shadow:1px 1px none}.mce-primary.mce-btn-has-text{min-width:50px}.mce-primary{color:#fff;border:1px solid transparent;border-color:transparent;background-color:#2d8ac7}.mce-primary:hover,.mce-primary:focus{background-color:#257cb6;border-color:transparent}.mce-primary.mce-disabled button,.mce-primary.mce-disabled:hover button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-primary.mce-active,.mce-primary.mce-active:hover,.mce-primary:not(.mce-disabled):active{background-color:#206ea1}.mce-primary button,.mce-primary button i{color:#fff;text-shadow:1px 1px none}.mce-btn .mce-txt{font-size:inherit;line-height:inherit;color:inherit}.mce-btn-large button{padding:9px 14px;font-size:16px;line-height:normal}.mce-btn-large i{margin-top:2px}.mce-btn-small button{padding:1px 5px;font-size:12px;*padding-bottom:2px}.mce-btn-small i{line-height:20px;vertical-align:top;*line-height:18px}.mce-btn .mce-caret{margin-top:8px;margin-left:0}.mce-btn-small .mce-caret{margin-top:8px;margin-left:0}.mce-caret{display:inline-block;*display:inline;*zoom:1;width:0;height:0;vertical-align:top;border-top:4px solid #333;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.mce-disabled .mce-caret{border-top-color:#aaa}.mce-caret.mce-up{border-bottom:4px solid #333;border-top:0}.mce-btn-flat{border:0;background:transparent;filter:none}.mce-btn-flat:hover,.mce-btn-flat.mce-active,.mce-btn-flat:focus,.mce-btn-flat:active{border:0;background:#e6e6e6;filter:none}.mce-btn-has-text .mce-ico{padding-right:5px}.mce-rtl .mce-btn button{direction:rtl}.mce-btn-group .mce-btn{border-width:1px;margin:0;margin-left:2px}.mce-btn-group:not(:first-child){border-left:1px solid #d9d9d9;padding-left:3px;margin-left:3px}.mce-btn-group .mce-first{margin-left:0}.mce-btn-group .mce-btn.mce-flow-layout-item{margin:0}.mce-rtl .mce-btn-group .mce-btn{margin-left:0;margin-right:2px}.mce-rtl .mce-btn-group .mce-first{margin-right:0}.mce-rtl .mce-btn-group:not(:first-child){border-left:none;border-right:1px solid #d9d9d9;padding-right:4px;margin-right:4px}.mce-checkbox{cursor:pointer}i.mce-i-checkbox{margin:0 3px 0 0;border:1px solid #c5c5c5;background-color:#f0f0f0;text-indent:-10em;*font-size:0;*line-height:0;*text-indent:0;overflow:hidden}.mce-checked i.mce-i-checkbox{color:#333;font-size:16px;line-height:16px;text-indent:0}.mce-checkbox:focus i.mce-i-checkbox,.mce-checkbox.mce-focus i.mce-i-checkbox{border:1px solid rgba(82,168,236,0.8)}.mce-checkbox.mce-disabled .mce-label,.mce-checkbox.mce-disabled i.mce-i-checkbox{color:#acacac}.mce-checkbox .mce-label{vertical-align:middle}.mce-rtl .mce-checkbox{direction:rtl;text-align:right}.mce-rtl i.mce-i-checkbox{margin:0 0 0 3px}.mce-combobox{position:relative;display:inline-block;*display:inline;*zoom:1;*height:32px}.mce-combobox input{border:1px solid #c5c5c5;border-right-color:#c5c5c5;height:28px}.mce-combobox.mce-disabled input{color:#adadad}.mce-combobox .mce-btn{border:1px solid #c5c5c5;border-left:0;margin:0}.mce-combobox button{padding-right:8px;padding-left:8px}.mce-combobox.mce-disabled .mce-btn button{cursor:default;opacity:.4;filter:alpha(opacity=40);zoom:1}.mce-combobox .mce-status{position:absolute;right:2px;top:50%;line-height:16px;margin-top:-8px;font-size:12px;width:15px;height:15px;text-align:center;cursor:pointer}.mce-combobox.mce-has-status input{padding-right:20px}.mce-combobox.mce-has-open .mce-status{right:37px}.mce-combobox .mce-status.mce-i-warning{color:#c09853}.mce-combobox .mce-status.mce-i-checkmark{color:#468847}.mce-menu.mce-combobox-menu{border-top:0;margin-top:0;max-height:200px}.mce-menu.mce-combobox-menu .mce-menu-item{padding:4px 6px 4px 4px;font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-sep{padding:0}.mce-menu.mce-combobox-menu .mce-text{font-size:11px}.mce-menu.mce-combobox-menu .mce-menu-item-link,.mce-menu.mce-combobox-menu .mce-menu-item-link b{font-size:11px}.mce-menu.mce-combobox-menu .mce-text b{font-size:11px}.mce-colorbox i{border:1px solid #c5c5c5;width:14px;height:14px}.mce-colorbutton .mce-ico{position:relative}.mce-colorbutton-grid{margin:4px}.mce-colorbutton button{padding-right:6px;padding-left:6px}.mce-colorbutton .mce-preview{padding-right:3px;display:block;position:absolute;left:50%;top:50%;margin-left:-17px;margin-top:7px;background:gray;width:13px;height:2px;overflow:hidden}.mce-colorbutton.mce-btn-small .mce-preview{margin-left:-16px;padding-right:0;width:16px}.mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:1px solid transparent}.mce-colorbutton:hover .mce-open{border-color:#ccc}.mce-colorbutton.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-colorbutton{direction:rtl}.mce-rtl .mce-colorbutton .mce-preview{margin-left:0;padding-right:0;padding-left:3px}.mce-rtl .mce-colorbutton.mce-btn-small .mce-preview{margin-left:0;padding-right:0;padding-left:2px}.mce-rtl .mce-colorbutton .mce-open{padding-left:4px;padding-right:4px;border-left:0}.mce-colorpicker{position:relative;width:250px;height:220px}.mce-colorpicker-sv{position:absolute;top:0;left:0;width:90%;height:100%;border:1px solid #c5c5c5;cursor:crosshair;overflow:hidden}.mce-colorpicker-h-chunk{width:100%}.mce-colorpicker-overlay1,.mce-colorpicker-overlay2{width:100%;height:100%;position:absolute;top:0;left:0}.mce-colorpicker-overlay1{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=1, startColorstr='#ffffff', endColorstr='#00ffffff');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=1,startColorstr='#ffffff', endColorstr='#00ffffff')";background:linear-gradient(to right, #fff, rgba(255,255,255,0))}.mce-colorpicker-overlay2{filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#00000000', endColorstr='#000000');-ms-filter:"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#00000000', endColorstr='#000000')";background:linear-gradient(to bottom, rgba(0,0,0,0), #000)}.mce-colorpicker-selector1{background:none;position:absolute;width:12px;height:12px;margin:-8px 0 0 -8px;border:1px solid black;border-radius:50%}.mce-colorpicker-selector2{position:absolute;width:10px;height:10px;border:1px solid white;border-radius:50%}.mce-colorpicker-h{position:absolute;top:0;right:0;width:6.5%;height:100%;border:1px solid #c5c5c5;cursor:crosshair}.mce-colorpicker-h-marker{margin-top:-4px;position:absolute;top:0;left:-1px;width:100%;border:1px solid #333;background:#fff;height:4px;z-index:100}.mce-path{display:inline-block;*display:inline;*zoom:1;padding:8px;white-space:normal}.mce-path .mce-txt{display:inline-block;padding-right:3px}.mce-path .mce-path-body{display:inline-block}.mce-path-item{display:inline-block;*display:inline;*zoom:1;cursor:pointer;color:#333}.mce-path-item:hover{text-decoration:underline}.mce-path-item:focus{background:#666;color:#fff}.mce-path .mce-divider{display:inline}.mce-disabled .mce-path-item{color:#aaa}.mce-rtl .mce-path{direction:rtl}.mce-fieldset{border:0 solid #9E9E9E}.mce-fieldset>.mce-container-body{margin-top:-15px}.mce-fieldset-title{margin-left:5px;padding:0 5px 0 5px}.mce-fit-layout{display:inline-block;*display:inline;*zoom:1}.mce-fit-layout-item{position:absolute}.mce-flow-layout-item{display:inline-block;*display:inline;*zoom:1}.mce-flow-layout-item{margin:2px 0 2px 2px}.mce-flow-layout-item.mce-last{margin-right:2px}.mce-flow-layout{white-space:normal}.mce-tinymce-inline .mce-flow-layout{white-space:nowrap}.mce-rtl .mce-flow-layout{text-align:right;direction:rtl}.mce-rtl .mce-flow-layout-item{margin:2px 2px 2px 0}.mce-rtl .mce-flow-layout-item.mce-last{margin-left:2px}.mce-iframe{border:0 solid rgba(0,0,0,0.2);width:100%;height:100%}.mce-infobox{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden;border:1px solid red}.mce-infobox div{display:block;margin:5px}.mce-infobox div button{position:absolute;top:50%;right:4px;cursor:pointer;margin-top:-8px;display:none}.mce-infobox div button:focus{outline:2px solid #ccc}.mce-infobox.mce-has-help div{margin-right:25px}.mce-infobox.mce-has-help button{display:block}.mce-infobox.mce-success{background:#dff0d8;border-color:#d6e9c6}.mce-infobox.mce-success div{color:#3c763d}.mce-infobox.mce-warning{background:#fcf8e3;border-color:#faebcc}.mce-infobox.mce-warning div{color:#8a6d3b}.mce-infobox.mce-error{background:#f2dede;border-color:#ebccd1}.mce-infobox.mce-error div{color:#a94442}.mce-rtl .mce-infobox div{text-align:right;direction:rtl}.mce-label{display:inline-block;*display:inline;*zoom:1;text-shadow:0 1px 1px rgba(255,255,255,0.75);overflow:hidden}.mce-label.mce-autoscroll{overflow:auto}.mce-label.mce-disabled{color:#aaa}.mce-label.mce-multiline{white-space:pre-wrap}.mce-label.mce-success{color:#468847}.mce-label.mce-warning{color:#c09853}.mce-label.mce-error{color:#b94a48}.mce-rtl .mce-label{text-align:right;direction:rtl}.mce-menubar .mce-menubtn{border-color:transparent;background:transparent;filter:none}.mce-menubar .mce-menubtn button{color:#333}.mce-menubar{border:1px solid rgba(217,217,217,0.52)}.mce-menubar .mce-menubtn button span{color:#333}.mce-menubar .mce-caret{border-top-color:#333}.mce-menubar .mce-menubtn:hover,.mce-menubar .mce-menubtn.mce-active,.mce-menubar .mce-menubtn:focus{border-color:#ccc;background:#fff;filter:none}.mce-menubtn button{color:#333}.mce-menubtn.mce-btn-small span{font-size:12px}.mce-menubtn.mce-fixed-width span{display:inline-block;overflow-x:hidden;text-overflow:ellipsis;width:90px}.mce-menubtn.mce-fixed-width.mce-btn-small span{width:70px}.mce-menubtn .mce-caret{*margin-top:6px}.mce-rtl .mce-menubtn button{direction:rtl;text-align:right}.mce-menu-item{display:block;padding:6px 15px 6px 12px;clear:both;font-weight:normal;line-height:20px;color:#333;white-space:nowrap;cursor:pointer;line-height:normal;border-left:4px solid transparent;margin-bottom:1px}.mce-menu-item .mce-ico,.mce-menu-item .mce-text{color:#333}.mce-menu-item.mce-disabled .mce-text,.mce-menu-item.mce-disabled .mce-ico{color:#adadad}.mce-menu-item:hover .mce-text,.mce-menu-item.mce-selected .mce-text,.mce-menu-item:focus .mce-text{color:white}.mce-menu-item:hover .mce-ico,.mce-menu-item.mce-selected .mce-ico,.mce-menu-item:focus .mce-ico{color:white}.mce-menu-item.mce-disabled:hover{background:#CCC}.mce-menu-shortcut{display:inline-block;color:#adadad}.mce-menu-shortcut{display:inline-block;*display:inline;*zoom:1;padding:0 15px 0 20px}.mce-menu-item:hover .mce-menu-shortcut,.mce-menu-item.mce-selected .mce-menu-shortcut,.mce-menu-item:focus .mce-menu-shortcut{color:white}.mce-menu-item .mce-caret{margin-top:4px;*margin-top:3px;margin-right:6px;border-top:4px solid transparent;border-bottom:4px solid transparent;border-left:4px solid #333}.mce-menu-item.mce-selected .mce-caret,.mce-menu-item:focus .mce-caret,.mce-menu-item:hover .mce-caret{border-left-color:white}.mce-menu-align .mce-menu-shortcut{*margin-top:-2px}.mce-menu-align .mce-menu-shortcut,.mce-menu-align .mce-caret{position:absolute;right:0}.mce-menu-item.mce-active i{visibility:visible}.mce-menu-item-normal.mce-active{background-color:#3498db}.mce-menu-item-preview.mce-active{border-left:5px solid #aaa}.mce-menu-item-normal.mce-active .mce-text{color:white}.mce-menu-item-normal.mce-active:hover .mce-text,.mce-menu-item-normal.mce-active:hover .mce-ico{color:white}.mce-menu-item-normal.mce-active:focus .mce-text,.mce-menu-item-normal.mce-active:focus .mce-ico{color:white}.mce-menu-item:hover,.mce-menu-item.mce-selected,.mce-menu-item:focus{text-decoration:none;color:white;background-color:#2d8ac7}.mce-menu-item-link{color:#093;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mce-menu-item-link b{color:#093}.mce-menu-item-ellipsis{display:block;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.mce-menu-item:hover *,.mce-menu-item.mce-selected *,.mce-menu-item:focus *{color:white}div.mce-menu .mce-menu-item-sep,.mce-menu-item-sep:hover{border:0;padding:0;height:1px;margin:9px 1px;overflow:hidden;background:transparent;border-bottom:1px solid rgba(0,0,0,0.1);cursor:default;filter:none}div.mce-menu .mce-menu-item b{font-weight:bold}.mce-menu-item-indent-1{padding-left:20px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-2{padding-left:35px}.mce-menu-item-indent-3{padding-left:40px}.mce-menu-item-indent-4{padding-left:45px}.mce-menu-item-indent-5{padding-left:50px}.mce-menu-item-indent-6{padding-left:55px}.mce-menu.mce-rtl{direction:rtl}.mce-rtl .mce-menu-item{text-align:right;direction:rtl;padding:6px 12px 6px 15px}.mce-menu-align.mce-rtl .mce-menu-shortcut,.mce-menu-align.mce-rtl .mce-caret{right:auto;left:0}.mce-rtl .mce-menu-item .mce-caret{margin-left:6px;margin-right:0;border-right:4px solid #333;border-left:0}.mce-rtl .mce-menu-item.mce-selected .mce-caret,.mce-rtl .mce-menu-item:focus .mce-caret,.mce-rtl .mce-menu-item:hover .mce-caret{border-left-color:transparent;border-right-color:white}.mce-throbber{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.6;filter:alpha(opacity=60);zoom:1;background:#fff url('img/loader.gif') no-repeat center center}.mce-throbber-inline{position:static;height:50px}.mce-menu .mce-throbber-inline{height:25px;background-size:contain}.mce-menu{position:absolute;left:0;top:0;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);background:transparent;z-index:1000;padding:5px 0 5px 0;margin:-1px 0 0;min-width:160px;background:#fff;border:1px solid #989898;border:1px solid rgba(0,0,0,0.2);z-index:1002;max-height:400px;overflow:auto;overflow-x:hidden}.mce-menu i{display:none}.mce-menu-has-icons i{display:inline-block;*display:inline}.mce-menu-sub-tr-tl{margin:-6px 0 0 -1px}.mce-menu-sub-br-bl{margin:6px 0 0 -1px}.mce-menu-sub-tl-tr{margin:-6px 0 0 1px}.mce-menu-sub-bl-br{margin:6px 0 0 1px}.mce-listbox button{text-align:left;padding-right:20px;position:relative}.mce-listbox .mce-caret{position:absolute;margin-top:-2px;right:8px;top:50%}.mce-rtl .mce-listbox .mce-caret{right:auto;left:8px}.mce-rtl .mce-listbox button{padding-right:10px;padding-left:20px}.mce-container-body .mce-resizehandle{position:absolute;right:0;bottom:0;width:16px;height:16px;visibility:visible;cursor:s-resize;margin:0}.mce-container-body .mce-resizehandle-both{cursor:se-resize}i.mce-i-resize{color:#333}.mce-selectbox{background:#fff;border:1px solid #c5c5c5}.mce-slider{border:1px solid #AAA;background:#EEE;width:100px;height:10px;position:relative;display:block}.mce-slider.mce-vertical{width:10px;height:100px}.mce-slider-handle{border:1px solid #BBB;background:#DDD;display:block;width:13px;height:13px;position:absolute;top:0;left:0;margin-left:-1px;margin-top:-2px}.mce-slider-handle:focus{background:#BBB}.mce-spacer{visibility:hidden}.mce-splitbtn .mce-open{border-left:1px solid transparent}.mce-splitbtn:hover .mce-open{border-left-color:#ccc}.mce-splitbtn button{padding-right:6px;padding-left:6px}.mce-splitbtn .mce-open{padding-right:4px;padding-left:4px}.mce-splitbtn .mce-open.mce-active{background-color:#dbdbdb;outline:1px solid #ccc}.mce-splitbtn.mce-btn-small .mce-open{padding:0 3px 0 3px}.mce-rtl .mce-splitbtn{direction:rtl;text-align:right}.mce-rtl .mce-splitbtn button{padding-right:4px;padding-left:4px}.mce-rtl .mce-splitbtn .mce-open{border-left:0}.mce-stack-layout-item{display:block}.mce-tabs{display:block;border-bottom:1px solid #c5c5c5}.mce-tabs,.mce-tabs+.mce-container-body{background:#FFF}.mce-tab{display:inline-block;*display:inline;*zoom:1;border:1px solid #c5c5c5;border-width:0 1px 0 0;background:#ffffff;padding:8px;text-shadow:0 1px 1px rgba(255,255,255,0.75);height:13px;cursor:pointer}.mce-tab:hover{background:#FDFDFD}.mce-tab.mce-active{background:#FDFDFD;border-bottom-color:transparent;margin-bottom:-1px;height:14px}.mce-rtl .mce-tabs{text-align:right;direction:rtl}.mce-rtl .mce-tab{border-width:0 0 0 1px}.mce-textbox{background:#fff;border:1px solid #c5c5c5;display:inline-block;-webkit-transition:border linear .2s, box-shadow linear .2s;transition:border linear .2s, box-shadow linear .2s;height:28px;resize:none;padding:0 4px 0 4px;white-space:pre-wrap;*white-space:pre;color:#333}.mce-textbox:focus,.mce-textbox.mce-focus{border-color:#3498db}.mce-placeholder .mce-textbox{color:#aaa}.mce-textbox.mce-multiline{padding:4px;height:auto}.mce-textbox.mce-disabled{color:#adadad}.mce-rtl .mce-textbox{text-align:right;direction:rtl}@font-face{font-family:'tinymce';src:url('fonts/tinymce.eot');src:url('fonts/tinymce.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce.woff') format('woff'),url('fonts/tinymce.ttf') format('truetype'),url('fonts/tinymce.svg#tinymce') format('svg');font-weight:normal;font-style:normal}@font-face{font-family:'tinymce-small';src:url('fonts/tinymce-small.eot');src:url('fonts/tinymce-small.eot?#iefix') format('embedded-opentype'),url('fonts/tinymce-small.woff') format('woff'),url('fonts/tinymce-small.ttf') format('truetype'),url('fonts/tinymce-small.svg#tinymce') format('svg');font-weight:normal;font-style:normal}.mce-ico{font-family:'tinymce',Arial;font-style:normal;font-weight:normal;font-variant:normal;font-size:16px;line-height:16px;speak:none;vertical-align:text-top;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:inline-block;background:transparent center center;background-size:cover;width:16px;height:16px;color:#333}.mce-btn-small .mce-ico{font-family:'tinymce-small',Arial}.mce-i-save:before{content:"\e000"}.mce-i-newdocument:before{content:"\e001"}.mce-i-fullpage:before{content:"\e002"}.mce-i-alignleft:before{content:"\e003"}.mce-i-aligncenter:before{content:"\e004"}.mce-i-alignright:before{content:"\e005"}.mce-i-alignjustify:before{content:"\e006"}.mce-i-alignnone:before{content:"\e003"}.mce-i-cut:before{content:"\e007"}.mce-i-paste:before{content:"\e008"}.mce-i-searchreplace:before{content:"\e009"}.mce-i-bullist:before{content:"\e00a"}.mce-i-numlist:before{content:"\e00b"}.mce-i-indent:before{content:"\e00c"}.mce-i-outdent:before{content:"\e00d"}.mce-i-blockquote:before{content:"\e00e"}.mce-i-undo:before{content:"\e00f"}.mce-i-redo:before{content:"\e010"}.mce-i-link:before{content:"\e011"}.mce-i-unlink:before{content:"\e012"}.mce-i-anchor:before{content:"\e013"}.mce-i-image:before{content:"\e014"}.mce-i-media:before{content:"\e015"}.mce-i-help:before{content:"\e016"}.mce-i-code:before{content:"\e017"}.mce-i-insertdatetime:before{content:"\e018"}.mce-i-preview:before{content:"\e019"}.mce-i-forecolor:before{content:"\e01a"}.mce-i-backcolor:before{content:"\e01a"}.mce-i-table:before{content:"\e01b"}.mce-i-hr:before{content:"\e01c"}.mce-i-removeformat:before{content:"\e01d"}.mce-i-subscript:before{content:"\e01e"}.mce-i-superscript:before{content:"\e01f"}.mce-i-charmap:before{content:"\e020"}.mce-i-emoticons:before{content:"\e021"}.mce-i-print:before{content:"\e022"}.mce-i-fullscreen:before{content:"\e023"}.mce-i-spellchecker:before{content:"\e024"}.mce-i-nonbreaking:before{content:"\e025"}.mce-i-template:before{content:"\e026"}.mce-i-pagebreak:before{content:"\e027"}.mce-i-restoredraft:before{content:"\e028"}.mce-i-bold:before{content:"\e02a"}.mce-i-italic:before{content:"\e02b"}.mce-i-underline:before{content:"\e02c"}.mce-i-strikethrough:before{content:"\e02d"}.mce-i-visualchars:before{content:"\e02e"}.mce-i-visualblocks:before{content:"\e02e"}.mce-i-ltr:before{content:"\e02f"}.mce-i-rtl:before{content:"\e030"}.mce-i-copy:before{content:"\e031"}.mce-i-resize:before{content:"\e032"}.mce-i-browse:before{content:"\e034"}.mce-i-pastetext:before{content:"\e035"}.mce-i-rotateleft:before{content:"\eaa8"}.mce-i-rotateright:before{content:"\eaa9"}.mce-i-crop:before{content:"\ee78"}.mce-i-editimage:before{content:"\e915"}.mce-i-options:before{content:"\ec6a"}.mce-i-flipv:before{content:"\eaaa"}.mce-i-fliph:before{content:"\eaac"}.mce-i-zoomin:before{content:"\eb35"}.mce-i-zoomout:before{content:"\eb36"}.mce-i-sun:before{content:"\eccc"}.mce-i-moon:before{content:"\eccd"}.mce-i-arrowleft:before{content:"\edc0"}.mce-i-arrowright:before{content:"\e93c"}.mce-i-drop:before{content:"\e935"}.mce-i-contrast:before{content:"\ecd4"}.mce-i-sharpen:before{content:"\eba7"}.mce-i-resize2:before{content:"\edf9"}.mce-i-orientation:before{content:"\e601"}.mce-i-invert:before{content:"\e602"}.mce-i-gamma:before{content:"\e600"}.mce-i-remove:before{content:"\ed6a"}.mce-i-tablerowprops:before{content:"\e604"}.mce-i-tablecellprops:before{content:"\e605"}.mce-i-table2:before{content:"\e606"}.mce-i-tablemergecells:before{content:"\e607"}.mce-i-tableinsertcolbefore:before{content:"\e608"}.mce-i-tableinsertcolafter:before{content:"\e609"}.mce-i-tableinsertrowbefore:before{content:"\e60a"}.mce-i-tableinsertrowafter:before{content:"\e60b"}.mce-i-tablesplitcells:before{content:"\e60d"}.mce-i-tabledelete:before{content:"\e60e"}.mce-i-tableleftheader:before{content:"\e62a"}.mce-i-tabletopheader:before{content:"\e62b"}.mce-i-tabledeleterow:before{content:"\e800"}.mce-i-tabledeletecol:before{content:"\e801"}.mce-i-codesample:before{content:"\e603"}.mce-i-fill:before{content:"\e902"}.mce-i-borderwidth:before{content:"\e903"}.mce-i-line:before{content:"\e904"}.mce-i-count:before{content:"\e905"}.mce-i-translate:before{content:"\e907"}.mce-i-drag:before{content:"\e908"}.mce-i-home:before{content:"\e90b"}.mce-i-upload:before{content:"\e914"}.mce-i-bubble:before{content:"\e91c"}.mce-i-user:before{content:"\e91d"}.mce-i-lock:before{content:"\e926"}.mce-i-unlock:before{content:"\e927"}.mce-i-settings:before{content:"\e928"}.mce-i-remove2:before{content:"\e92a"}.mce-i-menu:before{content:"\e92d"}.mce-i-warning:before{content:"\e930"}.mce-i-question:before{content:"\e931"}.mce-i-pluscircle:before{content:"\e932"}.mce-i-info:before{content:"\e933"}.mce-i-notice:before{content:"\e934"}.mce-i-arrowup:before{content:"\e93b"}.mce-i-arrowdown:before{content:"\e93d"}.mce-i-arrowup2:before{content:"\e93f"}.mce-i-arrowdown2:before{content:"\e940"}.mce-i-menu2:before{content:"\e941"}.mce-i-newtab:before{content:"\e961"}.mce-i-a11y:before{content:"\e900"}.mce-i-plus:before{content:"\e93a"}.mce-i-insert:before{content:"\e93a"}.mce-i-minus:before{content:"\e939"}.mce-i-books:before{content:"\e911"}.mce-i-reload:before{content:"\e906"}.mce-i-toc:before{content:"\e901"}.mce-i-checkmark:before{content:"\e033"}.mce-i-checkbox:before,.mce-i-selected:before{content:"\e033"}.mce-i-insert{font-size:14px}.mce-i-selected{visibility:hidden}i.mce-i-backcolor{text-shadow:none;background:#BBB} \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/inlite/theme.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/inlite/theme.min.js new file mode 100644 index 0000000..25996d2 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/inlite/theme.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i0})},e=function(b,c){var e=function(a){return"string"==typeof a?d(a,/[ ,]/):a},f=function(a,b){return a===!1?[]:b};return a.isArray(b)?b:a.isString(b)?e(b):a.isBoolean(b)?f(b,c):c},f=function(a){return function(c,d,f){var g=d in c.settings?c.settings[d]:f;return b(f,a),e(g,f)}};return{getStringOr:c(a.isString),getBoolOr:c(a.isBoolean),getNumberOr:c(a.isNumber),getHandlerOr:c(a.isFunction),getToolbarItemsOr:f(a.isArray)}}),g("7",[],function(){var a=function(a,b){return{id:a,rect:b}},b=function(a,b){for(var c=0;c",c=0;c
    ";e+="

    "}return e+="",e+="
    "},d=function(a){var b=a.dom.select("*[data-mce-id]");return b[0]},e=function(a,b,e){a.undoManager.transact(function(){var f,g;a.insertContent(c(b,e)),f=d(a),f.removeAttribute("data-mce-id"),g=a.dom.select("td,th",f),a.selection.setCursorLocation(g[0],0)})},f=function(a,b){a.execCommand("FormatBlock",!1,b)},g=function(b,c,d){var e,f;e=b.editorUpload.blobCache,f=e.create(a.uuid("mceu"),d,c),e.add(f),b.insertContent(b.dom.createHTML("img",{src:f.blobUri()}))},h=function(a){a.selection.collapse(!1)},i=function(a){a.focus(),b.unlinkSelection(a),h(a)},j=function(a,b,c){a.focus(),a.dom.setAttrib(b,"href",c),h(a)},k=function(a,b){a.execCommand("mceInsertLink",!1,{href:b}),h(a)},l=function(a,b){var c=a.dom.getParent(a.selection.getStart(),"a[href]");c?j(a,c,b):k(a,b)},m=function(a,b){0===b.trim().length?i(a):l(a,b)};return{insertTable:e,formatBlock:f,insertBlob:g,createLink:m,unlink:i}}),g("v",[],function(){var a=function(a){return/^www\.|\.(com|org|edu|gov|uk|net|ca|de|jp|fr|au|us|ru|ch|it|nl|se|no|es|mil)$/i.test(a.trim())},b=function(a){return/^https?:\/\//.test(a.trim())};return{isDomainLike:a,isAbsolute:b}}),g("l",["g","j","s","p","v"],function(a,b,c,d,e){var f=function(a){a.find("textbox").eq(0).each(function(a){a.focus()})},g=function(c,d){var e=b.create(a.extend({type:"form",layout:"flex",direction:"row",padding:5,name:c,spacing:3},d));return e.on("show",function(){f(e)}),e},h=function(a,b){return b?a.show():a.hide()},i=function(a,b){return new c(function(c){a.windowManager.confirm("The URL you entered seems to be an external link. Do you want to add the required http:// prefix?",function(a){var d=a===!0?"http://"+b:b;c(d)})})},j=function(a,b){return!e.isAbsolute(b)&&e.isDomainLike(b)?i(a,b):c.resolve(b)},k=function(a,b){var c={},e=function(){a.focus(),d.unlink(a),b()},f=function(a){var b=a.meta;b&&b.attach&&(c={href:this.value(),attach:b.attach})},i=function(b){if(b.control===this){var c,d="";c=a.dom.getParent(a.selection.getStart(),"a[href]"),c&&(d=a.dom.getAttrib(c,"href")),this.fromJSON({linkurl:d}),h(this.find("#unlink"),c),this.find("#linkurl")[0].focus()}};return g("quicklink",{items:[{type:"button",name:"unlink",icon:"unlink",onclick:e,tooltip:"Remove link"},{type:"filepicker",name:"linkurl",placeholder:"Paste or type a link",filetype:"file",onchange:f},{type:"button",icon:"checkmark",subtype:"primary",tooltip:"Ok",onclick:"submit"}],onshow:i,onsubmit:function(e){j(a,e.data.linkurl).then(function(e){a.undoManager.transact(function(){e===c.href&&(c.attach(),c={}),d.createLink(a,e)}),b()})}})};return{createQuickLinkForm:k}}),g("m",["q","r"],function(a,b){var c=function(a,b){return{rect:a,position:b}},d=function(a,b){return{x:b.x,y:b.y,w:a.w,h:a.h}},e=function(b,e,f,g,h){var i,j,k;return i=a.findBestRelativePosition(h,f,g,b),f=a.clamp(f,g),i?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(f=a.intersect(g,f),f?(i=a.findBestRelativePosition(h,f,g,e))?(j=a.relativePosition(h,f,i),k=d(h,j),c(k,i)):(k=d(h,f),c(k,i)):null)},f=function(a,b,c){return e(["cr-cl","cl-cr"],["bc-tc","bl-tl","br-tr"],a,b,c)},g=function(a,b,c){return e(["tc-bc","bc-tc","tl-bl","bl-tl","tr-br","br-tr"],["bc-tc","bl-tl","br-tr"],a,b,c)},h=function(a,c,d,e){var f;return"function"==typeof a?(f=a({elementRect:b.toClientRect(c),contentAreaRect:b.toClientRect(d),panelRect:b.toClientRect(e)}),b.fromClientRect(f)):e},i=function(a){return a.panelRect};return{calcInsert:f,calc:g,userConstrain:h,defaultHandler:i}}),g("c",["g","j","i","k","l","f","m","5"],function(a,b,c,d,e,f,g,h){return function(){var i,j,k=["bold","italic","|","quicklink","h2","h3","blockquote"],l=["quickimage","quicktable"],m=function(b,c){return a.map(c,function(a){return d.create(b,a.id,a.items)})},n=function(a){return h.getToolbarItemsOr(a,"selection_toolbar",k)},o=function(a){return h.getToolbarItemsOr(a,"insert_toolbar",l)},p=function(a){return a.items().length>0},q=function(c,f){var g=m(c,f).concat([d.create(c,"text",n(c)),d.create(c,"insert",o(c)),e.createQuickLinkForm(c,B)]);return b.create({type:"floatpanel",role:"dialog",classes:"tinymce tinymce-inline arrow",ariaLabel:"Inline toolbar",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!0,border:1,items:a.grep(g,p),oncancel:function(){c.focus()}})},r=function(a){a&&a.show()},s=function(a,b){a.moveTo(b.x,b.y)},t=function(b,c){c=c?c.substr(0,2):"",a.each({t:"down",b:"up",c:"center"},function(a,d){b.classes.toggle("arrow-"+a,d===c.substr(0,1))}),"cr"===c?(b.classes.toggle("arrow-left",!0),b.classes.toggle("arrow-right",!1)):"cl"===c?(b.classes.toggle("arrow-left",!0),b.classes.toggle("arrow-right",!0)):a.each({l:"left",r:"right"},function(a,d){b.classes.toggle("arrow-"+a,d===c.substr(1,1))})},u=function(a,b){var c=a.items().filter("#"+b);return c.length>0&&(c[0].show(),a.reflow(),!0)},v=function(a,b,d,e){var i,k,l,m;return m=h.getHandlerOr(d,"inline_toolbar_position_handler",g.defaultHandler),i=f.getContentAreaRect(d),k=c.DOM.getRect(a.getEl()),l="insert"===b?g.calcInsert(e,i,k):g.calc(e,i,k),!!l&&(k=l.rect,j=e,s(a,g.userConstrain(m,e,i,k)),t(a,l.position),!0)},w=function(a,b,c,d){return r(a),a.items().hide(),u(a,b)?void(v(a,b,c,d)===!1&&B(a)):void B(a)},x=function(){return i.items().filter("form:visible").length>0},y=function(a,b){if(i){if(i.items().hide(),!u(i,b))return void B(i);var d,e,k,l;r(i),i.items().hide(),u(i,b),l=h.getHandlerOr(a,"inline_toolbar_position_handler",g.defaultHandler),d=f.getContentAreaRect(a),e=c.DOM.getRect(i.getEl()),k=g.calc(j,d,e),k&&(e=k.rect,s(i,g.userConstrain(l,j,d,e)),t(i,k.position))}},z=function(a,b,c,d){i||(i=q(a,d),i.renderTo(document.body).reflow().moveTo(c.x,c.y),a.nodeChanged()),w(i,b,a,c)},A=function(a,b,c){i&&v(i,b,a,c)},B=function(){i&&i.hide()},C=function(){i&&i.find("toolbar:visible").eq(0).each(function(a){a.focus(!0)})},D=function(){i&&(i.remove(),i=null)},E=function(){return i&&i.visible()&&x()};return{show:z,showForm:y,reposition:A,inForm:E,hide:B,focus:C,remove:D}}}),g("n",["s"],function(a){var b=function(b){return new a(function(a){var c=new FileReader;c.onloadend=function(){a(c.result.split(",")[1])},c.readAsDataURL(b)})};return{blobToBase64:b}}),g("o",["s"],function(a){var b=function(){return new a(function(a){var b;b=document.createElement("input"),b.type="file",b.style.position="fixed",b.style.left=0,b.style.top=0,b.style.opacity=.001,document.body.appendChild(b),b.onchange=function(b){a(Array.prototype.slice.call(b.target.files))},b.click(),b.parentNode.removeChild(b)})};return{pickFile:b}}),g("b",["c","n","o","p"],function(a,b,c,d){var e=function(a){for(var b=function(b){return function(){d.formatBlock(a,b)}},c=1;c<6;c++){var e="h"+c;a.addButton(e,{text:e.toUpperCase(),tooltip:"Heading "+c,stateSelector:e,onclick:b(e),onPostRender:function(){var a=this.getEl().firstChild.firstChild;a.style.fontWeight="bold"}})}},f=function(a,f){a.addButton("quicklink",{icon:"link",tooltip:"Insert/Edit link",stateSelector:"a[href]",onclick:function(){f.showForm(a,"quicklink")}}),a.addButton("quickimage",{icon:"image",tooltip:"Insert image",onclick:function(){c.pickFile().then(function(c){var e=c[0];b.blobToBase64(e).then(function(b){d.insertBlob(a,b,e)})})}}),a.addButton("quicktable",{icon:"table",tooltip:"Insert table",onclick:function(){f.hide(),d.insertTable(a,2,2)}}),e(a)};return{addToEditor:f}}),g("0",["1","2","3","4","5","6","7","8","9","a","b","c"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m=function(a){var b=a.selection.getNode(),c=a.dom.getParents(b);return c},n=function(a,b,c,d){var e=function(c){return a.dom.is(c,b)};return{predicate:e,id:c,items:d}},o=function(a){var b=a.contextToolbars;return d.flatten([b?b:[],n(a,"img","image","alignleft aligncenter alignright")])},p=function(a,b){var c,d,e;return d=m(a),e=h.fromContextToolbars(b),c=g.match(a,[f.element(d[0],e),i.textSelection("text"),i.emptyTextBlock(d,"insert"),f.parent(d,e)]),c&&c.rect?c:null},q=function(a,b){var c=function(){var c=o(a),d=p(a,c);d?b.show(a,d.id,d.rect,c):b.hide()};return function(){a.removed||c()}},r=function(a,b){return function(){var c=o(a),d=p(a,c);d&&b.reposition(a,d.id,d.rect)}},s=function(a,b,c){return function(){a.removed||b.inForm()||c()}},t=function(a,b){var d=c.throttle(q(a,b),0),e=c.throttle(s(a,b,q(a,b)),0);a.on("blur hide ObjectResizeStart",b.hide),a.on("click",d),a.on("nodeChange mouseup",e),a.on("ResizeEditor keyup",d),a.on("ResizeWindow",r(a,b)),a.on("remove",b.remove),a.shortcuts.add("Alt+F10","",b.focus)},u=function(a,b){a.shortcuts.remove("meta+k"),a.shortcuts.add("meta+k","",function(){var c=o(a),d=d=g.match(a,[i.textSelection("quicklink")]);d&&b.show(a,d.id,d.rect,c)})},v=function(a,b){return j.load(a,function(){t(a,b),u(a,b)}),{}},w=function(a){throw new Error(a)};return a.add("inlite",function(a){var b=new l;k.addToEditor(a,b);var c=function(){return a.inline?v(a,b):w("inlite theme only supports inline mode.")};return{renderUI:c}}),b.appendTo(window.tinymce?window.tinymce:{}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/modern/theme.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/modern/theme.min.js new file mode 100644 index 0000000..7dda013 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/themes/modern/theme.min.js @@ -0,0 +1 @@ +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i=0;c--)for(d=f.length-1;d>=0;d--)if(f[d].predicate(e[c]))return{toolbar:f[d],element:e[c]};return null};a.on("click keyup setContent ObjectResized",function(b){("setcontent"!==b.type||b.selection)&&c.setEditorTimeout(a,function(){var b;b=u(a.selection.getNode()),b?(t(),s(b)):t()})}),a.on("blur hide contextmenu",t),a.on("ObjectResizeStart",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.hide()}),a.on("ResizeEditor ResizeWindow",q(!0)),a.on("nodeChange",q(!1)),a.on("remove",function(){b.each(n(),function(a){a.panel&&a.panel.remove()}),a.contextToolbars={}}),a.shortcuts.add("ctrl+shift+e > ctrl+shift+p","",function(){var b=u(a.selection.getNode());b&&b.toolbar.panel&&b.toolbar.panel.items()[0].focus()})};return{addContextualToolbars:m}}),g("h",["d"],function(a){var b={file:{title:"File",items:"newdocument"},edit:{title:"Edit",items:"undo redo | cut copy paste pastetext | selectall"},insert:{title:"Insert",items:"|"},view:{title:"View",items:"visualaid |"},format:{title:"Format",items:"bold italic underline strikethrough superscript subscript | formats | removeformat"},table:{title:"Table"},tools:{title:"Tools"}},c=function(a,b){var c;return"|"==b?{text:"|"}:c=a[b]},d=function(d,e,f){var g,h,i,j,k;if(k=a.makeMap((e.removed_menuitems||"").split(/[ ,]/)),e.menu?(h=e.menu[f],j=!0):h=b[f],h){g={text:h.title},i=[],a.each((h.items||"").split(/[ ,]/),function(a){var b=c(d,a);b&&!k[a]&&i.push(c(d,a))}),j||a.each(d,function(a){a.context==f&&("before"==a.separator&&i.push({text:"|"}),a.prependToContext?i.unshift(a):i.push(a),"after"==a.separator&&i.push({text:"|"}))});for(var l=0;l=11},k=function(a){return!(!j()||!a.sidebars)&&a.sidebars.length>0},l=function(b){var c=a.map(b.sidebars,function(a){var c=a.settings;return{type:"button",icon:c.icon,image:c.image,tooltip:c.tooltip,onclick:i(b,a.name,b.sidebars)}});return{type:"panel",name:"sidebar",layout:"stack",classes:"sidebar",items:[{type:"toolbar",layout:"stack",classes:"sidebar-toolbar",items:c}]}};return{hasSidebar:k,createSidebar:l}}),g("j",[],function(){var a=function(a){var b=function(){a._skinLoaded=!0,a.fire("SkinLoaded")};return function(){a.initialized?b():a.on("init",b)}};return{fireSkinLoaded:a}}),g("6",["b","c","d","e","f","g","h","9","i","j","k"],function(a,b,c,d,e,f,g,h,i,j,k){var l=a.DOM,m=function(a){return function(b){a.find("*").disabled("readonly"===b.mode)}},n=function(a){return{type:"panel",name:"iframe",layout:"stack",classes:"edit-area",border:a,html:""}},o=function(a){return{type:"panel",layout:"stack",classes:"edit-aria-container",border:"1 0 0 0",items:[n("0"),i.createSidebar(a)]}},p=function(a,c,p){var q,r,s,t=a.settings;return p.skinUiCss&&l.styleSheetLoader.load(p.skinUiCss,j.fireSkinLoaded(a)),q=c.panel=b.create({type:"panel",role:"application",classes:"tinymce",style:"visibility: hidden",layout:"stack",border:1,items:[t.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:g.createMenuButtons(a)},k.createToolbars(a,t.toolbar_items_size),i.hasSidebar(a)?o(a):n("1 0 0 0")]}),t.resize!==!1&&(r={type:"resizehandle",direction:t.resize,onResizeStart:function(){var b=a.getContentAreaContainer().firstChild;s={width:b.clientWidth,height:b.clientHeight}},onResize:function(b){"both"===t.resize?h.resizeTo(a,s.width+b.deltaX,s.height+b.deltaY):h.resizeTo(a,null,s.height+b.deltaY)}}),t.statusbar!==!1&&q.add({type:"panel",name:"statusbar",classes:"statusbar",layout:"flow",border:"1 0 0 0",ariaRoot:!0,items:[{type:"elementpath",editor:a},r]}),a.fire("BeforeRenderUI"),a.on("SwitchMode",m(q)),q.renderBefore(p.targetNode).reflow(),t.readonly&&a.setMode("readonly"),p.width&&l.setStyle(q.getEl(),"width",p.width),a.on("remove",function(){q.remove(),q=null}),d.addKeys(a,q),f.addContextualToolbars(a),e.setup(a),{iframeContainer:q.find("#iframe")[0].getEl(),editorContainer:q.getEl()}};return{render:p}}),g("l",["a"],function(a){return a("tinymce.ui.FloatPanel")}),g("7",["d","c","b","l","k","h","g","e","j"],function(a,b,c,d,e,f,g,h,i){var j=function(a,j,k){var l,m,n=a.settings,o=c.DOM;n.fixed_toolbar_container&&(m=o.select(n.fixed_toolbar_container)[0]);var p=function(){if(l&&l.moveRel&&l.visible()&&!l._fixed){var b=a.selection.getScrollContainer(),c=a.getBody(),d=0,e=0;if(b){var f=o.getPos(c),g=o.getPos(b);d=Math.max(0,g.x-f.x),e=Math.max(0,g.y-f.y)}l.fixed(!1).moveRel(c,a.rtl?["tr-br","br-tr"]:["tl-bl","bl-tl","tr-br"]).moveBy(d,e)}},q=function(){l&&(l.show(),p(),o.addClass(a.getBody(),"mce-edit-focus"))},r=function(){l&&(l.hide(),d.hideAll(),o.removeClass(a.getBody(),"mce-edit-focus"))},s=function(){return l?void(l.visible()||q()):(l=j.panel=b.create({type:m?"panel":"floatpanel",role:"application",classes:"tinymce tinymce-inline",layout:"flex",direction:"column",align:"stretch",autohide:!1,autofix:!0,fixed:!!m,border:1,items:[n.menubar===!1?null:{type:"menubar",border:"0 0 1 0",items:f.createMenuButtons(a)},e.createToolbars(a,n.toolbar_items_size)]}),a.fire("BeforeRenderUI"),l.renderTo(m||document.body).reflow(),h.addKeys(a,l),q(),g.addContextualToolbars(a),a.on("nodeChange",p),a.on("activate",q),a.on("deactivate",r),void a.nodeChanged())};return n.content_editable=!0,a.on("focus",function(){k.skinUiCss?o.styleSheetLoader.load(k.skinUiCss,s,s):s()}),a.on("blur hide",r),a.on("remove",function(){l&&(l.remove(),l=null)}),k.skinUiCss&&o.styleSheetLoader.load(k.skinUiCss,i.fireSkinLoaded(a)),{}};return{render:j}}),g("m",["a"],function(a){return a("tinymce.ui.Throbber")}),g("8",["m"],function(a){var b=function(b,c){var d;b.on("ProgressState",function(b){d=d||new a(c.panel.getEl("body")),b.state?d.show(b.time):d.hide()})};return{setup:b}}),g("0",["1","2","3","4","5","6","7","8","9"],function(a,b,c,d,e,f,g,h,i){var j=b.ThemeManager;e.appendTo(a.tinymce?a.tinymce:{});var k=function(a,b,d){var e=a.settings,i=e.skin!==!1&&(e.skin||"lightgray");if(i){var j=e.skin_url;j=j?a.documentBaseURI.toAbsolute(j):c.baseURL+"/skins/"+i,d.skinUiCss=j+"/skin.min.css",a.contentCSS.push(j+"/content"+(a.inline?".inline":"")+".min.css")}return h.setup(a,b),e.inline?g.render(a,b,d):f.render(a,b,d)};return j.add("modern",function(a){return{renderUI:function(b){return k(a,this,b)},resizeTo:function(b,c){return i.resizeTo(a,b,c)},resizeBy:function(b,c){return i.resizeBy(a,b,c)}}}),function(){}}),d("0")()}(); \ No newline at end of file diff --git a/packages/Webkul/Admin/publishable/assets/js/tinyMCE/tinymce.min.js b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/tinymce.min.js new file mode 100644 index 0000000..a5707d1 --- /dev/null +++ b/packages/Webkul/Admin/publishable/assets/js/tinyMCE/tinymce.min.js @@ -0,0 +1,16 @@ +// 4.6.1 (2017-05-10) +!function(){var a={},b=function(b){for(var c=a[b],e=c.deps,f=c.defn,g=e.length,h=new Array(g),i=0;i=d.x&&f.x+f.w<=d.w+d.x&&f.y>=d.y&&f.y+f.h<=d.h+d.y)return e[g];return null}function c(a,b,c){return f(a.x-b,a.y-c,a.w+2*b,a.h+2*c)}function d(a,b){var c,d,e,g;return c=i(a.x,b.x),d=i(a.y,b.y),e=h(a.x+a.w,b.x+b.w),g=h(a.y+a.h,b.y+b.h),e-c<0||g-d<0?null:f(c,d,e-c,g-d)}function e(a,b,c){var d,e,g,h,j,k,l,m,n,o;return j=a.x,k=a.y,l=a.x+a.w,m=a.y+a.h,n=b.x+b.w,o=b.y+b.h,d=i(0,b.x-j),e=i(0,b.y-k),g=i(0,l-n),h=i(0,m-o),j+=d,k+=e,c&&(l+=d,m+=e,j-=g,k-=h),l-=g,m-=h,f(j,k,l-j,m-k)}function f(a,b,c,d){return{x:a,y:b,w:c,h:d}}function g(a){return f(a.left,a.top,a.width,a.height)}var h=Math.min,i=Math.max,j=Math.round;return{inflate:c,relativePosition:a,findBestRelativePosition:b,intersect:d,clamp:e,create:f,fromClientRect:g}}),g("4",[],function(){function a(a,b){return function(){a.apply(b,arguments)}}function b(b){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");if("function"!=typeof b)throw new TypeError("not a function");this._state=null,this._value=null,this._deferreds=[],h(b,a(d,this),a(e,this))}function c(a){var b=this;return null===this._state?void this._deferreds.push(a):void i(function(){var c=b._state?a.onFulfilled:a.onRejected;if(null===c)return void(b._state?a.resolve:a.reject)(b._value);var d;try{d=c(b._value)}catch(b){return void a.reject(b)}a.resolve(d)})}function d(b){try{if(b===this)throw new TypeError("A promise cannot be resolved with itself.");if(b&&("object"==typeof b||"function"==typeof b)){var c=b.then;if("function"==typeof c)return void h(a(c,b),a(d,this),a(e,this))}this._state=!0,this._value=b,f.call(this)}catch(a){e.call(this,a)}}function e(a){this._state=!1,this._value=a,f.call(this)}function f(){for(var a=0,b=this._deferreds.length;a=534;return{opera:b,webkit:c,ie:d,gecko:g,mac:h,iOS:i,android:j,contentEditable:q,transparentSrc:"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7",caretAfter:8!=d,range:window.getSelection&&"Range"in window,documentMode:d&&!f?document.documentMode||7:10,fileApi:k,ceFalse:d===!1||d>8,canHaveCSP:d===!1||d>11,desktop:!l&&!m,windowsPhone:n}}),g("7",["5","6"],function(a,b){"use strict";function c(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)}function d(a,b,c,d){a.removeEventListener?a.removeEventListener(b,c,d||!1):a.detachEvent&&a.detachEvent("on"+b,c)}function e(a,b){var c,d=b;return c=a.path,c&&c.length>0&&(d=c[0]),a.deepPath&&(c=a.deepPath(),c&&c.length>0&&(d=c[0])),d}function f(a,c){var d,f,g=c||{};for(d in a)k[d]||(g[d]=a[d]);if(g.target||(g.target=g.srcElement||document),b.experimentalShadowDom&&(g.target=e(a,g.target)),a&&j.test(a.type)&&a.pageX===f&&a.clientX!==f){var h=g.target.ownerDocument||document,i=h.documentElement,o=h.body;g.pageX=a.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),g.pageY=a.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)}return g.preventDefault=function(){g.isDefaultPrevented=n,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},g.stopPropagation=function(){g.isPropagationStopped=n,a&&(a.stopPropagation?a.stopPropagation():a.cancelBubble=!0)},g.stopImmediatePropagation=function(){g.isImmediatePropagationStopped=n,g.stopPropagation()},l(g)===!1&&(g.isDefaultPrevented=m,g.isPropagationStopped=m,g.isImmediatePropagationStopped=m),"undefined"==typeof g.metaKey&&(g.metaKey=!1),g}function g(e,f,g){function h(){return"complete"===l.readyState||"interactive"===l.readyState&&l.body}function i(){g.domLoaded||(g.domLoaded=!0,f(m))}function j(){h()&&(d(l,"readystatechange",j),i())}function k(){try{l.documentElement.doScroll("left")}catch(b){return void a.setTimeout(k)}i()}var l=e.document,m={type:"ready"};return g.domLoaded?void f(m):(!l.addEventListener||b.ie&&b.ie<11?(c(l,"readystatechange",j),l.documentElement.doScroll&&e.self===e.top&&k()):h()?i():c(e,"DOMContentLoaded",i),void c(e,"load",i))}function h(){function a(a,b){var c,d,e,f,g=m[b];if(c=g&&g[a.type])for(d=0,e=c.length;dv.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function c(a){return a[M]=!0,a}function d(a){var b=F.createElement("div");try{return!!a(b)}catch(a){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function e(a,b){for(var c=a.split("|"),d=a.length;d--;)v.attrHandle[c[d]]=b}function f(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function g(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function h(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function i(a){return c(function(b){return b=+b,c(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function j(a){return a&&typeof a.getElementsByTagName!==U&&a}function k(){}function l(a){for(var b=0,c=a.length,d="";b1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function o(b,c,d){for(var e=0,f=c.length;e-1&&(c[j]=!(g[j]=l))}}else t=p(t===g?t.splice(q,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function r(a){for(var b,c,d,e=a.length,f=v.relative[a[0].type],g=f||v.relative[" "],h=f?1:0,i=m(function(a){return a===b},g,!0),j=m(function(a){return aa.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==B)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];h1&&n(k),h>1&&l(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ga,"$1"),c,h0,f=b.length>0,g=function(c,g,h,i,j){var k,l,m,n=0,o="0",q=c&&[],r=[],s=B,t=c||f&&v.find.TAG("*",j),u=O+=null==s?1:Math.random()||.1,w=t.length;for(j&&(B=g!==F&&g);o!==w&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=b[l++];)if(m(k,g,h)){i.push(k);break}j&&(O=u)}e&&((k=!m&&k)&&n--,c&&q.push(k))}if(n+=o,e&&o!==n){for(l=0;m=d[l++];)m(q,r,g,h);if(c){if(n>0)for(;o--;)q[o]||r[o]||(r[o]=Y.call(i));r=p(r)}$.apply(i,r),j&&!c&&r.length>0&&n+d.length>1&&a.uniqueSort(i)}return j&&(O=u,B=s),q};return e?c(g):g}var t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M="sizzle"+-new Date,N=window.document,O=0,P=0,Q=b(),R=b(),S=b(),T=function(a,b){return a===b&&(D=!0),0},U="undefined",V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=X.indexOf||function(a){for(var b=0,c=this.length;b+~]|"+ca+")"+ca+"*"),ja=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),ka=new RegExp(fa),la=new RegExp("^"+da+"$"),ma={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da+"|[*])"),ATTR:new RegExp("^"+ea),PSEUDO:new RegExp("^"+fa),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},na=/^(?:input|select|textarea|button)$/i,oa=/^h\d$/i,pa=/^[^{]+\{\s*\[native \w/,qa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ra=/[+~]/,sa=/'|\\/g,ta=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),ua=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{$.apply(X=_.call(N.childNodes),N.childNodes),X[N.childNodes.length].nodeType}catch(a){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}u=a.support={},x=a.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},E=a.setDocument=function(a){function b(a){try{return a.top}catch(a){}return null}var c,e=a?a.ownerDocument||a:N,g=e.defaultView;return e!==F&&9===e.nodeType&&e.documentElement?(F=e,G=e.documentElement,H=!x(e),g&&g!==b(g)&&(g.addEventListener?g.addEventListener("unload",function(){E()},!1):g.attachEvent&&g.attachEvent("onunload",function(){E()})),u.attributes=d(function(a){return a.className="i",!a.getAttribute("className")}),u.getElementsByTagName=d(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),u.getElementsByClassName=pa.test(e.getElementsByClassName),u.getById=d(function(a){return G.appendChild(a).id=M,!e.getElementsByName||!e.getElementsByName(M).length}),u.getById?(v.find.ID=function(a,b){if(typeof b.getElementById!==U&&H){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},v.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){return a.getAttribute("id")===b}}):(delete v.find.ID,v.filter.ID=function(a){var b=a.replace(ta,ua);return function(a){var c=typeof a.getAttributeNode!==U&&a.getAttributeNode("id");return c&&c.value===b}}),v.find.TAG=u.getElementsByTagName?function(a,b){if(typeof b.getElementsByTagName!==U)return b.getElementsByTagName(a)}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},v.find.CLASS=u.getElementsByClassName&&function(a,b){if(H)return b.getElementsByClassName(a)},J=[],I=[],(u.qsa=pa.test(e.querySelectorAll))&&(d(function(a){a.innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&I.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||I.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll(":checked").length||I.push(":checked")}),d(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&I.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||I.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),I.push(",.*:")})),(u.matchesSelector=pa.test(K=G.matches||G.webkitMatchesSelector||G.mozMatchesSelector||G.oMatchesSelector||G.msMatchesSelector))&&d(function(a){u.disconnectedMatch=K.call(a,"div"),K.call(a,"[s!='']:x"),J.push("!=",fa)}),I=I.length&&new RegExp(I.join("|")),J=J.length&&new RegExp(J.join("|")),c=pa.test(G.compareDocumentPosition),L=c||pa.test(G.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},T=c?function(a,b){if(a===b)return D=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!u.sortDetached&&b.compareDocumentPosition(a)===c?a===e||a.ownerDocument===N&&L(N,a)?-1:b===e||b.ownerDocument===N&&L(N,b)?1:C?aa.call(C,a)-aa.call(C,b):0:4&c?-1:1)}:function(a,b){if(a===b)return D=!0,0;var c,d=0,g=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!g||!h)return a===e?-1:b===e?1:g?-1:h?1:C?aa.call(C,a)-aa.call(C,b):0;if(g===h)return f(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[d]===j[d];)d++;return d?f(i[d],j[d]):i[d]===N?-1:j[d]===N?1:0},e):F},a.matches=function(b,c){return a(b,null,null,c)},a.matchesSelector=function(b,c){if((b.ownerDocument||b)!==F&&E(b),c=c.replace(ja,"='$1']"),u.matchesSelector&&H&&(!J||!J.test(c))&&(!I||!I.test(c)))try{var d=K.call(b,c);if(d||u.disconnectedMatch||b.document&&11!==b.document.nodeType)return d}catch(a){}return a(c,F,null,[b]).length>0},a.contains=function(a,b){return(a.ownerDocument||a)!==F&&E(a),L(a,b)},a.attr=function(a,b){(a.ownerDocument||a)!==F&&E(a);var c=v.attrHandle[b.toLowerCase()],d=c&&W.call(v.attrHandle,b.toLowerCase())?c(a,b,!H):void 0;return void 0!==d?d:u.attributes||!H?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},a.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},a.uniqueSort=function(a){var b,c=[],d=0,e=0;if(D=!u.detectDuplicates,C=!u.sortStable&&a.slice(0),a.sort(T),D){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return C=null,a},w=a.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=w(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=w(b);return c},v=a.selectors={cacheLength:50,createPseudo:c,match:ma,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ta,ua),a[3]=(a[3]||a[4]||a[5]||"").replace(ta,ua),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(b){return b[1]=b[1].toLowerCase(),"nth"===b[1].slice(0,3)?(b[3]||a.error(b[0]),b[4]=+(b[4]?b[5]+(b[6]||1):2*("even"===b[3]||"odd"===b[3])),b[5]=+(b[7]+b[8]||"odd"===b[3])):b[3]&&a.error(b[0]),b},PSEUDO:function(a){var b,c=!a[6]&&a[2];return ma.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ka.test(c)&&(b=y(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ta,ua).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=Q[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&Q(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==U&&a.getAttribute("class")||"")})},ATTR:function(b,c,d){return function(e){var f=a.attr(e,b);return null==f?"!="===c:!c||(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f+" ").indexOf(d)>-1:"|="===c&&(f===d||f.slice(0,d.length+1)===d+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[M]||(q[M]={}),j=k[a]||[],n=j[0]===O&&j[1],m=j[0]===O&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[O,n,m];break}}else if(s&&(j=(b[M]||(b[M]={}))[a])&&j[0]===O)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[M]||(l[M]={}))[a]=[O,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(b,d){var e,f=v.pseudos[b]||v.setFilters[b.toLowerCase()]||a.error("unsupported pseudo: "+b);return f[M]?f(d):f.length>1?(e=[b,b,"",d],v.setFilters.hasOwnProperty(b.toLowerCase())?c(function(a,b){for(var c,e=f(a,d),g=e.length;g--;)c=aa.call(a,e[g]),a[c]=!(b[c]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:c(function(a){var b=[],d=[],e=z(a.replace(ga,"$1"));return e[M]?c(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,c,f){return b[0]=a,e(b,null,f,d),!d.pop()}}),has:c(function(b){return function(c){return a(b,c).length>0}}),contains:c(function(a){return a=a.replace(ta,ua),function(b){return(b.textContent||b.innerText||w(b)).indexOf(a)>-1}}),lang:c(function(b){return la.test(b||"")||a.error("unsupported lang: "+b),b=b.replace(ta,ua).toLowerCase(),function(a){var c;do if(c=H?a.lang:a.getAttribute("xml:lang")||a.getAttribute("lang"))return c=c.toLowerCase(),c===b||0===c.indexOf(b+"-");while((a=a.parentNode)&&1===a.nodeType);return!1}}),target:function(a){var b=window.location&&window.location.hash;return b&&b.slice(1)===a.id},root:function(a){return a===G},focus:function(a){return a===F.activeElement&&(!F.hasFocus||F.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!v.pseudos.empty(a)},header:function(a){return oa.test(a.nodeName)},input:function(a){return na.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:i(function(){return[0]}),last:i(function(a,b){return[b-1]}),eq:i(function(a,b,c){return[c<0?c+b:c]}),even:i(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:i(function(a,b,c){for(var d=c<0?c+b:c;++d2&&"ID"===(g=f[0]).type&&u.getById&&9===b.nodeType&&H&&v.relative[f[1].type]){if(b=(v.find.ID(g.matches[0].replace(ta,ua),b)||[])[0],!b)return c;k&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=ma.needsContext.test(a)?0:f.length;e--&&(g=f[e],!v.relative[h=g.type]);)if((i=v.find[h])&&(d=i(g.matches[0].replace(ta,ua),ra.test(f[0].type)&&j(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&l(f),!a)return $.apply(c,d),c;break}}return(k||z(a,m))(d,b,!H,c,ra.test(a)&&j(b.parentNode)||b),c},u.sortStable=M.split("").sort(T).join("")===M,u.detectDuplicates=!!D,E(),u.sortDetached=d(function(a){return 1&a.compareDocumentPosition(F.createElement("div"))}),d(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||e("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),u.attributes&&d(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||e("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),d(function(a){return null==a.getAttribute("disabled")})||e(ba,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),a}),g("1g",[],function(){function a(a){var b,c,d=a;if(!j(a))for(d=[],b=0,c=a.length;b=0;e--)i(a,b[e],c,d);else for(e=0;e)[^>]*$|#([\w\-]*)$)/,A=a.Event,B=c.makeMap("children,contents,next,prev"),C=c.makeMap("fillOpacity fontWeight lineHeight opacity orphans widows zIndex zoom"," "),D=c.makeMap("checked compact declare defer disabled ismap multiple nohref noshade nowrap readonly selected"," "),E={"for":"htmlFor","class":"className",readonly:"readOnly"},F={"float":"cssFloat"},G={},H={},I=/^\s*|\s*$/g;return l.fn=l.prototype={constructor:l,selector:"",context:null,length:0,init:function(a,b){var c,d,e=this;if(!a)return e;if(a.nodeType)return e.context=e[0]=a,e.length=1,e;if(b&&b.nodeType)e.context=b;else{if(b)return l(a).attr(b);e.context=b=document}if(f(a)){if(e.selector=a,c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c)return l(b).find(a);if(c[1])for(d=h(a,q(b)).firstChild;d;)x.call(e,d),d=d.nextSibling;else{if(d=q(b).getElementById(c[2]),!d)return e;if(d.id!==c[2])return e.find(a);e.length=1,e[0]=d}}else this.add(a,!1);return e},toArray:function(){return c.toArray(this)},add:function(a,b){var c,d,e=this;if(f(a))return e.add(l(a));if(b!==!1)for(c=l.unique(e.toArray().concat(l.makeArray(a))),e.length=c.length,d=0;d1&&(B[a]||(e=l.unique(e)),0===a.indexOf("parents")&&(e=e.reverse())),e=l(e),c?e.filter(c):e}}),o({parentsUntil:function(a,b){return r(a,"parentNode",b)},nextUntil:function(a,b){return s(a,"nextSibling",1,b).slice(1)},prevUntil:function(a,b){return s(a,"previousSibling",1,b).slice(1)}},function(a,b){l.fn[a]=function(c,d){var e=this,f=[];return e.each(function(){var a=b.call(f,this,c,f);a&&(l.isArray(a)?f.push.apply(f,a):f.push(a))}),this.length>1&&(f=l.unique(f),0!==a.indexOf("parents")&&"prevUntil"!==a||(f=f.reverse())),f=l(f),d?f.filter(d):f}}),l.fn.is=function(a){return!!a&&this.filter(a).length>0},l.fn.init.prototype=l.fn,l.overrideDefaults=function(a){function b(d,e){return c=c||a(),0===arguments.length&&(d=c.element),e||(e=c.context),new b.fn.init(d,e)}var c;return l.extend(b,this),b},d.ie&&d.ie<8&&(u(G,"get",{maxlength:function(a){var b=a.maxLength;return 2147483647===b?v:b},size:function(a){var b=a.size;return 20===b?v:b},"class":function(a){return a.className},style:function(a){var b=a.style.cssText;return 0===b.length?v:b}}),u(G,"set",{"class":function(a,b){a.className=b},style:function(a,b){a.style.cssText=b}})),d.ie&&d.ie<9&&(F["float"]="styleFloat",u(H,"set",{opacity:function(a,b){var c=a.style;null===b||""===b?c.removeAttribute("filter"):(c.zoom=1,c.filter="alpha(opacity="+100*b+")")}})),l.attrHooks=G,l.cssHooks=H,l}),g("b",[],function(){return function(a,b){function c(a,b,c,d){function e(a){return a=parseInt(a,10).toString(16),a.length>1?a:"0"+a}return"#"+e(b)+e(c)+e(d)}var d,e,f,g,h=/rgb\s*\(\s*([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\s*\)/gi,i=/(?:url(?:(?:\(\s*\"([^\"]+)\"\s*\))|(?:\(\s*\'([^\']+)\'\s*\))|(?:\(\s*([^)\s]+)\s*\))))|(?:\'([^\']+)\')|(?:\"([^\"]+)\")/gi,j=/\s*([^:]+):\s*([^;]+);?/g,k=/\s+$/,l={},m="\ufeff";for(a=a||{},b&&(f=b.getValidStyles(),g=b.getInvalidStyles()),e=("\\\" \\' \\; \\: ; : "+m).split(" "),d=0;d-1&&c||(w[a+b]=d==-1?i[0]:i.join(" "),delete w[a+"-top"+b],delete w[a+"-right"+b],delete w[a+"-bottom"+b],delete w[a+"-left"+b])}}function f(a){var b,c=w[a];if(c){for(c=c.split(" "),b=c.length;b--;)if(c[b]!==c[0])return!1;return w[a]=c[0],!0}}function g(a,b,c,d){f(b)&&f(c)&&f(d)&&(w[a]=w[b]+" "+w[c]+" "+w[d],delete w[b],delete w[c],delete w[d])}function n(a){return v=!0,l[a]}function o(a,b){return v&&(a=a.replace(/\uFEFF[0-9]/g,function(a){return l[a]})),b||(a=a.replace(/\\([\'\";:])/g,"$1")),a}function p(a){return String.fromCharCode(parseInt(a.slice(1),16))}function q(a){return a.replace(/\\[0-9a-f]+/gi,p)}function r(b,c,d,e,f,g){if(f=f||g)return f=o(f),"'"+f.replace(/\'/g,"\\'")+"'";if(c=o(c||d||e),!a.allow_script_urls){var h=c.replace(/[\s\r\n]+/g,"");if(/(java|vb)script:/i.test(h))return"";if(!a.allow_svg_data_urls&&/^data:image\/svg/i.test(h))return""}return x&&(c=x.call(y,c,"style")),"url('"+c.replace(/\'/g,"\\'")+"')"}var s,t,u,v,w={},x=a.url_converter,y=a.url_converter_scope||this;if(b){for(b=b.replace(/[\u0000-\u001F]/g,""),b=b.replace(/\\[\"\';:\uFEFF]/g,n).replace(/\"[^\"]+\"|\'[^\']+\'/g,function(a){return a.replace(/[;:]/g,n)});s=j.exec(b);)if(j.lastIndex=s.index+s[0].length,t=s[1].replace(k,"").toLowerCase(),u=s[2].replace(k,""),t&&u){if(t=q(t),u=q(u),t.indexOf(m)!==-1||t.indexOf('"')!==-1)continue;if(!a.allow_script_urls&&("behavior"==t||/expression\s*\(|\/\*|\*\//.test(u)))continue;"font-weight"===t&&"700"===u?u="bold":"color"!==t&&"background-color"!==t||(u=u.toLowerCase()),u=u.replace(h,c),u=u.replace(i,r),w[t]=v?o(u,!0):u}e("border","",!0),e("border","-width"),e("border","-color"),e("border","-style"),e("padding",""),e("margin",""),g("border","border-width","border-style","border-color"),"medium none"===w.border&&delete w.border,"none"===w["border-image"]&&delete w["border-image"]}return w},serialize:function(a,b){function c(b){var c,d,e,g;if(c=f[b])for(d=0,e=c.length;d0?" ":"")+b+": "+g+";")}function d(a,b){var c;return c=g["*"],(!c||!c[a])&&(c=g[b],!c||!c[a])}var e,h,i="";if(b&&f)c("*"),c(b);else for(e in a)h=a[e],!h||g&&!d(e,b)||(i+=(i.length>0?" ":"")+e+": "+h+";");return i}}}}),g("c",[],function(){return function(a,b){function c(a,c,d,e){var f,g;if(a){if(!e&&a[c])return a[c];if(a!=b){if(f=a[d])return f;for(g=a.parentNode;g&&g!=b;g=g.parentNode)if(f=g[d])return f}}}function d(a,c,d,e){var f,g,h;if(a){if(f=a[d],b&&f===b)return;if(f){if(!e)for(h=f[c];h;h=h[c])if(!h[c])return h;return f}if(g=a.parentNode,g&&g!==b)return g}}var e=a;this.current=function(){return e},this.next=function(a){return e=c(e,"firstChild","nextSibling",a)},this.prev=function(a){return e=c(e,"lastChild","previousSibling",a)},this.prev2=function(a){return e=d(e,"lastChild","previousSibling",a)}}}),g("d",["9"],function(a){function b(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.textContent||b.innerText||a}function c(a,b){var c,d,f,g={};if(a){for(a=a.split(","),b=b||10,c=0;c\"\u0060\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,i=/[<>&\u007E-\uD7FF\uE000-\uFFEF]|[\uD800-\uDBFF][\uDC00-\uDFFF]/g,j=/[<>&\"\']/g,k=/&#([a-z0-9]+);?|&([a-z0-9]+);/gi,l={128:"\u20ac",130:"\u201a",131:"\u0192",132:"\u201e",133:"\u2026",134:"\u2020",135:"\u2021",136:"\u02c6",137:"\u2030",138:"\u0160",139:"\u2039",140:"\u0152",142:"\u017d",145:"\u2018",146:"\u2019",147:"\u201c",148:"\u201d",149:"\u2022",150:"\u2013",151:"\u2014",152:"\u02dc",153:"\u2122",154:"\u0161",155:"\u203a",156:"\u0153",158:"\u017e",159:"\u0178"};e={'"':""","'":"'","<":"<",">":">","&":"&","`":"`"},f={"<":"<",">":">","&":"&",""":'"',"'":"'"},d=c("50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro",32);var m={encodeRaw:function(a,b){return a.replace(b?h:i,function(a){return e[a]||a})},encodeAllRaw:function(a){return(""+a).replace(j,function(a){return e[a]||a})},encodeNumeric:function(a,b){return a.replace(b?h:i,function(a){return a.length>1?"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";":e[a]||"&#"+a.charCodeAt(0)+";"})},encodeNamed:function(a,b,c){return c=c||d,a.replace(b?h:i,function(a){return e[a]||c[a]||a})},getEncodeFunc:function(a,b){function f(a,c){return a.replace(c?h:i,function(a){return void 0!==e[a]?e[a]:void 0!==b[a]?b[a]:a.length>1?"&#"+(1024*(a.charCodeAt(0)-55296)+(a.charCodeAt(1)-56320)+65536)+";":"&#"+a.charCodeAt(0)+";"})}function j(a,c){return m.encodeNamed(a,c,b)}return b=c(b)||d,a=g(a.replace(/\+/g,",")),a.named&&a.numeric?f:a.named?b?j:m.encodeNamed:a.numeric?m.encodeNumeric:m.encodeRaw},decode:function(a){return a.replace(k,function(a,c){return c?(c="x"===c.charAt(0).toLowerCase()?parseInt(c.substr(1),16):parseInt(c,10),c>65535?(c-=65536,String.fromCharCode(55296+(c>>10),56320+(1023&c))):l[c]||String.fromCharCode(c)):f[a]||d[a]||b(a)})}};return m}),g("1h",["9"],function(a){function b(c){function d(){return J.createDocumentFragment()}function e(a,b){x(N,a,b)}function f(a,b){x(O,a,b)}function g(a){e(a.parentNode,U(a))}function h(a){e(a.parentNode,U(a)+1)}function i(a){f(a.parentNode,U(a))}function j(a){f(a.parentNode,U(a)+1)}function k(a){a?(I[R]=I[Q],I[S]=I[P]):(I[Q]=I[R],I[P]=I[S]),I.collapsed=N}function l(a){g(a),j(a)}function m(a){e(a,0),f(a,1===a.nodeType?a.childNodes.length:a.nodeValue.length)}function n(a,b){var c=I[Q],d=I[P],e=I[R],f=I[S],g=b.startContainer,h=b.startOffset,i=b.endContainer,j=b.endOffset;return 0===a?w(c,d,g,h):1===a?w(e,f,g,h):2===a?w(e,f,i,j):3===a?w(c,d,i,j):void 0}function o(){y(M)}function p(){return y(K)}function q(){return y(L)}function r(a){var b,d,e=this[Q],f=this[P];3!==e.nodeType&&4!==e.nodeType||!e.nodeValue?(e.childNodes.length>0&&(d=e.childNodes[f]),d?e.insertBefore(a,d):3==e.nodeType?c.insertAfter(a,e):e.appendChild(a)):f?f>=e.nodeValue.length?c.insertAfter(a,e):(b=e.splitText(f),e.parentNode.insertBefore(a,b)):e.parentNode.insertBefore(a,e)}function s(a){var b=I.extractContents();I.insertNode(a),a.appendChild(b),I.selectNode(a)}function t(){return T(new b(c),{startContainer:I[Q],startOffset:I[P],endContainer:I[R],endOffset:I[S],collapsed:I.collapsed,commonAncestorContainer:I.commonAncestorContainer})}function u(a,b){var c;if(3==a.nodeType)return a;if(b<0)return a;for(c=a.firstChild;c&&b>0;)--b,c=c.nextSibling;return c?c:a}function v(){return I[Q]==I[R]&&I[P]==I[S]}function w(a,b,d,e){var f,g,h,i,j,k;if(a==d)return b==e?0:b0&&I.collapse(a):I.collapse(a),I.collapsed=v(),I.commonAncestorContainer=c.findCommonAncestor(I[Q],I[R])}function y(a){var b,c,d,e,f,g,h,i=0,j=0;if(I[Q]==I[R])return z(a);for(b=I[R],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[Q])return A(b,a);++i}for(b=I[Q],c=b.parentNode;c;b=c,c=c.parentNode){if(c==I[R])return B(b,a);++j}for(d=j-i,e=I[Q];d>0;)e=e.parentNode,d--;for(f=I[R];d<0;)f=f.parentNode,d++;for(g=e.parentNode,h=f.parentNode;g!=h;g=g.parentNode,h=h.parentNode)e=g,f=h;return C(e,f,a)}function z(a){var b,c,e,f,g,h,i,j,k;if(a!=M&&(b=d()),I[P]==I[S])return b;if(3==I[Q].nodeType){if(c=I[Q].nodeValue,e=c.substring(I[P],I[S]),a!=L&&(f=I[Q],j=I[P],k=I[S]-I[P],0===j&&k>=f.nodeValue.length-1?f.parentNode.removeChild(f):f.deleteData(j,k),I.collapse(N)),a==M)return;return e.length>0&&b.appendChild(J.createTextNode(e)),b}for(f=u(I[Q],I[P]),g=I[S]-I[P];f&&g>0;)h=f.nextSibling,i=G(f,a),b&&b.appendChild(i),--g,f=h;return a!=L&&I.collapse(N),b}function A(a,b){var c,e,f,g,h,i;if(b!=M&&(c=d()),e=D(a,b),c&&c.appendChild(e),f=U(a),g=f-I[P],g<=0)return b!=L&&(I.setEndBefore(a),I.collapse(O)),c;for(e=a.previousSibling;g>0;)h=e.previousSibling,i=G(e,b),c&&c.insertBefore(i,c.firstChild),--g,e=h;return b!=L&&(I.setEndBefore(a),I.collapse(O)),c}function B(a,b){var c,e,f,g,h,i;for(b!=M&&(c=d()),f=E(a,b),c&&c.appendChild(f),e=U(a),++e,g=I[S]-e,f=a.nextSibling;f&&g>0;)h=f.nextSibling,i=G(f,b),c&&c.appendChild(i),--g,f=h;return b!=L&&(I.setStartAfter(a),I.collapse(N)),c}function C(a,b,c){var e,f,g,h,i,j,k;for(c!=M&&(f=d()),e=E(a,c),f&&f.appendChild(e),g=U(a),h=U(b),++g,i=h-g,j=a.nextSibling;i>0;)k=j.nextSibling,e=G(j,c),f&&f.appendChild(e),j=k,--i;return e=D(b,c),f&&f.appendChild(e),c!=L&&(I.setStartAfter(a),I.collapse(N)),f}function D(a,b){var c,d,e,f,g,h=u(I[R],I[S]-1),i=h!=I[R];if(h==a)return F(h,i,O,b);for(c=h.parentNode,d=F(c,O,O,b);c;){for(;h;)e=h.previousSibling,f=F(h,i,O,b),b!=M&&d.insertBefore(f,d.firstChild),i=N,h=e;if(c==a)return d;h=c.previousSibling,c=c.parentNode,g=F(c,O,O,b),b!=M&&g.appendChild(d),d=g}}function E(a,b){var c,d,e,f,g,h=u(I[Q],I[P]),i=h!=I[Q];if(h==a)return F(h,i,N,b);for(c=h.parentNode,d=F(c,O,N,b);c;){for(;h;)e=h.nextSibling,f=F(h,i,N,b),b!=M&&d.appendChild(f),i=N,h=e;if(c==a)return d;h=c.nextSibling,c=c.parentNode,g=F(c,O,N,b),b!=M&&g.appendChild(d),d=g}}function F(a,b,d,e){var f,g,h,i,j;if(b)return G(a,e);if(3==a.nodeType){if(f=a.nodeValue,d?(i=I[P],g=f.substring(i),h=f.substring(0,i)):(i=I[S],g=f.substring(0,i),h=f.substring(i)),e!=L&&(a.nodeValue=h),e==M)return;return j=c.clone(a,O),j.nodeValue=g,j}if(e!=M)return c.clone(a,O)}function G(a,b){return b!=M?b==L?c.clone(a,N):a:void a.parentNode.removeChild(a)}function H(){return c.create("body",null,q()).outerText}var I=this,J=c.doc,K=0,L=1,M=2,N=!0,O=!1,P="startOffset",Q="startContainer",R="endContainer",S="endOffset",T=a.extend,U=c.nodeIndex;return T(I,{startContainer:J,startOffset:0,endContainer:J,endOffset:0,collapsed:N,commonAncestorContainer:J,START_TO_START:0,START_TO_END:1,END_TO_END:2,END_TO_START:3,setStart:e,setEnd:f,setStartBefore:g,setStartAfter:h,setEndBefore:i,setEndAfter:j,collapse:k,selectNode:l,selectNodeContents:m,compareBoundaryPoints:n,deleteContents:o,extractContents:p,cloneContents:q,insertNode:r,surroundContents:s,cloneRange:t,toStringIE:H}),I}return b.prototype.toString=function(){return this.toStringIE()},b}),h("4i",Array),h("4j",Error),g("3s",["4i","4j"],function(a,b){var c=function(){},d=function(a,b){return function(){return a(b.apply(null,arguments))}},e=function(a){return function(){return a}},f=function(a){return a},g=function(a,b){return a===b},h=function(b){for(var c=new a(arguments.length-1),d=1;d-1},h=function(a,b){return t(a,b).isSome()},i=function(a,b){for(var c=[],d=0;d=0;c--){var d=a[c];b(d,c,a)}},n=function(a,b){for(var c=[],d=[],e=0,f=a.length;e=b.length&&c(d)}};0===b.length?c([]):a.each(b,function(a,b){a.get(f(b))})})};return{par:b}}),g("3u",["3r","3t","4n"],function(a,b,c){var d=function(a){return c.par(a,b.nu)},e=function(b,c){var e=a.map(b,c);return d(e)},f=function(a,b){return function(c){return b(c).bind(a)}};return{par:d,mapM:e,compose:f}}),g("3v",["3s","4h"],function(a,b){var c=function(d){var e=function(a){return d===a},f=function(a){return c(d)},g=function(a){return c(d)},h=function(a){return c(a(d))},i=function(a){a(d)},j=function(a){return a(d)},k=function(a,b){return b(d)},l=function(a){return a(d)},m=function(a){return a(d)},n=function(){return b.some(d)};return{is:e,isValue:a.constant(!0),isError:a.constant(!1),getOr:a.constant(d),getOrThunk:a.constant(d),getOrDie:a.constant(d),or:f,orThunk:g,fold:k,map:h,each:i,bind:j,exists:l,forall:m,toOption:n}},d=function(c){var e=function(a){return a()},f=function(){return a.die(c)()},g=function(a){return a},h=function(a){return a()},i=function(a){return d(c)},j=function(a){return d(c)},k=function(a,b){return a(c)};return{is:a.constant(!1),isValue:a.constant(!1),isError:a.constant(!0),getOr:a.identity,getOrThunk:e,getOrDie:f,or:g,orThunk:h,fold:k,map:i,each:a.noop,bind:j,exists:a.constant(!1),forall:a.constant(!0),toOption:b.none}};return{value:c,error:d}}),g("1i",["3r","3s","3t","3u","3v","5","9"],function(a,b,c,d,e,f,g){"use strict";return function(h,i){function j(a){h.getElementsByTagName("head")[0].appendChild(a)}function k(a,b,c){function d(){for(var a=t.passed,b=a.length;b--;)a[b]();t.status=2,t.passed=[],t.failed=[]}function e(){for(var a=t.failed,b=a.length;b--;)a[b]();t.status=3,t.passed=[],t.failed=[]}function i(){var a=navigator.userAgent.match(/WebKit\/(\d*)/);return!!(a&&a[1]<536)}function k(a,b){a()||((new Date).getTime()-s0)return r=h.createElement("style"), +r.textContent='@import "'+a+'"',p(),void j(r);o()}j(q),q.href=a}}var l,m=0,n={};i=i||{},l=i.maxLoadTime||5e3;var o=function(a){return c.nu(function(c){k(a,b.compose(c,b.constant(e.value(a))),b.compose(c,b.constant(e.error(a))))})},p=function(a){return a.fold(b.identity,b.identity)},q=function(b,c,e){d.par(a.map(b,o)).get(function(b){var d=a.partition(b,function(a){return a.isValue()});d.fail.length>0?e(d.fail.map(p)):c(d.pass.map(p))})};return{load:k,loadAll:q}}}),g("j",["9"],function(a){function b(b,c){return b=a.trim(b),b?b.split(c||" "):[]}function c(a){function c(a,c,d){function e(a,b){var c,d,e={};for(c=0,d=a.length;c")}var f=this,g=f._id,h=f.settings,i=f.classPrefix,j=f.state.get("text"),k=f.settings.icon,l="",m=h.shortcut,n=f.encode(h.url),o="";return k&&f.parent().classes.add("menu-has-icons"),h.image&&(l=" style=\"background-image: url('"+h.image+"')\""),m&&(m=a(m)),k=i+"ico "+i+"i-"+(f.settings.icon||"none"),o="-"!==j?'\xa0":"",j=e(f.encode(d(j))),n=e(f.encode(d(n))),'
    '+o+("-"!==j?''+j+"":"")+(m?'
    '+m+"
    ":"")+(h.menu?'
    ':"")+(n?'":"")+"
    "},postRender:function(){var a=this,b=a.settings,c=b.textStyle;if("function"==typeof c&&(c=c.call(this)),c){var e=a.getEl("text");e&&e.setAttribute("style",c)}return a.on("mouseenter click",function(c){c.control===a&&(b.menu||"click"!==c.type?(a.showMenu(),c.aria&&a.menu.focus(!0)):(a.fire("select"),d.requestAnimationFrame(function(){a.parent().hideAll()})))}),a._super(),a},hover:function(){var a=this;return a.parent().items().each(function(a){a.classes.remove("selected")}),a.classes.toggle("selected",!0),a},active:function(a){return"undefined"!=typeof a&&this.aria("checked",a),this._super(a)},remove:function(){this._super(),this.menu&&this.menu.remove()}})}),g("3f",["a","2a","5"],function(a,b,c){"use strict";return function(d,e){var f,g,h=this,i=b.classPrefix;h.show=function(b,j){function k(){f&&(a(d).append('
    '),j&&j())}return h.hide(),f=!0,b?g=c.setTimeout(k,b):k(),h},h.hide=function(){var a=d.lastChild;return c.clearTimeout(g),a&&a.className.indexOf("throbber")!=-1&&a.parentNode.removeChild(a),f=!1,h}}}),g("3g",["2j","3e","3f","9"],function(a,b,c,d){"use strict";return a.extend({Defaults:{defaultType:"menuitem",border:1,layout:"stack",role:"application",bodyRole:"menu",ariaRoot:!0},init:function(a){var b=this;if(a.autohide=!0,a.constrainToViewport=!0,"function"==typeof a.items&&(a.itemsFactory=a.items,a.items=[]),a.itemDefaults)for(var c=a.items,e=c.length;e--;)c[e]=d.extend({},a.itemDefaults,c[e]);b._super(a),b.classes.add("menu")},repaint:function(){return this.classes.toggle("menu-align",!0),this._super(),this.getEl().style.height="",this.getEl("body").style.height="",this},cancel:function(){var a=this;a.hideAll(),a.fire("select")},load:function(){function a(){e.throbber&&(e.throbber.hide(),e.throbber=null)}var b,d,e=this;d=e.settings.itemsFactory,d&&(e.throbber||(e.throbber=new c(e.getEl("body"),!0),0===e.items().length?(e.throbber.show(),e.fire("loading")):e.throbber.show(100,function(){e.items().remove(),e.fire("loading")}),e.on("hide close",a)),e.requestTime=b=(new Date).getTime(),e.settings.itemsFactory(function(c){return 0===c.length?void e.hide():void(e.requestTime===b&&(e.getEl().style.width="",e.getEl("body").style.width="",a(),e.items().remove(),e.getEl("body").innerHTML="",e.add(c),e.renderNew(),e.fire("loaded")))}))},hideAll:function(){var a=this;return this.find("menuitem").exec("hideMenu"),a._super()},preRender:function(){var a=this;return a.items().each(function(b){var c=b.settings;if(c.icon||c.image||c.selectable)return a._hasIcons=!0,!1}),a.settings.itemsFactory&&a.on("postrender",function(){a.settings.itemsFactory&&a.load()}),a._super()}})}),g("3h",["3d","3g"],function(a,b){"use strict";return a.extend({init:function(a){function b(c){for(var f=0;f0&&(e=c[0].text,g.state.set("value",c[0].value)),g.state.set("menu",c)),g.state.set("text",a.text||e),g.classes.add("listbox"),g.on("select",function(b){var c=b.control;f&&(b.lastControl=f),a.multiple?c.active(!c.active()):g.value(b.control.value()),f=c})},bindStates:function(){function a(a,c){a instanceof b&&a.items().each(function(a){a.hasMenus()||a.active(a.value()===c)})}function c(a,b){var d;if(a)for(var e=0;e'},postRender:function(){var a=this;a._super(),a.resizeDragHelper=new b(this._id,{start:function(){a.fire("ResizeStart")},drag:function(b){"both"!=a.settings.direction&&(b.deltaX=0),a.fire("Resize",b)},stop:function(){a.fire("ResizeEnd")}})},remove:function(){return this.resizeDragHelper&&this.resizeDragHelper.destroy(),this._super()}})}),g("3k",["2l"],function(a){"use strict";function b(a){var b="";if(a)for(var c=0;c'+a[c]+"";return b}return a.extend({Defaults:{classes:"selectbox",role:"selectbox",options:[]},init:function(a){var b=this;b._super(a),b.settings.size&&(b.size=b.settings.size),b.settings.options&&(b._options=b.settings.options),b.on("keydown",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))})},options:function(a){return arguments.length?(this.state.set("options",a),this):this.state.get("options")},renderHtml:function(){var a,c=this,d="";return a=b(c._options),c.size&&(d=' size = "'+c.size+'"'),'"},bindStates:function(){var a=this;return a.state.on("change:options",function(c){a.getEl().innerHTML=b(c.value)}),a._super()}})}),g("3l",["2l","2e","48"],function(a,b,c){"use strict";function d(a,b,c){return ac&&(a=c),a}function e(a,b,c){a.setAttribute("aria-"+b,c)}function f(a,b){var d,f,g,h,i,j;"v"==a.settings.orientation?(h="top",g="height",f="h"):(h="left",g="width",f="w"),j=a.getEl("handle"),d=(a.layoutRect()[f]||100)-c.getSize(j)[g],i=d*((b-a._minValue)/(a._maxValue-a._minValue))+"px",j.style[h]=i,j.style.height=a.layoutRect().h+"px",e(j,"valuenow",b),e(j,"valuetext",""+a.settings.previewFilter(b)),e(j,"valuemin",a._minValue),e(j,"valuemax",a._maxValue)}return a.extend({init:function(a){var b=this;a.previewFilter||(a.previewFilter=function(a){return Math.round(100*a)/100}),b._super(a),b.classes.add("slider"),"v"==a.orientation&&b.classes.add("vertical"),b._minValue=a.minValue||0,b._maxValue=a.maxValue||100,b._initValue=b.state.get("value")},renderHtml:function(){var a=this,b=a._id,c=a.classPrefix;return'
    '},reset:function(){this.value(this._initValue).repaint()},postRender:function(){function a(a,b,c){return(c+a)/(b-a)}function e(a,b,c){return c*(b-a)-a}function f(b,c){function f(f){var g;g=n.value(),g=e(b,c,a(b,c,g)+.05*f),g=d(g,b,c),n.value(g),n.fire("dragstart",{value:g}),n.fire("drag",{value:g}),n.fire("dragend",{value:g})}n.on("keydown",function(a){switch(a.keyCode){case 37:case 38:f(-1);break;case 39:case 40:f(1)}})}function g(a,e,f){var g,h,i,o,p;n._dragHelper=new b(n._id,{handle:n._id+"-handle",start:function(a){g=a[j],h=parseInt(n.getEl("handle").style[k],10),i=(n.layoutRect()[m]||100)-c.getSize(f)[l],n.fire("dragstart",{value:p})},drag:function(b){var c=b[j]-g;o=d(h+c,0,i),f.style[k]=o+"px",p=a+o/i*(e-a),n.value(p),n.tooltip().text(""+n.settings.previewFilter(p)).show().moveRel(f,"bc tc"),n.fire("drag",{value:p})},stop:function(){n.tooltip().hide(),n.fire("dragend",{value:p})}})}var h,i,j,k,l,m,n=this;h=n._minValue,i=n._maxValue,"v"==n.settings.orientation?(j="screenY",k="top",l="height",m="h"):(j="screenX",k="left",l="width",m="w"),n._super(),f(h,i,n.getEl("handle")),g(h,i,n.getEl("handle"))},repaint:function(){this._super(),f(this,this.value())},bindStates:function(){var a=this;return a.state.on("change:value",function(b){f(a,b.value)}),a._super()}})}),g("3m",["2l"],function(a){"use strict";return a.extend({renderHtml:function(){var a=this;return a.classes.add("spacer"),a.canFocus=!1,'
    '}})}),g("3n",["3d","48","a"],function(a,b,c){return a.extend({Defaults:{classes:"widget btn splitbtn",role:"button"},repaint:function(){var a,d,e=this,f=e.getEl(),g=e.layoutRect();return e._super(),a=f.firstChild,d=f.lastChild,c(a).css({width:g.w-b.getSize(d).width,height:g.h-2}),c(d).css({height:g.h-2}),e},activeMenu:function(a){var b=this;c(b.getEl().lastChild).toggleClass(b.classPrefix+"active",a)},renderHtml:function(){var a,b=this,c=b._id,d=b.classPrefix,e=b.state.get("icon"),f=b.state.get("text"),g="";return a=b.settings.image,a?(e="none","string"!=typeof a&&(a=window.getSelection?a[0]:a[1]),a=" style=\"background-image: url('"+a+"')\""):a="",e=b.settings.icon?d+"ico "+d+"i-"+e:"",f&&(b.classes.add("btn-has-text"),g=''+b.encode(f)+""),'
    '},postRender:function(){var a=this,b=a.settings.onclick;return a.on("click",function(a){var c=a.target;if(a.control==this)for(;c;){if(a.aria&&"down"!=a.aria.key||"BUTTON"==c.nodeName&&c.className.indexOf("open")==-1)return a.stopImmediatePropagation(),void(b&&b.call(this,a));c=c.parentNode}}),delete a.settings.onclick,a._super()}})}),g("3o",["35"],function(a){"use strict";return a.extend({Defaults:{containerClass:"stack-layout",controlClass:"stack-layout-item",endClass:"break"},isNative:function(){return!0}})}),g("3p",["2g","a","48"],function(a,b,c){"use strict";return a.extend({Defaults:{layout:"absolute",defaults:{type:"panel"}},activateTab:function(a){var c;this.activeTabId&&(c=this.getEl(this.activeTabId),b(c).removeClass(this.classPrefix+"active"),c.setAttribute("aria-selected","false")),this.activeTabId="t"+a,c=this.getEl("t"+a),c.setAttribute("aria-selected","true"),b(c).addClass(this.classPrefix+"active"),this.items()[a].show().fire("showtab"),this.reflow(),this.items().each(function(b,c){a!=c&&b.hide()})},renderHtml:function(){var a=this,b=a._layout,c="",d=a.classPrefix;return a.preRender(),b.preRender(a),a.items().each(function(b,e){var f=a._id+"-t"+e;b.aria("role","tabpanel"),b.aria("labelledby",f),c+='"}),'
    '+c+'
    '+b.renderHtml(a)+"
    "},postRender:function(){var a=this;a._super(),a.settings.activeTab=a.settings.activeTab||0,a.activateTab(a.settings.activeTab),this.on("click",function(b){var c=b.target.parentNode;if(c&&c.id==a._id+"-head")for(var d=c.childNodes.length;d--;)c.childNodes[d]==b.target&&a.activateTab(d)})},initLayoutRect:function(){var a,b,d,e=this;b=c.getSize(e.getEl("head")).width,b=b<0?0:b,d=0,e.items().each(function(a){b=Math.max(b,a.layoutRect().minW),d=Math.max(d,a.layoutRect().minH)}),e.items().each(function(a){a.settings.x=0,a.settings.y=0,a.settings.w=b,a.settings.h=d,a.layoutRect({x:0,y:0,w:b,h:d})});var f=c.getSize(e.getEl("head")).height;return e.settings.minWidth=b,e.settings.minHeight=d+f,a=e._super(),a.deltaH+=f,a.innerH=a.h-a.deltaH,a}})}),g("3q",["2l","9","48"],function(a,b,c){return a.extend({init:function(a){var b=this;b._super(a),b.classes.add("textbox"),a.multiline?b.classes.add("multiline"):(b.on("keydown",function(a){var c;13==a.keyCode&&(a.preventDefault(),b.parents().reverse().each(function(a){if(a.toJSON)return c=a,!1}),b.fire("submit",{data:c.toJSON()}))}),b.on("keyup",function(a){b.state.set("value",a.target.value)}))},repaint:function(){var a,b,c,d,e,f=this,g=0;a=f.getEl().style,b=f._layoutRect,e=f._lastRepaintRect||{};var h=document;return!f.settings.multiline&&h.all&&(!h.documentMode||h.documentMode<=8)&&(a.lineHeight=b.h-g+"px"),c=f.borderBox,d=c.left+c.right+8,g=c.top+c.bottom+(f.settings.multiline?8:0),b.x!==e.x&&(a.left=b.x+"px",e.x=b.x),b.y!==e.y&&(a.top=b.y+"px",e.y=b.y),b.w!==e.w&&(a.width=b.w-d+"px",e.w=b.w),b.h!==e.h&&(a.height=b.h-g+"px",e.h=b.h),f._lastRepaintRect=e,f.fire("repaint",{},!1),f},renderHtml:function(){var a,d,e=this,f=e.settings;return a={id:e._id,hidefocus:"1"},b.each(["rows","spellcheck","maxLength","size","readonly","min","max","step","list","pattern","placeholder","required","multiple"],function(b){a[b]=f[b]}),e.disabled()&&(a.disabled="disabled"),f.subtype&&(a.type=f.subtype),d=c.create(f.multiline?"textarea":"input",a),d.value=e.state.get("value"),d.className=e.classes,d.outerHTML},value:function(a){return arguments.length?(this.state.set("value",a),this):(this.state.get("rendered")&&this.state.set("value",this.getEl().value),this.state.get("value"))},postRender:function(){var a=this;a.getEl().value=a.state.get("value"),a._super(),a.$el.on("change",function(b){a.state.set("value",b.target.value),a.fire("change",b)})},bindStates:function(){var a=this;return a.state.on("change:value",function(b){a.getEl().value!=b.value&&(a.getEl().value=b.value)}),a.state.on("change:disabled",function(b){a.getEl().disabled=b.value}),a._super()},remove:function(){this.$el.off(),this._super(); +}})}),g("1f",["27","28","29","2a","2b","2c","2d","2e","2f","2g","2h","2i","2j","1y","1z","2k","2l","2m","20","2n","2o","2p","2q","2r","2s","2t","2u","2v","2w","2x","2y","2z","30","31","32","33","34","35","36","37","38","39","3a","3b","3c","3d","3e","3f","3g","3h","3i","3j","3k","3l","3m","3n","3o","3p","3q"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z,$,_,aa,ba,ca,da,ea){"use strict";var fa=function(a,b){e.add(a.split(".").pop(),b)},ga=function(a,b,c){var d,e;for(e=b.split(/[.\/]/),d=0;dguard('user')->check() && auth()->guard('user')->user()->role->permission_type == 'all') { + return true; + } else { + if (!auth()->guard('user')->check() || !auth()->guard('user')->user()->hasPermission($permission)) { + return false; + } + } + + return true; + } + + /** + * Checks if user allowed or not for certain action + * + * @param string $permission + * @return void + */ + public static function allow($permission) + { + if (!auth()->guard('user')->check() || !auth()->guard('user')->user()->hasPermission($permission)) { + abort(401, 'This action is unauthorized'); + } + } +} diff --git a/packages/Webkul/Admin/src/Config/acl.php b/packages/Webkul/Admin/src/Config/acl.php new file mode 100644 index 0000000..e9c1e47 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/acl.php @@ -0,0 +1,430 @@ + 'dashboard', + 'name' => 'admin::app.layouts.dashboard', + 'route' => 'admin.dashboard.index', + 'sort' => 1, + ], [ + 'key' => 'leads', + 'name' => 'admin::app.acl.leads', + 'route' => 'admin.leads.index', + 'sort' => 2, + ], [ + 'key' => 'leads.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.leads.create', 'admin.leads.store'], + 'sort' => 1, + ], [ + 'key' => 'leads.view', + 'name' => 'admin::app.acl.view', + 'route' => 'admin.leads.view', + 'sort' => 2, + ], [ + 'key' => 'leads.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.leads.edit', 'admin.leads.update', 'admin.leads.mass_update'], + 'sort' => 3, + ], [ + 'key' => 'leads.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.leads.delete', 'admin.leads.mass_delete'], + 'sort' => 4, + ], [ + 'key' => 'quotes', + 'name' => 'admin::app.acl.quotes', + 'route' => 'admin.quotes.index', + 'sort' => 3, + ], [ + 'key' => 'quotes.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.quotes.create', 'admin.quotes.store'], + 'sort' => 1, + ], [ + 'key' => 'quotes.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.quotes.edit', 'admin.quotes.update'], + 'sort' => 2, + ], [ + 'key' => 'quotes.print', + 'name' => 'admin::app.acl.print', + 'route' => 'admin.quotes.print', + 'sort' => 3, + ], [ + 'key' => 'quotes.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.quotes.delete', 'admin.quotes.mass_delete'], + 'sort' => 4, + ], [ + 'key' => 'mail', + 'name' => 'admin::app.acl.mail', + 'route' => 'admin.mail.index', + 'sort' => 4, + ], [ + 'key' => 'mail.inbox', + 'name' => 'admin::app.acl.inbox', + 'route' => 'admin.mail.index', + 'sort' => 1, + ], [ + 'key' => 'mail.draft', + 'name' => 'admin::app.acl.draft', + 'route' => 'admin.mail.index', + 'sort' => 2, + ], [ + 'key' => 'mail.outbox', + 'name' => 'admin::app.acl.outbox', + 'route' => 'admin.mail.index', + 'sort' => 3, + ], [ + 'key' => 'mail.sent', + 'name' => 'admin::app.acl.sent', + 'route' => 'admin.mail.index', + 'sort' => 4, + ], [ + 'key' => 'mail.trash', + 'name' => 'admin::app.acl.trash', + 'route' => 'admin.mail.index', + 'sort' => 5, + ], [ + 'key' => 'mail.compose', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.mail.index', 'admin.mail.store'], + 'sort' => 6, + ], [ + 'key' => 'mail.view', + 'name' => 'admin::app.acl.view', + 'route' => 'admin.mail.view', + 'sort' => 7, + ], [ + 'key' => 'mail.edit', + 'name' => 'admin::app.acl.edit', + 'route' => 'admin.mail.update', + 'sort' => 8, + ], [ + 'key' => 'mail.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.mail.delete', 'admin.mail.mass_delete'], + 'sort' => 9, + ], [ + 'key' => 'activities', + 'name' => 'admin::app.acl.activities', + 'route' => 'admin.activities.index', + 'sort' => 5, + ], [ + 'key' => 'activities.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.activities.create', 'admin.activities.store'], + 'sort' => 1, + ], [ + 'key' => 'activities.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.activities.edit', 'admin.activities.update', 'admin.activities.mass_update'], + 'sort' => 2, + ], [ + 'key' => 'activities.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.activities.delete', 'admin.activities.mass_delete'], + 'sort' => 3, + ], [ + 'key' => 'contacts', + 'name' => 'admin::app.acl.contacts', + 'route' => 'admin.contacts.users.index', + 'sort' => 6, + ], [ + 'key' => 'contacts.persons', + 'name' => 'admin::app.acl.persons', + 'route' => 'admin.contacts.persons.index', + 'sort' => 1, + ], [ + 'key' => 'contacts.persons.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.contacts.persons.create', 'admin.contacts.persons.store'], + 'sort' => 2, + ], [ + 'key' => 'contacts.persons.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.contacts.persons.edit', 'admin.contacts.persons.update'], + 'sort' => 3, + ], [ + 'key' => 'contacts.persons.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.contacts.persons.delete', 'admin.contacts.persons.mass_delete'], + 'sort' => 4, + ], [ + 'key' => 'contacts.persons.export', + 'name' => 'admin::app.acl.export', + 'route' => 'ui.datagrid.export', + 'sort' => 4, + ], [ + 'key' => 'contacts.organizations', + 'name' => 'admin::app.acl.organizations', + 'route' => 'admin.contacts.organizations.index', + 'sort' => 2, + ], [ + 'key' => 'contacts.organizations.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.contacts.organizations.create', 'admin.contacts.organizations.store'], + 'sort' => 1, + ], [ + 'key' => 'contacts.organizations.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.contacts.organizations.edit', 'admin.contacts.organizations.update'], + 'sort' => 2, + ], [ + 'key' => 'contacts.organizations.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.contacts.organizations.delete', 'admin.contacts.organizations.mass_delete'], + 'sort' => 3, + ], [ + 'key' => 'products', + 'name' => 'admin::app.acl.products', + 'route' => 'admin.products.index', + 'sort' => 7, + ], [ + 'key' => 'products.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.products.create', 'admin.products.store'], + 'sort' => 1, + ], [ + 'key' => 'products.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.products.edit', 'admin.products.update'], + 'sort' => 2, + ], [ + 'key' => 'products.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.products.delete', 'admin.products.mass_delete'], + 'sort' => 3, + ], [ + 'key' => 'settings', + 'name' => 'admin::app.acl.settings', + 'route' => 'admin.settings.index', + 'sort' => 8, + ], [ + 'key' => 'settings.user', + 'name' => 'admin::app.acl.user', + 'route' => ['admin.settings.groups.index', 'admin.settings.roles.index', 'admin.settings.users.index'], + 'sort' => 1, + ], [ + 'key' => 'settings.user.groups', + 'name' => 'admin::app.acl.groups', + 'route' => 'admin.settings.groups.index', + 'sort' => 1, + ], [ + 'key' => 'settings.user.groups.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.groups.create', 'admin.settings.groups.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.user.groups.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.groups.edit', 'admin.settings.groups.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.user.groups.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.groups.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.user.roles', + 'name' => 'admin::app.acl.roles', + 'route' => 'admin.settings.roles.index', + 'sort' => 2, + ], [ + 'key' => 'settings.user.roles.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.roles.create', 'admin.settings.roles.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.user.roles.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.roles.edit', 'admin.settings.roles.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.user.roles.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.roles.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.user.users', + 'name' => 'admin::app.acl.users', + 'route' => 'admin.settings.users.index', + 'sort' => 3, + ], [ + 'key' => 'settings.user.users.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.users.create', 'admin.settings.users.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.user.users.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.users.edit', 'admin.settings.users.update', 'admin.settings.users.mass_update'], + 'sort' => 2, + ], [ + 'key' => 'settings.user.users.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.settings.users.delete', 'admin.settings.users.mass_delete'], + 'sort' => 3, + ], [ + 'key' => 'settings.lead', + 'name' => 'admin::app.acl.lead', + 'route' => ['admin.settings.pipelines.index', 'admin.settings.sources.index', 'admin.settings.types.index'], + 'sort' => 2, + ], [ + 'key' => 'settings.lead.pipelines', + 'name' => 'admin::app.acl.pipelines', + 'route' => 'admin.settings.pipelines.index', + 'sort' => 1, + ], [ + 'key' => 'settings.lead.pipelines.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.pipelines.create', 'admin.settings.pipelines.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.lead.pipelines.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.pipelines.edit', 'admin.settings.pipelines.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.lead.pipelines.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.pipelines.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.lead.sources', + 'name' => 'admin::app.acl.sources', + 'route' => 'admin.settings.sources.index', + 'sort' => 2, + ], [ + 'key' => 'settings.lead.sources.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.sources.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.lead.sources.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.sources.edit', 'admin.settings.sources.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.lead.sources.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.sources.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.lead.types', + 'name' => 'admin::app.acl.types', + 'route' => 'admin.settings.types.index', + 'sort' => 3, + ], [ + 'key' => 'settings.lead.types.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.types.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.lead.types.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.types.edit', 'admin.settings.types.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.lead.types.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.types.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.automation', + 'name' => 'admin::app.acl.automation', + 'route' => ['admin.settings.attributes.index', 'admin.settings.email_templates.index', 'admin.settings.workflows.index'], + 'sort' => 3, + ], [ + 'key' => 'settings.automation.attributes', + 'name' => 'admin::app.acl.attributes', + 'route' => 'admin.settings.attributes.index', + 'sort' => 1, + ], [ + 'key' => 'settings.automation.attributes.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.attributes.create', 'admin.settings.attributes.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.automation.attributes.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.attributes.edit', 'admin.settings.attributes.update', 'admin.settings.attributes.mass_update'], + 'sort' => 2, + ], [ + 'key' => 'settings.automation.attributes.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.attributes.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.automation.email_templates', + 'name' => 'admin::app.acl.email-templates', + 'route' => 'admin.settings.email_templates.index', + 'sort' => 7, + ], [ + 'key' => 'settings.automation.email_templates.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.email_templates.create', 'admin.settings.email_templates.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.automation.email_templates.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.email_templates.edit', 'admin.settings.email_templates.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.automation.email_templates.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.email_templates.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.automation.workflows', + 'name' => 'admin::app.acl.workflows', + 'route' => 'admin.settings.workflows.index', + 'sort' => 2, + ], [ + 'key' => 'settings.automation.workflows.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.workflows.create', 'admin.settings.workflows.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.automation.workflows.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.workflows.edit', 'admin.settings.workflows.update'], + 'sort' => 2, + ], [ + 'key' => 'settings.automation.workflows.delete', + 'name' => 'admin::app.acl.delete', + 'route' => 'admin.settings.workflows.delete', + 'sort' => 3, + ], [ + 'key' => 'settings.other_settings', + 'name' => 'admin::app.acl.other-settings', + 'route' => 'admin.settings.tags.index', + 'sort' => 4, + ], [ + 'key' => 'settings.other_settings.tags', + 'name' => 'admin::app.acl.tags', + 'route' => 'admin.settings.tags.index', + 'sort' => 1, + ], [ + 'key' => 'settings.other_settings.tags.create', + 'name' => 'admin::app.acl.create', + 'route' => ['admin.settings.tags.create', 'admin.settings.tags.store', 'admin.leads.tags.store'], + 'sort' => 1, + ], [ + 'key' => 'settings.other_settings.tags.edit', + 'name' => 'admin::app.acl.edit', + 'route' => ['admin.settings.tags.edit', 'admin.settings.tags.update'], + 'sort' => 1, + ], [ + 'key' => 'settings.other_settings.tags.delete', + 'name' => 'admin::app.acl.delete', + 'route' => ['admin.settings.tags.delete', 'admin.settings.tags.mass_delete', 'admin.leads.tags.delete'], + 'sort' => 2, + ], [ + 'key' => 'configuration', + 'name' => 'admin::app.acl.configuration', + 'route' => 'admin.configuration.index', + 'sort' => 9, + ] +]; diff --git a/packages/Webkul/Admin/src/Config/attribute_entity_types.php b/packages/Webkul/Admin/src/Config/attribute_entity_types.php new file mode 100644 index 0000000..cff7a72 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/attribute_entity_types.php @@ -0,0 +1,28 @@ + [ + 'name' => 'Lead', + 'repository' => 'Webkul\Lead\Repositories\LeadRepository', + ], + + 'persons' => [ + 'name' => 'Person', + 'repository' => 'Webkul\Contact\Repositories\PersonRepository', + ], + + 'organizations' => [ + 'name' => 'Organization', + 'repository' => 'Webkul\Contact\Repositories\OrganizationRepository', + ], + + 'products' => [ + 'name' => 'Product', + 'repository' => 'Webkul\Product\Repositories\ProductRepository', + ], + + 'quotes' => [ + 'name' => 'Quote', + 'repository' => 'Webkul\Quote\Repositories\QuoteRepository', + ], +]; diff --git a/packages/Webkul/Admin/src/Config/attribute_lookups.php b/packages/Webkul/Admin/src/Config/attribute_lookups.php new file mode 100644 index 0000000..7b5d547 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/attribute_lookups.php @@ -0,0 +1,44 @@ + [ + 'name' => 'Leads', + 'repository' => 'Webkul\Lead\Repositories\LeadRepository', + 'label_column' => 'title', + ], + + 'lead_sources' => [ + 'name' => 'Lead Sources', + 'repository' => 'Webkul\Lead\Repositories\SourceRepository', + ], + + 'lead_types' => [ + 'name' => 'Lead Types', + 'repository' => 'Webkul\Lead\Repositories\TypeRepository', + ], + + 'lead_pipelines' => [ + 'name' => 'Lead Pipelines', + 'repository' => 'Webkul\Lead\Repositories\PipelineRepository', + ], + + 'lead_pipeline_stages' => [ + 'name' => 'Lead Pipeline Stages', + 'repository' => 'Webkul\Lead\Repositories\StageRepository', + ], + + 'users' => [ + 'name' => 'Sales Owners', + 'repository' => 'Webkul\User\Repositories\UserRepository', + ], + + 'organizations' => [ + 'name' => 'Organizations', + 'repository' => 'Webkul\Contact\Repositories\OrganizationRepository', + ], + + 'persons' => [ + 'name' => 'Persons', + 'repository' => 'Webkul\Contact\Repositories\PersonRepository', + ] +]; diff --git a/packages/Webkul/Admin/src/Config/core_config.php b/packages/Webkul/Admin/src/Config/core_config.php new file mode 100644 index 0000000..5b67987 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/core_config.php @@ -0,0 +1,21 @@ + 'general', + 'name' => 'admin::app.configuration.general', + 'sort' => 1, + ], [ + 'key' => 'general.locale_settings', + 'name' => 'admin::app.configuration.locale-settings', + 'sort' => 1, + 'fields' => [ + [ + 'name' => 'locale', + 'title' => 'admin::app.configuration.locale', + 'type' => 'select', + 'data_source' => 'Webkul\Core\Core@locales' + ], + ], + ], +]; diff --git a/packages/Webkul/Admin/src/Config/dashboard_cards.php b/packages/Webkul/Admin/src/Config/dashboard_cards.php new file mode 100644 index 0000000..c170308 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/dashboard_cards.php @@ -0,0 +1,90 @@ + true, + "card_id" => "leads", + "sort" => 1, + "card_type" => "bar_chart", + // "view_url" => "admin.leads.index", + "label" => 'admin::app.dashboard.leads_over_time', + // "class_name" => "Webkul\Admin\Helpers\DashboardHelper", + // "method_name" => "getLeads", + ], [ + "selected" => true, + "card_id" => "leads_started", + "sort" => 2, + "card_type" => "line_chart", + "label" => 'admin::app.dashboard.leads_started', + ], [ + "selected" => true, + "card_id" => "activities", + "sort" => 4, + "card_type" => "activities", + "data_class" => "display-grid", + "view_url" => "admin.activities.index", + "label" => 'admin::app.dashboard.activities', + ], [ + "selected" => true, + "card_id" => "top_leads", + "sort" => 3, + "card_type" => "top_card", + "data_class" => "display-grid", + "label" => 'admin::app.dashboard.top_leads', + ], [ + "selected" => true, + "card_id" => "pipelines", + "sort" => 5, + "card_type" => "pipelines_bar", + "data_class" => "display-grid", + "label" => 'admin::app.dashboard.pipelines', + ], [ + "selected" => true, + "card_id" => "emails", + "sort" => 6, + "card_type" => "column-grid-2", + "data_class" => "column-grid-2", + "view_url" => "admin.mail.index", + "url_params" => "inbox", + "label" => 'admin::app.dashboard.emails', + ], [ + "selected" => true, + "card_id" => "customers", + "sort" => 7, + "card_type" => "line_chart", + "view_url" => "admin.contacts.persons.index", + "label" => 'admin::app.dashboard.customers', + ], [ + "selected" => true, + "card_id" => "top_customers", + "sort" => 8, + "card_type" => "column-grid-2", + "data_class" => "column-grid-2", + "label" => 'admin::app.dashboard.top_customers', + ], [ + "selected" => true, + "card_id" => "products", + "sort" => 9, + "card_type" => "line_chart", + "view_url" => "admin.products.index", + "label" => 'admin::app.dashboard.products', + ], [ + "selected" => true, + "card_id" => "top_products", + "sort" => 10, + "card_type" => "column-grid-2", + "data_class" => "column-grid-2", + "label" => 'admin::app.dashboard.top_products', + ], [ + "sort" => 10, + "selected" => true, + "card_id" => "quotes", + "card_type" => "line_chart", + "label" => 'admin::app.dashboard.quotes', + ], [ + "sort" => 11, + "card_type" => "custom_card", + "card_border" => "dashed", + "selected" => false, + ] +]; diff --git a/packages/Webkul/Admin/src/Config/menu.php b/packages/Webkul/Admin/src/Config/menu.php new file mode 100644 index 0000000..92d9042 --- /dev/null +++ b/packages/Webkul/Admin/src/Config/menu.php @@ -0,0 +1,209 @@ + 'dashboard', + 'name' => 'admin::app.layouts.dashboard', + 'route' => 'admin.dashboard.index', + 'sort' => 1, + 'icon-class' => 'dashboard-icon', + ], [ + 'key' => 'leads', + 'name' => 'admin::app.layouts.leads', + 'route' => 'admin.leads.index', + 'sort' => 2, + 'icon-class' => 'leads-icon', + ], [ + 'key' => 'quotes', + 'name' => 'admin::app.layouts.quotes', + 'route' => 'admin.quotes.index', + 'sort' => 3, + 'icon-class' => 'quotes-icon', + ], [ + 'key' => 'mail', + 'name' => 'admin::app.layouts.mail.title', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'inbox'], + 'sort' => 4, + 'icon-class' => 'emails-icon', + ], [ + 'key' => 'mail.compose', + 'name' => 'admin::app.layouts.mail.compose', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'compose'], + 'sort' => 1, + ], [ + 'key' => 'mail.inbox', + 'name' => 'admin::app.layouts.mail.inbox', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'inbox'], + 'sort' => 2, + ], [ + 'key' => 'mail.draft', + 'name' => 'admin::app.layouts.mail.draft', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'draft'], + 'sort' => 3, + ], [ + 'key' => 'mail.outbox', + 'name' => 'admin::app.layouts.mail.outbox', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'outbox'], + 'sort' => 4, + ], [ + 'key' => 'mail.sent', + 'name' => 'admin::app.layouts.mail.sent', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'sent'], + 'sort' => 4, + ], [ + 'key' => 'mail.trash', + 'name' => 'admin::app.layouts.mail.trash', + 'route' => 'admin.mail.index', + 'params' => ['route' => 'trash'], + 'sort' => 5, + ] + // , [ + // 'key' => 'mail.setting', + // 'name' => 'admin::app.layouts.mail.setting', + // 'route' => 'admin.mail.index', + // 'params' => ['route' => 'setting'], + // 'sort' => 5, + // ] + , [ + 'key' => 'activities', + 'name' => 'admin::app.layouts.activities', + 'route' => 'admin.activities.index', + 'sort' => 5, + 'icon-class' => 'activities-icon', + ], [ + 'key' => 'contacts', + 'name' => 'admin::app.layouts.contacts', + 'route' => 'admin.contacts.persons.index', + 'sort' => 6, + 'icon-class' => 'phone-icon', + ], [ + 'key' => 'contacts.persons', + 'name' => 'admin::app.layouts.persons', + 'route' => 'admin.contacts.persons.index', + 'sort' => 1, + ], [ + 'key' => 'contacts.organizations', + 'name' => 'admin::app.layouts.organizations', + 'route' => 'admin.contacts.organizations.index', + 'sort' => 2, + ], [ + 'key' => 'products', + 'name' => 'admin::app.layouts.products', + 'route' => 'admin.products.index', + 'sort' => 7, + 'icon-class' => 'products-icon', + ], [ + 'key' => 'settings', + 'name' => 'admin::app.layouts.settings', + 'route' => 'admin.settings.index', + 'sort' => 8, + 'icon-class' => 'settings-icon', + ], [ + 'key' => 'settings.user', + 'name' => 'admin::app.layouts.user', + 'route' => 'admin.settings.groups.index', + 'info' => 'admin::app.layouts.user-info', + 'sort' => 1, + ], [ + 'key' => 'settings.user.groups', + 'name' => 'admin::app.layouts.groups', + 'info' => 'admin::app.layouts.groups-info', + 'route' => 'admin.settings.groups.index', + 'sort' => 1, + 'icon-class' => 'group-icon', + ], [ + 'key' => 'settings.user.roles', + 'name' => 'admin::app.layouts.roles', + 'info' => 'admin::app.layouts.roles-info', + 'route' => 'admin.settings.roles.index', + 'sort' => 2, + 'icon-class' => 'role-icon', + ], [ + 'key' => 'settings.user.users', + 'name' => 'admin::app.layouts.users', + 'info' => 'admin::app.layouts.users-info', + 'route' => 'admin.settings.users.index', + 'sort' => 3, + 'icon-class' => 'user-icon', + ], [ + 'key' => 'settings.lead', + 'name' => 'admin::app.layouts.lead', + 'info' => 'admin::app.layouts.lead-info', + 'route' => 'admin.settings.pipelines.index', + 'sort' => 2, + ], [ + 'key' => 'settings.lead.pipelines', + 'name' => 'admin::app.layouts.pipelines', + 'info' => 'admin::app.layouts.pipelines-info', + 'route' => 'admin.settings.pipelines.index', + 'sort' => 1, + 'icon-class' => 'pipeline-icon', + ], [ + 'key' => 'settings.lead.sources', + 'name' => 'admin::app.layouts.sources', + 'info' => 'admin::app.layouts.sources-info', + 'route' => 'admin.settings.sources.index', + 'sort' => 2, + 'icon-class' => 'source-icon', + ], [ + 'key' => 'settings.lead.types', + 'name' => 'admin::app.layouts.types', + 'info' => 'admin::app.layouts.types-info', + 'route' => 'admin.settings.types.index', + 'sort' => 3, + 'icon-class' => 'type-icon', + ], [ + 'key' => 'settings.automation', + 'name' => 'admin::app.layouts.automation', + 'info' => 'admin::app.layouts.automation-info', + 'route' => 'admin.settings.attributes.index', + 'sort' => 3, + ], [ + 'key' => 'settings.automation.attributes', + 'name' => 'admin::app.layouts.attributes', + 'info' => 'admin::app.layouts.attributes-info', + 'route' => 'admin.settings.attributes.index', + 'sort' => 1, + 'icon-class' => 'attribute-icon', + ], [ + 'key' => 'settings.automation.email_templates', + 'name' => 'admin::app.layouts.email-templates', + 'info' => 'admin::app.layouts.email-templates-info', + 'route' => 'admin.settings.email_templates.index', + 'sort' => 2, + 'icon-class' => 'email-template-icon', + ], [ + 'key' => 'settings.automation.workflows', + 'name' => 'admin::app.layouts.workflows', + 'info' => 'admin::app.layouts.workflows-info', + 'route' => 'admin.settings.workflows.index', + 'sort' => 3, + 'icon-class' => 'workflow-icon', + ], [ + 'key' => 'settings.other_settings', + 'name' => 'admin::app.layouts.other-settings', + 'info' => 'admin::app.layouts.other-settings-info', + 'route' => 'admin.settings.tags.index', + 'sort' => 4, + 'icon-class' => 'settings-icon', + ], [ + 'key' => 'settings.other_settings.tags', + 'name' => 'admin::app.layouts.tags', + 'info' => 'admin::app.layouts.tags-info', + 'route' => 'admin.settings.tags.index', + 'sort' => 1, + 'icon-class' => 'tag-icon', + ], [ + 'key' => 'configuration', + 'name' => 'admin::app.layouts.configuration', + 'route' => 'admin.configuration.index', + 'sort' => 9, + 'icon-class' => 'tools-icon', + ] +]; diff --git a/packages/Webkul/Admin/src/DataGrids/Activity/ActivityDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Activity/ActivityDataGrid.php new file mode 100644 index 0000000..4c26ab8 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Activity/ActivityDataGrid.php @@ -0,0 +1,309 @@ +userRepository = $userRepository; + + parent::__construct(); + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('activities') + ->distinct() + ->select( + 'activities.*', + 'leads.id as lead_id', + 'leads.title as lead_title', + 'leads.lead_pipeline_id', + 'users.id as created_by_id', + 'users.name as created_by', + ) + ->leftJoin('activity_participants', 'activities.id', '=', 'activity_participants.activity_id') + ->leftJoin('lead_activities', 'activities.id', '=', 'lead_activities.activity_id') + ->leftJoin('leads', 'lead_activities.lead_id', '=', 'leads.id') + ->leftJoin('users', 'activities.user_id', '=', 'users.id') + ->whereIn('type', ['call', 'meeting', 'lunch']); + + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $queryBuilder->where(function ($query) use ($currentUser) { + $userIds = $this->userRepository->getCurrentUserGroupsUserIds(); + + $query->whereIn('activities.user_id', $userIds) + ->orWhereIn('activity_participants.user_id', $userIds); + + return $query; + }); + } else { + $queryBuilder->where(function ($query) use ($currentUser) { + $query->where('activities.user_id', $currentUser->id) + ->orWhere('activity_participants.user_id', $currentUser->id); + + return $query; + }); + } + } + + $this->addFilter('id', 'activities.id'); + $this->addFilter('title', 'activities.title'); + $this->addFilter('schedule_from', 'activities.schedule_from'); + $this->addFilter('created_by', 'users.name'); + $this->addFilter('created_by_id', 'activities.user_id'); + $this->addFilter('created_at', 'activities.created_at'); + $this->addFilter('lead_title', 'leads.title'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'is_done', + 'label' => trans('admin::app.datagrid.is_done'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getBooleanDropdownOptions('yes_no'), + 'searchable' => false, + 'closure' => function ($row) { + return view('admin::activities.datagrid.is-done', compact('row'))->render(); + }, + ]); + + $this->addColumn([ + 'index' => 'title', + 'label' => trans('admin::app.datagrid.title'), + 'type' => 'string', + ]); + + $this->addColumn([ + 'index' => 'created_by_id', + 'label' => trans('admin::app.datagrid.created_by'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getUserDropdownOptions(), + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + $route = urldecode(route('admin.settings.users.index', ['id[eq]' => $row->created_by_id])); + + return "" . $row->created_by . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'comment', + 'label' => trans('admin::app.datagrid.comment'), + 'type' => 'string', + 'closure' => function ($row) { + return $row->comment; + }, + ]); + + $this->addColumn([ + 'index' => 'lead_title', + 'label' => trans('admin::app.datagrid.lead'), + 'type' => 'string', + 'searchable' => false, + 'closure' => function ($row) { + $route = urldecode(route('admin.leads.index', ['pipeline_id' => $row->lead_pipeline_id, 'view_type' => 'table', 'id[eq]' => $row->lead_id])); + + return "" . $row->lead_title . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'type', + 'label' => trans('admin::app.datagrid.type'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getActivityTypeDropdownOptions(), + 'searchable' => false, + 'filterable' => false, + 'closure' => function ($row) { + return trans('admin::app.activities.' . $row->type); + }, + ]); + + $this->addColumn([ + 'index' => 'schedule_from', + 'label' => trans('admin::app.datagrid.schedule_from'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->schedule_from); + }, + ]); + + $this->addColumn([ + 'index' => 'schedule_to', + 'label' => trans('admin::app.datagrid.schedule_to'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->schedule_to); + }, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare tab filters. + * + * @return array + */ + public function prepareTabFilters() + { + $this->addTabFilter([ + 'key' => 'type', + 'type' => 'pill', + 'condition' => 'eq', + 'values' => [ + [ + 'name' => 'admin::app.leads.all', + 'isActive' => true, + 'key' => 'all', + ], [ + 'name' => 'admin::app.leads.call', + 'isActive' => false, + 'key' => 'call', + ], [ + 'name' => 'admin::app.leads.meeting', + 'isActive' => false, + 'key' => 'meeting', + ], [ + 'name' => 'admin::app.leads.lunch', + 'isActive' => false, + 'key' => 'lunch', + ] + ] + ]); + + $this->addTabFilter([ + 'key' => 'scheduled', + 'type' => 'group', + 'condition' => 'eq', + 'values' => [ + [ + 'name' => 'admin::app.datagrid.filters.yesterday', + 'isActive' => false, + 'key' => 'yesterday', + ], [ + 'name' => 'admin::app.datagrid.filters.today', + 'isActive' => false, + 'key' => 'today', + ], [ + 'name' => 'admin::app.datagrid.filters.tomorrow', + 'isActive' => false, + 'key' => 'tomorrow', + ], [ + 'name' => 'admin::app.datagrid.filters.this-week', + 'isActive' => false, + 'key' => 'this_week', + ], [ + 'name' => 'admin::app.datagrid.filters.this-month', + 'isActive' => false, + 'key' => 'this_month', + ], [ + 'name' => 'admin::app.datagrid.filters.custom', + 'isActive' => false, + 'key' => 'custom', + ] + ] + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.activities.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.activities.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete'), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'update', + 'label' => trans('ui::app.datagrid.is-done'), + 'action' => route('admin.activities.mass_update'), + 'method' => 'PUT', + 'options' => [ + trans('admin::app.datagrid.yes') => 1, + trans('admin::app.datagrid.no') => 0, + ], + ]); + + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.activities.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php new file mode 100644 index 0000000..f814dc0 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Contact/OrganizationDataGrid.php @@ -0,0 +1,135 @@ +personRepository = $personRepository; + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('organizations') + ->addSelect( + 'organizations.id', + 'organizations.name', + 'organizations.address', + 'organizations.created_at' + ); + + $this->addFilter('id', 'organizations.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'persons_count', + 'label' => trans('admin::app.datagrid.persons_count'), + 'type' => 'string', + 'searchable' => false, + 'sortable' => false, + 'filterable' => false, + 'closure' => function ($row) { + $personsCount = $this->personRepository->findWhere(['organization_id' => $row->id])->count(); + + $route = urldecode(route('admin.contacts.persons.index', ['organization[in]' => $row->id])); + + return "" . $personsCount . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.contacts.organizations.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.contacts.organizations.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'user']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.contacts.organizations.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Contact/PersonDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Contact/PersonDataGrid.php new file mode 100644 index 0000000..8f50531 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Contact/PersonDataGrid.php @@ -0,0 +1,155 @@ +export = bouncer()->hasPermission('contacts.persons.export') ? true : false; + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('persons') + ->addSelect( + 'persons.id', + 'persons.name as person_name', + 'persons.emails', + 'persons.contact_numbers', + 'organizations.name as organization', + 'organizations.id as organization_id' + ) + ->leftJoin('organizations', 'persons.organization_id', '=', 'organizations.id'); + + $this->addFilter('id', 'persons.id'); + $this->addFilter('person_name', 'persons.name'); + $this->addFilter('organization', 'organizations.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'person_name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'emails', + 'label' => trans('admin::app.datagrid.emails'), + 'type' => 'string', + 'sortable' => false, + 'closure' => function ($row) { + $emails = json_decode($row->emails, true); + + if ($emails) { + return collect($emails)->pluck('value')->join(', '); + } + }, + ]); + + $this->addColumn([ + 'index' => 'contact_numbers', + 'label' => trans('admin::app.datagrid.contact_numbers'), + 'type' => 'string', + 'sortable' => false, + 'closure' => function ($row) { + $contactNumbers = json_decode($row->contact_numbers, true); + + if ($contactNumbers) { + return collect($contactNumbers)->pluck('value')->join(', '); + } + }, + ]); + + $this->addColumn([ + 'index' => 'organization', + 'label' => trans('admin::app.datagrid.organization_name'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getOrganizationDropdownOptions(), + 'sortable' => false, + 'closure' => function ($row) { + return "organization_id) . "' target='_blank'>" . $row->organization . ""; + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.contacts.persons.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.contacts.persons.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => trans('admin::app.contacts.persons.person')]), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.contacts.persons.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Lead/LeadDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Lead/LeadDataGrid.php new file mode 100644 index 0000000..f9406ca --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Lead/LeadDataGrid.php @@ -0,0 +1,372 @@ +pipelineRepository = $pipelineRepository; + + if (request('pipeline_id')) { + $this->pipeline = $this->pipelineRepository->find(request('pipeline_id')); + } else { + $this->pipeline = $this->pipelineRepository->getDefaultPipeline(); + } + + $this->stageRepository = $stageRepository; + + $this->userRepository = $userRepository; + + parent::__construct(); + + $this->export = bouncer()->hasPermission('leads.persons.export') ? true : false; + } + + /** + * Place your datagrid extra settings here. + * + * @return void + */ + public function init() + { + $this->setRowProperties([ + 'backgroundColor' => '#ffd0d6', + 'condition' => function ($row) { + if (in_array($row->stage_code, ['won', 'lost']) || !$row->rotten_lead) { + return false; + } + + return true; + } + ]); + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('leads') + ->addSelect( + 'leads.id', + 'leads.title', + 'leads.status', + 'leads.lead_value', + 'leads.expected_close_date', + 'lead_sources.name as lead_source_name', + 'leads.created_at', + 'lead_pipeline_stages.name as stage', + 'lead_tags.tag_id as tag_id', + 'users.id as user_id', + 'users.name as sales_person', + 'persons.id as person_id', + 'persons.name as person_name', + 'tags.name as tag_name', + 'lead_pipelines.rotten_days as pipeline_rotten_days', + 'lead_pipeline_stages.code as stage_code', + DB::raw('CASE WHEN DATEDIFF(NOW(),' . DB::getTablePrefix() . 'leads.created_at) >=' . DB::getTablePrefix() . 'lead_pipelines.rotten_days THEN 1 ELSE 0 END as rotten_lead'), + ) + ->leftJoin('users', 'leads.user_id', '=', 'users.id') + ->leftJoin('persons', 'leads.person_id', '=', 'persons.id') + ->leftJoin('lead_types', 'leads.lead_type_id', '=', 'lead_types.id') + ->leftJoin('lead_pipeline_stages', 'leads.lead_pipeline_stage_id', '=', 'lead_pipeline_stages.id') + ->leftJoin('lead_sources', 'leads.lead_source_id', '=', 'lead_sources.id') + ->leftJoin('lead_pipelines', 'leads.lead_pipeline_id', '=', 'lead_pipelines.id') + ->leftJoin('lead_tags', 'leads.id', '=', 'lead_tags.lead_id') + ->leftJoin('tags', 'tags.id', '=', 'lead_tags.tag_id') + ->groupBy('leads.id') + ->where('leads.lead_pipeline_id', $this->pipeline->id); + + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $queryBuilder->whereIn('leads.user_id', $this->userRepository->getCurrentUserGroupsUserIds()); + } else { + $queryBuilder->where('leads.user_id', $currentUser->id); + } + } + + if (!is_null(request()->input('rotten_lead.in'))) { + $queryBuilder->havingRaw(DB::getTablePrefix() . 'rotten_lead = ' . request()->input('rotten_lead.in')); + } + + $this->addFilter('id', 'leads.id'); + $this->addFilter('user', 'leads.user_id'); + $this->addFilter('sales_person', 'leads.user_id'); + $this->addFilter('lead_source_name', 'lead_sources.id'); + $this->addFilter('person_name', 'persons.name'); + $this->addFilter('type', 'lead_pipeline_stages.code'); + $this->addFilter('stage', 'lead_pipeline_stages.name'); + $this->addFilter('tag_name', 'tags.name'); + $this->addFilter('expected_close_date', 'leads.expected_close_date'); + $this->addFilter('created_at', 'leads.created_at'); + $this->addFilter('rotten_lead', DB::raw('DATEDIFF(NOW(), ' . DB::getTablePrefix() . 'leads.created_at) >= ' . DB::getTablePrefix() . 'lead_pipelines.rotten_days')); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'sales_person', + 'label' => trans('admin::app.datagrid.sales-person'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getUserDropdownOptions(), + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + $route = urldecode(route('admin.settings.users.index', ['id[eq]' => $row->user_id])); + + return "" . $row->sales_person . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'title', + 'label' => trans('admin::app.datagrid.subject'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'tag_name', + 'label' => trans('admin::app.datagrid.tags'), + 'type' => 'hidden', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'lead_source_name', + 'label' => trans('admin::app.leads.lead-source-name'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getleadSourcesOptions(), + 'searchable' => false, + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'lead_value', + 'label' => trans('admin::app.datagrid.lead_value'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatBasePrice($row->lead_value, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'person_name', + 'label' => trans('admin::app.datagrid.contact_person'), + 'type' => 'string', + 'searchable' => false, + 'sortable' => false, + 'closure' => function ($row) { + $route = urldecode(route('admin.contacts.persons.index', ['id[eq]' => $row->person_id])); + + return "" . $row->person_name . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'stage', + 'label' => trans('admin::app.datagrid.stage'), + 'type' => 'string', + 'searchable' => false, + 'sortable' => false, + 'filterable' => false, + 'closure' => function ($row) { + if ($row->stage == 'Won') { + $badge = 'success'; + } else if ($row->stage == 'Lost') { + $badge = 'danger'; + } else { + $badge = 'primary'; + } + + return "" . $row->stage; + }, + ]); + + $this->addColumn([ + 'index' => 'rotten_lead', + 'label' => trans('admin::app.datagrid.rotten_lead'), + 'type' => 'single_dropdown', + 'dropdown_options' => $this->getYesNoDropdownOptions(), + 'sortable' => true, + 'searchable' => false, + 'condition' => 'eq', + 'closure' => function ($row) { + return !$row->rotten_lead || in_array($row->stage_code, ['won', 'lost']) ? trans('admin::app.common.no') : trans('admin::app.common.yes'); + } + ]); + + $this->addColumn([ + 'index' => 'expected_close_date', + 'label' => trans('admin::app.datagrid.expected_close_date'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + if (!$row->expected_close_date) { + return '--'; + } + + return core()->formatDate($row->expected_close_date); + }, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare tab filters. + * + * @return array + */ + public function prepareTabFilters() + { + $values = $this->pipeline->stages() + ->get(['name', 'code as key', DB::raw('false as isActive')]) + ->prepend([ + 'isActive' => true, + 'key' => 'all', + 'name' => trans('admin::app.datagrid.all'), + ]) + ->toArray(); + + $this->addTabFilter([ + 'key' => 'type', + 'type' => 'pill', + 'condition' => 'eq', + 'value_type' => 'lookup', + 'values' => $values, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.leads.view', + 'icon' => 'eye-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.leads.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => trans('admin::app.contacts.persons.person')]), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $stages = []; + + foreach ($this->pipeline->stages->toArray() as $stage) { + $stages[$stage['name']] = $stage['id']; + } + + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.leads.mass_delete'), + 'method' => 'PUT', + ]); + + $this->addMassAction([ + 'type' => 'update', + 'label' => trans('admin::app.datagrid.update_stage'), + 'action' => route('admin.leads.mass_update'), + 'method' => 'PUT', + 'options' => $stages, + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Mail/EmailDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Mail/EmailDataGrid.php new file mode 100644 index 0000000..c10c907 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Mail/EmailDataGrid.php @@ -0,0 +1,150 @@ +select( + 'emails.id', + 'emails.name', + 'emails.subject', + 'emails.reply', + 'emails.created_at', + DB::raw('COUNT(DISTINCT ' . DB::getTablePrefix() . 'email_attachments.id) as attachments') + ) + ->leftJoin('email_attachments', 'emails.id', '=', 'email_attachments.email_id') + ->groupBy('emails.id') + ->where('folders', 'like', '%"' . request('route') . '"%') + ->whereNull('parent_id'); + + $this->addFilter('id', 'emails.id'); + $this->addFilter('name', 'emails.name'); + $this->addFilter('created_at', 'emails.created_at'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'attachments', + 'label' => '', + 'type' => 'string', + 'searchable' => false, + 'filterable' => false, + 'sortable' => false, + 'closure' => function ($row) { + if ($row->attachments) { + return ''; + } + }, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.from'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'subject', + 'label' => trans('admin::app.datagrid.subject'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return '
    ' . $row->subject . ' - ' . substr(strip_tags($row->reply), 0, 225) . '
    '; + }, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => request('route') == 'draft' + ? trans('ui::app.datagrid.edit') + : trans('ui::app.datagrid.view'), + 'method' => 'GET', + 'route' => 'admin.mail.view', + 'params' => ['route' => request('route')], + 'icon' => request('route') == 'draft' + ? 'pencil-icon' + : 'eye-icon' + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.mail.delete', + 'params' => [ + 'type' => request('route') == 'trash' + ? 'delete' + : 'trash' + ], + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'email']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + if (request('route') == 'trash') { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('admin::app.datagrid.move-to-inbox'), + 'action' => route('admin.mail.mass_update', [ + 'folders' => ['inbox'], + ]), + 'method' => 'PUT', + ]); + } + + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.mail.mass_delete', [ + 'type' => request('route') == 'trash' + ? 'delete' + : 'trash', + ]), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Product/ProductDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Product/ProductDataGrid.php new file mode 100644 index 0000000..c30623f --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Product/ProductDataGrid.php @@ -0,0 +1,107 @@ +addSelect( + 'products.id', + 'products.sku', + 'products.name', + 'products.price', + 'products.quantity' + ); + + $this->addFilter('id', 'products.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'sku', + 'label' => trans('admin::app.datagrid.sku'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'price', + 'label' => trans('admin::app.datagrid.price'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return round($row->price, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'quantity', + 'label' => trans('admin::app.datagrid.quantity'), + 'type' => 'string', + 'sortable' => true, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.products.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.products.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'user']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.products.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Quote/QuoteDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Quote/QuoteDataGrid.php new file mode 100644 index 0000000..bfd3e6f --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Quote/QuoteDataGrid.php @@ -0,0 +1,271 @@ +userRepository = $userRepository; + + parent::__construct(); + } + + /** + * Place your datagrid extra settings here. + * + * @return void + */ + public function init() + { + $this->setRowProperties([ + 'backgroundColor' => '#ffd0d6', + 'condition' => function ($row) { + if (Carbon::createFromFormat('Y-m-d H:i:s', $row->expired_at)->endOfDay() < Carbon::now()) { + return true; + } + + return false; + } + ]); + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('quotes') + ->addSelect( + 'quotes.id', + 'quotes.subject', + 'quotes.expired_at', + 'quotes.sub_total', + 'quotes.discount_amount', + 'quotes.tax_amount', + 'quotes.adjustment_amount', + 'quotes.grand_total', + 'quotes.created_at', + 'users.id as user_id', + 'users.name as sales_person', + 'persons.id as person_id', + 'persons.name as person_name', + 'quotes.expired_at as expired_quotes' + ) + ->leftJoin('users', 'quotes.user_id', '=', 'users.id') + ->leftJoin('persons', 'quotes.person_id', '=', 'persons.id'); + + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $queryBuilder->whereIn('quotes.user_id', $this->userRepository->getCurrentUserGroupsUserIds()); + } else { + $queryBuilder->where('quotes.user_id', $currentUser->id); + } + } + + $this->addFilter('id', 'quotes.id'); + $this->addFilter('user', 'quotes.user_id'); + $this->addFilter('sales_person', 'quotes.user_id'); + $this->addFilter('person_name', 'persons.name'); + $this->addFilter('expired_at', 'quotes.expired_at'); + $this->addFilter('created_at', 'quotes.created_at'); + + if (request()->input('expired_quotes.in') == 1) { + $this->addFilter('expired_quotes', DB::raw('DATEDIFF(NOW(), ' . DB::getTablePrefix() . 'quotes.expired_at) >= ' . DB::getTablePrefix() . 'NOW()')); + } else { + $this->addFilter('expired_quotes', DB::raw('DATEDIFF(NOW(), ' . DB::getTablePrefix() . 'quotes.expired_at) < ' . DB::getTablePrefix() . 'NOW()')); + } + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'subject', + 'label' => trans('admin::app.datagrid.subject'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'sales_person', + 'label' => trans('admin::app.datagrid.sales-person'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getUserDropdownOptions(), + 'sortable' => true, + 'closure' => function ($row) { + $route = urldecode(route('admin.settings.users.index', ['id[eq]' => $row->user_id])); + + return "" . $row->sales_person . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'expired_quotes', + 'label' => trans('admin::app.datagrid.expired_quotes'), + 'type' => 'single_dropdown', + 'dropdown_options' => $this->getBooleanDropdownOptions('yes_no'), + 'searchable' => false, + ]); + + $this->addColumn([ + 'index' => 'person_name', + 'label' => trans('admin::app.datagrid.person'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + $route = urldecode(route('admin.contacts.persons.index', ['id[eq]' => $row->person_id])); + + return "" . $row->person_name . ""; + }, + ]); + + $this->addColumn([ + 'index' => 'sub_total', + 'label' => trans('admin::app.datagrid.sub-total'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatBasePrice($row->sub_total, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'discount_amount', + 'label' => trans('admin::app.datagrid.discount'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatBasePrice($row->discount_amount, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'tax_amount', + 'label' => trans('admin::app.datagrid.tax'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatBasePrice($row->tax_amount, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'adjustment_amount', + 'label' => trans('admin::app.datagrid.adjustment'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatBasePrice($row->adjustment_amount, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'grand_total', + 'label' => trans('admin::app.datagrid.grand-total'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatBasePrice($row->grand_total, 2); + }, + ]); + + $this->addColumn([ + 'index' => 'expired_at', + 'label' => trans('admin::app.leads.expired-at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->expired_at, 'd M Y'); + }, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.quotes.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.print'), + 'method' => 'GET', + 'route' => 'admin.quotes.print', + 'icon' => 'sprite quotes-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.quotes.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'user']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.quotes.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/AttributeDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/AttributeDataGrid.php new file mode 100644 index 0000000..25bee4c --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/AttributeDataGrid.php @@ -0,0 +1,176 @@ +tabFilters = [ + [ + 'type' => 'pill', + 'key' => 'entity_type', + 'condition' => 'eq', + 'values' => [ + [ + 'name' => trans('admin::app.leads.all'), + 'isActive' => true, + 'key' => 'all', + ], [ + 'name' => trans('admin::app.leads.title'), + 'isActive' => false, + 'key' => 'leads', + ], [ + 'name' => trans('admin::app.contacts.persons.title'), + 'isActive' => false, + 'key' => 'persons', + ], [ + 'name' => trans('admin::app.contacts.organizations.title'), + 'isActive' => false, + 'key' => 'organizations', + ], [ + 'name' => trans('admin::app.products.title'), + 'isActive' => false, + 'key' => 'products', + ], [ + 'name' => trans('admin::app.quotes.title'), + 'isActive' => false, + 'key' => 'quotes', + ] + ] + ] + ]; + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('attributes') + ->addSelect( + 'attributes.id', + 'attributes.code', + 'attributes.name', + 'attributes.type', + 'attributes.entity_type', + 'attributes.is_user_defined as attribute_type' + ); + + $this->addFilter('id', 'attributes.id'); + $this->addFilter('type', 'attributes.type'); + $this->addFilter('attribute_type', 'attributes.is_user_defined'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'code', + 'label' => trans('admin::app.datagrid.code'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'entity_type', + 'label' => trans('admin::app.datagrid.entity_type'), + 'type' => 'string', + 'searchable' => false, + 'closure' => function ($row) { + return ucfirst($row->entity_type); + }, + ]); + + $this->addColumn([ + 'index' => 'type', + 'label' => trans('admin::app.datagrid.type'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'attribute_type', + 'label' => trans('admin::app.datagrid.attribute_type'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getAttributeTypeDropdownOptions(), + 'sortable' => true, + 'closure' => function ($row) { + return $row->attribute_type ? trans('admin::app.common.custom_attribute') : trans('admin::app.common.system_attribute'); + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.attributes.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.attributes.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'attributes']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.settings.attributes.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/EmailTemplateDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/EmailTemplateDataGrid.php new file mode 100644 index 0000000..79ee139 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/EmailTemplateDataGrid.php @@ -0,0 +1,80 @@ +addSelect( + 'email_templates.id', + 'email_templates.name', + 'email_templates.subject', + ); + + $this->addFilter('id', 'email_templates.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'subject', + 'label' => trans('admin::app.datagrid.subject'), + 'type' => 'string', + 'sortable' => true, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.email_templates.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.email_templates.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'type']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/GroupDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/GroupDataGrid.php new file mode 100644 index 0000000..ac8c95f --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/GroupDataGrid.php @@ -0,0 +1,80 @@ +addSelect( + 'groups.id', + 'groups.name', + 'groups.description' + ); + + $this->addFilter('id', 'groups.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'description', + 'label' => trans('admin::app.datagrid.description'), + 'type' => 'string', + 'sortable' => false, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.groups.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.groups.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'group']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/PipelineDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/PipelineDataGrid.php new file mode 100644 index 0000000..0004ff6 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/PipelineDataGrid.php @@ -0,0 +1,97 @@ +addSelect( + 'lead_pipelines.id', + 'lead_pipelines.name', + 'lead_pipelines.rotten_days', + 'lead_pipelines.is_default', + ); + + $this->addFilter('id', 'lead_pipelines.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'rotten_days', + 'label' => trans('admin::app.datagrid.rotten-days'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'is_default', + 'label' => trans('admin::app.datagrid.is-default'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getBooleanDropdownOptions('yes_no'), + 'sortable' => false, + 'closure' => function ($row) { + return (bool)$row->is_default + ? __('admin::app.common.yes') + : __('admin::app.common.no'); + } + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.pipelines.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.pipelines.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'pipeline']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/RoleDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/RoleDataGrid.php new file mode 100644 index 0000000..4988c47 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/RoleDataGrid.php @@ -0,0 +1,92 @@ +addSelect( + 'roles.id', + 'roles.name', + 'roles.description', + 'roles.permission_type' + ); + + $this->addFilter('id', 'roles.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'description', + 'label' => trans('admin::app.datagrid.description'), + 'type' => 'string', + 'sortable' => false, + ]); + + $this->addColumn([ + 'index' => 'permission_type', + 'label' => trans('admin::app.datagrid.permission_type'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getRoleDropdownOptions(), + 'sortable' => false, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.roles.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.roles.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'user']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/SourceDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/SourceDataGrid.php new file mode 100644 index 0000000..9634d14 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/SourceDataGrid.php @@ -0,0 +1,72 @@ +addSelect( + 'lead_sources.id', + 'lead_sources.name' + ); + + $this->addFilter('id', 'lead_sources.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.sources.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.sources.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'source']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/TagDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/TagDataGrid.php new file mode 100644 index 0000000..ae8d93b --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/TagDataGrid.php @@ -0,0 +1,156 @@ +userRepository = $userRepository; + + parent::__construct(); + } + + /** + * Prepare query builder. + * + * @return void + */ + public function prepareQueryBuilder() + { + $queryBuilder = DB::table('tags') + ->addSelect( + 'tags.id', + 'tags.name', + 'tags.color', + 'tags.created_at', + 'users.name as user_name', + ) + ->leftJoin('users', 'tags.user_id', '=', 'users.id'); + + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $queryBuilder->whereIn('tags.user_id', $this->userRepository->getCurrentUserGroupsUserIds()); + } else { + $queryBuilder->where('tags.user_id', $currentUser->id); + } + } + + $this->addFilter('id', 'tags.id'); + $this->addFilter('name', 'tags.name'); + $this->addFilter('created_at', 'tags.created_at'); + $this->addFilter('user_name', 'users.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'searchable' => false, + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'searchable' => true, + 'sortable' => false, + 'closure' => function ($row) { + $html = ''; + + + return $html . htmlspecialchars($row->name); + }, + ]); + + $this->addColumn([ + 'index' => 'user_name', + 'label' => trans('admin::app.datagrid.user'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getUserDropdownOptions(), + 'searchable' => false, + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.tags.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.tags.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'source']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.settings.tags.mass_delete'), + 'method' => 'PUT', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/TypeDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/TypeDataGrid.php new file mode 100644 index 0000000..b696751 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/TypeDataGrid.php @@ -0,0 +1,72 @@ +addSelect( + 'lead_types.id', + 'lead_types.name' + ); + + $this->addFilter('id', 'lead_types.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.types.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.types.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'type']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/UserDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/UserDataGrid.php new file mode 100644 index 0000000..ccf37a3 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/UserDataGrid.php @@ -0,0 +1,146 @@ +addSelect( + 'users.id', + 'users.name', + 'users.email', + 'users.image', + 'users.status', + 'users.created_at' + ); + + $this->addFilter('id', 'users.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + 'closure' => function ($row) { + if ($row->image) { + return '
    ' . $row->name; + } else { + return '
    ' . $row->name; + } + }, + ]); + + $this->addColumn([ + 'index' => 'email', + 'label' => trans('admin::app.datagrid.email'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'status', + 'label' => trans('admin::app.datagrid.status'), + 'type' => 'dropdown', + 'dropdown_options' => $this->getBooleanDropdownOptions(), + 'searchable' => false, + 'closure' => function ($row) { + if ($row->status == 1) { + return '' . trans('admin::app.datagrid.active'); + } else { + return '' . trans('admin::app.datagrid.inactive'); + } + }, + ]); + + $this->addColumn([ + 'index' => 'created_at', + 'label' => trans('admin::app.datagrid.created_at'), + 'type' => 'date_range', + 'searchable' => false, + 'sortable' => true, + 'closure' => function ($row) { + return core()->formatDate($row->created_at); + }, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.users.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.users.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'user']), + 'icon' => 'trash-icon', + ]); + } + + /** + * Prepare mass actions. + * + * @return void + */ + public function prepareMassActions() + { + $this->addMassAction([ + 'type' => 'delete', + 'label' => trans('ui::app.datagrid.delete'), + 'action' => route('admin.settings.users.mass_delete'), + 'method' => 'PUT', + ]); + + $this->addMassAction([ + 'type' => 'update', + 'label' => trans('ui::app.datagrid.update-status'), + 'action' => route('admin.settings.users.mass_update'), + 'method' => 'PUT', + 'options' => [ + trans('admin::app.datagrid.active') => 1, + trans('admin::app.datagrid.inactive') => 0, + ], + ]); + } +} diff --git a/packages/Webkul/Admin/src/DataGrids/Setting/WorkflowDataGrid.php b/packages/Webkul/Admin/src/DataGrids/Setting/WorkflowDataGrid.php new file mode 100644 index 0000000..d25a674 --- /dev/null +++ b/packages/Webkul/Admin/src/DataGrids/Setting/WorkflowDataGrid.php @@ -0,0 +1,72 @@ +addSelect( + 'workflows.id', + 'workflows.name' + ); + + $this->addFilter('id', 'workflows.id'); + + $this->setQueryBuilder($queryBuilder); + } + + /** + * Add columns. + * + * @return void + */ + public function addColumns() + { + $this->addColumn([ + 'index' => 'id', + 'label' => trans('admin::app.datagrid.id'), + 'type' => 'string', + 'sortable' => true, + ]); + + $this->addColumn([ + 'index' => 'name', + 'label' => trans('admin::app.datagrid.name'), + 'type' => 'string', + 'sortable' => true, + ]); + } + + /** + * Prepare actions. + * + * @return void + */ + public function prepareActions() + { + $this->addAction([ + 'title' => trans('ui::app.datagrid.edit'), + 'method' => 'GET', + 'route' => 'admin.settings.workflows.edit', + 'icon' => 'pencil-icon', + ]); + + $this->addAction([ + 'title' => trans('ui::app.datagrid.delete'), + 'method' => 'DELETE', + 'route' => 'admin.settings.workflows.delete', + 'confirm_text' => trans('ui::app.datagrid.massaction.delete', ['resource' => 'type']), + 'icon' => 'trash-icon', + ]); + } +} diff --git a/packages/Webkul/Admin/src/Database/Migrations/2021_06_07_162808_add_lead_view_permission_column_in_users_table.php b/packages/Webkul/Admin/src/Database/Migrations/2021_06_07_162808_add_lead_view_permission_column_in_users_table.php new file mode 100644 index 0000000..0dee9f7 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Migrations/2021_06_07_162808_add_lead_view_permission_column_in_users_table.php @@ -0,0 +1,32 @@ +string('view_permission')->after('status')->default('global')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('view_permission'); + }); + } +} diff --git a/packages/Webkul/Admin/src/Database/Migrations/2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php b/packages/Webkul/Admin/src/Database/Migrations/2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php new file mode 100644 index 0000000..8991f6c --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Migrations/2021_10_02_170105_insert_expected_closed_date_column_in_attributes_table.php @@ -0,0 +1,45 @@ +insert([ + [ + 'id' => '7', + 'code' => 'expected_close_date', + 'name' => 'Expected Close Date', + 'type' => 'date', + 'entity_type' => 'leads', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '8', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => Carbon::now(), + 'updated_at' => Carbon::now(), + ] + ]); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/AttributeSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/AttributeSeeder.php new file mode 100644 index 0000000..3fbd5d7 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/AttributeSeeder.php @@ -0,0 +1,486 @@ +delete(); + + $now = Carbon::now(); + + DB::table('attributes')->insert([ + [ + 'id' => '1', + 'code' => 'title', + 'name' => 'Title', + 'type' => 'text', + 'entity_type' => 'leads', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '1', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '2', + 'code' => 'description', + 'name' => 'Description', + 'type' => 'textarea', + 'entity_type' => 'leads', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '2', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '3', + 'code' => 'lead_value', + 'name' => 'Lead Value', + 'type' => 'price', + 'entity_type' => 'leads', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '3', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '4', + 'code' => 'lead_source_id', + 'name' => 'Source', + 'type' => 'select', + 'entity_type' => 'leads', + 'lookup_type' => 'lead_sources', + 'validation' => NULL, + 'sort_order' => '4', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '5', + 'code' => 'lead_type_id', + 'name' => 'Type', + 'type' => 'select', + 'entity_type' => 'leads', + 'lookup_type' => 'lead_types', + 'validation' => NULL, + 'sort_order' => '5', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '6', + 'code' => 'user_id', + 'name' => 'Sales Owner', + 'type' => 'select', + 'entity_type' => 'leads', + 'lookup_type' => 'users', + 'validation' => NULL, + 'sort_order' => '7', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '7', + 'code' => 'expected_close_date', + 'name' => 'Expected Close Date', + 'type' => 'date', + 'entity_type' => 'leads', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '8', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '9', + 'code' => 'name', + 'name' => 'Name', + 'type' => 'text', + 'entity_type' => 'persons', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '1', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '10', + 'code' => 'emails', + 'name' => 'Emails', + 'type' => 'email', + 'entity_type' => 'persons', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '2', + 'is_required' => '1', + 'is_unique' => '1', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '11', + 'code' => 'contact_numbers', + 'name' => 'Contact Numbers', + 'type' => 'phone', + 'entity_type' => 'persons', + 'lookup_type' => NULL, + 'validation' => 'numeric', + 'sort_order' => '3', + 'is_required' => '0', + 'is_unique' => '1', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '12', + 'code' => 'organization_id', + 'name' => 'Organization', + 'type' => 'lookup', + 'entity_type' => 'persons', + 'lookup_type' => 'organizations', + 'validation' => NULL, + 'sort_order' => '4', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '13', + 'code' => 'name', + 'name' => 'Name', + 'type' => 'text', + 'entity_type' => 'organizations', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '1', + 'is_required' => '1', + 'is_unique' => '1', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '14', + 'code' => 'address', + 'name' => 'Address', + 'type' => 'address', + 'entity_type' => 'organizations', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '2', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '15', + 'code' => 'name', + 'name' => 'Name', + 'type' => 'text', + 'entity_type' => 'products', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '1', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '16', + 'code' => 'description', + 'name' => 'Description', + 'type' => 'textarea', + 'entity_type' => 'products', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '2', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '17', + 'code' => 'sku', + 'name' => 'SKU', + 'type' => 'text', + 'entity_type' => 'products', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '3', + 'is_required' => '1', + 'is_unique' => '1', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '18', + 'code' => 'quantity', + 'name' => 'Quantity', + 'type' => 'text', + 'entity_type' => 'products', + 'lookup_type' => NULL, + 'validation' => 'numeric', + 'sort_order' => '4', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '19', + 'code' => 'price', + 'name' => 'Price', + 'type' => 'text', + 'entity_type' => 'products', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '5', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '20', + 'code' => 'user_id', + 'name' => 'Sales Owner', + 'type' => 'select', + 'entity_type' => 'quotes', + 'lookup_type' => 'users', + 'validation' => NULL, + 'sort_order' => '1', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '21', + 'code' => 'subject', + 'name' => 'Subject', + 'type' => 'text', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '2', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '22', + 'code' => 'description', + 'name' => 'Description', + 'type' => 'textarea', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '3', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '23', + 'code' => 'billing_address', + 'name' => 'Billing Address', + 'type' => 'address', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '4', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '24', + 'code' => 'shipping_address', + 'name' => 'Shipping Address', + 'type' => 'address', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '5', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '25', + 'code' => 'discount_percent', + 'name' => 'Discount Percent', + 'type' => 'text', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '6', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '26', + 'code' => 'discount_amount', + 'name' => 'Discount Amount', + 'type' => 'price', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '7', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '27', + 'code' => 'tax_amount', + 'name' => 'Tax Amount', + 'type' => 'price', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '8', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '28', + 'code' => 'adjustment_amount', + 'name' => 'Adjustment Amount', + 'type' => 'price', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '9', + 'is_required' => '0', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '29', + 'code' => 'sub_total', + 'name' => 'Sub Total', + 'type' => 'price', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '10', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '30', + 'code' => 'grand_total', + 'name' => 'Grand Total', + 'type' => 'price', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => 'decimal', + 'sort_order' => '11', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '31', + 'code' => 'expired_at', + 'name' => 'Expired At', + 'type' => 'date', + 'entity_type' => 'quotes', + 'lookup_type' => NULL, + 'validation' => NULL, + 'sort_order' => '12', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => '32', + 'code' => 'person_id', + 'name' => 'Person', + 'type' => 'lookup', + 'entity_type' => 'quotes', + 'lookup_type' => 'persons', + 'validation' => NULL, + 'sort_order' => '13', + 'is_required' => '1', + 'is_unique' => '0', + 'quick_add' => '1', + 'is_user_defined' => '0', + 'created_at' => $now, + 'updated_at' => $now, + ] + ]); + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php new file mode 100644 index 0000000..921f3b9 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/DatabaseSeeder.php @@ -0,0 +1,23 @@ +call(AttributeSeeder::class); + $this->call(EmailTemplateSeeder::class); + $this->call(LeadPipelineSeeder::class); + $this->call(LeadTypeSeeder::class); + $this->call(LeadSourceSeeder::class); + $this->call(WorkflowSeeder::class); + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/EmailTemplateSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/EmailTemplateSeeder.php new file mode 100644 index 0000000..9bad821 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/EmailTemplateSeeder.php @@ -0,0 +1,78 @@ +delete(); + + $now = Carbon::now(); + + DB::table('email_templates')->insert([ + [ + 'id' => 1, + 'name' => 'Activity created', + 'subject' => 'Activity created: {%activities.title%}', + 'created_at' => $now, + 'updated_at' => $now, + 'content' => '

    You have a new activity, please find the details bellow:

    +

    Details

    + + + + + + + + + + + + + + + + + + + +
    Title{%activities.title%}
    Type{%activities.type%}
    Date{%activities.schedule_from%} to {%activities.schedule_to%}
    Participants{%activities.participants%}
    ', + ], [ + 'id' => 2, + 'name' => 'Activity modified', + 'subject' => 'Activity modified: {%activities.title%}', + 'created_at' => $now, + 'updated_at' => $now, + 'content' => '

    This activity has been modified, please find the details bellow:

    +

    Details

    + + + + + + + + + + + + + + + + + + + +
    Title{%activities.title%}
    Type{%activities.type%}
    Date{%activities.schedule_from%} to {%activities.schedule_to%}
    Participants{%activities.participants%}
    ', + ] + ]); + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/LeadPipelineSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/LeadPipelineSeeder.php new file mode 100644 index 0000000..2382386 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/LeadPipelineSeeder.php @@ -0,0 +1,76 @@ +delete(); + + DB::table('lead_pipeline_stages')->delete(); + + $now = Carbon::now(); + + DB::table('lead_pipelines')->insert([ + [ + 'id' => 1, + 'name' => 'Default Pipeline', + 'is_default' => 1, + 'created_at' => $now, + 'updated_at' => $now, + ] + ]); + + DB::table('lead_pipeline_stages')->insert([ + [ + 'id' => 1, + 'code' => 'new', + 'name' => 'New', + 'probability' => 100, + 'sort_order' => 1, + 'lead_pipeline_id' => 1, + ], [ + 'id' => 2, + 'code' => 'follow-up', + 'name' => 'Follow Up', + 'probability' => 100, + 'sort_order' => 2, + 'lead_pipeline_id' => 1, + ], [ + 'id' => 3, + 'code' => 'prospect', + 'name' => 'Prospect', + 'probability' => 100, + 'sort_order' => 3, + 'lead_pipeline_id' => 1, + ], [ + 'id' => 4, + 'code' => 'negotiation', + 'name' => 'Negotiation', + 'probability' => 100, + 'sort_order' => 4, + 'lead_pipeline_id' => 1, + ], [ + 'id' => 5, + 'code' => 'won', + 'name' => 'Won', + 'probability' => 100, + 'sort_order' => 5, + 'lead_pipeline_id' => 1, + ], [ + 'id' => 6, + 'code' => 'lost', + 'name' => 'Lost', + 'probability' => 0, + 'sort_order' => 6, + 'lead_pipeline_id' => 1, + ] + ]); + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/LeadSourceSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/LeadSourceSeeder.php new file mode 100644 index 0000000..8482230 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/LeadSourceSeeder.php @@ -0,0 +1,47 @@ +delete(); + + $now = Carbon::now(); + + DB::table('lead_sources')->insert([ + [ + 'id' => 1, + 'name' => 'Email', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => 2, + 'name' => 'Web', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => 3, + 'name' => 'Web Form', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => 4, + 'name' => 'Phone', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => 5, + 'name' => 'Direct', + 'created_at' => $now, + 'updated_at' => $now, + ] + ]); + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/LeadTypeSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/LeadTypeSeeder.php new file mode 100644 index 0000000..8a1b268 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/LeadTypeSeeder.php @@ -0,0 +1,32 @@ +delete(); + + $now = Carbon::now(); + + DB::table('lead_types')->insert([ + [ + 'id' => 1, + 'name' => 'New Business', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => 2, + 'name' => 'Existing Business', + 'created_at' => $now, + 'updated_at' => $now, + ] + ]); + } +} diff --git a/packages/Webkul/Admin/src/Database/Seeders/WorkflowSeeder.php b/packages/Webkul/Admin/src/Database/Seeders/WorkflowSeeder.php new file mode 100644 index 0000000..b8eed37 --- /dev/null +++ b/packages/Webkul/Admin/src/Database/Seeders/WorkflowSeeder.php @@ -0,0 +1,44 @@ +delete(); + + $now = Carbon::now(); + + DB::table('workflows')->insert([ + [ + 'id' => 1, + 'name' => 'Emails to participants after activity creation', + 'description' => 'Emails to participants after activity creation', + 'entity_type' => 'activities', + 'event' => 'activity.create.after', + 'condition_type' => 'and', + 'conditions' => '[{"value": ["call", "meeting", "lunch"], "operator": "{}", "attribute": "type", "attribute_type": "multiselect"}]', + 'actions' => '[{"id": "send_email_to_participants", "value": "1"}]', + 'created_at' => $now, + 'updated_at' => $now, + ], [ + 'id' => 2, + 'name' => 'Emails to participants after activity updation', + 'description' => 'Emails to participants after activity updation', + 'entity_type' => 'activities', + 'event' => 'activity.update.after', + 'condition_type' => 'and', + 'conditions' => '[{"value": ["call", "meeting", "lunch"], "operator": "{}", "attribute": "type", "attribute_type": "multiselect"}]', + 'actions' => '[{"id": "send_email_to_participants", "value": "2"}]', + 'created_at' => $now, + 'updated_at' => $now, + ] + ]); + } +} diff --git a/packages/Webkul/Admin/src/Exceptions/Handler.php b/packages/Webkul/Admin/src/Exceptions/Handler.php new file mode 100644 index 0000000..0320341 --- /dev/null +++ b/packages/Webkul/Admin/src/Exceptions/Handler.php @@ -0,0 +1,121 @@ +jsonErrorMessages = [ + '404' => trans('admin::app.common.resource-not-found'), + '403' => trans('admin::app.common.forbidden-error'), + '401' => trans('admin::app.common.unauthenticated'), + '500' => trans('admin::app.common.internal-server-error') + ]; + } + + /** + * Render an exception into an HTTP response. + * + * @param \Illuminate\Http\Request $request + * @param \Throwable $exception + * @return \Illuminate\Http\Response + */ + public function render($request, Throwable $exception) + { + if (!config('app.debug')) { + return $this->renderCustomResponse($exception); + } + + return parent::render($request, $exception); + } + + /** + * Convert an authentication exception into a response. + * + * @param \Illuminate\Http\Request $request + * @param \Illuminate\Auth\AuthenticationException $exception + * @return \Illuminate\Http\Response + */ + protected function unauthenticated($request, AuthenticationException $exception) + { + if ($request->expectsJson()) { + return response()->json(['message' => $this->jsonErrorMessages[401]], 401); + } + + return redirect()->guest(route('customer.session.index')); + } + + /** + * Render custom HTTP response. + * + * @param \Throwable $exception + * @return \Illuminate\Http\Response|null + */ + private function renderCustomResponse(Throwable $exception) + { + $path = request()->routeIs('admin.*') ? 'admin' : 'front'; + + if ($path == 'front') { + return redirect()->route('admin.session.create'); + } + + if ($exception instanceof HttpException) { + $statusCode = in_array($exception->getStatusCode(), [401, 403, 404, 503]) + ? $exception->getStatusCode() + : 500; + + return $this->response($path, $statusCode); + } + + if ($exception instanceof ModelNotFoundException) { + return $this->response($path, 404); + } + + if ($exception instanceof PDOException) { + return $this->response($path, 500); + } + } + + /** + * Return custom response. + * + * @param string $path + * @param string $statusCode + * @return mixed + */ + private function response($path, $statusCode) + { + if (request()->expectsJson()) { + return response()->json([ + 'message' => isset($this->jsonErrorMessages[$statusCode]) + ? $this->jsonErrorMessages[$statusCode] + : trans('admin::app.common.something-went-wrong') + ], $statusCode); + } + + return response()->view("{$path}::errors.{$statusCode}", [], $statusCode); + } +} diff --git a/packages/Webkul/Admin/src/Facades/Bouncer.php b/packages/Webkul/Admin/src/Facades/Bouncer.php new file mode 100644 index 0000000..3d9cb05 --- /dev/null +++ b/packages/Webkul/Admin/src/Facades/Bouncer.php @@ -0,0 +1,18 @@ +leadRepository = $leadRepository; + + $this->pipelineRepository = $pipelineRepository; + + $this->leadProductRepository = $leadProductRepository; + + $this->quoteRepository = $quoteRepository; + + $this->productRepository = $productRepository; + + $this->personRepository = $personRepository; + + $this->activityRepository = $activityRepository; + + $this->userRepository = $userRepository; + + $this->emailRepository = $emailRepository; + } + + /** + * This will set all available cards data to be displayed on dashboard. + * + * @return void + */ + public function setCards() + { + $this->cards = array_map(function ($card) { + if (isset($card['label'])) { + $card['label'] = trans($card['label']); + } + + return $card; + }, config('dashboard_cards')); + } + + /** + * This will set all available cards data to be displayed on dashboard. + * + * @return array + */ + public function getCards(): array + { + if (!$this->cards) { + $this->setCards(); + } + + return $this->cards; + } + + /** + * Collect leads card data. + * + * @return array|boolean + */ + public function getLeads($startDateFilter, $endDateFilter, $totalWeeks) + { + if (!bouncer()->hasPermission('leads')) { + return 0; + } + + $labels = $wonLeadsCount = $lostLeadsCount = []; + + if ($totalWeeks) { + for ($index = $totalWeeks; $index >= 1; $index--) { + list( + 'startDate' => $startDate, + 'endDate' => $endDate, + 'labels' => $labels, + ) = $this->getFormattedDateRange([ + "start_date" => $startDateFilter, + "end_date" => $endDateFilter, + "index" => $index, + "labels" => $labels, + "total_weeks" => $totalWeeks, + ]); + + array_push($wonLeadsCount, $this->leadRepository->getLeadsCount("Won", $startDate, $endDate)); + + array_push($lostLeadsCount, $this->leadRepository->getLeadsCount("Lost", $startDate, $endDate)); + } + } else { + $labels = [__("admin::app.dashboard.week") . "1"]; + + $wonLeadsCount = [$this->leadRepository->getLeadsCount("Won", $startDateFilter, $endDateFilter)]; + $lostLeadsCount = [$this->leadRepository->getLeadsCount("Lost", $startDateFilter, $endDateFilter)]; + } + + if (!(empty(array_filter($wonLeadsCount)) && empty(array_filter($lostLeadsCount)))) { + $cardData = [ + "data" => [ + "labels" => $labels, + "datasets" => [ + [ + "data" => $wonLeadsCount, + "label" => __("admin::app.settings.pipelines.won-stage"), + "backgroundColor" => "#4BC0C0", + ], [ + "backgroundColor" => "#FF4D50", + "data" => $lostLeadsCount, + "label" => __("admin::app.settings.pipelines.lost-stage"), + ] + ] + ] + ]; + } + + return $cardData ?? false; + } + + /** + * Collect leads card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array|boolean + */ + public function getLeadsStarted($startDateFilter, $endDateFilter, $totalWeeks) + { + if (!bouncer()->hasPermission('leads')) { + return 0; + } + + $labels = $leadsStarted = []; + + if ($totalWeeks) { + for ($index = $totalWeeks; $index >= 1; $index--) { + list( + 'startDate' => $startDate, + 'endDate' => $endDate, + 'labels' => $labels, + ) = $this->getFormattedDateRange([ + "start_date" => $startDateFilter, + "end_date" => $endDateFilter, + "index" => $index, + "labels" => $labels, + "total_weeks" => $totalWeeks, + ]); + + array_push($leadsStarted, $this->leadRepository->getLeadsCount("all", $startDate, $endDate)); + } + } else { + $labels = [__("admin::app.dashboard.week") . "1"]; + + $leadsStarted = [$this->leadRepository->getLeadsCount("Won", $startDateFilter, $endDateFilter)]; + } + + if (!empty(array_filter($leadsStarted))) { + $cardData = [ + "data" => [ + "labels" => $labels, + "datasets" => [ + [ + "fill" => true, + "tension" => 0.6, + "backgroundColor" => "#4BC0C0", + "borderColor" => '#2f7373', + "data" => $leadsStarted, + "label" => __("admin::app.dashboard.leads_started"), + ], + ] + ] + ]; + } + + return $cardData ?? false; + } + + /** + * Collect Products card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array|boolean + */ + public function getProducts($startDateFilter, $endDateFilter, $totalWeeks) + { + $labels = $productsCount = []; + + if ($totalWeeks) { + for ($index = $totalWeeks; $index >= 1; $index--) { + list( + 'startDate' => $startDate, + 'endDate' => $endDate, + 'labels' => $labels, + ) = $this->getFormattedDateRange([ + "start_date" => $startDateFilter, + "end_date" => $endDateFilter, + "index" => $index, + "labels" => $labels, + "total_weeks" => $totalWeeks, + ]); + + // get products count + array_push($productsCount, $this->productRepository->getProductCount($startDate, $endDate)); + } + } else { + $labels = [__("admin::app.dashboard.week") . "1"]; + $productsCount = [$this->productRepository->getProductCount($startDateFilter, $endDateFilter)]; + } + + if (!empty(array_filter($productsCount))) { + $cardData = [ + "data" => [ + "labels" => $labels, + "datasets" => [ + [ + "fill" => true, + "tension" => 0.6, + "backgroundColor" => "#4BC0C0", + "borderColor" => '#2f7373', + "data" => $productsCount, + "label" => __("admin::app.dashboard.products"), + ], + ] + ] + ]; + } + + return $cardData ?? false; + } + + /** + * Collect customers card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array|boolean + */ + public function getCustomers($startDateFilter, $endDateFilter, $totalWeeks) + { + $labels = $customersCount = []; + + if ($totalWeeks) { + for ($index = $totalWeeks; $index >= 1; $index--) { + list( + 'startDate' => $startDate, + 'endDate' => $endDate, + 'labels' => $labels, + ) = $this->getFormattedDateRange([ + "start_date" => $startDateFilter, + "end_date" => $endDateFilter, + "index" => $index, + "labels" => $labels, + "total_weeks" => $totalWeeks, + ]); + + // get customers count + array_push($customersCount, $this->personRepository->getCustomerCount($startDate, $endDate)); + } + } else { + $labels = [__("admin::app.dashboard.week") . "1"]; + $customersCount = [$this->personRepository->getCustomerCount($startDateFilter, $endDateFilter)]; + } + + if (!empty(array_filter($customersCount))) { + $cardData = [ + "data" => [ + "labels" => $labels, + "datasets" => [ + [ + "fill" => true, + "tension" => 0.6, + "backgroundColor" => "#4BC0C0", + "borderColor" => '#2f7373', + "data" => $customersCount, + "label" => __("admin::app.dashboard.customers"), + ], + ] + ] + ]; + } + + return $cardData ?? false; + } + + /** + * Collect activity card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getActivities($startDateFilter, $endDateFilter, $totalWeeks) + { + $activityTypes = ['call', 'meeting', 'lunch']; + + $activities = $this->activityRepository + ->select(DB::raw("(COUNT(DISTINCT activities.id)) as count"), 'type as label') + ->leftJoin('activity_participants', 'activities.id', '=', 'activity_participants.activity_id') + ->groupBy('type') + ->orderBy('count', 'desc') + ->whereIn('type', $activityTypes) + ->whereBetween('created_at', [$startDateFilter, $endDateFilter]) + ->where(function ($query) { + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $userIds = app(UserRepository::class)->getCurrentUserGroupsUserIds(); + + $query->whereIn('activities.user_id', $userIds) + ->orWhereIn('activity_participants.user_id', $userIds); + } else { + $query->where('activities.user_id', $currentUser->id) + ->orWhere('activity_participants.user_id', $currentUser->id); + } + } + }) + ->get(); + + $typesWithZeroCount = collect($activityTypes) + ->filter(function ($type) use ($activities) { + return !in_array($type, $activities->pluck('label')->toArray()); + }) + ->map(function ($type) { + return [ + 'count' => 0, + 'label' => __("admin::app.activities.$type") + ]; + }); + + $activities->push(...$typesWithZeroCount); + + return [ + 'data' => $activities, + 'total' => $activities->pluck('count')->sum() + ]; + } + + /** + * Collect top leads card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getTopLeads($startDateFilter, $endDateFilter, $totalWeeks) + { + if (!bouncer()->hasPermission('leads')) { + return 0; + } + + $topLeads = $this->leadRepository + ->select('leads.id', 'title', 'lead_value as amount', 'leads.created_at', 'status', 'lead_pipeline_stages.name as statusLabel') + ->leftJoin('lead_pipeline_stages', 'leads.lead_pipeline_stage_id', '=', 'lead_pipeline_stages.id') + ->orderBy('lead_value', 'desc') + ->whereBetween('leads.created_at', [$startDateFilter, $endDateFilter]) + ->where(function ($query) { + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $query->whereIn('leads.user_id', app('\Webkul\User\Repositories\UserRepository')->getCurrentUserGroupsUserIds()); + } else { + $query->where('leads.user_id', $currentUser->id); + } + } + }) + ->limit(3) + ->get(); + + $cardData = [ + "data" => $topLeads, + ]; + + return $cardData; + } + + /** + * Collect pipelines card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getPipelines($startDateFilter, $endDateFilter, $totalWeeks): array + { + $totalLeadsBetweenDateCount = $this->leadRepository + ->whereBetween('leads.created_at', [$startDateFilter, $endDateFilter]) + ->where(function ($query) { + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $query->whereIn('leads.user_id', app('\Webkul\User\Repositories\UserRepository')->getCurrentUserGroupsUserIds()); + } else { + $query->where('leads.user_id', $currentUser->id); + } + } + }) + ->count(); + + $leadPipelines = $this->pipelineRepository + ->select('id', 'name') + ->get() + ->map(function ($pipeline) use ($startDateFilter, $endDateFilter) { + $individualLeads = $this->leadRepository + ->leftJoin('lead_pipelines', 'leads.lead_pipeline_id', '=', 'lead_pipelines.id') + ->whereBetween('leads.created_at', [$startDateFilter, $endDateFilter]) + ->where('lead_pipelines.id', $pipeline->id) + ->where(function ($query) { + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $query->whereIn('leads.user_id', app('\Webkul\User\Repositories\UserRepository')->getCurrentUserGroupsUserIds()); + } else { + $query->where('leads.user_id', $currentUser->id); + } + } + }) + ->count(); + + return [ + 'label' => $pipeline->name, + 'count' => $individualLeads, + ]; + }); + + return [ + 'data' => $leadPipelines, + 'total' => $totalLeadsBetweenDateCount + ]; + } + + /** + * Collect emails card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getEmails($startDateFilter, $endDateFilter, $totalWeeks) + { + $totalEmails = $receivedEmails = $draftEmails = $outboxEmails = $sentEmails = $trashEmails = 0; + + $emailsCollection = $this->emailRepository + ->whereBetween('created_at', [$startDateFilter, $endDateFilter]) + ->get(); + + foreach ($emailsCollection as $key => $email) { + if (in_array('inbox', $email->folders) !== false) { + $receivedEmails++; + } else if (in_array('draft', $email->folders) !== false) { + $draftEmails++; + } else if (in_array('outbox', $email->folders) !== false) { + $outboxEmails++; + } else if (in_array('sent', $email->folders) !== false) { + $sentEmails++; + } else if (in_array('trash', $email->folders) !== false) { + $trashEmails++; + } + + $totalEmails++; + } + + $cardData = [ + "data" => [ + [ + 'label' => __("admin::app.mail.total"), + 'count' => $totalEmails + ], [ + 'label' => __("admin::app.mail.inbox"), + 'count' => $receivedEmails + ], [ + 'label' => __("admin::app.mail.draft"), + 'count' => $draftEmails + ], [ + 'label' => __("admin::app.mail.outbox"), + 'count' => $outboxEmails + ], [ + 'label' => __("admin::app.mail.sent"), + 'count' => $sentEmails + ], [ + 'label' => __("admin::app.mail.trash"), + 'count' => $trashEmails + ], + ] + ]; + + return $cardData; + } + + /** + * Collect top customers card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getTopCustomers($startDateFilter, $endDateFilter, $totalWeeks) + { + $topCustomers = $this->leadRepository + ->select('persons.id as personId', 'persons.name as label', DB::raw("(COUNT(*)) as count")) + ->leftJoin('persons', 'leads.person_id', '=', 'persons.id') + ->whereBetween('leads.created_at', [$startDateFilter, $endDateFilter]) + ->groupBy('person_id') + ->orderBy('lead_value', 'desc') + ->limit(6) + ->orderBy('count', 'desc') + ->get(); + + $cardData = [ + "data" => $topCustomers + ]; + + return $cardData; + } + + /** + * Collect top products card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getTopProducts($startDateFilter, $endDateFilter, $totalWeeks) + { + $topProducts = $this->leadProductRepository + ->select('lead_products.*', 'products.name as label', DB::raw("(COUNT(*)) as count")) + ->leftJoin('leads', 'lead_products.lead_id', '=', 'leads.id') + ->leftJoin('products', 'lead_products.product_id', '=', 'products.id') + ->groupBy('lead_products.product_id') + ->whereBetween('lead_products.created_at', [$startDateFilter, $endDateFilter]) + ->limit(6) + ->get(); + + $cardData = [ + "data" => $topProducts + ]; + + return $cardData; + } + + /** + * Collect quotes card data. + * + * @param string $startDateFilter + * @param string $endDateFilter + * @param array $totalWeeks + * @return array + */ + public function getQuotes($startDateFilter, $endDateFilter, $totalWeeks) + { + $labels = $quotes = []; + + if ($totalWeeks) { + for ($index = $totalWeeks; $index >= 1; $index--) { + list( + 'startDate' => $startDate, + 'endDate' => $endDate, + 'labels' => $labels, + ) = $this->getFormattedDateRange([ + "start_date" => $startDateFilter, + "end_date" => $endDateFilter, + "index" => $index, + "labels" => $labels, + "total_weeks" => $totalWeeks, + ]); + + // get quotes count + array_push($quotes, $this->quoteRepository->getQuotesCount($startDate, $endDate)); + } + } else { + $labels = [__("admin::app.dashboard.week") . "1"]; + + $quotes = [$this->quoteRepository->getQuotesCount("Won", $startDateFilter, $endDateFilter)]; + } + + if (!empty(array_filter($quotes))) { + $cardData = [ + "data" => [ + "labels" => $labels, + "datasets" => [ + [ + "fill" => true, + "tension" => 0.6, + "backgroundColor" => "#4BC0C0", + "borderColor" => '#2f7373', + "data" => $quotes, + "label" => __("admin::app.dashboard.leads_started"), + ], + ] + ] + ]; + } + + return $cardData ?? false; + } + + /** + * This will return date range to be applied on dashboard data. + * + * @param array $data + * @return array + */ + public function getDateRangeDetails($data) + { + $cardId = $data['card-id']; + + $dateRange = $data['date-range'] ?? Carbon::now()->subMonth()->addDays(1)->format('Y-m-d') . "," . Carbon::now()->format('Y-m-d'); + $dateRange = explode(",", $dateRange); + + $startDateFilter = $dateRange[0] . ' ' . Carbon::parse('00:01')->format('H:i'); + $endDateFilter = $dateRange[1] . ' ' . Carbon::parse('23:59')->format('H:i'); + + $startDate = Carbon::parse($startDateFilter); + $endDate = Carbon::parse($endDateFilter); + + $totalWeeks = ceil($startDate->floatDiffInWeeks($endDate)); + + return compact( + 'cardId', + 'startDate', + 'endDate', + 'totalWeeks', + 'startDateFilter', + 'endDateFilter' + ); + } + + /** + * Format dates of filter. + * + * @param array $data + * @return array + */ + public function getFormattedDateRange($data) + { + $labels = $data['labels']; + $currentIndex = $data['index']; + $totalWeeks = $data['total_weeks']; + + $startDate = Carbon::parse($data["start_date"]); + $endDate = Carbon::parse($data["end_date"]); + + array_push($labels, __("admin::app.dashboard.week") . (($totalWeeks + 1) - $currentIndex)); + + $startDate = $currentIndex != $totalWeeks + ? $startDate->addDays((7 * ($totalWeeks - $currentIndex)) + ($totalWeeks - $currentIndex)) + : $startDate->addDays(7 * ($totalWeeks - $currentIndex)); + + $endDate = $currentIndex == 1 ? $endDate->addDays(1) : (clone $startDate)->addDays(7); + + $startDate = $startDate->format('Y-m-d 00:00:01'); + $endDate = $endDate->format('Y-m-d 23:59:59'); + + return compact('startDate', 'endDate', 'labels'); + } + + /** + * Collect card data based on `cardId`. + * + * @param array $requestData + * @return array|boolean + */ + public function getFormattedCardData($requestData) + { + $relevantFunction = false; + + list( + 'cardId' => $cardId, + 'endDate' => $endDate, + 'startDate' => $startDate, + 'totalWeeks' => $totalWeeks, + 'endDateFilter' => $endDateFilter, + 'startDateFilter' => $startDateFilter, + ) = $this->getDateRangeDetails($requestData); + + foreach ($this->getCards() as $card) { + if (isset($card['card_id']) && $card['card_id'] == $cardId) { + if (isset($card['class_name'])) { + $class = app($card['class_name']); + } + + if (isset($card['method_name'])) { + $relevantFunction = $card['method_name']; + } + } + } + + $class = $class ?? $this; + + if (!$relevantFunction) { + $relevantFunction = "get" . str_replace(" ", "", ucwords(str_replace("_", " ", $cardId))); + } + + if (!method_exists($class ?? $this, $relevantFunction)) { + $relevantFunction = false; + } + + $cardData = $relevantFunction + ? $class->{$relevantFunction}( + $startDateFilter, + $endDateFilter, + $totalWeeks + ) + : $cardData ?? false; + + return $cardData; + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Activity/ActivityController.php b/packages/Webkul/Admin/src/Http/Controllers/Activity/ActivityController.php new file mode 100644 index 0000000..4dff095 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Activity/ActivityController.php @@ -0,0 +1,401 @@ +activityRepository = $activityRepository; + + $this->fileRepository = $fileRepository; + + $this->leadRepository = $leadRepository; + + $this->userRepository = $userRepository; + + $this->personRepository = $personRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + return view('admin::activities.index'); + } + + /** + * Returns a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function get() + { + if (request('view_type')) { + $startDate = request()->get('startDate') + ? Carbon::createFromTimeString(request()->get('startDate') . " 00:00:01") + : Carbon::now()->startOfWeek()->format('Y-m-d H:i:s'); + + $endDate = request()->get('endDate') + ? Carbon::createFromTimeString(request()->get('endDate') . " 23:59:59") + : Carbon::now()->endOfWeek()->format('Y-m-d H:i:s'); + + $activities = $this->activityRepository->getActivities([$startDate, $endDate])->toArray(); + + return response()->json([ + 'activities' => $activities, + ]); + } else { + return app(\Webkul\Admin\DataGrids\Activity\ActivityDataGrid::class)->toJson(); + } + } + + /** + * Check if activity duration is overlapping with another activity duration. + * + * @return \Illuminate\Http\Response + */ + public function checkIfOverlapping() + { + $isOverlapping = $this->activityRepository->isDurationOverlapping( + request('schedule_from'), + request('schedule_to'), + request('participants'), + request('id') + ); + + return response()->json([ + 'overlapping' => $isOverlapping, + ]); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'type' => 'required', + 'comment' => 'required_if:type,note', + 'schedule_from' => 'required_unless:type,note', + 'schedule_to' => 'required_unless:type,note', + ]); + + Event::dispatch('activity.create.before'); + + $activity = $this->activityRepository->create(array_merge(request()->all(), [ + 'is_done' => request('type') == 'note' ? 1 : 0, + 'user_id' => auth()->guard('user')->user()->id, + ])); + + if (request('participants')) { + if (is_array(request('participants.users'))) { + foreach (request('participants.users') as $userId) { + $activity->participants()->create([ + 'user_id' => $userId + ]); + } + } + + if (is_array(request('participants.persons'))) { + foreach (request('participants.persons') as $personId) { + $activity->participants()->create([ + 'person_id' => $personId, + ]); + } + } + } + + if (request('lead_id')) { + $lead = $this->leadRepository->find(request('lead_id')); + + $lead->activities()->attach($activity->id); + } + + Event::dispatch('activity.create.after', $activity); + + session()->flash('success', trans('admin::app.activities.create-success', ['type' => trans('admin::app.activities.' . $activity->type)])); + + return redirect()->back(); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $activity = $this->activityRepository->findOrFail($id); + + return view('admin::activities.edit', compact('activity')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + Event::dispatch('activity.update.before', $id); + + $activity = $this->activityRepository->update(request()->all(), $id); + + if (request('participants')) { + $activity->participants()->delete(); + + if (is_array(request('participants.users'))) { + foreach (request('participants.users') as $userId) { + $activity->participants()->create([ + 'user_id' => $userId + ]); + } + } + + if (is_array(request('participants.persons'))) { + foreach (request('participants.persons') as $personId) { + $activity->participants()->create([ + 'person_id' => $personId, + ]); + } + } + } + + if (request('lead_id')) { + $lead = $this->leadRepository->find(request('lead_id')); + + if (!$lead->activities->contains($id)) { + $lead->activities()->attach($id); + } + } + + Event::dispatch('activity.update.after', $activity); + + if (request()->ajax()) { + return response()->json([ + 'message' => trans('admin::app.activities.update-success', ['type' => trans('admin::app.activities.' . $activity->type)]), + ]); + } else { + session()->flash('success', trans('admin::app.activities.update-success', ['type' => trans('admin::app.activities.' . $activity->type)])); + + return redirect()->route('admin.activities.index'); + } + } + + /** + * Mass Update the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massUpdate() + { + $count = 0; + + $data = request()->all(); + + foreach (request('rows') as $activityId) { + Event::dispatch('activity.update.before', $activityId); + + $activity = $this->activityRepository->update([ + 'is_done' => request('value'), + ], $activityId); + + Event::dispatch('activity.update.after', $activity); + + $count++; + } + + if (!$count) { + return response()->json([ + 'message' => trans('admin::app.activities.mass-update-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.activities.mass-update-success'), + ]); + } + + /** + * Search participants results + * + * @return \Illuminate\Http\Response + */ + public function searchParticipants() + { + $users = $this->userRepository->findWhere([ + ['name', 'like', '%' . urldecode(request()->input('query')) . '%'] + ]); + + $persons = $this->personRepository->findWhere([ + ['name', 'like', '%' . urldecode(request()->input('query')) . '%'] + ]); + + return response()->json([ + 'users' => $users, + 'persons' => $persons, + ]); + } + + /** + * Upload files to storage + * + * @return \Illuminate\View\View + */ + public function upload() + { + $this->validate(request(), [ + 'file' => 'required', + ]); + + Event::dispatch('activities.file.create.before'); + + $file = $this->fileRepository->upload(request()->all()); + + if ($file) { + if ($leadId = request('lead_id')) { + $lead = $this->leadRepository->find($leadId); + + $lead->activities()->attach($file->activity->id); + } + + Event::dispatch('activities.file.create.after', $file); + + session()->flash('success', trans('admin::app.activities.file-upload-success')); + } else { + session()->flash('error', trans('admin::app.activities.file-upload-error')); + } + + return redirect()->back(); + } + + /** + * Download file from storage + * + * @param int $id + * @return \Illuminate\View\View + */ + public function download($id) + { + $file = $this->fileRepository->findOrFail($id); + + return Storage::download($file->path); + } + + /* + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $activity = $this->activityRepository->findOrFail($id); + + try { + Event::dispatch('activity.delete.before', $id); + + $this->activityRepository->delete($id); + + Event::dispatch('activity.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.activities.destroy-success', ['type' => trans('admin::app.activities.' . $activity->type)]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.activities.destroy-failed', ['type' => trans('admin::app.activities.' . $activity->type)]), + ], 400); + } + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $activityId) { + Event::dispatch('activity.delete.before', $activityId); + + $this->activityRepository->delete($activityId); + + Event::dispatch('activity.delete.after', $activityId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.activities.title')]) + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Admin/DashboardController.php b/packages/Webkul/Admin/src/Http/Controllers/Admin/DashboardController.php new file mode 100644 index 0000000..1c631b9 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Admin/DashboardController.php @@ -0,0 +1,116 @@ +dashboardHelper = $dashboardHelper; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + $cards = $this->dashboardHelper->getCards(); + + if ($dateRange = request('date-range')) { + $dateRange = explode(",", $dateRange); + + $endDate = $dateRange[1]; + $startDate = $dateRange[0]; + } else { + $endDate = Carbon::now()->format('Y-m-d'); + + $startDate = Carbon::now()->subMonth()->addDays(1)->format('Y-m-d'); + } + + return view('admin::dashboard.index', compact('cards', 'startDate', 'endDate')); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function template() + { + return view('admin::dashboard.template'); + } + + /** + * Returns json data for dashboard card. + */ + public function getCardData() + { + $cardData = $this->dashboardHelper->getFormattedCardData(request()->all()); + + return response()->json($cardData); + } + + /** + * Returns json data for available dashboard cards. + * + * @return \Illuminate\Http\Response + */ + public function getCards() + { + $response = $this->dashboardHelper->getCards();; + + $response = array_map(function ($card) { + if ($card['view_url'] ?? false) { + $card['view_url'] = route($card['view_url'], $card['url_params'] ?? []); + } + + return $card; + }, $response); + + return response()->json($response); + } + + /** + * Returns updated json data for available dashboard cards. + * + * @return \Illuminate\Http\Response + */ + public function updateCards() + { + $requestData = request()->all(); + + $cards = $this->dashboardHelper->getCards(); + + foreach ($requestData['cards'] as $requestedCardData) { + foreach ($cards as $cardIndex => $card) { + if (isset($card['card_id']) + && isset($requestedCardData['card_id']) + && $card['card_id'] == $requestedCardData['card_id'] + ) { + $cards[$cardIndex]['selected'] = $requestedCardData['selected']; + } + } + } + + return response()->json($cards); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Configuration/ConfigurationController.php b/packages/Webkul/Admin/src/Http/Controllers/Configuration/ConfigurationController.php new file mode 100644 index 0000000..86d70ef --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Configuration/ConfigurationController.php @@ -0,0 +1,98 @@ +configurationRepository = $configurationRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + $slugs = $this->getDefaultConfigSlugs(); + + if (count($slugs)) { + return redirect()->route('admin.configuration.index', $slugs); + } + + return view('admin::configuration.index'); + } + + /** + * Returns slugs + * + * @return array + */ + public function getDefaultConfigSlugs() + { + if (!request()->route('slug')) { + $firstItem = current(app('core_config')->items); + + $temp = explode('.', $firstItem['key']); + + return ['slug' => current($temp)]; + } + + return []; + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + Event::dispatch('core.configuration.save.before'); + + $this->configurationRepository->create(request()->all()); + + Event::dispatch('core.configuration.save.after'); + + session()->flash('success', trans('admin::app.configuration.save-message')); + + return redirect()->back(); + } + + /** + * download the file for the specified resource. + * + * @return \Illuminate\Http\Response + */ + public function download() + { + $path = request()->route()->parameters()['path']; + + $fileName = 'configuration/' . $path; + + $config = $this->configurationRepository->findOneByField('value', $fileName); + + return Storage::download($config['value']); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php b/packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php new file mode 100644 index 0000000..5c3a83c --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Contact/OrganizationController.php @@ -0,0 +1,156 @@ +organizationRepository = $organizationRepository; + + request()->request->add(['entity_type' => 'organizations']); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Contact\OrganizationDataGrid::class)->toJson(); + } + + return view('admin::contacts.organizations.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::contacts.organizations.create'); + } + + + /** + * Store a newly created resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @return \Illuminate\Http\Response + */ + public function store(AttributeForm $request) + { + Event::dispatch('contacts.organization.create.before'); + + $organization = $this->organizationRepository->create(request()->all()); + + Event::dispatch('contacts.organization.create.after', $organization); + + session()->flash('success', trans('admin::app.contacts.organizations.create-success')); + + return redirect()->route('admin.contacts.organizations.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $organization = $this->organizationRepository->findOrFail($id); + + return view('admin::contacts.organizations.edit', compact('organization')); + } + + /** + * Update the specified resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(AttributeForm $request, $id) + { + Event::dispatch('contacts.organization.update.before', $id); + + $organization = $this->organizationRepository->update(request()->all(), $id); + + Event::dispatch('contacts.organization.update.after', $organization); + + session()->flash('success', trans('admin::app.contacts.organizations.update-success')); + + return redirect()->route('admin.contacts.organizations.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $this->organizationRepository->findOrFail($id); + + try { + Event::dispatch('contact.organization.delete.before', $id); + + $this->organizationRepository->delete($id); + + Event::dispatch('contact.organization.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.contacts.organizations.organization')]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.response.destroy-failed', ['name' => trans('admin::app.contacts.organizations.organization')]), + ], 400); + } + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $organizationId) { + Event::dispatch('contact.organization.delete.before', $organizationId); + + $this->organizationRepository->delete($organizationId); + + Event::dispatch('contact.organization.delete.after', $organizationId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.contacts.organizations.title')]) + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Contact/PersonController.php b/packages/Webkul/Admin/src/Http/Controllers/Contact/PersonController.php new file mode 100644 index 0000000..6696038 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Contact/PersonController.php @@ -0,0 +1,185 @@ +personRepository = $personRepository; + + request()->request->add(['entity_type' => 'persons']); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Contact\PersonDataGrid::class)->toJson(); + } + + return view('admin::contacts.persons.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::contacts.persons.create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @return \Illuminate\Http\Response + */ + public function store(AttributeForm $request) + { + Event::dispatch('contacts.person.create.before'); + + $person = $this->personRepository->create($this->sanitizeRequestedPersonData()); + + Event::dispatch('contacts.person.create.after', $person); + + session()->flash('success', trans('admin::app.contacts.persons.create-success')); + + return redirect()->route('admin.contacts.persons.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $person = $this->personRepository->findOrFail($id); + + return view('admin::contacts.persons.edit', compact('person')); + } + + /** + * Update the specified resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(AttributeForm $request, $id) + { + Event::dispatch('contacts.person.update.before', $id); + + $person = $this->personRepository->update($this->sanitizeRequestedPersonData(), $id); + + Event::dispatch('contacts.person.update.after', $person); + + session()->flash('success', trans('admin::app.contacts.persons.update-success')); + + return redirect()->route('admin.contacts.persons.index'); + } + + /** + * Search person results. + * + * @return \Illuminate\Http\Response + */ + public function search() + { + $results = $this->personRepository->findWhere([ + ['name', 'like', '%' . urldecode(request()->input('query')) . '%'] + ]); + + return response()->json($results); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $person = $this->personRepository->findOrFail($id); + + try { + Event::dispatch('contacts.person.delete.before', $id); + + $this->personRepository->delete($id); + + Event::dispatch('contacts.person.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.contacts.persons.person')]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.response.destroy-failed', ['name' => trans('admin::app.contacts.persons.person')]), + ], 400); + } + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $personId) { + Event::dispatch('contact.person.delete.before', $personId); + + $this->personRepository->delete($personId); + + Event::dispatch('contact.person.delete.after', $personId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.contacts.persons.title')]) + ]); + } + + /** + * Sanitize requested person data and return the clean array. + * + * @return array + */ + private function sanitizeRequestedPersonData(): array + { + $data = request()->all(); + + $data['contact_numbers'] = collect($data['contact_numbers'])->filter(function ($number) { + return !is_null($number['value']); + })->toArray(); + + return $data; + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Controller.php b/packages/Webkul/Admin/src/Http/Controllers/Controller.php new file mode 100644 index 0000000..7be3835 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Controller.php @@ -0,0 +1,23 @@ +route('admin.session.create'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Lead/LeadController.php b/packages/Webkul/Admin/src/Http/Controllers/Lead/LeadController.php new file mode 100644 index 0000000..c3f4db7 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Lead/LeadController.php @@ -0,0 +1,383 @@ +leadRepository = $leadRepository; + + $this->pipelineRepository = $pipelineRepository; + + $this->stageRepository = $stageRepository; + + request()->request->add(['entity_type' => 'leads']); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request('pipeline_id')) { + $pipeline = $this->pipelineRepository->find(request('pipeline_id')); + } else { + $pipeline = $this->pipelineRepository->getDefaultPipeline(); + } + + return view('admin::leads.index', compact('pipeline')); + } + + /** + * Returns a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function get() + { + if (bouncer()->hasPermission('leads.view')) { + if (request('view_type')) { + return app(\Webkul\Admin\DataGrids\Lead\LeadDataGrid::class)->toJson(); + } else { + $createdAt = request('created_at') ?? null; + + if ($createdAt && isset($createdAt["bw"])) { + $createdAt = explode(",", $createdAt["bw"]); + + $createdAt[0] .= ' 00:01'; + + $createdAt[1] = $createdAt[1] + ? $createdAt[1] . ' 23:59' + : Carbon::now()->format('Y-m-d 23:59'); + } else { + $createdAt = null; + } + + if (request('pipeline_id')) { + $pipeline = $this->pipelineRepository->find(request('pipeline_id')); + } else { + $pipeline = $this->pipelineRepository->getDefaultPipeline(); + } + + $data = []; + + if ($stageId = request('pipeline_stage_id')) { + $query = $this->leadRepository->getLeadsQuery($pipeline->id, $stageId, request('search') ?? '', $createdAt); + + $paginator = $query->paginate(10); + + $data[$stageId] = [ + 'leads' => [], + 'pagination' => [ + 'current' => $current = $paginator->currentPage(), + 'last' => $last = $paginator->lastPage(), + 'next' => $current < $last ? $current + 1 : null, + ], + 'total' => core()->formatBasePrice($query->getModel()->paginate(request('page') ? request('page') * 10 : 10, ['lead_value'], 'page', 1)->sum('lead_value')), + ]; + + foreach ($paginator as $lead) { + $data[$stageId]['leads'][] = array_merge($lead->toArray(), [ + 'lead_value' => core()->formatBasePrice($lead->lead_value), + ]); + } + } else { + foreach ($pipeline->stages as $stage) { + $query = $this->leadRepository->getLeadsQuery($pipeline->id, $stage->id, request('search') ?? '', $createdAt); + + $paginator = $query->paginate(10); + + $data[$stage->id] = [ + 'leads' => [], + 'pagination' => [ + 'current' => $current = $paginator->currentPage(), + 'last' => $last = $paginator->lastPage(), + 'next' => $current < $last ? $current + 1 : null, + ], + 'total' => core()->formatBasePrice($query->paginate(10)->sum('lead_value')), + ]; + + foreach ($paginator as $lead) { + $data[$stage->id]['leads'][] = array_merge($lead->toArray(), [ + 'lead_value' => core()->formatBasePrice($lead->lead_value), + ]); + } + } + } + + return response()->json($data); + } + } + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::leads.create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Webkul\Admin\Http\Requests\LeadForm $request + * @return \Illuminate\Http\Response + */ + public function store(LeadForm $request) + { + Event::dispatch('lead.create.before'); + + $data = request()->all(); + + $data['status'] = 1; + + if ($data['lead_pipeline_stage_id']) { + $stage = $this->stageRepository->findOrFail($data['lead_pipeline_stage_id']); + + $data['lead_pipeline_id'] = $stage->lead_pipeline_id; + } else { + $pipeline = $this->pipelineRepository->getDefaultPipeline(); + + $stage = $pipeline->stages()->first(); + + $data['lead_pipeline_id'] = $pipeline->id; + + $data['lead_pipeline_stage_id'] = $stage->id; + } + + if (in_array($stage->code, ['won', 'lost'])) { + $data['closed_at'] = Carbon::now(); + } + + $lead = $this->leadRepository->create($data); + + Event::dispatch('lead.create.after', $lead); + + session()->flash('success', trans('admin::app.leads.create-success')); + + return redirect()->route('admin.leads.index', $data['lead_pipeline_id']); + } + + /** + * Display a resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function view($id) + { + $lead = $this->leadRepository->findOrFail($id); + + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission != 'global') { + if ($currentUser->view_permission == 'group') { + $userIds = app('\Webkul\User\Repositories\UserRepository')->getCurrentUserGroupsUserIds(); + + if (!in_array($lead->user_id, $userIds)) { + return redirect()->route('admin.leads.index'); + } + } else { + if ($lead->user_id != $currentUser->id) { + return redirect()->route('admin.leads.index'); + } + } + } + + return view('admin::leads.view', compact('lead')); + } + + /** + * Update the specified resource in storage. + * + * @param \Webkul\Admin\Http\Requests\LeadForm $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(LeadForm $request, $id) + { + Event::dispatch('lead.update.before', $id); + $data = request()->all(); + + if ($data['lead_pipeline_stage_id']) { + $stage = $this->stageRepository->findOrFail($data['lead_pipeline_stage_id']); + + $data['lead_pipeline_id'] = $stage->lead_pipeline_id; + } else { + $pipeline = $this->pipelineRepository->getDefaultPipeline(); + + $stage = $pipeline->stages()->first(); + + $data['lead_pipeline_id'] = $pipeline->id; + + $data['lead_pipeline_stage_id'] = $stage->id; + } + + $lead = $this->leadRepository->update($data, $id); + + Event::dispatch('lead.update.after', $lead); + + if (request()->ajax()) { + return response()->json([ + 'message' => trans('admin::app.leads.update-success'), + ]); + } else { + session()->flash('success', trans('admin::app.leads.update-success')); + + if (request()->has('closed_at')) { + return redirect()->back(); + } else { + return redirect()->route('admin.leads.index', $data['lead_pipeline_id']); + } + } + } + + /** + * Search person results. + * + * @return \Illuminate\Http\Response + */ + public function search() + { + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission == 'global') { + $results = $this->leadRepository->findWhere([ + ['title', 'like', '%' . urldecode(request()->input('query')) . '%'], + ]); + } elseif ($currentUser->view_permission == 'individual') { + $results = $this->leadRepository->findWhere([ + ['title', 'like', '%' . urldecode(request()->input('query')) . '%'], + ['user_id', '=', $currentUser->id], + ]); + } elseif ($currentUser->view_permission == 'group') { + $userIds = app('\Webkul\User\Repositories\UserRepository')->getCurrentUserGroupsUserIds(); + + $results = $this->leadRepository->findWhere([ + ['title', 'like', '%' . urldecode(request()->input('query')) . '%'], + ['user_id', 'IN', $userIds], + ]); + } + + return response()->json($results); + } + + /* + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $this->leadRepository->findOrFail($id); + + try { + Event::dispatch('lead.delete.before', $id); + + $this->leadRepository->delete($id); + + Event::dispatch('lead.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.leads.lead')]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.response.destroy-failed', ['name' => trans('admin::app.leads.lead')]), + ], 400); + } + } + + /** + * Mass Update the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massUpdate() + { + $data = request()->all(); + + foreach ($data['rows'] as $leadId) { + $lead = $this->leadRepository->find($leadId); + + Event::dispatch('lead.update.before', $leadId); + + $lead->update(['lead_pipeline_stage_id' => $data['value']]); + + Event::dispatch('lead.update.before', $leadId); + } + + return response()->json([ + 'message' => trans('admin::app.response.update-success', ['name' => trans('admin::app.leads.title')]) + ]); + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $leadId) { + Event::dispatch('lead.delete.before', $leadId); + + $this->leadRepository->delete($leadId); + + Event::dispatch('lead.delete.after', $leadId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.leads.title')]), + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Lead/QuoteController.php b/packages/Webkul/Admin/src/Http/Controllers/Lead/QuoteController.php new file mode 100644 index 0000000..2ac2eaa --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Lead/QuoteController.php @@ -0,0 +1,88 @@ +leadRepository = $leadRepository; + + $this->quoteRepository = $quoteRepository; + } + + /** + * Store a newly created resource in storage. + * + * @param integer $id + * @return \Illuminate\Http\Response + */ + public function store($id) + { + Event::dispatch('leads.quote.create.before'); + + $lead = $this->leadRepository->find($id); + + if (!$lead->quotes->contains(request('id'))) { + $lead->quotes()->attach(request('id')); + } + + Event::dispatch('leads.quote.create.after', $lead); + + return response()->json([ + 'message' => trans('admin::app.leads.quote-create-success'), + ], 200); + } + + /** + * Remove the specified resource from storage. + * + * @param integer $leadId + * @param integer $tagId + * @return \Illuminate\Http\Response + */ + public function delete($leadId) + { + Event::dispatch('leads.quote.delete.before', $leadId); + + $lead = $this->leadRepository->find($leadId); + + $lead->quotes()->detach(request('quote_id')); + + Event::dispatch('leads.quote.delete.after', $lead); + + return response()->json([ + 'message' => trans('admin::app.leads.quote-destroy-success'), + ], 200); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Lead/TagController.php b/packages/Webkul/Admin/src/Http/Controllers/Lead/TagController.php new file mode 100644 index 0000000..1190d34 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Lead/TagController.php @@ -0,0 +1,76 @@ +leadRepository = $leadRepository; + } + + /** + * Store a newly created resource in storage. + * + * @param integer $id + * @return \Illuminate\Http\Response + */ + public function store($id) + { + Event::dispatch('leads.tag.create.before', $id); + + $lead = $this->leadRepository->find($id); + + if (!$lead->tags->contains(request('id'))) { + $lead->tags()->attach(request('id')); + } + + Event::dispatch('leads.tag.create.after', $lead); + + return response()->json([ + 'status' => true, + 'message' => trans('admin::app.leads.tag-create-success'), + ], 200); + } + + /** + * Remove the specified resource from storage. + * + * @param integer $leadId + * @param integer $tagId + * @return \Illuminate\Http\Response + */ + public function delete($leadId) + { + Event::dispatch('leads.tag.delete.before', $leadId); + + $lead = $this->leadRepository->find($leadId); + + $lead->tags()->detach(request('tag_id')); + + Event::dispatch('leads.tag.delete.after', $lead); + + return response()->json([ + 'status' => true, + 'message' => trans('admin::app.leads.tag-destroy-success'), + ], 200); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Mail/EmailController.php b/packages/Webkul/Admin/src/Http/Controllers/Mail/EmailController.php new file mode 100644 index 0000000..80b3090 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Mail/EmailController.php @@ -0,0 +1,378 @@ +leadRepository = $leadRepository; + + $this->emailRepository = $emailRepository; + + $this->attachmentRepository = $attachmentRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (!request('route')) { + return redirect()->route('admin.mail.index', ['route' => 'inbox']); + } + + if (!bouncer()->hasPermission('mail.' . request('route'))) { + abort(401, 'This action is unauthorized'); + } + + switch (request('route')) { + case 'compose': + return view('admin::mail.compose'); + + default: + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Mail\EmailDataGrid::class)->toJson(); + } + + return view('admin::mail.index'); + } + } + + /** + * Display a resource. + * + * @return \Illuminate\View\View + */ + public function view() + { + $email = $this->emailRepository + ->with(['emails', 'attachments', 'emails.attachments', 'lead', 'person']) + ->findOrFail(request('id')); + + $currentUser = auth()->guard('user')->user(); + + if ($currentUser->view_permission == 'individual') { + $results = $this->leadRepository->findWhere([ + ['id', '=', $email->lead_id], + ['user_id', '=', $currentUser->id], + ]); + } elseif ($currentUser->view_permission == 'group') { + $userIds = app('\Webkul\User\Repositories\UserRepository')->getCurrentUserGroupsUserIds(); + + $results = $this->leadRepository->findWhere([ + ['id', '=', $email->lead_id], + ['user_id', 'IN', $userIds], + ]); + } elseif ($currentUser->view_permission == 'global') { + $results = $this->leadRepository->findWhere([ + ['id', '=', $email->lead_id], + ]); + } + + if (empty($results->toArray())) { + unset($email->lead_id); + } + + if (request('route') == 'draft') { + return view('admin::mail.compose', compact('email')); + } else { + return view('admin::mail.view', compact('email')); + } + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'reply_to' => 'required|array|min:1', + 'reply' => 'required', + ]); + + Event::dispatch('email.create.before'); + + $uniqueId = time() . '@' . config('mail.domain'); + + $referenceIds = []; + + if ($parentId = request('parent_id')) { + $parent = $this->emailRepository->findOrFail($parentId); + + $referenceIds = $parent->reference_ids ?? []; + } + + $email = $this->emailRepository->create(array_merge(request()->all(), [ + 'source' => 'web', + 'from' => config('mail.from.address'), + 'user_type' => 'admin', + 'folders' => request('is_draft') ? ['draft'] : ['outbox'], + 'name' => auth()->guard('user')->user()->name, + 'unique_id' => $uniqueId, + 'message_id' => $uniqueId, + 'reference_ids' => array_merge($referenceIds, [$uniqueId]), + 'user_id' => auth()->guard('user')->user()->id, + ])); + + if (!request('is_draft')) { + try { + Mail::send(new Email($email)); + + $this->emailRepository->update([ + 'folders' => ['inbox', 'sent'] + ], $email->id); + } catch (\Exception $e) { + } + } + + Event::dispatch('email.create.after', $email); + + if (request('is_draft')) { + session()->flash('success', trans('admin::app.mail.saved-to-draft')); + + return redirect()->route('admin.mail.index', ['route' => 'draft']); + } + + session()->flash('success', trans('admin::app.mail.create-success')); + + return redirect()->route('admin.mail.index', ['route' => 'inbox']); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + Event::dispatch('email.update.before', $id); + + $data = request()->all(); + + if (!is_null(request('is_draft'))) { + $data['folders'] = request('is_draft') ? ['draft'] : ['outbox']; + } + + $email = $this->emailRepository->update($data, request('id') ?? $id); + + Event::dispatch('email.update.after', $email); + + if (!is_null(request('is_draft')) && !request('is_draft')) { + try { + Mail::send(new Email($email)); + + $this->emailRepository->update([ + 'folders' => ['inbox', 'sent'] + ], $email->id); + } catch (\Exception $e) { + } + } + + if (!is_null(request('is_draft'))) { + if (request('is_draft')) { + session()->flash('success', trans('admin::app.mail.saved-to-draft')); + + return redirect()->route('admin.mail.index', ['route' => 'draft']); + } else { + session()->flash('success', trans('admin::app.mail.create-success')); + + return redirect()->route('admin.mail.index', ['route' => 'inbox']); + } + } + + if (request()->ajax()) { + $response = [ + 'message' => trans('admin::app.mail.update-success'), + ]; + + if (request('lead_id')) { + $response['html'] = view('admin::common.custom-attributes.view', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'leads', + ]), + 'entity' => $this->leadRepository->find(request('lead_id')), + ])->render(); + } + + return response()->json($response); + } else { + session()->flash('success', trans('admin::app.mail.update-success')); + + return redirect()->back(); + + } + } + + /** + * Run process inbound parse email + * + * @return \Illuminate\Http\Response + */ + public function inboundParse() + { + $this->emailRepository->processInboundParseMail(request('email')); + + return response()->json([], 200); + } + + /** + * Download file from storage + * + * @param int $id + * @return \Illuminate\View\View + */ + public function download($id) + { + $attachment = $this->attachmentRepository->findOrFail($id); + + return Storage::download($attachment->path); + } + + /** + * Mass Update the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massUpdate() + { + foreach (request('rows') as $emailId) { + Event::dispatch('email.update.before', $emailId); + + $this->emailRepository->update([ + 'folders' => request('folders'), + ], $emailId); + + Event::dispatch('email.update.after', $emailId); + } + + return response()->json([ + 'message' => trans('admin::app.mail.mass-update-success'), + ]); + } + + /* + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $email = $this->emailRepository->findOrFail($id); + + try { + Event::dispatch('email.' . request('type') . '.before', $id); + + $parentId = $email->parent_id; + + if (request('type') == 'trash') { + $this->emailRepository->update([ + 'folders' => ['trash'], + ], $id); + } else { + $this->emailRepository->delete($id); + } + + Event::dispatch('email.' . request('type') . '.after', $id); + + if (request()->ajax()) { + return response()->json([ + 'message' => trans('admin::app.mail.delete-success'), + ], 200); + } else { + session()->flash('success', trans('admin::app.mail.delete-success')); + + if ($parentId) { + return redirect()->back(); + } else { + return redirect()->route('admin.mail.index', ['route' => 'inbox']); + } + } + } catch (\Exception $exception) { + if (request()->ajax()) { + return response()->json([ + 'message' => trans('admin::app.mail.delete-failed'), + ], 400); + } else { + session()->flash('error', trans('admin::app.mail.delete-failed')); + + return redirect()->back(); + } + } + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $emailId) { + Event::dispatch('email.' . request('type') . '.before', $emailId); + + if (request('type') == 'trash') { + $this->emailRepository->update([ + 'folders' => ['trash'], + ], $emailId); + } else { + $this->emailRepository->delete($emailId); + } + + Event::dispatch('email.' . request('type') . '.after', $emailId); + } + + return response()->json([ + 'message' => trans('admin::app.mail.destroy-success'), + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Product/ProductController.php b/packages/Webkul/Admin/src/Http/Controllers/Product/ProductController.php new file mode 100644 index 0000000..04b4888 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Product/ProductController.php @@ -0,0 +1,169 @@ +productRepository = $productRepository; + + request()->request->add(['entity_type' => 'products']); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Product\ProductDataGrid::class)->toJson(); + } + + return view('admin::products.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::products.create'); + } + + /** + * Store a newly created resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @return \Illuminate\Http\Response + */ + public function store(AttributeForm $request) + { + Event::dispatch('product.create.before'); + + $product = $this->productRepository->create(request()->all()); + + Event::dispatch('product.create.after', $product); + + session()->flash('success', trans('admin::app.products.create-success')); + + return redirect()->route('admin.products.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $product = $this->productRepository->findOrFail($id); + + return view('admin::products.edit', compact('product')); + } + + /** + * Update the specified resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(AttributeForm $request, $id) + { + Event::dispatch('product.update.before', $id); + + $product = $this->productRepository->update(request()->all(), $id); + + Event::dispatch('product.update.after', $product); + + session()->flash('success', trans('admin::app.products.update-success')); + + return redirect()->route('admin.products.index'); + } + + /** + * Search product results + * + * @return \Illuminate\Http\Response + */ + public function search() + { + $results = $this->productRepository->findWhere([ + ['name', 'like', '%' . urldecode(request()->input('query')) . '%'] + ]); + + return response()->json($results); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $this->productRepository->findOrFail($id); + + try { + Event::dispatch('settings.products.delete.before', $id); + + $this->productRepository->delete($id); + + Event::dispatch('settings.products.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.products.product')]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.response.destroy-failed', ['name' => trans('admin::app.products.product')]), + ], 400); + } + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $productId) { + Event::dispatch('product.delete.before', $productId); + + $this->productRepository->delete($productId); + + Event::dispatch('product.delete.after', $productId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.products.title')]), + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Quote/QuoteController.php b/packages/Webkul/Admin/src/Http/Controllers/Quote/QuoteController.php new file mode 100644 index 0000000..500a919 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Quote/QuoteController.php @@ -0,0 +1,216 @@ +quoteRepository = $quoteRepository; + + $this->leadRepository = $leadRepository; + + request()->request->add(['entity_type' => 'quotes']); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(QuoteDataGrid::class)->toJson(); + } + + return view('admin::quotes.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + $lead = $this->leadRepository->find(request('id')); + + return view('admin::quotes.create', compact('lead')); + } + + /** + * Store a newly created resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @return \Illuminate\Http\Response + */ + public function store(AttributeForm $request) + { + Event::dispatch('quote.create.before'); + + $quote = $this->quoteRepository->create(request()->all()); + + if (request('lead_id')) { + $lead = $this->leadRepository->find(request('lead_id')); + + $lead->quotes()->attach($quote->id); + } + + Event::dispatch('quote.create.after', $quote); + + session()->flash('success', trans('admin::app.quotes.create-success')); + + return redirect()->route('admin.quotes.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $quote = $this->quoteRepository->findOrFail($id); + + return view('admin::quotes.edit', compact('quote')); + } + + /** + * Update the specified resource in storage. + * + * @param \Webkul\Attribute\Http\Requests\AttributeForm $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(AttributeForm $request, $id) + { + Event::dispatch('quote.update.before', $id); + + $quote = $this->quoteRepository->update(request()->all(), $id); + + $quote->leads()->detach(); + + if (request('lead_id')) { + $lead = $this->leadRepository->find(request('lead_id')); + + $lead->quotes()->attach($quote->id); + } + + Event::dispatch('quote.update.after', $quote); + + session()->flash('success', trans('admin::app.quotes.update-success')); + + return redirect()->route('admin.quotes.index'); + } + + /** + * Search quote results + * + * @return \Illuminate\Http\Response + */ + public function search() + { + $results = $this->quoteRepository->findWhere([ + ['name', 'like', '%' . urldecode(request()->input('query')) . '%'] + ]); + + return response()->json($results); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $this->quoteRepository->findOrFail($id); + + try { + Event::dispatch('quote.delete.before', $id); + + $this->quoteRepository->delete($id); + + Event::dispatch('quote.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.quotes.quote')]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.response.destroy-failed', ['name' => trans('admin::app.quotes.quote')]), + ], 400); + } + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $quoteId) { + Event::dispatch('quote.delete.before', $quoteId); + + $this->quoteRepository->delete($quoteId); + + Event::dispatch('quote.delete.after', $quoteId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.quotes.title')]), + ]); + } + + /** + * Print and download the for the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function print($id) + { + $quote = $this->quoteRepository->findOrFail($id); + + return PDF::loadHTML(view('admin::quotes.pdf', compact('quote'))->render()) + ->setPaper('a4') + ->download('Quote_' . $quote->subject . '.pdf'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/AttributeController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/AttributeController.php new file mode 100644 index 0000000..09af95a --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/AttributeController.php @@ -0,0 +1,224 @@ +attributeRepository = $attributeRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\AttributeDataGrid::class)->toJson(); + } + + return view('admin::settings.attributes.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::settings.attributes.create'); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'code' => ['required', 'unique:attributes,code,NULL,NULL,entity_type,' . request('entity_type'), new Code], + 'name' => 'required', + 'type' => 'required', + ]); + + Event::dispatch('settings.attribute.create.before'); + + request()->request->add(['quick_add' => 1]); + + $attribute = $this->attributeRepository->create(request()->all()); + + Event::dispatch('settings.attribute.create.after', $attribute); + + session()->flash('success', trans('admin::app.settings.attributes.create-success')); + + return redirect()->route('admin.settings.attributes.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $attribute = $this->attributeRepository->findOrFail($id); + + return view('admin::settings.attributes.edit', compact('attribute')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'code' => ['required', 'unique:attributes,code,NULL,NULL,entity_type,' . $id, new Code], + 'name' => 'required', + 'type' => 'required', + ]); + + Event::dispatch('settings.attribute.update.before', $id); + + $attribute = $this->attributeRepository->update(request()->all(), $id); + + Event::dispatch('settings.attribute.update.after', $attribute); + + session()->flash('success', trans('admin::app.settings.attributes.update-success')); + + return redirect()->route('admin.settings.attributes.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $attribute = $this->attributeRepository->findOrFail($id); + + if (!$attribute->is_user_defined) { + return response()->json([ + 'message' => trans('admin::app.settings.attributes.user-define-error'), + ], 400); + } + + try { + Event::dispatch('settings.attribute.delete.before', $id); + + $this->attributeRepository->delete($id); + + Event::dispatch('settings.attribute.delete.after', $id); + + return response()->json([ + 'status' => true, + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.settings.attributes.attribute')]), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.attributes.delete-failed'), + ], 400); + } + } + + /** + * Search attribute lookup results + * + * @param string $lookup + * @return \Illuminate\Http\Response + */ + public function lookup($lookup) + { + $results = $this->attributeRepository->getLookUpOptions($lookup, request()->input('query')); + + return response()->json($results); + } + + /** + * Search attribute lookup results + * + * @param string $lookup + * @return \Illuminate\Http\Response + */ + public function lookupEntity($lookup) + { + $result = $this->attributeRepository->getLookUpEntity($lookup, request()->input('query')); + + return response()->json($result); + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + $count = 0; + + foreach (request('rows') as $attributeId) { + $attribute = $this->attributeRepository->find($attributeId); + + if (!$attribute->is_user_defined) { + continue; + } + + Event::dispatch('settings.attribute.delete.before', $attributeId); + + $this->attributeRepository->delete($attributeId); + + Event::dispatch('settings.attribute.delete.after', $attributeId); + + $count++; + } + + if (!$count) { + return response()->json([ + 'message' => trans('admin::app.settings.attributes.mass-delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.settings.attributes.title')]), + ]); + } + + /** + * Download image or file + * + * @return \Illuminate\Http\Response + */ + public function download() + { + return Storage::download(request('path')); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/EmailTemplateController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/EmailTemplateController.php new file mode 100644 index 0000000..ac4fc77 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/EmailTemplateController.php @@ -0,0 +1,163 @@ +emailTemplateRepository = $emailTemplateRepository; + + $this->workflowEntityHelper = $workflowEntityHelper; + } + + /** + * Display a listing of the email template. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\EmailTemplateDataGrid::class)->toJson(); + } + + return view('admin::settings.email-templates.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + $placeholders = $this->workflowEntityHelper->getEmailTemplatePlaceholders(); + + return view('admin::settings.email-templates.create', compact('placeholders')); + } + + /** + * Store a newly created email templates in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required', + 'subject' => 'required', + 'content' => 'required', + ]); + + Event::dispatch('settings.email_templates.create.before'); + + $emailTemplate = $this->emailTemplateRepository->create(request()->all()); + + Event::dispatch('settings.email_templates.create.after', $emailTemplate); + + session()->flash('success', trans('admin::app.settings.email-templates.create-success')); + + return redirect()->route('admin.settings.email_templates.index'); + } + + /** + * Show the form for editing the specified email template. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $emailTemplate = $this->emailTemplateRepository->findOrFail($id); + + $placeholders = $this->workflowEntityHelper->getEmailTemplatePlaceholders(); + + return view('admin::settings.email-templates.edit', compact('emailTemplate', 'placeholders')); + } + + /** + * Update the specified email template in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required', + 'subject' => 'required', + 'content' => 'required', + ]); + + Event::dispatch('settings.email_templates.update.before', $id); + + $emailTemplate = $this->emailTemplateRepository->update(request()->all(), $id); + + Event::dispatch('settings.email_templates.update.after', $emailTemplate); + + session()->flash('success', trans('admin::app.settings.email-templates.update-success')); + + return redirect()->route('admin.settings.email_templates.index'); + } + + /** + * Remove the specified email template from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $emailTemplate = $this->emailTemplateRepository->findOrFail($id); + + try { + Event::dispatch('settings.email_templates.delete.before', $id); + + $this->emailTemplateRepository->delete($id); + + Event::dispatch('settings.email_templates.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.email-templates.delete-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.email-templates.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.email-templates.delete-failed'), + ], 400); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/GroupController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/GroupController.php new file mode 100644 index 0000000..c3974dc --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/GroupController.php @@ -0,0 +1,142 @@ +groupRepository = $groupRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\GroupDataGrid::class)->toJson(); + } + + return view('admin::settings.groups.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::settings.groups.create'); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required|unique:groups,name', + ]); + + Event::dispatch('settings.group.create.before'); + + $group = $this->groupRepository->create(request()->all()); + + Event::dispatch('settings.group.create.after', $group); + + session()->flash('success', trans('admin::app.settings.groups.create-success')); + + return redirect()->route('admin.settings.groups.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $group = $this->groupRepository->findOrFail($id); + + return view('admin::settings.groups.edit', compact('group')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required|unique:groups,name,' . $id, + ]); + + Event::dispatch('settings.group.update.before', $id); + + $group = $this->groupRepository->update(request()->all(), $id); + + Event::dispatch('settings.group.update.after', $group); + + session()->flash('success', trans('admin::app.settings.groups.update-success')); + + return redirect()->route('admin.settings.groups.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $group = $this->groupRepository->findOrFail($id); + + try { + Event::dispatch('settings.group.delete.before', $id); + + $this->groupRepository->delete($id); + + Event::dispatch('settings.group.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.groups.destroy-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.groups.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.groups.delete-failed'), + ], 400); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/PipelineController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/PipelineController.php new file mode 100644 index 0000000..3711268 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/PipelineController.php @@ -0,0 +1,159 @@ +pipelineRepository = $pipelineRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\PipelineDataGrid::class)->toJson(); + } + + return view('admin::settings.pipelines.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::settings.pipelines.create'); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store(PipelineForm $request) + { + $request->validated(); + + $request->merge([ + 'is_default' => request()->has('is_default') ? 1 : 0, + ]); + + Event::dispatch('settings.pipeline.create.before'); + + $pipeline = $this->pipelineRepository->create($request->all()); + + Event::dispatch('settings.pipeline.create.after', $pipeline); + + session()->flash('success', trans('admin::app.settings.pipelines.create-success')); + + return redirect()->route('admin.settings.pipelines.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $pipeline = $this->pipelineRepository->findOrFail($id); + + return view('admin::settings.pipelines.edit', compact('pipeline')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(PipelineForm $request, $id) + { + $request->validated(); + + $request->merge([ + 'is_default' => request()->has('is_default') ? 1 : 0, + ]); + + Event::dispatch('settings.pipeline.update.before', $id); + + $pipeline = $this->pipelineRepository->update($request->all(), $id); + + Event::dispatch('settings.pipeline.update.after', $pipeline); + + session()->flash('success', trans('admin::app.settings.pipelines.update-success')); + + return redirect()->route('admin.settings.pipelines.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $pipeline = $this->pipelineRepository->findOrFail($id); + + if ($pipeline->is_default) { + return response()->json([ + 'message' => trans('admin::app.settings.pipelines.default-delete-error'), + ], 400); + } else { + $defaultPipeline = $this->pipelineRepository->getDefaultPipeline(); + + $pipeline->leads()->update([ + 'lead_pipeline_id' => $defaultPipeline->id, + 'lead_pipeline_stage_id' => $defaultPipeline->stages()->first()->id, + ]); + } + + try { + Event::dispatch('settings.pipeline.delete.before', $id); + + $this->pipelineRepository->delete($id); + + Event::dispatch('settings.pipeline.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.pipelines.delete-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.pipelines.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.pipelines.delete-failed'), + ], 400); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/RoleController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/RoleController.php new file mode 100644 index 0000000..a764ed2 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/RoleController.php @@ -0,0 +1,186 @@ +roleRepository = $roleRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\RoleDataGrid::class)->toJson(); + } + + return view('admin::settings.roles.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + $acl = app('acl'); + + return view('admin::settings.roles.create', compact('acl')); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required', + 'permission_type' => 'required', + ]); + + Event::dispatch('settings.role.create.before'); + + $roleData = request()->all(); + + if ($roleData['permission_type'] == 'custom') { + if (!isset($roleData['permissions'])) { + $roleData['permissions'] = []; + } + } + + $role = $this->roleRepository->create($roleData); + + Event::dispatch('settings.role.create.after', $role); + + session()->flash('success', trans('admin::app.settings.roles.create-success')); + + return redirect()->route('admin.settings.roles.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $role = $this->roleRepository->findOrFail($id); + + $acl = app('acl'); + + return view('admin::settings.roles.edit', compact('role', 'acl')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required', + 'permission_type' => 'required', + ]); + + Event::dispatch('settings.role.update.before', $id); + + $roleData = request()->all(); + + if ($roleData['permission_type'] == 'custom') { + if (!isset($roleData['permissions'])) { + $roleData['permissions'] = []; + } + } + + $role = $this->roleRepository->update($roleData, $id); + + Event::dispatch('settings.role.update.after', $role); + + session()->flash('success', trans('admin::app.settings.roles.update-success')); + + return redirect()->route('admin.settings.roles.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $response = [ + 'responseCode' => 400, + ]; + + $role = $this->roleRepository->findOrFail($id); + + if ($role->admins && $role->admins->count() >= 1) { + $response['message'] = trans('admin::app.settings.roles.being-used'); + + session()->flash('error', $response['message']); + } else if ($this->roleRepository->count() == 1) { + $response['message'] = trans('admin::app.settings.roles.last-delete-error'); + + session()->flash('error', $response['message']); + } else { + try { + Event::dispatch('settings.role.delete.before', $id); + + if (auth()->guard('user')->user()->role_id == $id) { + $response['message'] = trans('admin::app.settings.roles.current-role-delete-error'); + } else { + $this->roleRepository->delete($id); + + Event::dispatch('settings.role.delete.after', $id); + + $message = trans('admin::app.settings.roles.delete-success'); + + $response = [ + 'responseCode' => 200, + 'message' => $message, + ]; + + session()->flash('success', $message); + } + } catch (\Exception $exception) { + $message = $exception->getMessage(); + + $response['message'] = $message; + + session()->flash('error', $message); + } + } + + return response()->json($response, $response['responseCode']); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/SettingController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/SettingController.php new file mode 100644 index 0000000..3634afc --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/SettingController.php @@ -0,0 +1,18 @@ +sourceRepository = $sourceRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\SourceDataGrid::class)->toJson(); + } + + return view('admin::settings.sources.index'); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $validator = Validator::make(request()->all(), [ + 'name' => 'required|unique:lead_sources,name' + ]); + + if ($validator->fails()) { + session()->flash('error', trans('admin::app.settings.sources.name-exists')); + + return redirect()->back(); + } + + Event::dispatch('settings.source.create.before'); + + $source = $this->sourceRepository->create(request()->all()); + + Event::dispatch('settings.source.create.after', $source); + + session()->flash('success', trans('admin::app.settings.sources.create-success')); + + return redirect()->route('admin.settings.sources.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $source = $this->sourceRepository->findOrFail($id); + + return view('admin::settings.sources.edit', compact('source')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required|unique:lead_sources,name,' . $id, + ]); + + Event::dispatch('settings.source.update.before', $id); + + $source = $this->sourceRepository->update(request()->all(), $id); + + Event::dispatch('settings.source.update.after', $source); + + session()->flash('success', trans('admin::app.settings.sources.update-success')); + + return redirect()->route('admin.settings.sources.index'); + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $source = $this->sourceRepository->findOrFail($id); + + try { + Event::dispatch('settings.source.delete.before', $id); + + $this->sourceRepository->delete($id); + + Event::dispatch('settings.source.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.sources.delete-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.sources.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.sources.delete-failed'), + ], 400); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/TagController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/TagController.php new file mode 100644 index 0000000..469bd73 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/TagController.php @@ -0,0 +1,194 @@ +tagRepository = $tagRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\TagDataGrid::class)->toJson(); + } + + return view('admin::settings.tags.index'); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + if (request()->ajax()) { + $this->validate(request(), [ + 'name' => 'required|unique:tags,name', + ]); + } else { + $validator = Validator::make(request()->all(), [ + 'name' => 'required|unique:tags,name', + ]); + + if ($validator->fails()) { + session()->flash('error', $validator->errors()->first('name')); + + return redirect()->back(); + } + } + + Event::dispatch('settings.tag.create.before'); + + $tag = $this->tagRepository->create(array_merge([ + 'user_id' => auth()->guard('user')->user()->id, + ], request()->all())); + + Event::dispatch('settings.tag.create.after', $tag); + + if (request()->ajax()) { + return response()->json([ + 'tag' => $tag, + 'status' => true, + 'message' => trans('admin::app.settings.tags.create-success'), + ]); + } else { + session()->flash('success', trans('admin::app.settings.tags.create-success')); + + return redirect()->route('admin.settings.tags.index'); + } + } + + /** + * Show the form for editing the specified tag. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $tag = $this->tagRepository->findOrFail($id); + + return view('admin::settings.tags.edit', compact('tag')); + } + + /** + * Update the specified tag in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $validator = Validator::make(request()->all(), [ + 'name' => 'required|unique:tags,name,' . $id, + ]); + + if ($validator->fails()) { + session()->flash('error', $validator->errors()->first('name')); + + return redirect()->back(); + } + + Event::dispatch('settings.tag.update.before', $id); + + $tag = $this->tagRepository->update(request()->all(), $id); + + Event::dispatch('settings.tag.update.after', $tag); + + session()->flash('success', trans('admin::app.settings.tags.update-success')); + + return redirect()->route('admin.settings.tags.index'); + } + + /** + * Remove the specified type from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $type = $this->tagRepository->findOrFail($id); + + try { + Event::dispatch('settings.tag.delete.before', $id); + + $this->tagRepository->delete($id); + + Event::dispatch('settings.tag.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.tags.delete-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.tags.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.tags.delete-failed'), + ], 400); + } + + /** + * Search tag results + * + * @return \Illuminate\Http\Response + */ + public function search() + { + $results = $this->tagRepository->findWhere([ + ['name', 'like', '%' . urldecode(request()->input('query')) . '%'] + ]); + + return response()->json($results); + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + foreach (request('rows') as $tagId) { + Event::dispatch('settings.tag.delete.before', $tagId); + + $this->tagRepository->delete($tagId); + + Event::dispatch('settings.tag.delete.after', $tagId); + } + + return response()->json([ + 'message' => trans('admin::app.response.destroy-success', ['name' => trans('admin::app.settings.tags.title')]), + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/TypeController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/TypeController.php new file mode 100644 index 0000000..d8fa43b --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/TypeController.php @@ -0,0 +1,138 @@ +typeRepository = $typeRepository; + } + + /** + * Display a listing of the type. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\TypeDataGrid::class)->toJson(); + } + + return view('admin::settings.types.index'); + } + + /** + * Store a newly created type in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $validator = Validator::make(request()->all(), [ + 'name' => 'required|unique:lead_types,name' + ]); + + if ($validator->fails()) { + session()->flash('error', trans('admin::app.settings.types.name-exists')); + + return redirect()->back(); + } + + Event::dispatch('settings.type.create.before'); + + $type = $this->typeRepository->create(request()->all()); + + Event::dispatch('settings.type.create.after', $type); + + session()->flash('success', trans('admin::app.settings.types.create-success')); + + return redirect()->route('admin.settings.types.index'); + } + + /** + * Show the form for editing the specified type. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $type = $this->typeRepository->findOrFail($id); + + return view('admin::settings.types.edit', compact('type')); + } + + /** + * Update the specified type in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required|unique:lead_types,name,' . $id, + ]); + + Event::dispatch('settings.type.update.before', $id); + + $type = $this->typeRepository->update(request()->all(), $id); + + Event::dispatch('settings.type.update.after', $type); + + session()->flash('success', trans('admin::app.settings.types.update-success')); + + return redirect()->route('admin.settings.types.index'); + } + + /** + * Remove the specified type from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $type = $this->typeRepository->findOrFail($id); + + try { + Event::dispatch('settings.type.delete.before', $id); + + $this->typeRepository->delete($id); + + Event::dispatch('settings.type.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.types.delete-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.types.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.types.delete-failed'), + ], 400); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/UserController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/UserController.php new file mode 100644 index 0000000..7f59862 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/UserController.php @@ -0,0 +1,289 @@ +userRepository = $userRepository; + + $this->groupRepository = $groupRepository; + + $this->roleRepository = $roleRepository; + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\UserDataGrid::class)->toJson(); + } + + return view('admin::settings.users.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + $roles = $this->roleRepository->all(); + + $groups = $this->groupRepository->all(); + + return view('admin::settings.users.create', compact('groups', 'roles')); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\RedirectResponse + */ + public function store() + { + $this->validate(request(), [ + 'email' => 'required|email|unique:users,email', + 'name' => 'required', + 'password' => 'nullable', + 'confirm_password' => 'nullable|required_with:password|same:password', + 'role_id' => 'required', + ]); + + $data = request()->all(); + + if (isset($data['password']) && $data['password']) { + $data['password'] = bcrypt($data['password']); + } + + $data['status'] = isset($data['status']) ? 1 : 0; + + Event::dispatch('settings.user.create.before'); + + $admin = $this->userRepository->create($data); + + $admin->view_permission = $data['view_permission']; + + $admin->save(); + + $admin->groups()->sync(request('groups') ?? []); + + try { + Mail::queue(new Create($admin)); + } catch (\Exception $e) { + } + + Event::dispatch('settings.user.create.after', $admin); + + session()->flash('success', trans('admin::app.settings.users.create-success')); + + return redirect()->route('admin.settings.users.index'); + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $admin = $this->userRepository->findOrFail($id); + + $roles = $this->roleRepository->all(); + + $groups = $this->groupRepository->all(); + + return view('admin::settings.users.edit', compact('admin', 'groups', 'roles')); + } + + /** + * Update the specified resource in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'email' => 'required|email|unique:users,email,' . $id, + 'name' => 'required', + 'password' => 'nullable', + 'confirm_password' => 'nullable|required_with:password|same:password', + 'role_id' => 'required', + ]); + + $data = request()->all(); + + if (!$data['password']) { + unset($data['password'], $data['confirm_password']); + } else { + $data['password'] = bcrypt($data['password']); + } + + if (auth()->guard('user')->user()->id != $id) { + $data['status'] = isset($data['status']) ? 1 : 0; + } + + Event::dispatch('settings.user.update.before', $id); + + $admin = $this->userRepository->update($data, $id); + + $admin->view_permission = $data['view_permission']; + + $admin->save(); + + $admin->groups()->sync(request('groups') ?? []); + + Event::dispatch('settings.user.update.after', $admin); + + session()->flash('success', trans('admin::app.settings.users.update-success')); + + return redirect()->route('admin.settings.users.index'); + } + + /** + * Destroy specified user. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + if (auth()->guard('user')->user()->id == $id) { + return response()->json([ + 'message' => trans('admin::app.settings.users.delete-failed'), + ], 400); + } else if ($this->userRepository->count() == 1) { + return response()->json([ + 'message' => trans('admin::app.settings.users.last-delete-error'), + ], 400); + } else { + Event::dispatch('settings.user.delete.before', $id); + + try { + $this->userRepository->delete($id); + + Event::dispatch('settings.user.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.users.delete-success'), + ]); + } catch (\Exception $exception) { + return response()->json([ + 'message' => $exception->getMessage(), + ], 400); + } + } + } + + /** + * Mass Update the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massUpdate() + { + $count = 0; + + foreach (request('rows') as $userId) { + if (auth()->guard('user')->user()->id == $userId) { + continue; + } + + Event::dispatch('settings.user.update.before', $userId); + + $this->userRepository->update([ + 'status' => request('value'), + ], $userId); + + Event::dispatch('settings.user.update.after', $userId); + + $count++; + } + + if (!$count) { + return response()->json([ + 'message' => trans('admin::app.settings.users.mass-update-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.users.mass-update-success'), + ]); + } + + /** + * Mass Delete the specified resources. + * + * @return \Illuminate\Http\Response + */ + public function massDestroy() + { + $count = 0; + + foreach (request('rows') as $userId) { + if (auth()->guard('user')->user()->id == $userId) { + continue; + } + + Event::dispatch('settings.user.delete.before', $userId); + + $this->userRepository->delete($userId); + + Event::dispatch('settings.user.delete.after', $userId); + + $count++; + } + + if (!$count) { + return response()->json([ + 'message' => trans('admin::app.settings.users.mass-delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.users.mass-delete-success'), + ]); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/Setting/WorkflowController.php b/packages/Webkul/Admin/src/Http/Controllers/Setting/WorkflowController.php new file mode 100644 index 0000000..17e3c85 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/Setting/WorkflowController.php @@ -0,0 +1,141 @@ +workflowRepository = $workflowRepository; + } + + /** + * Display a listing of the workflow. + * + * @return \Illuminate\View\View + */ + public function index() + { + if (request()->ajax()) { + return app(\Webkul\Admin\DataGrids\Setting\WorkflowDataGrid::class)->toJson(); + } + + return view('admin::settings.workflows.index'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\View\View + */ + public function create() + { + return view('admin::settings.workflows.create'); + } + + /** + * Store a newly created workflow in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'name' => 'required', + ]); + + Event::dispatch('settings.workflow.create.before'); + + $workflow = $this->workflowRepository->create(request()->all()); + + Event::dispatch('settings.workflow.create.after', $workflow); + + session()->flash('success', trans('admin::app.settings.workflows.create-success')); + + return redirect()->route('admin.settings.workflows.index'); + } + + /** + * Show the form for editing the specified workflow. + * + * @param int $id + * @return \Illuminate\View\View + */ + public function edit($id) + { + $workflow = $this->workflowRepository->findOrFail($id); + + return view('admin::settings.workflows.edit', compact('workflow')); + } + + /** + * Update the specified workflow in storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update($id) + { + $this->validate(request(), [ + 'name' => 'required', + ]); + + Event::dispatch('settings.workflow.update.before', $id); + + $workflow = $this->workflowRepository->update(request()->all(), $id); + + Event::dispatch('settings.workflow.update.after', $workflow); + + session()->flash('success', trans('admin::app.settings.workflows.update-success')); + + return redirect()->route('admin.settings.workflows.index'); + } + + /** + * Remove the specified workflow from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + $workflow = $this->workflowRepository->findOrFail($id); + + try { + Event::dispatch('settings.workflow.delete.before', $id); + + $this->workflowRepository->delete($id); + + Event::dispatch('settings.workflow.delete.after', $id); + + return response()->json([ + 'message' => trans('admin::app.settings.workflows.delete-success'), + ], 200); + } catch (\Exception $exception) { + return response()->json([ + 'message' => trans('admin::app.settings.workflows.delete-failed'), + ], 400); + } + + return response()->json([ + 'message' => trans('admin::app.settings.workflows.delete-failed'), + ], 400); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/User/AccountController.php b/packages/Webkul/Admin/src/Http/Controllers/User/AccountController.php new file mode 100644 index 0000000..9792440 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/User/AccountController.php @@ -0,0 +1,82 @@ +guard('user')->user(); + + return view('admin::user.account.edit', compact('user')); + } + + /** + * Update the specified resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function update() + { + $isPasswordChanged = false; + + $user = auth()->guard('user')->user(); + + $this->validate(request(), [ + 'name' => 'required', + 'email' => 'email|unique:users,email,' . $user->id, + 'password' => 'nullable|min:6|confirmed', + 'current_password' => 'nullable|required|min:6', + 'image' => 'mimes:jpeg,jpg,png,gif' + ]); + + $data = request()->input(); + + if (!Hash::check($data['current_password'], auth()->guard('user')->user()->password)) { + session()->flash('warning', trans('admin::app.user.account.password-match')); + + return redirect()->back(); + } + + if (isset($data['role_id']) || isset($data['view_permission'])) { + session()->flash('warning', trans('admin::app.user.account.permission-denied')); + + return redirect()->back(); + } + + if (!$data['password']) { + unset($data['password']); + } else { + $isPasswordChanged = true; + + $data['password'] = bcrypt($data['password']); + } + + if (request()->hasFile('image')) { + $data['image'] = request()->file('image')->store('users/' . $user->id); + } + + if (isset($data['remove_image']) && $data['remove_image'] !== '') { + $data['image'] = null; + } + + $user->update($data); + + if ($isPasswordChanged) { + Event::dispatch('user.account.update-password', $user); + } + + session()->flash('success', trans('admin::app.user.account.account-save')); + + return redirect()->route('admin.dashboard.index'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/User/ForgotPasswordController.php b/packages/Webkul/Admin/src/Http/Controllers/User/ForgotPasswordController.php new file mode 100644 index 0000000..1a7c7fe --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/User/ForgotPasswordController.php @@ -0,0 +1,79 @@ +guard('user')->check()) { + return redirect()->route('admin.dashboard.index'); + } else { + if (strpos(url()->previous(), 'user') !== false) { + $intendedUrl = url()->previous(); + } else { + $intendedUrl = route('admin.dashboard.index'); + } + + session()->put('url.intended', $intendedUrl); + + return view('admin::sessions.forgot-password'); + } + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + try { + $this->validate(request(), [ + 'email' => 'required|email', + ]); + + $response = $this->broker()->sendResetLink(request(['email']), function ($user, $token) { + $user->notify(new UserResetPassword($token)); + }); + + if ($response == Password::RESET_LINK_SENT) { + session()->flash('success', trans('admin::app.sessions.forgot-password.reset-link-sent')); + + return back(); + } + + return back() + ->withInput(request(['email'])) + ->withErrors([ + 'email' => trans('admin::app.sessions.forgot-password.email-not-exist'), + ]); + } catch (\Exception $exception) { + session()->flash('error', trans($exception->getMessage())); + + return redirect()->back(); + } + } + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker('users'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/User/ResetPasswordController.php b/packages/Webkul/Admin/src/Http/Controllers/User/ResetPasswordController.php new file mode 100644 index 0000000..788fc03 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/User/ResetPasswordController.php @@ -0,0 +1,97 @@ +with([ + 'token' => $token, + 'email' => request('email'), + ]); + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + try { + $this->validate(request(), [ + 'token' => 'required', + 'email' => 'required|email', + 'password' => 'required|confirmed|min:6', + ]); + + $response = $this->broker()->reset( + request(['email', 'password', 'password_confirmation', 'token']), function ($admin, $password) { + $this->resetPassword($admin, $password); + } + ); + + if ($response == Password::PASSWORD_RESET) { + return redirect()->route('admin.dashboard.index'); + } + + return back() + ->withInput(request(['email'])) + ->withErrors([ + 'email' => trans($response), + ]); + } catch (\Exception $exception) { + session()->flash('error', trans($exception->getMessage())); + + return redirect()->back(); + } + } + + /** + * Reset the given admin's password. + * + * @param \Illuminate\Contracts\Auth\CanResetPassword $admin + * @param string $password + * @return void + */ + protected function resetPassword($admin, $password) + { + $admin->password = Hash::make($password); + + $admin->setRememberToken(Str::random(60)); + + $admin->save(); + + event(new PasswordReset($admin)); + + auth()->guard('user')->login($admin); + } + + /** + * Get the broker to be used during password reset. + * + * @return \Illuminate\Contracts\Auth\PasswordBroker + */ + public function broker() + { + return Password::broker('users'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php b/packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php new file mode 100644 index 0000000..25cd4c2 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Controllers/User/SessionController.php @@ -0,0 +1,72 @@ +guard('user')->check()) { + return redirect()->route('admin.dashboard.index'); + } else { + if (strpos(url()->previous(), 'admin') !== false) { + $intendedUrl = url()->previous(); + } else { + $intendedUrl = route('admin.dashboard.index'); + } + + session()->put('url.intended', $intendedUrl); + + return view('admin::sessions.login'); + } + } + + /** + * Store a newly created resource in storage. + * + * @return \Illuminate\Http\Response + */ + public function store() + { + $this->validate(request(), [ + 'email' => 'required|email', + 'password' => 'required', + ]); + + if (!auth()->guard('user')->attempt(request(['email', 'password']), request('remember'))) { + session()->flash('error', trans('admin::app.sessions.login.login-error')); + + return redirect()->back(); + } + + if (auth()->guard('user')->user()->status == 0) { + session()->flash('warning', trans('admin::app.sessions.login.activate-warning')); + + auth()->guard('user')->logout(); + + return redirect()->route('admin.session.create'); + } + + return redirect()->intended(route('admin.dashboard.index')); + } + + /** + * Remove the specified resource from storage. + * + * @return \Illuminate\Http\Response + */ + public function destroy() + { + auth()->guard('user')->logout(); + + return redirect()->route('admin.session.create'); + } +} diff --git a/packages/Webkul/Admin/src/Http/Middleware/Bouncer.php b/packages/Webkul/Admin/src/Http/Middleware/Bouncer.php new file mode 100644 index 0000000..6228cea --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Middleware/Bouncer.php @@ -0,0 +1,87 @@ +guard($guard)->check()) { + return redirect()->route('admin.session.create'); + } + + /** + * If user status is changed by admin. Then session should be + * logged out. + */ + if (!(bool)auth()->guard($guard)->user()->status) { + auth()->guard($guard)->logout(); + + session()->flash('error', __('admin::app.errors.401')); + + return redirect()->route('admin.session.create'); + } + + /** + * If somehow the user deleted all permissions, then it should be + * auto logged out and need to contact the administrator again. + */ + if ($this->isPermissionsEmpty()) { + auth()->guard($guard)->logout(); + + session()->flash('error', __('admin::app.errors.401')); + + return redirect()->route('admin.session.create'); + } + + return $next($request); + } + + /** + * Check for user, if they have empty permissions or not except admin. + * + * @return bool + */ + public function isPermissionsEmpty() + { + if (!$role = auth()->guard('user')->user()->role) { + abort(401, 'This action is unauthorized.'); + } + + if ($role->permission_type === 'all') { + return false; + } + + if ($role->permission_type !== 'all' && empty($role->permissions)) { + return true; + } + + $this->checkIfAuthorized(); + + return false; + } + + /** + * Check authorization. + * + * @return null + */ + public function checkIfAuthorized() + { + $acl = app('acl'); + + if ($acl && isset($acl->roles[Route::currentRouteName()])) { + bouncer()->allow($acl->roles[Route::currentRouteName()]); + } + } +} diff --git a/packages/Webkul/Admin/src/Http/Middleware/Locale.php b/packages/Webkul/Admin/src/Http/Middleware/Locale.php new file mode 100644 index 0000000..d43ed3a --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Middleware/Locale.php @@ -0,0 +1,37 @@ +app = $app; + + $this->request = $request; + } + + /** + * Handle an incoming request. + * + * @param \Illuminate\Http\Request $request + * @param \Closure $next + * @return mixed + */ + public function handle($request, Closure $next) + { + app()->setLocale( + core()->getConfigData('general.locale_settings.locale') + ?: app()->getLocale() + ); + + return $next($request); + } +} diff --git a/packages/Webkul/Admin/src/Http/Requests/LeadForm.php b/packages/Webkul/Admin/src/Http/Requests/LeadForm.php new file mode 100644 index 0000000..db21e25 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Requests/LeadForm.php @@ -0,0 +1,152 @@ +attributeRepository = $attributeRepository; + + $this->attributeValueRepository = $attributeValueRepository; + } + + /** + * Determine if the product is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + foreach (['leads', 'persons'] as $key => $entityType) { + $attributes = $this->attributeRepository->scopeQuery(function ($query) use ($entityType) { + $attributeCodes = $entityType == 'persons' + ? array_keys(request('person') ?? []) + : array_keys(request()->all()); + + $query = $query->whereIn('code', $attributeCodes) + ->where('entity_type', $entityType); + + if (request()->has('quick_add')) { + $query = $query->where('quick_add', 1); + } + + return $query; + })->get(); + + foreach ($attributes as $attribute) { + if ($entityType == 'persons') { + $attribute->code = 'person.' . $attribute->code; + } + + $validations = []; + + if ($attribute->type == 'boolean') { + continue; + } else if ($attribute->type == 'address') { + if (!$attribute->is_required) { + continue; + } + + $validations = [ + $attribute->code . '.address' => 'required', + $attribute->code . '.country' => 'required', + $attribute->code . '.state' => 'required', + $attribute->code . '.city' => 'required', + $attribute->code . '.postcode' => 'required', + ]; + } else if ($attribute->type == 'email') { + $validations = [ + $attribute->code => [$attribute->is_required ? 'required' : 'nullable'], + $attribute->code . '.*.value' => [$attribute->is_required ? 'required' : 'nullable', 'email'], + $attribute->code . '.*.label' => $attribute->is_required ? 'required' : 'nullable', + ]; + } else if ($attribute->type == 'phone') { + $validations = [ + $attribute->code => [$attribute->is_required ? 'required' : 'nullable'], + $attribute->code . '.*.value' => [$attribute->is_required ? 'required' : 'nullable'], + $attribute->code . '.*.label' => $attribute->is_required ? 'required' : 'nullable', + ]; + } else { + $validations[$attribute->code] = [$attribute->is_required ? 'required' : 'nullable']; + + if ($attribute->type == 'text' && $attribute->validation) { + array_push($validations[$attribute->code], + $attribute->validation == 'decimal' + ? new Decimal + : $attribute->validation + ); + } + + if ($attribute->type == 'price') { + array_push($validations[$attribute->code], new Decimal); + } + } + + if ($attribute->is_unique) { + array_push($validations[in_array($attribute->type, ['email', 'phone']) + ? $attribute->code . '.*.value' + : $attribute->code], function ($field, $value, $fail) use ($attribute, $entityType) { + if (!$this->attributeValueRepository->isValueUnique( + $entityType == 'persons' ? request('person.id') : $this->id, + $attribute->entity_type, + $attribute, + request($field) + ) + ) { + $fail('The value has already been taken.'); + } + }); + } + + $this->rules = array_merge($this->rules, $validations); + } + } + + return $this->rules; + } +} diff --git a/packages/Webkul/Admin/src/Http/Requests/PipelineForm.php b/packages/Webkul/Admin/src/Http/Requests/PipelineForm.php new file mode 100644 index 0000000..a55deac --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Requests/PipelineForm.php @@ -0,0 +1,91 @@ +validatorExtensions($validationFactory); + } + + /** + * Determine if the user is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + if (request('id')) { + return [ + 'name' => 'required', + 'stages.*.name' => 'unique_key', + 'stages.*.code' => 'unique_key', + ]; + } + + return [ + 'name' => 'required', + 'rotten_days' => 'required', + 'stages.*.name' => 'unique_key', + 'stages.*.code' => 'unique_key', + ]; + } + + /** + * Get the error messages for the defined validation rules. + * + * @return array + */ + public function messages() + { + return [ + 'stages.*.name.unique_key' => __('admin::app.settings.pipelines.duplicate-name'), + ]; + } + + /** + * Place all your validator extensions here. + * + * @param \Illuminate\Validation\Factory $validationFactory + * @return void + */ + public function validatorExtensions(ValidationFactory $validationFactory) + { + $validationFactory->extend( + 'unique_key', + function ($attribute, $value, $parameters) { + $key = last(explode('.', $attribute)); + + $stages = collect(request()->get('stages'))->filter(function ($stage) use ($key, $value) { + return $stage[$key] === $value; + }); + + if ($stages->count() > 1) { + return false; + } + + return true; + } + ); + } +} diff --git a/packages/Webkul/Admin/src/Http/Requests/UserForm.php b/packages/Webkul/Admin/src/Http/Requests/UserForm.php new file mode 100644 index 0000000..0f2061a --- /dev/null +++ b/packages/Webkul/Admin/src/Http/Requests/UserForm.php @@ -0,0 +1,43 @@ +rules = [ + 'name' => 'required', + 'email' => 'email|unique:users,email', + 'password' => 'nullable', + 'password_confirmation' => 'nullable|required_with:password|same:password', + 'status' => 'sometimes', + 'role_id' => 'required', + ]; + + if ($this->method() == 'PUT') { + $this->rules['email'] = 'email|unique:users,email,' . $this->route('id'); + } + + return $this->rules; + } +} diff --git a/packages/Webkul/Admin/src/Http/helpers.php b/packages/Webkul/Admin/src/Http/helpers.php new file mode 100644 index 0000000..ee5f436 --- /dev/null +++ b/packages/Webkul/Admin/src/Http/helpers.php @@ -0,0 +1,8 @@ +make('bouncer'); + } +} +?> diff --git a/packages/Webkul/Admin/src/Http/routes.php b/packages/Webkul/Admin/src/Http/routes.php new file mode 100644 index 0000000..160966e --- /dev/null +++ b/packages/Webkul/Admin/src/Http/routes.php @@ -0,0 +1,422 @@ + ['web', 'admin_locale']], function () { + Route::get('/', 'Webkul\Admin\Http\Controllers\Controller@redirectToLogin')->name('krayin.home'); + + Route::prefix(config('app.admin_path'))->group(function () { + + Route::get('/', 'Webkul\Admin\Http\Controllers\Controller@redirectToLogin'); + + // Login Routes + Route::get('login', 'Webkul\Admin\Http\Controllers\User\SessionController@create')->name('admin.session.create'); + + //login post route to admin auth controller + Route::post('login', 'Webkul\Admin\Http\Controllers\User\SessionController@store')->name('admin.session.store'); + + // Forget Password Routes + Route::get('forgot-password', 'Webkul\Admin\Http\Controllers\User\ForgotPasswordController@create')->name('admin.forgot_password.create'); + + Route::post('forgot-password', 'Webkul\Admin\Http\Controllers\User\ForgotPasswordController@store')->name('admin.forgot_password.store'); + + // Reset Password Routes + Route::get('reset-password/{token}', 'Webkul\Admin\Http\Controllers\User\ResetPasswordController@create')->name('admin.reset_password.create'); + + Route::post('reset-password', 'Webkul\Admin\Http\Controllers\User\ResetPasswordController@store')->name('admin.reset_password.store'); + + Route::post('mail/inbound-parse', 'Webkul\Admin\Http\Controllers\Mail\EmailController@inboundParse')->name('admin.mail.inbound_parse'); + + // Admin Routes + Route::group(['middleware' => ['user']], function () { + Route::delete('logout', 'Webkul\Admin\Http\Controllers\User\SessionController@destroy')->name('admin.session.destroy'); + + // Dashboard Route + Route::get('dashboard', 'Webkul\Admin\Http\Controllers\Admin\DashboardController@index')->name('admin.dashboard.index'); + + Route::get('template', 'Webkul\Admin\Http\Controllers\Admin\DashboardController@template')->name('admin.dashboard.template'); + + // API routes + Route::group([ + 'prefix' => 'api', + ], function () { + Route::group([ + 'prefix' => 'dashboard', + ], function () { + Route::get('/', 'Webkul\Admin\Http\Controllers\Admin\DashboardController@getCardData')->name('admin.api.dashboard.card.index'); + + Route::get('/cards', 'Webkul\Admin\Http\Controllers\Admin\DashboardController@getCards')->name('admin.api.dashboard.cards.index'); + + Route::post('/cards', 'Webkul\Admin\Http\Controllers\Admin\DashboardController@updateCards')->name('admin.api.dashboard.cards.update'); + }); + }); + + // User Routes + Route::group([ + 'prefix' => 'account', + 'namespace' => 'Webkul\Admin\Http\Controllers\User' + ], function () { + Route::get('', 'AccountController@edit')->name('admin.user.account.edit'); + + Route::put('update', 'AccountController@update')->name('admin.user.account.update'); + }); + + // Leads Routes + Route::group([ + 'prefix' => 'leads', + 'namespace' => 'Webkul\Admin\Http\Controllers\Lead', + ], function () { + Route::get('create', 'LeadController@create')->name('admin.leads.create'); + + Route::post('create', 'LeadController@store')->name('admin.leads.store'); + + Route::get('view/{id?}', 'LeadController@view')->name('admin.leads.view'); + + Route::put('edit/{id?}', 'LeadController@update')->name('admin.leads.update'); + + Route::get('search', 'LeadController@search')->name('admin.leads.search'); + + Route::delete('{id}', 'LeadController@destroy')->name('admin.leads.delete'); + + Route::put('mass-update', 'LeadController@massUpdate')->name('admin.leads.mass_update'); + + Route::put('mass-destroy', 'LeadController@massDestroy')->name('admin.leads.mass_delete'); + + Route::post('tags/{id}', 'TagController@store')->name('admin.leads.tags.store'); + + Route::delete('{lead_id}/{tag_id?}', 'TagController@delete')->name('admin.leads.tags.delete'); + + Route::get('get/{pipeline_id?}', 'LeadController@get')->name('admin.leads.get'); + + Route::get('{pipeline_id?}', 'LeadController@index')->name('admin.leads.index'); + + Route::group([ + 'prefix' => 'quotes', + ], function () { + Route::delete('{lead_id}/{quote_id?}', 'QuoteController@delete')->name('admin.leads.quotes.delete'); + }); + }); + + // Leads Routes + Route::group([ + 'prefix' => 'quotes', + 'namespace' => 'Webkul\Admin\Http\Controllers\Quote', + ], function () { + Route::get('', 'QuoteController@index')->name('admin.quotes.index'); + + Route::get('create/{id?}', 'QuoteController@create')->name('admin.quotes.create'); + + Route::post('create', 'QuoteController@store')->name('admin.quotes.store'); + + Route::get('edit/{id?}', 'QuoteController@edit')->name('admin.quotes.edit'); + + Route::put('edit/{id}', 'QuoteController@update')->name('admin.quotes.update'); + + Route::get('print/{id?}', 'QuoteController@print')->name('admin.quotes.print'); + + Route::delete('{id}', 'QuoteController@destroy')->name('admin.quotes.delete'); + + Route::put('mass-destroy', 'QuoteController@massDestroy')->name('admin.quotes.mass_delete'); + }); + + Route::group([ + 'prefix' => 'activities', + 'namespace' => 'Webkul\Admin\Http\Controllers\Activity', + ], function () { + Route::get('', 'ActivityController@index')->name('admin.activities.index'); + + Route::get('get', 'ActivityController@get')->name('admin.activities.get'); + + Route::post('is-overlapping', 'ActivityController@checkIfOverlapping')->name('admin.activities.check_overlapping'); + + Route::post('create', 'ActivityController@store')->name('admin.activities.store'); + + Route::get('edit/{id?}', 'ActivityController@edit')->name('admin.activities.edit'); + + Route::put('edit/{id?}', 'ActivityController@update')->name('admin.activities.update'); + + Route::get('search-participants', 'ActivityController@searchParticipants')->name('admin.activities.search_participants'); + + Route::post('file-upload', 'ActivityController@upload')->name('admin.activities.file_upload'); + + Route::get('file-download/{id?}', 'ActivityController@download')->name('admin.activities.file_download'); + + Route::delete('{id?}', 'ActivityController@destroy')->name('admin.activities.delete'); + + Route::put('mass-update', 'ActivityController@massUpdate')->name('admin.activities.mass_update'); + + Route::put('mass-destroy', 'ActivityController@massDestroy')->name('admin.activities.mass_delete'); + }); + + Route::group([ + 'prefix' => 'mail', + 'namespace' => 'Webkul\Admin\Http\Controllers\Mail', + ], function () { + Route::post('create', 'EmailController@store')->name('admin.mail.store'); + + Route::put('edit/{id?}', 'EmailController@update')->name('admin.mail.update'); + + Route::get('attachment-download/{id?}', 'EmailController@download')->name('admin.mail.attachment_download'); + + Route::get('{route?}', 'EmailController@index')->name('admin.mail.index'); + + Route::get('{route?}/{id?}', 'EmailController@view')->name('admin.mail.view'); + + Route::delete('{id?}', 'EmailController@destroy')->name('admin.mail.delete'); + + Route::put('mass-update', 'EmailController@massUpdate')->name('admin.mail.mass_update'); + + Route::put('mass-destroy', 'EmailController@massDestroy')->name('admin.mail.mass_delete'); + }); + + // Contacts Routes + Route::group([ + 'prefix' => 'contacts', + 'namespace' => 'Webkul\Admin\Http\Controllers\Contact' + ], function () { + // Customers Routes + Route::prefix('persons')->group(function () { + Route::get('', 'PersonController@index')->name('admin.contacts.persons.index'); + + Route::get('create', 'PersonController@create')->name('admin.contacts.persons.create'); + + Route::post('create', 'PersonController@store')->name('admin.contacts.persons.store'); + + Route::get('edit/{id?}', 'PersonController@edit')->name('admin.contacts.persons.edit'); + + Route::put('edit/{id}', 'PersonController@update')->name('admin.contacts.persons.update'); + + Route::get('search', 'PersonController@search')->name('admin.contacts.persons.search'); + + Route::middleware(['throttle:100,60'])->delete('{id}', 'PersonController@destroy')->name('admin.contacts.persons.delete'); + + Route::put('mass-destroy', 'PersonController@massDestroy')->name('admin.contacts.persons.mass_delete'); + }); + + // Companies Routes + Route::prefix('organizations')->group(function () { + Route::get('', 'OrganizationController@index')->name('admin.contacts.organizations.index'); + + Route::get('create', 'OrganizationController@create')->name('admin.contacts.organizations.create'); + + Route::post('create', 'OrganizationController@store')->name('admin.contacts.organizations.store'); + + Route::get('edit/{id?}', 'OrganizationController@edit')->name('admin.contacts.organizations.edit'); + + Route::put('edit/{id}', 'OrganizationController@update')->name('admin.contacts.organizations.update'); + + Route::delete('{id}', 'OrganizationController@destroy')->name('admin.contacts.organizations.delete'); + + Route::put('mass-destroy', 'OrganizationController@massDestroy')->name('admin.contacts.organizations.mass_delete'); + }); + }); + + // Products Routes + Route::group([ + 'prefix' => 'products', + 'namespace' => 'Webkul\Admin\Http\Controllers\Product' + ], function () { + Route::get('', 'ProductController@index')->name('admin.products.index'); + + Route::get('create', 'ProductController@create')->name('admin.products.create'); + + Route::post('create', 'ProductController@store')->name('admin.products.store'); + + Route::get('edit/{id}', 'ProductController@edit')->name('admin.products.edit'); + + Route::put('edit/{id}', 'ProductController@update')->name('admin.products.update'); + + Route::get('search', 'ProductController@search')->name('admin.products.search'); + + Route::delete('{id}', 'ProductController@destroy')->name('admin.products.delete'); + + Route::put('mass-destroy', 'ProductController@massDestroy')->name('admin.products.mass_delete'); + }); + + // Contacts Routes + Route::group([ + 'prefix' => 'settings', + 'namespace' => 'Webkul\Admin\Http\Controllers\Setting' + ], function () { + + Route::get('', 'SettingController@index')->name('admin.settings.index'); + + // Groups Routes + Route::prefix('groups')->group(function () { + Route::get('', 'GroupController@index')->name('admin.settings.groups.index'); + + Route::get('create', 'GroupController@create')->name('admin.settings.groups.create'); + + Route::post('create', 'GroupController@store')->name('admin.settings.groups.store'); + + Route::get('edit/{id}', 'GroupController@edit')->name('admin.settings.groups.edit'); + + Route::put('edit/{id}', 'GroupController@update')->name('admin.settings.groups.update'); + + Route::delete('{id}', 'GroupController@destroy')->name('admin.settings.groups.delete'); + }); + + // Roles Routes + Route::prefix('roles')->group(function () { + Route::get('', 'RoleController@index')->name('admin.settings.roles.index'); + + Route::get('create', 'RoleController@create')->name('admin.settings.roles.create'); + + Route::post('create', 'RoleController@store')->name('admin.settings.roles.store'); + + Route::get('edit/{id}', 'RoleController@edit')->name('admin.settings.roles.edit'); + + Route::put('edit/{id}', 'RoleController@update')->name('admin.settings.roles.update'); + + Route::delete('{id}', 'RoleController@destroy')->name('admin.settings.roles.delete'); + }); + + // Users Routes + Route::prefix('users')->group(function () { + Route::get('', 'UserController@index')->name('admin.settings.users.index'); + + Route::get('create', 'UserController@create')->name('admin.settings.users.create'); + + Route::post('create', 'UserController@store')->name('admin.settings.users.store'); + + Route::get('edit/{id?}', 'UserController@edit')->name('admin.settings.users.edit'); + + Route::put('edit/{id}', 'UserController@update')->name('admin.settings.users.update'); + + Route::delete('{id}', 'UserController@destroy')->name('admin.settings.users.delete'); + + Route::put('mass-update', 'UserController@massUpdate')->name('admin.settings.users.mass_update'); + + Route::put('mass-destroy', 'UserController@massDestroy')->name('admin.settings.users.mass_delete'); + }); + + // Attributes Routes + Route::prefix('attributes')->group(function () { + Route::get('', 'AttributeController@index')->name('admin.settings.attributes.index'); + + Route::get('create', 'AttributeController@create')->name('admin.settings.attributes.create'); + + Route::post('create', 'AttributeController@store')->name('admin.settings.attributes.store'); + + Route::get('edit/{id}', 'AttributeController@edit')->name('admin.settings.attributes.edit'); + + Route::put('edit/{id}', 'AttributeController@update')->name('admin.settings.attributes.update'); + + Route::get('lookup/{lookup?}', 'AttributeController@lookup')->name('admin.settings.attributes.lookup'); + + Route::get('lookup-entity/{lookup?}', 'AttributeController@lookupEntity')->name('admin.settings.attributes.lookup_entity'); + + Route::delete('{id}', 'AttributeController@destroy')->name('admin.settings.attributes.delete'); + + Route::put('mass-update', 'AttributeController@massUpdate')->name('admin.settings.attributes.mass_update'); + + Route::put('mass-destroy', 'AttributeController@massDestroy')->name('admin.settings.attributes.mass_delete'); + + Route::get('download', 'AttributeController@download')->name('admin.settings.attributes.download'); + }); + + + // Lead Pipelines Routes + Route::prefix('pipelines')->group(function () { + Route::get('', 'PipelineController@index')->name('admin.settings.pipelines.index'); + + Route::get('create', 'PipelineController@create')->name('admin.settings.pipelines.create'); + + Route::post('create', 'PipelineController@store')->name('admin.settings.pipelines.store'); + + Route::get('edit/{id?}', 'PipelineController@edit')->name('admin.settings.pipelines.edit'); + + Route::put('edit/{id}', 'PipelineController@update')->name('admin.settings.pipelines.update'); + + Route::delete('{id}', 'PipelineController@destroy')->name('admin.settings.pipelines.delete'); + }); + + + // Lead Sources Routes + Route::prefix('sources')->group(function () { + Route::get('', 'SourceController@index')->name('admin.settings.sources.index'); + + Route::post('create', 'SourceController@store')->name('admin.settings.sources.store'); + + Route::get('edit/{id?}', 'SourceController@edit')->name('admin.settings.sources.edit'); + + Route::put('edit/{id}', 'SourceController@update')->name('admin.settings.sources.update'); + + Route::delete('{id}', 'SourceController@destroy')->name('admin.settings.sources.delete'); + }); + + + // Lead Types Routes + Route::prefix('types')->group(function () { + Route::get('', 'TypeController@index')->name('admin.settings.types.index'); + + Route::post('create', 'TypeController@store')->name('admin.settings.types.store'); + + Route::get('edit/{id?}', 'TypeController@edit')->name('admin.settings.types.edit'); + + Route::put('edit/{id}', 'TypeController@update')->name('admin.settings.types.update'); + + Route::delete('{id}', 'TypeController@destroy')->name('admin.settings.types.delete'); + }); + + + // Email Templates Routes + Route::prefix('email-templates')->group(function () { + Route::get('', 'EmailTemplateController@index')->name('admin.settings.email_templates.index'); + + Route::get('create', 'EmailTemplateController@create')->name('admin.settings.email_templates.create'); + + Route::post('create', 'EmailTemplateController@store')->name('admin.settings.email_templates.store'); + + Route::get('edit/{id?}', 'EmailTemplateController@edit')->name('admin.settings.email_templates.edit'); + + Route::put('edit/{id}', 'EmailTemplateController@update')->name('admin.settings.email_templates.update'); + + Route::delete('{id}', 'EmailTemplateController@destroy')->name('admin.settings.email_templates.delete'); + }); + + + // Workflows Routes + Route::prefix('workflows')->group(function () { + Route::get('', 'WorkflowController@index')->name('admin.settings.workflows.index'); + + Route::get('create', 'WorkflowController@create')->name('admin.settings.workflows.create'); + + Route::post('create', 'WorkflowController@store')->name('admin.settings.workflows.store'); + + Route::get('edit/{id?}', 'WorkflowController@edit')->name('admin.settings.workflows.edit'); + + Route::put('edit/{id}', 'WorkflowController@update')->name('admin.settings.workflows.update'); + + Route::delete('{id}', 'WorkflowController@destroy')->name('admin.settings.workflows.delete'); + }); + + + // Tags Routes + Route::prefix('tags')->group(function () { + Route::get('', 'TagController@index')->name('admin.settings.tags.index'); + + Route::post('create', 'TagController@store')->name('admin.settings.tags.store'); + + Route::get('edit/{id?}', 'TagController@edit')->name('admin.settings.tags.edit'); + + Route::put('edit/{id}', 'TagController@update')->name('admin.settings.tags.update'); + + Route::get('search', 'TagController@search')->name('admin.settings.tags.search'); + + Route::delete('{id}', 'TagController@destroy')->name('admin.settings.tags.delete'); + + Route::put('mass-destroy', 'TagController@massDestroy')->name('admin.settings.tags.mass_delete'); + }); + }); + + // Configuration Routes + Route::group([ + 'prefix' => 'configuration', + 'namespace' => 'Webkul\Admin\Http\Controllers\Configuration' + ], function () { + Route::get('{slug?}', 'ConfigurationController@index')->name('admin.configuration.index'); + + Route::post('{slug?}', 'ConfigurationController@store')->name('admin.configuration.index.store'); + }); + }); + }); +}); diff --git a/packages/Webkul/Admin/src/Listeners/Lead.php b/packages/Webkul/Admin/src/Listeners/Lead.php new file mode 100644 index 0000000..5fb5fc5 --- /dev/null +++ b/packages/Webkul/Admin/src/Listeners/Lead.php @@ -0,0 +1,42 @@ +emailRepository = $emailRepository; + } + + /** + * @param \Webkul\Lead\Models\Lead $lead + * @return void + */ + public function linkToEmail($lead) + { + if (!request('email_id')) { + return; + } + + $this->emailRepository->update([ + 'lead_id' => $lead->id, + ], request('email_id')); + } +} diff --git a/packages/Webkul/Admin/src/Listeners/Person.php b/packages/Webkul/Admin/src/Listeners/Person.php new file mode 100644 index 0000000..8d89e6c --- /dev/null +++ b/packages/Webkul/Admin/src/Listeners/Person.php @@ -0,0 +1,42 @@ +emailRepository = $emailRepository; + } + + /** + * @param \Webkul\Contact\Models\Person $person + * @return void + */ + public function linkToEmail($person) + { + if (!request('email_id')) { + return; + } + + $this->emailRepository->update([ + 'person_id' => $person->id, + ], request('email_id')); + } +} diff --git a/packages/Webkul/Admin/src/Menu.php b/packages/Webkul/Admin/src/Menu.php new file mode 100644 index 0000000..fa8436f --- /dev/null +++ b/packages/Webkul/Admin/src/Menu.php @@ -0,0 +1,114 @@ +current = Request::url(); + } + + /** + * Prepare menu. + * + * @return void + */ + public function prepare() + { + $tree = Tree::create(); + + $userRole = auth()->guard('user')->user()->role; + + $adminMenus = config('menu.admin'); + + $currentUserRole = auth()->guard('user')->user()->role; + + foreach ($adminMenus as $index => $item) { + if (!bouncer()->hasPermission($item['key'])) { + continue; + } + + if (isset($item['route'])) { + $item['url'] = route($item['route'], $item['params'] ?? []); + + if (strpos($this->current, $item['url']) !== false) { + $this->currentKey = $item['key']; + } + } + + if ($item['key'] != 'settings' + && $index + 1 < count(config('menu.admin')) + && $currentUserRole->permission_type == 'custom' + ) { + $permission = config('menu.admin')[$index + 1]; + + if (substr_count($permission['key'], '.') == 1 + && substr_count($item['key'], '.') == 0 + ) { + foreach ($currentUserRole->permissions as $key => $value) { + if ($item['key'] != $value) { + continue; + } + + $neededItem = $currentUserRole->permissions[$key + 1]; + + foreach (config('menu.admin') as $key1 => $findMatched) { + if ($findMatched['key'] != $neededItem) { + continue; + } + + $item['route'] = $findMatched['route']; + + $item['url'] = route($findMatched['route'], $findMatched['params'] ?? []); + } + } + } + } + + $tree->add($item, 'menu'); + } + + + $tree->items = core()->sortItems($tree->items); + + return $tree; + } + + /** + * Method to find the active links + * + * @param array $item + * @return string|void + */ + public function getActive($item) + { + $url = trim($item['url'], '/'); + + if ((strpos($this->current, $url) !== false) || (strpos($this->currentKey, $item['key']) === 0)) { + return 'active'; + } + } +} diff --git a/packages/Webkul/Admin/src/Notifications/Common.php b/packages/Webkul/Admin/src/Notifications/Common.php new file mode 100644 index 0000000..d473475 --- /dev/null +++ b/packages/Webkul/Admin/src/Notifications/Common.php @@ -0,0 +1,39 @@ +data = $data; + } + + /** + * Build the mail representation of the notification. + */ + public function build() + { + $message = $this + ->to($this->data['to']) + ->subject($this->data['subject']) + ->view('admin::emails.common', [ + 'body' => $this->data['body'], + ]); + + if (isset($this->data['attachments'])) { + foreach ($this->data['attachments'] as $attachment) { + $message->attachData($attachment['content'], $attachment['name'], [ + 'mime' => $attachment['mime'], + ]); + } + } + + return $message; + } +} diff --git a/packages/Webkul/Admin/src/Notifications/User/Create.php b/packages/Webkul/Admin/src/Notifications/User/Create.php new file mode 100644 index 0000000..62811ea --- /dev/null +++ b/packages/Webkul/Admin/src/Notifications/User/Create.php @@ -0,0 +1,31 @@ +user = $user; + } + + /** + * Build the mail representation of the notification. + */ + public function build() + { + return $this + ->to($this->user->email) + ->subject(trans('admin::app.mail.user.create-subject')) + ->view('admin::emails.users.create', [ + 'user_name' => $this->user->name, + ]); + } +} diff --git a/packages/Webkul/Admin/src/Notifications/User/UserResetPassword.php b/packages/Webkul/Admin/src/Notifications/User/UserResetPassword.php new file mode 100644 index 0000000..641b9f2 --- /dev/null +++ b/packages/Webkul/Admin/src/Notifications/User/UserResetPassword.php @@ -0,0 +1,28 @@ +token); + } + + return (new MailMessage) + ->view('admin::emails.users.forget-password', [ + 'user_name' => $notifiable->name, + 'token' => $this->token, + ]); + } +} diff --git a/packages/Webkul/Admin/src/Notifications/User/UserUpdatePassword.php b/packages/Webkul/Admin/src/Notifications/User/UserUpdatePassword.php new file mode 100644 index 0000000..e4777a8 --- /dev/null +++ b/packages/Webkul/Admin/src/Notifications/User/UserUpdatePassword.php @@ -0,0 +1,43 @@ +user = $user; + } + + /** + * Build the message. + * + * @return $this + */ + public function build() + { + return $this->from(core()->getSenderEmailDetails()['email'], core()->getSenderEmailDetails()['name']) + ->to($this->user->email, $this->user->name) + ->subject(trans('shop::app.mail.update-password.subject')) + ->view('shop::emails.users.update-password', ['user' => $this->user]); + } +} diff --git a/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php new file mode 100644 index 0000000..4bf46c6 --- /dev/null +++ b/packages/Webkul/Admin/src/Providers/AdminServiceProvider.php @@ -0,0 +1,163 @@ +loadRoutesFrom(__DIR__ . '/../Http/routes.php'); + + $this->loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + + $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'admin'); + + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'admin'); + + $this->app->bind(\Illuminate\Contracts\Debug\ExceptionHandler::class, \Webkul\Admin\Exceptions\Handler::class); + + $router->aliasMiddleware('user', \Webkul\Admin\Http\Middleware\Bouncer::class); + $router->aliasMiddleware('admin_locale', Locale::class); + + $this->publishes([ + __DIR__ . '/../../publishable/assets' => public_path('vendor/webkul/admin/assets'), + ], 'public'); + + Relation::morphMap([ + 'leads' => 'Webkul\Lead\Models\Lead', + 'products' => 'Webkul\Product\Models\Product', + 'persons' => 'Webkul\Contact\Models\Person', + 'organizations' => 'Webkul\Contact\Models\Organization', + 'quotes' => 'Webkul\Quote\Models\Quote', + ]); + + $this->app->register(EventServiceProvider::class); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + $this->registerFacades(); + + $this->registerConfig(); + + $this->registerCoreConfig(); + + $this->registerACL(); + } + + /** + * Register Bouncer as a singleton. + * + * @return void + */ + protected function registerFacades() + { + $loader = AliasLoader::getInstance(); + + $loader->alias('Bouncer', \Webkul\Admin\Facades\Bouncer::class); + $loader->alias('Menu', \Webkul\Admin\Facades\Menu::class); + + $this->app->singleton('bouncer', function () { + return new \Webkul\Admin\Bouncer(); + }); + + $this->app->singleton('menu', function () { + return new \Webkul\Admin\Menu(); + }); + } + + /** + * Register package config. + * + * @return void + */ + protected function registerConfig() + { + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/acl.php', 'acl'); + + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/menu.php', 'menu.admin'); + + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/core_config.php', 'core_config'); + + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/dashboard_cards.php', 'dashboard_cards'); + + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/attribute_lookups.php', 'attribute_lookups'); + + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/attribute_entity_types.php', 'attribute_entity_types'); + } + + /** + * Register core config. + * + * @return void + */ + protected function registerCoreConfig() + { + $this->app->singleton('core_config', function () { + $tree = Tree::create(); + + foreach (config('core_config') as $item) { + $tree->add($item); + } + + $tree->items = core()->sortItems($tree->items); + + return $tree; + }); + } + + /** + * Registers acl to entire application. + * + * @return void + */ + protected function registerACL() + { + $this->app->singleton('acl', function () { + return $this->createACL(); + }); + } + + /** + * Create ACL tree. + * + * @return mixed + */ + protected function createACL() + { + static $tree; + + if ($tree) { + return $tree; + } + + $tree = Tree::create(); + + foreach (config('acl') as $item) { + $tree->add($item, 'acl'); + } + + $tree->items = core()->sortItems($tree->items); + + return $tree; + } +} diff --git a/packages/Webkul/Admin/src/Providers/EventServiceProvider.php b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php new file mode 100644 index 0000000..49b3d9d --- /dev/null +++ b/packages/Webkul/Admin/src/Providers/EventServiceProvider.php @@ -0,0 +1,23 @@ + [ + 'Webkul\Admin\Listeners\Person@linkToEmail' + ], + + 'lead.create.after' => [ + 'Webkul\Admin\Listeners\Lead@linkToEmail' + ], + ]; +} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Admin/src/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..191d003 --- /dev/null +++ b/packages/Webkul/Admin/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,11 @@ +> + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/activities-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/activities-icon.svg new file mode 100644 index 0000000..9f304f9 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/activities-icon.svg @@ -0,0 +1,5 @@ +> + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/attribute-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/attribute-icon.svg new file mode 100644 index 0000000..6c9a7c6 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/attribute-icon.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/avatar-dark-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/avatar-dark-icon.svg new file mode 100644 index 0000000..7800c9a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/avatar-dark-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/avatar-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/avatar-icon.svg new file mode 100644 index 0000000..94a1c2d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/avatar-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/calendar-line-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/calendar-line-active-icon.svg new file mode 100644 index 0000000..df30602 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/calendar-line-active-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/calendar-line-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/calendar-line-icon.svg new file mode 100644 index 0000000..db0a3f4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/calendar-line-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/call-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/call-icon.svg new file mode 100644 index 0000000..f8d00b5 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/call-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/dashboard-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/dashboard-active-icon.svg new file mode 100644 index 0000000..0da5203 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/dashboard-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/dashboard-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/dashboard-icon.svg new file mode 100644 index 0000000..72ac425 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/dashboard-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/dollar-circle-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/dollar-circle-icon.svg new file mode 100644 index 0000000..bfc8fb2 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/dollar-circle-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/drag-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/drag-icon.svg new file mode 100644 index 0000000..ff4047e --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/drag-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/ellipsis-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/ellipsis-icon.svg new file mode 100644 index 0000000..5f5a28d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/ellipsis-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/email-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/email-icon.svg new file mode 100644 index 0000000..0b5633c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/email-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/email-send-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/email-send-icon.svg new file mode 100644 index 0000000..1b30a45 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/email-send-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/email-template-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/email-template-icon.svg new file mode 100644 index 0000000..f619ab7 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/email-template-icon.svg @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/emails-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/emails-active-icon.svg new file mode 100644 index 0000000..abda225 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/emails-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/emails-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/emails-icon.svg new file mode 100644 index 0000000..c6d0203 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/emails-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/empty-bar-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/empty-bar-icon.svg new file mode 100644 index 0000000..1b758aa --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/empty-bar-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/empty-bar-vertical-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/empty-bar-vertical-icon.svg new file mode 100644 index 0000000..ac8e212 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/empty-bar-vertical-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/empty-kanban-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/empty-kanban-icon.svg new file mode 100644 index 0000000..fcf5d4a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/empty-kanban-icon.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/empty-state-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/empty-state-icon.svg new file mode 100644 index 0000000..db3e50b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/empty-state-icon.svg @@ -0,0 +1,11 @@ + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/empty-table-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/empty-table-icon.svg new file mode 100644 index 0000000..4a857b4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/empty-table-icon.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/error-illustraton.svg b/packages/Webkul/Admin/src/Resources/assets/images/error-illustraton.svg new file mode 100644 index 0000000..afee5fd --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/error-illustraton.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-144x144.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9e7e24ddb67f8251872f5a5ccfe0562196a7 GIT binary patch literal 3914 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-192x192.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..db7fe99ccf6190221e876ccdedc51fb9a6fb9d5d GIT binary patch literal 3518 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-36x36.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..356ee607f17e36938fdc12eaf1e423b6a7840fee GIT binary patch literal 1576 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k3?#4J%UA`ZSkfJR9T^xl_H+M9WCijWi-X*q z7}lMWc?skwBzpw;GB8xBF)%c=FfjZA3N^f7U???UV0e|lz+g3lfkC`r&aOZkpuVXA zJ|V6^1-uh(@=dtOFySWqgqva$ZgNhz#y{bfMD`5f`rT?q7Cg~S)cPB(I!x^YXkod$~0v%_e zW*V4stN=+txlp^n=D_VGm!S#{YM{yg|NjpNt_=r9OiM|SUoen{0d{6q7T&H1MxN#b z$vMAX=FWbe$+r66msIZ0#bG~_UP!Mg@&9yI_NXP}*O;kCG~TxTxpg~;J<^H4!71_M zeS79N!Jd!K7_fA(CtPylZwz<-@Q}G|r=}Q_*HI}pQN5f0%D7v;uV>|)vO%QlYXwKm zX@%w+?)I6v@hXhF=TGl_jGX# zu{iy7Qh4|w1BO;_nFNVPPAnlUU5g$th=@7{9_*}szjnv>d&~aco?^!9`rz*4+TGu4 z&QAX}CGlUGNLH^>DRY$Ugs)DufrVVGUS6k*CTS#Sn1{`{^65EG+Tx{~xGu!yx~@1j zZFY&+hS`EnIcvox6#wj-aMZE)z`FI1&9~X{cdT=9KcOkP(fbaIaz@4$CBq{cJ6bmA z`7oAGHtBGCBy{Oclj7F1PU81GVr!yof9^T|y5Q2;>ue=&wo3V_!wfX)7r(&M0as59@YttFkO+s<8(f1iNd6t#Tj=pW^cjnx?d;30#H#76| zaUMR}ui*2${Ltgc!JSst{``g?9vS&9SnVUgygonA^#xyAlSIXTg@As4Ny&LteUGyD z?>VF+u~>+ zBa;wAV=F^bD+4oa0|P4qgGbjZ(@`|!=BH$)RpQn#x$EFlpinIP3b3{{j|ig%;fyMVtqu!=o=?nS|%A7nkA)}Sy(0-npv8fo1|J8rx_V1CR(H# b8tMUc=mFj5w3RmvXaj?%tDnm{r-UW|pkg}g literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-48x48.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..a7319dad23fb0fbd3a17f1ecc36317f20cd64895 GIT binary patch literal 1578 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sEa{HEjtmSN`?>!lvI6;x#X;^) z4C~IxyaaL-l0AZa85pY67#JE_7#My5g&JNkFq8sKd6mGxU^Rn*LA+qju0R{0zP13L z5LciAz6m#ZC*0(paFYwfxWO~?1;hXUQb}F^85o{1FzjYv*vY`KoPj|mqEgk+Ld^(> z%+-u6fw~|XAq+Z@Agc{bAr^t10d|a`85TA~(9jI7816ifVtr$-h2P;)2<;%R!956P zqcJRDYS6^V;R4+NH0}TY|34BNLVz(*UlQaO45ZNk6Bi>ho69O4mYhjKPPdP0zyCAa z`S%>*l^@)`mUD6(mQDP-#Pxx=Fqg-Dl^s1idw=%w{+h@)ng7Vrsn;sx8d;gtxRv(3 zFmiZa$Q-_im1%M4vtp*8r>{%`p8RQL^S$x!t01FB^O<{VxR~W6Ij?Qb&;i=dnB?v5 z(kQfR-9I3Qv%n*=n1O*?7=#%aX3dcRDrog|aSZV|{`Nw6_#p#{hKFti{92EkTn}{a zU=N3-3?UxBi(e%4~Lrc?CBD8zK znmb%Gm_kCrZZ=GOxBBgchbf#_u3xzp$kb3}-QuJ8O~7n|la;*DQGb8VrQzN8=LvkO zj!?Rn%w#=ZtYSUKm-!X_+?(7NU2NUfu$0qj*@9}0yJwXc!q|gX{GN8rY=YjtlP87N z?2|pQe~FOn+yfV$UV9;V=$rDYj9Gv0)~dEfNCs!BypZvMRZ zr1clgYxjEGtCgQ0zvrEu>HoTYjGjg!)i3`}I|Ym-)e_f;l9a@fRIB8oR3OD*WME{d zYhb2pWD;U%Y-MO_WniXlU|?ln@aTGFI*Nwe{FKbJO57SIcOAS9)ZhlPp*TOSq&%@G zmBBMNF+J5cF+DRmTft1vT+c$+Qo+c;&_vh3RM*f*A<)oFA)}c`~GB z=A;6>ub-P&l9QjVpO#pbnVg?jtdEEoedAbP0l+XkKM%yWs literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-72x72.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..c68f23da0e00bf32499fd8142aa3404064e416c0 GIT binary patch literal 1884 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5)ORt! zC&U$~fN#Q0{s}jEC*0(oa8qEyP4)>lSts1&nsAd1DA<2XGOT$XeO%|m?DV)y^m?NB}@>`z*Ix22+(;zTmJw5Z;*eu4j8F3 zN`m}?fi!Nw$;8gAKF?cvau}oP&O4rx%lBBM1fzEg-%VMDe`;PY|%e+-?T7Ua`HOyeTp#KEy!5)-d;3Uct%@$q0m%U zL9zbtX}v!d^L2e)C(oUJ?e8-QCe;lW?_6zWRg~ssbPb7b1v-o|$=ls!){Oh2@ zfk$L90|U1(2s1Lwnj^u$z!dE1;usQf`0eHI(N_#)*ghPyc-6uE{gCyX1r5~;ikcp~ zJh3Tkc;w_-(EZ?Ebm94L`%N>e%QHXu&YE_==GVVlHuIm?em0plRn1rG@dCr{=?Trn z$;U(Wug-PWn7mdpUtwYD>F_m2q|&cuE#H>sG^OR@tgT;pd%aE;%V@clY+AYbT%nZI z_2kygjg}XMZk>=(Yn&`)sP-y*-COr~Z zS!r(9k@u5Sn3t=xma|?u8N4s$$&Vnv8&8)%-*WxsnMmb!ujl8|kHj{Hyik2{=%{yE z-}IS9^3(R64&8i4@chemnd`DUoE|xbum9R`;j8q=1vj6hm5XcKRVq&M6x(SV(Xzlg zwD_^3*h`rfE8er++-KXDCT>ztONr!ue{b@&uXp>)Z#I5ea6!=_mw&QDx5vN0h^jv= zDvd9CpU<~@yzu$Y6uzl(dul=}v)12N(K)hY`}=$KALjNuD|bq&)&8>i^Yr!h_ssUc z>ido*ioBHl`Stht`+-K8mzMnW|IF`O`c%mB^^EhtG^bkP8c~vxSdwa$T$Bo=7>o>z z40R36bd5|x42`V}O|1;fv<(cb3=AG!uS`eLkei>9nO2Eg!{n}mw}BemKsFTTr6zz9|8>t%ve z12IswUVc&fowm0?0~sVhCWd5`<|bKLx#TC8=BDPASXl)Cl@>D?F8{w|X=V0-zFpBy)l@t5O*ZoSddCvU>xR3PX|#4f142 z%gjjydS5>`uOufwT|X_cEHgPjuUH=uG5W^ImX=8dhGt1AW)_x-hGv$g<|e5Y#%V^z giHR1ehK71T9eP0bIc?=l1KPmg>FVdQ&MBb@0R48kJOBUy literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-96x96.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..23d1920bc49fa9521762c0b4e3449a663a5b3958 GIT binary patch literal 2249 zcma)52~d;Q7QP80$RdcOP(+Lnq7<|JS;(S<@PbHXNstPH76N3eU=j!-_C?b?Q7cqZ zpnd2d2CSu>=>)V`Yw8lQ7EoMX@hJh6s+}kBKxNp3u)G^_e6cg__|JduJ?A^$Ip00^ z{{N?f_-J<*KNkRid&~xYB3v_U!`T7O|6YH<7FZzV#qj_*RpvS^a)drAKQTHI7;pOb zLkF9+Au$es-FN`B`v91NkhTwi0x|#t833@W0Ps;(n}lltKqm-dlcFHOU2j>ex47yp zZhDJ{-r}XVxR>4Y{M-^?Xk(fhsArmjDa>GmiAR{&HQ|9oXt07v^dN-pcDNglgy9he zo*0B>GFKtYAPO^(!o(qA{+tLr!d^`yuBL_JsW62eg3xdffgD(h%7TjXy7M!1=Mj5% z9(?=xuXAB{e_iTzn>doK+1GE-o9=7;Esc56d9wWm<`EqEl@L_7FK9a@+u7Q{U<&=U z{StYF+wR`+uXA>tg{YXS6~P<9!iZ?J-aYbQy_4v)9Ko{lFjmp2iu;Ozi2Ki`mp}ev-=&x zAuX)OrPQ0uk+Q>~nyQk?sEii}B{xD=+-Pn0YkN;SC_K^9WbiU~svhU#$u8KBAK`j` z-|EL3On5l?ZI15FlSw%Z-Kw7|)%{xURXIX+84fSj_fefcy;$qn>rtWa3G*z!l|YbL z`MlnGuThQ8aNpykzN^LM+b8v&0!^v*=`!cO@WhCr7J+$e3Hs?YAJv<%WP|3rh=J{n z+FlPHb|P4`dn@QaLfus(BoB<7SNvy#@G0!_b@PDmOG5 zo18PxW_PwMy0+)gJts$AXX7ciLZ?IFse*~1i6~Krq%$B`FeZ%53z@DL=cW| zD*k2AU0Cr!Cq{Sd3&N4U(8zEJ_u8P*EhMcg>ub`?wyw0>#kYNmHKKmbg*h{i zsu405G+KrD#DY$Oi+O8$K=b5DR-X4!#YTs+B$>#Brf<0%d|t1$=jjqP0+Q_Usi z=gwPAIjZRUru1{~qXX|5&Ma3owiJ{LR9Ct?{4%fyBS2ZEHk|qB;&@uzuIHX<)cBt7PMMC^rtdVaQkB&HYyU63pScTfrMGcje!q{~=Qw*oRbFNC&q?D8;g1un zj!IEyi_~IvR-PCx03jn30+~TTXh{?*n?h%k8KGn{n@oOmuSohvLariPE-Cu+go;C# zyJ5n5n?k-qqAnEWi9t-RNGgsKN#$AFu?%7ukx5`-5i*5FAkzsH1S_O4urjq;$tIBs z3k!*I8ygPDCMxozJ^P1XLEvkvm?SI6&1AFrimZZM@eVbcEr8T~K&hYmiS!4~OHDRg zCYDQOYCvHj9w4t6a(wLSyy7Iwv(+*irQ^Gm&XDr19VJelD^?dN#o*KxlLtnNDWRYTXQw;$c^3lYF-rkRu~2>%s?NXtQ1DgTxphk>`kE`=s0* z>KuiXBoXbDXDN2%lm34(Bx)9ml}V;BGP4;>mWaY&(ZgtBCRKt^MIxq{LLtHoBHUl( R8FvX(05MVVd}CyW?tj(8M$P~L literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-114x114.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..ae178458fc39da18fe5fb1ce3977d48760683b93 GIT binary patch literal 3450 zcmZ{m2{fDQ*2mu%T4QS-I*=GnDIp1ROr_PRP(mVx;usbfR z&kZ_gqiD4iYOEMqhn}i7l)7{<^h@vh?z-o@>$~e+``zn#_HY09^S*nnXYC9pjE$t& zAu#{|ByG_s9N$O$G?9J$cg|dD0^bP*oN_n?0IfOVJAT6aH7F8iV+Aw~9a-it!2W2Q z0|3PR0s!Q{I@C5+VLI6+_9d)&;i-bTjJV!+2Gwjf*V)*I(^M61WKq;ejwz>=H(-|wb zr^00yG#;8=Eb8qoI#)V3*zg6>Zt$_>O%^FOI(}&9%XaCf_@x=)%RRm@C5e6ij}rqw zeh?e!rVq#zzIRvM^s2`gEm2cXi28~;J)*6CaTGp#KQ7Pd*q^JWOJ883)@X;m2{r`e zXdC$TPWtj-JBEz}F_qnq)@@2(Vx3p(0Inn-ORi@}%6JRn#JOY!6D`*wZ~VdhiY3|@ zJl`g1p9cGJQXMB7E*YsdDX5c-0aH11@@HEIIgdf|K4;>s<|?{Is2os)6g?B~4koXn68e6Zwm%x*eKSj(}` zZe={@2m|U;7^{vTnr*5hk)EmO!KW;)pnydQ2xmR`s4Ul|&Dm0|lMA$u;hwc}B{tmX znHlpf{6sVbInTR;j|k~#N>{vahKP#(U^79P^mmXrZU((^gmF|K_Qfpa>J(;INuZ=T zjkC|GRkXN)qj3Dr_PLLT%5zXm7km$ywbA$KkF5-BmPqVUQC5Q9XPM6iY;m@1-)WR$ zr+{20zd?zLH>OaeYVWSpts#y0$&Uj1kkpOGEi?Ad|4baOeda8rMUIT0?6Yz|d3kN* zuLF?OF(1Jl(Z7bn)twle;NhBg3Ken)trG{(4UP}=x=s(kS-D$++w{&`jK1uXLk0y; z^jp`}E|2<^o|M4Q?!AFRIaCgwm(;EnNF9MWdM@`^pF|_#j#Ac8?))?5NLLch{81M~{HVGjxKO z_=iW#FTWOV4|KcbCrQDSxd$Zwiz3)v1swiUhp?|=^rP> z+!JVKM|A^yHAR*E8LZ^aWTw?XQt#~J(eDFf4^=L2?|AaTx0^n z=N)FXQ_M^4jEGOir%Tu!(l`4RK+R%3W4O`xnYG!!DYh3=QLivxF1>dw2&y(cm3XMW z7|HOj?x4W$o}K`|qB!NbyFK-1i~1Ub3BJF+rsMmBb#6s!j>VhNf0ka)C%oUs?v3-^mM8D zqKd86L@D_qPtk|S;Kg*U6m#l~g6zx;-NdZ1ela}4di*ZvNM4v78}AdPJ_e9lK1qpGyj-1L)+;;q1_SatXTI;25K_Kt7&@PReL)TeshY=qc|?QH(EWvU z$k&*dJdLsSDtc(6h|WqhWea+#of|{{Eh?%=Wq>ud92AB!$M{KuZi2Q`a)$wjn^m{) z?OcmXEbc8H-fCXW3cYef1?l;$)^-vDePKbJam7RzKLdaGD9*o9{Mq5!{aIE6>jHej z!hmxteOH-R9$Z}|RmyRVuB z0S-GFGNrBgMaT(s{N4$5blvD@cfw4%C-4TE!W-#S0�q^J@mo4_vhkimct<#Zfvc zx2}R~&wn~Ejr^!$y&`4hU04#T!FnXz)r)b&c@Ug+W!a+ICJ@~x+e6oh?V6ndLbh@) zNtO(bYl!ZPhv2FKY4|XvS4!Gf`#Cx0taiZ--*ys<4^7;EmeBEwfPBXN?&C;Y8o4^r z9;9#k7GBvEyYAJ~n1SLhC;EafbMQBK_+xE3!f##Z#ZGG8=&D17udAkmCMjr`f#BJj zL~98hneIZNdzEi%r0l;E+imC?qz=CRctV{Z`#{;lKOmcVdIbJ|AR=@KwTxYGpg^Lo zkQ?2nd9DzBFpy9lvUQA3fiw}-TAZ0Rm?xXRPf4v|5qGt!3F?}J^#yi^(qC;7QwQR$ zsV`m}-o61IlGV|SF75K@JayFC2ziE3?Twyy5gqn2zZi%3u(W7HlwQ6f<({1#0y$*1 zc|>Ln3SxN7$jZOb)m_kfD_GMkp8Xut?GB31SF+GAP$T4)F`z~-P%13vPXE>@_d ztHR}Qvj8_^%tv-J&~Oqc&54sr>~kD=YsikW8T2W?*Sp9*!Cop?Nl^{o=IyI^)r2rb z41SicC!dU`e}C{~pD(uW^a~*A=uzeGj^o1vSzoOyFXsx(|56thk$C|{=5++?waT}B znGI6V1WkO4R=Q9W*l%yW^Fv(5EO_E>G$nl`4|22F-AEioY5yUZXkdykl-Z12SL=|j zU6gB}UNV+=kYdWLLH2^1QMRl`BOm44n{_ar2GO&Lw?7eEX?H!WO zEN*pW65Bxd!~TkO-AN6d@_f{|?O@}>*;V=!cFam3ju({=T`~W3j`%9c>gG)Lm-+7ORuxyGB;#qru|IrQ0(d1>;=Dh zn;PnAZ_W+LhYdt{;tgtaTL z+00mu`Y*7wN`@{ej*@n7r^viqQI96S&aJJk-Y&%+9R6=}{?P%_(iBzt`(d= z4QtY@-DyNW8p+f@g2Zgnc*j#`B@>7N~Xp5MUVhnieCW9!7m`lKNyVE`&G{vY63>U;D%6`5fqL9W8p|} zAdMDgs;?gt6QdXOlja+r)}uxQ%%-jI1p%d>iuk}N3c=JAMfH!OkV0vurcQh`5`b6# zxUc^o%s*?Ing)`B0s?6O+yrqDh)Cr#ihtAjU&bwnNDKUlj5R<+_=xh~5QiWNi5441 z0{(d_{jksg%Qjccf9N>i`4j+0A`FcTVMZ|I9$li0j~x7)j&o2P34mEyT`#xb@k6eE z3%THI0di0XiU0Zflu%j-H9(*27ainJ4UN?QcVqMo{7p;im;!I36LzZ#N^ j4af)sKR;s<9InUD(Bq%aiX}hf6pDsq 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 G`ac1IZoTXP literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-144x144.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9e7e24ddb67f8251872f5a5ccfe0562196a7 GIT binary patch literal 3914 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-152x152.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ad9bd34a704350cdc2f292f4b0248af719cf234f GIT binary patch literal 4737 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Ctm|LKV^1Wc$k^V^HK-X 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-72x72.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..c68f23da0e00bf32499fd8142aa3404064e416c0 GIT binary patch literal 1884 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAifOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5)ORt! zC&U$~fN#Q0{s}jEC*0(oa8qEyP4)>lSts1&nsAd1DA<2XGOT$XeO%|m?DV)y^m?NB}@>`z*Ix22+(;zTmJw5Z;*eu4j8F3 zN`m}?fi!Nw$;8gAKF?cvau}oP&O4rx%lBBM1fzEg-%VMDe`;PY|%e+-?T7Ua`HOyeTp#KEy!5)-d;3Uct%@$q0m%U zL9zbtX}v!d^L2e)C(oUJ?e8-QCe;lW?_6zWRg~ssbPb7b1v-o|$=ls!){Oh2@ zfk$L90|U1(2s1Lwnj^u$z!dE1;usQf`0eHI(N_#)*ghPyc-6uE{gCyX1r5~;ikcp~ zJh3Tkc;w_-(EZ?Ebm94L`%N>e%QHXu&YE_==GVVlHuIm?em0plRn1rG@dCr{=?Trn z$;U(Wug-PWn7mdpUtwYD>F_m2q|&cuE#H>sG^OR@tgT;pd%aE;%V@clY+AYbT%nZI z_2kygjg}XMZk>=(Yn&`)sP-y*-COr~Z zS!r(9k@u5Sn3t=xma|?u8N4s$$&Vnv8&8)%-*WxsnMmb!ujl8|kHj{Hyik2{=%{yE z-}IS9^3(R64&8i4@chemnd`DUoE|xbum9R`;j8q=1vj6hm5XcKRVq&M6x(SV(Xzlg zwD_^3*h`rfE8er++-KXDCT>ztONr!ue{b@&uXp>)Z#I5ea6!=_mw&QDx5vN0h^jv= zDvd9CpU<~@yzu$Y6uzl(dul=}v)12N(K)hY`}=$KALjNuD|bq&)&8>i^Yr!h_ssUc z>ido*ioBHl`Stht`+-K8mzMnW|IF`O`c%mB^^EhtG^bkP8c~vxSdwa$T$Bo=7>o>z z40R36bd5|x42`V}O|1;fv<(cb3=AG!uS`eLkei>9nO2Eg!{n}mw}BemKsFTTr6zz9|8>t%ve z12IswUVc&fowm0?0~sVhCWd5`<|bKLx#TC8=BDPASXl)Cl@>D?F8{w|X=V0-zFpBy)l@t5O*ZoSddCvU>xR3PX|#4f142 z%gjjydS5>`uOufwT|X_cEHgPjuUH=uG5W^ImX=8dhGt1AW)_x-hGv$g<|e5Y#%V^z giHR1ehK71T9eP0bIc?=l1KPmg>FVdQ&MBb@0R48kJOBUy literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-76x76.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..66e7aaf407530b075ee08d086bf8bdbc49cf3e8f GIT binary patch literal 2103 zcma)*3s_899KcUzdg~=B5k)h#%RKIFnpb&DO=Z+1y@*9K(`{xjP3l(iS`wQ`gNU+= zY~|ZD9!cV>4Xbv&+tPD3Yb{CBtYTS|_KfyR>*M2o_niO#ob&rX&%N71f&(nf9L)d# z7J@naP$+}+!-N3mCxRp6p&&|mLLLC8vd#NNhH!0=7#iRM)Hf$~!G*JAPN)!oHDmxb zrUUQ_Zf$%7KoT8*$I$?A_XA)bfAIW#ZvaM32?+}KgMg)~)k4)eTGeW$YBg82TJLPO z+SzQPYO+?f0#&V5b_)q%lTo(ywi}k&&DNPWZ8l%FP_+N51P#no*x>dB{F%BC2UPj&69 zASp~{ra6ov>@hab^1Tlb-Ky&y-7h@$a68{SOUJDwlg?SZR@6D2>pmqtF0Vs2da^Ff%ifjBULU+!VKC=f18zf#yrz-@5Ta$i^P-m;abn+Q{pQ-m$1G* zyf*jRgR5n5{^!zx*Hs-aufK?UXhTfVX$Fja!-|FWJyp-H@89OFv9FFQ8%Wg3#2uQ{ zr}oa(5&TR7laX$>PZixYC3!;MmP`{DY}1uU$DS{b&^8xdXI2L0VfpS!HhxcQBHb~8 zV}-D5ik4Y^?R4pa+PU(ARx@mRT>i208s-xFiW^5Oz>V8iiGmvcguD-n`IcG9wBi*}- zvKsu-N~Ya86nRg&eEEbE(}GH?AKy9|=iAl(FeU2j%jS%<7A2*k|u=Y7n7_ zPF5UeIJuRTt_d4=#b{;6B^~Ny)^|~HXYmSE|E;r|@)`{_bWLPcl~HO+qyLlHA%qJH z6`{Em>J6Q0lSxF`4(d6f?uQcP99>64hH*Y4*1oX_?-7#s)UOw=&fu9hsMl>O?P_bJ z%IhBvtUeZeKe@0C%_|CQ60h*l?5k)2paaUagi% zzbJ}>C3w;LplZbqOI<-XdwX3hp+2>j(=wNQYgtW{_`Vr+sW>|KM9g;6`{pN>Za&q` zI$cZLVawuan|id!RZ`7auM{T{dzDp;cI*QB5KzR6t%B%_|3Kd`I20ps=+6{VbpzNUsQHp zYgXR%+VIl`e{!cx@YRbGcW0FM&I(H?)>I~T>X!A;R=#8bS4F5gd-kY#FI;BPNUPgbow97snY)$D3mes*wl|3?8&^?4h{VE5fYWL zc#0?i0|JFeiU~zhxnzYilggs9DI8~%jxZ>6PYQxM&qtWfG8~WR(r76uDO9p%5Z>iP%DtI z1v2&{{QSo(kjLOMJ<@R8#RMYbM<7DE0>e||G4M7kT6~;z*6GOL_xuRMAq5a7%J5{+ zJ?YFh8%H08h}8%`Ve&N?p!@jb6wK7ZqsS3Q5upMQD_@Dh@@a}Ve5F!KixnlyCCa!& z+PjOPc}O@MF&$xwW0-7?2w`$OSqzNr5sP|=L~IN}sL+B6^YbaUh=mb=z%Q7u_K8mW E7eWIV;Q#;t literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-precomposed.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/apple-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..f6574788239f24bcf2132e6d23db639bb4d4dbe9 GIT binary patch literal 4092 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 + + + + + + + #ffffff + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-16x16.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..952428b81ef22bee1bbd70c2b469041c5c50ed12 GIT binary patch literal 1136 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstUx|vage(c z!@6@aFM%9|WRD45bDP46hOx7_4S6Fo+k-*%fF5lz0;0 z6XFV_`6k@to^Vs$z(mE;Ma{@kUB^(($O0%xO*HW~9}uCMsch$~;1P=|eoNWLQ_av^ z&CpEIHIi@QEs&N;clajWQMUJkh%0y}^G&#O!9Vj@y_IK4FGaD3p^r=85p>QL70(Y)*K0- z;9^e~#}J9jz5U0zPXe8*TH+c}l9E`GYL#4+3Zxi}42%qQ4a{_n zOhOEetqe`A49v6*46FsjbpDi|3Un&=vs>KYm;1R9ztWR#Q?Sn2DRmzV2hf>Z-BP_w?G3KBtRyHWR&J6Sy{Q{Czs}?=9O4k1pt*6GZ-%azgr(o4cJaAtBlml^o$Y) zLrWumhN4!W8gV3ZplZT1Q%W*GN-nQaL{j3LnVVWtS&+&Ac9niXUb_9JFh4YN zd_#b$7!1vfOiWD-ObyKbHSjC|D&a>mCpfbzmBGNtY04tIH$bT{B&pCKPlmM2oK&Fq z^>gz|a`Myl(-O-vlk@Y6^$`)HZ=7stnPgySmXu;!lvI6;x#X;^) z4C~IxyacIC_6YK2V5m}KU}$JzVE6?TYIwoGP-?)y@G60U!D3!R5LJD*E8gu@_=XN3m_Y4 zFA%Bg8URILjE6u5&>1{4o`FR4jDS*bR{=$UNY%uK@!)?5n~EgR7NBYW|NoyqcWV)#ndrm8xE_Sg5R zYF|^=-tQ)SKuxbfiP3Qe3uDB)M`}zdZ{M3Hy}m3J|LRX!=*54}8wKR!3|UHgRo4NH zXH4>TcS$(9y+#1Y;VkfoEM{Qf76xHPhFNnYfC^YVT^vI!PG7zBJc!9qr0t=MNVtpZ z1&yv)ku?g767&<^bKLNM_g~K@dy=Qw<`{LXejF7r-@zxk>6gl*DMFiWJC*5{m^+oLDok_O()zN)hM8ws`USDF<2Nmt zCiqAj@~>pQEI$3g|B2I1xJ?V6lh++nSDIVfY<;&QrmlE(z#YB9<=GFv%PMv~jeS?5 znj)UG-e)_@ZhftrtKK-hk(ZH^Ww-8}{36qF#oW2^JLYb*TOW4)!KYK)KSl0+J-e2v z{Ci@^!3Zj%k?rrs(~1&S}(sS{Z89kkeekyCWd5`<|bKLx#TC8=BDPA zSXl)Cl@>D?F8{wFg-EC4FuM=~ck zvnrLrz{zRKBD*(0sW2p|&>&BSw9K4Tp!fB2^Gb5^)AiF5%QBPm^NRHm5uYHpHhVVq`UoS0~lYG|kj)S(A-pVL;}G@uO(p00i_>zopr071;j A4gdfE literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-96x96.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..23d1920bc49fa9521762c0b4e3449a663a5b3958 GIT binary patch literal 2249 zcma)52~d;Q7QP80$RdcOP(+Lnq7<|JS;(S<@PbHXNstPH76N3eU=j!-_C?b?Q7cqZ zpnd2d2CSu>=>)V`Yw8lQ7EoMX@hJh6s+}kBKxNp3u)G^_e6cg__|JduJ?A^$Ip00^ z{{N?f_-J<*KNkRid&~xYB3v_U!`T7O|6YH<7FZzV#qj_*RpvS^a)drAKQTHI7;pOb zLkF9+Au$es-FN`B`v91NkhTwi0x|#t833@W0Ps;(n}lltKqm-dlcFHOU2j>ex47yp zZhDJ{-r}XVxR>4Y{M-^?Xk(fhsArmjDa>GmiAR{&HQ|9oXt07v^dN-pcDNglgy9he zo*0B>GFKtYAPO^(!o(qA{+tLr!d^`yuBL_JsW62eg3xdffgD(h%7TjXy7M!1=Mj5% z9(?=xuXAB{e_iTzn>doK+1GE-o9=7;Esc56d9wWm<`EqEl@L_7FK9a@+u7Q{U<&=U z{StYF+wR`+uXA>tg{YXS6~P<9!iZ?J-aYbQy_4v)9Ko{lFjmp2iu;Ozi2Ki`mp}ev-=&x zAuX)OrPQ0uk+Q>~nyQk?sEii}B{xD=+-Pn0YkN;SC_K^9WbiU~svhU#$u8KBAK`j` z-|EL3On5l?ZI15FlSw%Z-Kw7|)%{xURXIX+84fSj_fefcy;$qn>rtWa3G*z!l|YbL z`MlnGuThQ8aNpykzN^LM+b8v&0!^v*=`!cO@WhCr7J+$e3Hs?YAJv<%WP|3rh=J{n z+FlPHb|P4`dn@QaLfus(BoB<7SNvy#@G0!_b@PDmOG5 zo18PxW_PwMy0+)gJts$AXX7ciLZ?IFse*~1i6~Krq%$B`FeZ%53z@DL=cW| zD*k2AU0Cr!Cq{Sd3&N4U(8zEJ_u8P*EhMcg>ub`?wyw0>#kYNmHKKmbg*h{i zsu405G+KrD#DY$Oi+O8$K=b5DR-X4!#YTs+B$>#Brf<0%d|t1$=jjqP0+Q_Usi z=gwPAIjZRUru1{~qXX|5&Ma3owiJ{LR9Ct?{4%fyBS2ZEHk|qB;&@uzuIHX<)cBt7PMMC^rtdVaQkB&HYyU63pScTfrMGcje!q{~=Qw*oRbFNC&q?D8;g1un zj!IEyi_~IvR-PCx03jn30+~TTXh{?*n?h%k8KGn{n@oOmuSohvLariPE-Cu+go;C# zyJ5n5n?k-qqAnEWi9t-RNGgsKN#$AFu?%7ukx5`-5i*5FAkzsH1S_O4urjq;$tIBs z3k!*I8ygPDCMxozJ^P1XLEvkvm?SI6&1AFrimZZM@eVbcEr8T~K&hYmiS!4~OHDRg zCYDQOYCvHj9w4t6a(wLSyy7Iwv(+*irQ^Gm&XDr19VJelD^?dN#o*KxlLtnNDWRYTXQw;$c^3lYF-rkRu~2>%s?NXtQ1DgTxphk>`kE`=s0* z>KuiXBoXbDXDN2%lm34(Bx)9ml}V;BGP4;>mWaY&(ZgtBCRKt^MIxq{LLtHoBHUl( R8FvX(05MVVd}CyW?tj(8M$P~L literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon.ico b/packages/Webkul/Admin/src/Resources/assets/images/favicon/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8fd69159384857b582cc8e427588faba37285153 GIT binary patch literal 1150 zcmd7OOG_J37{>888ZRK33WDIul#sCtsU*P*QtC=*loqloF1(de)Lj?qR?xkpg)Utc zKSu?@uizMks03O;XbSx+dd4__jl7pPb)>x7flw+Hh|T?SZl%@e5^KVj8R^|5+o` z=iBITQuzgxpsce--v&~D&xe6$hnrp${clDR9|lwYcb6SV`Gt4m@!aX>*mL$pwDDm}-wpzAJ^Lc@o*HLlPbNm6&K_)d+pHCk4TC4zUn!v$E_+VDj4K4MUnZs|U&W{L z8{QYj*R{1{+IkK8jnKI+tGpD+rNLhBXKl`{sm9oT5YySc2=A<`mTKx=%~(PSF0XbM zU5H{1KcM;BS=E;&EW*_&($9rKtnw}C>p!T*5oV!t>z`PCsKzq#$c3L;E48(WvFM&Y yw6C6Z9nGN?N$5Pc^r&sQY$n$uX1}}5E@}!bW?!+=_~&|&6|>bHv%S-5M!6fYLjX_! literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/manifest.json b/packages/Webkul/Admin/src/Resources/assets/images/favicon/manifest.json new file mode 100644 index 0000000..4a3a89e --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-144x144.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..f6aa9e7e24ddb67f8251872f5a5ccfe0562196a7 GIT binary patch literal 3914 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 literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-150x150.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..4a4285955fb988861d5efd44499c107eb4481cb2 GIT binary patch literal 4718 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 KrpDAW`M&_$N>VHU literal 0 HcmV?d00001 diff --git a/packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-310x310.png b/packages/Webkul/Admin/src/Resources/assets/images/favicon/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..d3674c6bff5771509fb8517496300adf7a6ed797 GIT binary patch literal 13305 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 pdMp94mlSgl6|=UMv= z7#<8jsxts-8vu9%r_vq+kca^AWGMjnHvm}26`c?B24I9;=-dc@2(VOYER-6OQbSg1 z#waxueb{2EyknlD9i4ffvgxLyC(8+AfyCaiYcDxtEHkCraSwB(JE|QfkRAuWF8p{cV&C3~MIx}Xvpe$z$cgDQj zFb^k;?TWD+F_sI)f=Xb6GKL-V-<{#`{~zJ5;eHJp)L} z!_^P@><>-8C-pxAh7SVLhlYmM=(KcrMNSjpA@iaAHxJd3G{&B^yxm)Qvvw@4R(#d_97P@T9O*xdT zo3C>#N2D5A**(G?E4CTYns3_v(9L2u_4+^eZERyUoMqIC(W__1BOdO>Zw9=qVyk-w zf38oSMDkv|)SC3hCASVrCJE>8c_lp4i)`Shuq}w^7qRe4 z_nnUUw|s4kpLIVa_{6$VNcnRYKQib zJpV$OLtkTo_Y%$P#(wYobADm#Mw+%+a?=yqH+t`W>FfWZ{V4TdT;=69+uPZGPT3!A zZ$BbDaI9#C+jWZ+w>kAe)mSBC!|ZF@#$7J5Ef~l3pX;!H?|6b-tt;-V&2q64YK^=Z zlg7@giREpuJT#_`Q#7LYbW$DbK4&Oll8jb@J_w^|`C9>o|q?zVpfLmba`gC{`aQgD*!JpMTZd>$iSIteq_O zaLtL8)7A#u=M?VpstR?LY1gPOJ-B6JRl_Od5DUZi^xog&+&}9X?Gk711i9N*rk(sj zpWvFwsmtA>ZsCE~fpgj?FPhrQiQS%eL5SbsJP*)9;_{Lx!S!ZQ-OBU(Z2E0|!n~r7 z&EM1e(5+bA={m9FIC7};30ZY=<@H_l{0{o2zQNs7zcy8JJF6qLQI)m4Ro~`t&#kK7 z%rIS2Zj7lFI^4zk+?kJs@~f*+v#V$2Mh!d525s7_NF9s6nio*8#jc`9IJs&7yLRi@ z6@EzjihMsnBUQ~B&uTO;K0tEv#5@N${~CRjDGD;RnwEC@Y*^N z{tJm^0z!<7;>FMa48c%$gz1iXM4${D^~4e8bOgZ>q)nY7d5<7dER#m3{5>H*tFjdm z0`wIU6wySoAYKfDWCDpeSRj##zOZM~yl5!5@kXh=P5*qGO?V%@lXg&0O+BiGX0;$5c9Ssj>m|l zk{AM@Y>Wcp(;>#%AkS}@1=3|ij2?3Hn1cy~OfY~1OJ!mrB~A?9s-nlqB|fJkL;jQ} zI0B*o%EUZ8JrGZXIhaOPK?ubl&wOdB7$98k*1eoAxD;uy^l5kyh?d5R;r8h=IT5Rn z(4z%OQjtQQK>y=l=nN5?EksbJa2b=u7NAVFr + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/group-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/group-icon.svg new file mode 100644 index 0000000..d3c2465 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/group-icon.svg @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-active-icon.svg new file mode 100644 index 0000000..3afe318 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-active-icon.svg @@ -0,0 +1,5 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-icon.svg new file mode 100644 index 0000000..b6def06 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/layout-column-line-icon.svg @@ -0,0 +1,5 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/lead-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/lead-icon.svg new file mode 100644 index 0000000..6bb1694 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/lead-icon.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/leads-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/leads-active-icon.svg new file mode 100644 index 0000000..7305ef0 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/leads-active-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/leads-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/leads-icon.svg new file mode 100644 index 0000000..7dfba97 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/leads-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/logo.svg b/packages/Webkul/Admin/src/Resources/assets/images/logo.svg new file mode 100644 index 0000000..4adf932 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/logo.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/lunch-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/lunch-icon.svg new file mode 100644 index 0000000..215e154 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/lunch-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/mail-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/mail-icon.svg new file mode 100644 index 0000000..7c3dfdb --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/mail-icon.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/meeting-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/meeting-icon.svg new file mode 100644 index 0000000..af93f44 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/meeting-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/note-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/note-icon.svg new file mode 100644 index 0000000..3869cee --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/note-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/organization-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/organization-icon.svg new file mode 100644 index 0000000..c600484 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/organization-icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/person-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/person-icon.svg new file mode 100644 index 0000000..68446b1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/person-icon.svg @@ -0,0 +1,10 @@ + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/phone-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/phone-active-icon.svg new file mode 100644 index 0000000..ec62c49 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/phone-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/phone-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/phone-icon.svg new file mode 100644 index 0000000..415d1c6 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/phone-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/pipeline-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/pipeline-icon.svg new file mode 100644 index 0000000..5b2143b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/pipeline-icon.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/product-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/product-icon.svg new file mode 100644 index 0000000..eeb3a00 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/product-icon.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/products-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/products-active-icon.svg new file mode 100644 index 0000000..30de8ab --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/products-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/products-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/products-icon.svg new file mode 100644 index 0000000..f26d97a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/products-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/quotation-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/quotation-icon.svg new file mode 100644 index 0000000..95afcfe --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/quotation-icon.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/role-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/role-icon.svg new file mode 100644 index 0000000..076af4f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/role-icon.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/settings-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/settings-active-icon.svg new file mode 100644 index 0000000..52411a1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/settings-active-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/settings-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/settings-icon.svg new file mode 100644 index 0000000..9536b92 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/settings-icon.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/source-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/source-icon.svg new file mode 100644 index 0000000..b5f0a7f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/source-icon.svg @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/sprite-main.svg b/packages/Webkul/Admin/src/Resources/assets/images/sprite-main.svg new file mode 100644 index 0000000..6e7a4d5 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/sprite-main.svg @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/table-line-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/table-line-active-icon.svg new file mode 100644 index 0000000..d8fc84a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/table-line-active-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/table-line-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/table-line-icon.svg new file mode 100644 index 0000000..dea6667 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/table-line-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/tag-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/tag-icon.svg new file mode 100644 index 0000000..d4d2dc9 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/tag-icon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/tools-active-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/tools-active-icon.svg new file mode 100644 index 0000000..07155a8 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/tools-active-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/tools-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/tools-icon.svg new file mode 100644 index 0000000..e10ad45 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/tools-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/type-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/type-icon.svg new file mode 100644 index 0000000..dee32cb --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/type-icon.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/user-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/user-icon.svg new file mode 100644 index 0000000..83cfe8b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/user-icon.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/images/workflow-icon.svg b/packages/Webkul/Admin/src/Resources/assets/images/workflow-icon.svg new file mode 100644 index 0000000..19ebd1c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/images/workflow-icon.svg @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/Admin/src/Resources/assets/js/app.js b/packages/Webkul/Admin/src/Resources/assets/js/app.js new file mode 100644 index 0000000..ab3e623 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/js/app.js @@ -0,0 +1,221 @@ +import Vue from 'vue/dist/vue.js'; +import draggable from 'vuedraggable'; +import VueTimeago from 'vue-timeago'; +import VeeValidate from 'vee-validate'; +import VueKanban from 'vue-kanban'; +import VueCal from 'vue-cal'; + +import 'vue-cal/dist/vuecal.css' + +import './bootstrap'; + +/** + * Lang imports. + */ +import ar from 'vee-validate/dist/locale/ar'; +import de from 'vee-validate/dist/locale/de'; +import es from 'vee-validate/dist/locale/es'; +import fa from 'vee-validate/dist/locale/fa'; +import fr from 'vee-validate/dist/locale/fr'; +import nl from 'vee-validate/dist/locale/nl'; +import tr from 'vee-validate/dist/locale/tr'; +import hi_IN from 'vee-validate/dist/locale/hi'; +import zh_CN from 'vee-validate/dist/locale/zh_CN'; + +import 'vue-cal/dist/i18n/ar.js'; +import 'vue-cal/dist/i18n/tr.js'; + + +window.moment = require('moment'); + +window.Vue = Vue; +window.VeeValidate = VeeValidate; + +Vue.use(VeeValidate, { + dictionary: { + ar: ar, + de: de, + es: es, + fa: fa, + fr: fr, + nl: nl, + tr: tr, + hi_IN: hi_IN, + zh_CN: zh_CN + }, + events: 'input|change|blur' +}); + +Vue.prototype.$http = axios; + +window.eventBus = new Vue(); + +Vue.use(VueKanban); + +Vue.use(VueTimeago, { + name: 'Timeago', + locale: 'en', + locales: { + 'ar': require('date-fns/locale/ar'), + 'tr': require('date-fns/locale/tr') + } +}) + +Vue.component('draggable', draggable); + +Vue.component('vue-cal', VueCal); + +$(function () { + let app = new Vue({ + el: "#app", + + data: function () { + return { + pageLoaded: false, + + modalIds: {}, + + isMenuOpen: localStorage.getItem('crm-sidebar') == 'true', + } + }, + + mounted() { + this.$validator.localize(document.documentElement.lang); + setTimeout(() => { + this.pageLoaded = true; + + this.disableAutoComplete(); + }); + + this.addServerErrors(); + + this.addFlashMessages(); + + window.addFlashMessages = flash => { + const flashes = this.$refs.flashes; + + flashes.addFlash(flash); + } + }, + + methods: { + onSubmit: function (e, formScope = '') { + this.toggleButtonDisable(true); + + if (typeof tinyMCE !== 'undefined') { + tinyMCE.triggerSave(); + } + + this.$validator.validateAll(formScope || null) + .then(result => { + if (result) { + e.target.submit(); + } else { + this.activateAutoScroll(); + this.toggleButtonDisable(false); + + eventBus.$emit('onFormError') + } + }); + }, + + activateAutoScroll: function (event) { + + /** + * This is normal Element + */ + const normalElement = document.querySelector( + '.control-error:first-of-type' + ); + /** + * Scroll Config + */ + const scrollConfig = { + behavior: 'smooth', + block: 'end', + inline: 'nearest', + } + if (normalElement) { + normalElement.scrollIntoView(scrollConfig); + return; + } + }, + + toggleButtonDisable(value) { + var buttons = document.getElementsByTagName("button"); + + for (var i = 0; i < buttons.length; i++) { + buttons[i].disabled = value; + } + }, + + addServerErrors(scope = null) { + for (var key in serverErrors) { + var inputNames = []; + + key.split('.').forEach(function (chunk, index) { + if (index) { + inputNames.push('[' + chunk + ']') + } else { + inputNames.push(chunk) + } + }) + + var inputName = inputNames.join(''); + + const field = this.$validator.fields.find({ + name: inputName, + scope: scope + }); + + if (field) { + this.$validator.errors.add({ + id: field.id, + field: inputName, + msg: serverErrors[key][0], + scope: scope + }); + } + } + }, + + addFlashMessages() { + if (typeof flashMessages == 'undefined') { + return; + } + ; + + const flashes = this.$refs.flashes; + + flashMessages.forEach(function (flash) { + flashes.addFlash(flash); + }, this); + }, + + openModal(id) { + this.$set(this.modalIds, id, true); + + this.disableAutoComplete(); + }, + + closeModal(id) { + this.$set(this.modalIds, id, false); + }, + + toggleMenu() { + this.isMenuOpen = !this.isMenuOpen; + + localStorage.setItem('crm-sidebar', this.isMenuOpen); + }, + + disableAutoComplete: function () { + queueMicrotask(() => { + $('.date-container input').attr('autocomplete', 'off'); + $('.datetime-container input').attr('autocomplete', 'off'); + }); + } + } + }); + + window.app = app; +}); diff --git a/packages/Webkul/Admin/src/Resources/assets/js/bootstrap.js b/packages/Webkul/Admin/src/Resources/assets/js/bootstrap.js new file mode 100644 index 0000000..a3c9974 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/js/bootstrap.js @@ -0,0 +1,21 @@ +window._ = require('lodash'); +window.axios = require("axios"); +window.$ = window.jQuery = require('jquery'); + +if (window.axios) { + window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + + /** + * Next we will register the CSRF Token as a common header with Axios so that + * all outgoing HTTP requests automatically have it attached. This is just + * a simple convenience so we don't have to attach every token manually. + */ + + let token = document.head.querySelector('meta[name="csrf-token"]'); + + if (token) { + window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content; + } else { + console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token'); + } +} diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/_mixins.scss b/packages/Webkul/Admin/src/Resources/assets/sass/_mixins.scss new file mode 100644 index 0000000..a4c5c0d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/sass/_mixins.scss @@ -0,0 +1,22 @@ +// Mixins +@mixin box-shadow($shadows...) { + -webkit-box-shadow: $shadows; + -moz-box-shadow: $shadows; + box-shadow: $shadows; +} + +@mixin border-radius($radius) { + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + -ms-border-radius: $radius; + border-radius: $radius; +} + +@mixin user-select($value) { + -webkit-touch-callout: $value; /* iOS Safari */ + -webkit-user-select: $value; /* Safari */ + -khtml-user-select: $value; /* Konqueror HTML */ + -moz-user-select: $value; /* Old versions of Firefox */ + -ms-user-select: $value; /* Internet Explorer/Edge */ + user-select: $value; /* Non-prefixed version, currently supported by Chrome, Edge, Opera and Firefox */ +} diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss b/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss new file mode 100644 index 0000000..2f7c081 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/sass/_variables.scss @@ -0,0 +1,28 @@ +// Typography +$font-family: 'Roboto'; +$font-size-sm: 14px; +$font-size-md: 16px; +$font-size-lg: 18px; +$font-size-xl: 20px; +$font-size-xxl: 24px; +$font-weight-large: 600; +$font-weight-medium: 500; +$font-weight-regular: 400; +$font-color: #263238; +$secondary-font-color: #546E7A; + +// Colors +$black: #000000; +$white: #FFFFFF; +$dark-color: #263238; +$gray-color: #C1C2C3; // Can be modified +$link-color: #0E90D9; +$info-color: #204d74; +$danger-color: #FF4D50; +$success-color: #53C41A; +$primary-color: #0E90D9; +$warning-color: #FBAD15; +$border-color: #C1C2C3; +$body-background: #F7F8F9; +$secondary-color: #546E7A; +$control-border-color: #C1C2C3; diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/app.scss b/packages/Webkul/Admin/src/Resources/assets/sass/app.scss new file mode 100644 index 0000000..dbdc132 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/sass/app.scss @@ -0,0 +1,2519 @@ +@import "icons"; +@import "variables"; +@import "mixins"; +@import "kanban"; +@import "rtl"; + +body { + margin: 0; + position: static; + height: 100%; + width: 100%; + background: $body-background; +} + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(255, 255, 255, 0.3); + border-radius: 10px; +} + +::-webkit-scrollbar-thumb { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.5); +} + +.navbar-top { + height: 60px; + background-color: $white; + font-size: 0; + @include box-shadow(inset 0px -1px 0px #cdcecf); + position: fixed; + left: 0; + right: 0; + z-index: 5; + + .navbar-top-left { + width: 50%; + height: 60px; + display: inline-block; + vertical-align: middle; + + .brand-logo { + padding: 10px 5px; + } + } + + .navbar-top-right { + width: 50%; + height: 60px; + padding: 10px; + text-align: right; + display: inline-block; + vertical-align: middle; + + .quick-create { + display: inline-block; + vertical-align: middle; + margin-right: 10px; + position: relative; + + .button { + display: inline-block; + width: 40px; + height: 40px; + border-radius: 43px; + border: 2px solid $primary-color; + background: $primary-color; + cursor: pointer; + + &.active { + box-shadow: inset 0px 0px 0px 2px white; + } + + .icon { + margin-top: 6px; + margin-right: 9px; + } + } + + .dropdown-list { + top: 50px; + right: 0; + bottom: unset; + width: 284px; + padding: 12px; + + .quick-link-container { + font-size: 12px; + font-weight: $font-weight-medium; + text-align: center; + display: grid; + grid-gap: 10px; + grid-template-columns: auto auto auto; + + .quick-link-item { + background: white; + width: 80px; + + &:hover { + background: $body-background; + border-radius: 8px; + } + + a { + color: $secondary-font-color; + display: block; + padding: 5px; + + .icon { + width: 40px; + height: 40px; + margin-bottom: 5px; + } + + span { + display: block; + } + } + } + } + } + } + + .profile-info { + display: inline-block; + vertical-align: middle; + text-align: left; + position: relative; + cursor: pointer; + + .avatar { + display: inline-block; + width: 40px; + height: 40px; + border-radius: 43px; + background-color: $body-background; + border: 1px solid $border-color; + vertical-align: middle; + text-align: center; + margin-right: 10px; + overflow: hidden; + + img { + width: 40px; + height: 40px; + } + + .icon { + margin-top: 8px; + } + } + + .info { + display: inline-block; + vertical-align: middle; + min-width: 50px; + font-size: 16px; + line-height: 20px; + + .howdy { + color: #9e9e9e; + } + + .user { + display: block; + } + } + + .icon.ellipsis-icon { + width: 30px !important; + height: 30px !important; + vertical-align: middle; + } + + .dropdown-list { + top: 50px; + right: 0; + bottom: unset; + + .app-version { + padding: 8px 12px; + display: block; + cursor: default; + color: #a2a2a2; + font-size: $font-size-lg; + border-bottom: 1px solid $border-color; + } + } + } + } +} + +.navbar-left { + left: 0; + bottom: 0; + top: 60px; + z-index: 2; + width: 48px; + height: auto; + position: fixed; + background-color: $dark-color; + box-shadow: inset -1px 0px 0px #cdcecf; + // transition: 0.35s cubic-bezier(0.4, 0, 0.2, 1); + + ul.menubar { + li.menu-item { + font-size: $font-size-sm; + position: relative; + overflow: hidden; + + > a { + padding: 16px 12px; + display: block; + color: $secondary-font-color; + width: 100%; + + .icon { + display: inline-block; + vertical-align: middle; + } + + .menu-label { + display: none; + margin-left: 10px; + } + } + + span { + display: block; + margin: auto; + } + + ul.sub-menubar { + display: none; + min-width: 160px; + position: absolute; + top: 0; + left: 48px; + background-color: $white; + box-shadow: 2px 1px 3px #cdcecf; + border: 1px solid #eee; + border-left: 0; + border-radius: 0 3px 3px 0; + + li.sub-menu-item { + a { + display: block; + padding: 8px 12px; + color: $secondary-font-color; + font-size: $font-size-sm; + } + + &.active, + &:hover { + a { + color: $primary-color; + } + } + } + } + + &.active, + &:hover { + box-shadow: inset 4px 0px 0px $primary-color; + } + + &:hover { + overflow: visible; + + ul.sub-menubar { + display: block; + + .sub-menu-item { + .menu-label { + color: $secondary-color; + } + + &:hover, + &.active { + .menu-label { + color: $primary-color; + } + } + } + } + } + } + } + + &.open { + width: 160px; + overflow-x: auto; + + ul.menubar { + li.menu-item { + a { + .menu-label { + font-size: 16px; + font-weight: 200; + display: inline-block; + color: #b0bec5; + } + } + + ul.sub-menubar { + display: none; + position: unset; + background-color: transparent; + border-radius: 0; + box-shadow: unset; + border: 0; + + li.sub-menu-item { + a { + padding-left: 45px; + } + } + } + + &.active { + background: #12171a; + width: calc(100% - 1px); + + .menu-label { + color: $primary-color; + } + + ul.sub-menubar { + display: block; + + .sub-menu-item { + .menu-label { + color: #b0bec5; + } + + &.active, + &:hover { + .menu-label { + color: $primary-color !important; + } + } + } + } + } + + &:hover { + .menu-label { + color: $primary-color; + } + } + } + } + } + + .menubar-bottom { + padding: 12px; + cursor: pointer; + position: absolute; + width: calc(100% - 1px); + background-color: $dark-color; + } +} + +.settings-container { + .panel { + margin-bottom: 30px; + max-width: 941px; + + .panel-header { + h3 { + margin: 0 0 5px 0; + } + + p { + font-size: $font-size-md; + font-weight: $font-weight-regular; + margin: 0; + } + } + + .setting-link-container { + .setting-link-item { + width: 300px; + display: inline-block; + + a { + padding: 20px; + height: 100px; + display: flex; + -ms-flex-align: center; + -webkit-align-items: center; + align-items: center; + + .icon { + width: 40px; + height: 40px; + } + + .setting-info { + margin-left: 25px; + display: inline-block; + + label { + font-size: $font-size-lg; + color: $font-color; + font-weight: $font-weight-regular; + cursor: pointer; + } + + p { + display: none; + font-size: $font-size-sm; + color: $font-color; + font-weight: $font-weight-regular; + margin: 0 0 3px 0; + } + } + } + + &:hover { + background-color: #f7f8f9; + border-radius: 8px; + + .setting-info { + p { + display: block; + } + } + } + } + } + } +} + +.content-container { + left: 0; + right: 0; + top: 60px; + bottom: 0px; + width: 100%; + position: absolute; + padding-left: 48px; + height: calc(100% - 60px); + // transition: 0.35s cubic-bezier(0.4, 0, 0.2, 1); + + .inner-section { + height: 100%; + } + + .aside-nav { + width: 280px; + position: fixed; + top: 60px; + bottom: 0; + border-right: 1px solid $border-color; + background-color: $white; + padding-top: 10px; + padding-bottom: 10px; + z-index: 4; + + ul { + overflow-y: auto; + height: 90%; + } + + a { + padding: 15px; + display: block; + color: #000311; + } + + .active { + a { + background: $white; + border-top: 1px solid $border-color; + border-bottom: 1px solid $border-color; + } + + i { + float: right; + } + } + } + + .content-wrapper { + padding: 25px 25px 25px 15px; + margin-left: 280px; + margin-top: 1px; + background-color: $white; + } + + .content { + &.full-page { + padding: 25px; + height: 100%; + } + + .page-header { + display: inline-block; + width: 100%; + margin-bottom: 10px; + z-index: 3; + + .page-title { + display: inline-block; + + .back-link { + float: left; + margin-right: 10px; + width: 24px; + height: 24px; + cursor: pointer; + margin-top: 5px; + } + + h1 { + margin-bottom: 0; + vertical-align: middle; + display: inline-block; + line-height: initial; + font-weight: $font-weight-regular; + } + } + + .page-action { + float: right; + + a { + margin-left: 25px; + } + } + + > .form-group { + width: 180px; + display: inline-block; + margin-bottom: 0; + margin-left: 20px; + } + + .control { + width: 100%; + margin: 0; + } + } + + .page-content { + width: 100%; + display: inline-block; + padding-bottom: 20px; + } + } +} + +.control-container { + display: flex; + flex-direction: row; + align-items: flex-start; + width: 750px; + + .control { + background: $white; + border: 1px solid $gray-color; + @include border-radius(3px); + width: 150px; + height: 36px; + display: inline-block; + vertical-align: middle; + transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); + padding: 0px 10px; + font-size: $font-size-md; + + &:focus { + border-color: #0041ff; + } + } + + .icon:hover { + cursor: pointer; + } + + .form-group::last-child { + margin-right: 0px; + } +} + +// Anonymous layout styles +.anonymous-layout-container { + text-align: center; + position: absolute; + width: 100%; + height: 100%; + display: table; + z-index: 1; + background: $body-background; + + .center-box { + display: table-cell; + vertical-align: middle; + + .adjacent-center { + width: 476px; + display: inline-block; + text-align: left; + + .brand-logo { + text-align: center; + margin-bottom: 40px; + + img { + width: 280px; + height: 50px; + transform: translateY(-8px); + } + + p { + font-size: $font-size-xl; + color: $secondary-font-color; + margin: 0; + } + } + + .panel { + .panel-body { + border: 0; + padding: 48px; + + h1 { + font-size: 24px; + font-weight: $font-weight-medium; + color: $secondary-font-color; + margin-bottom: 30px; + } + + .form-group { + .control { + width: 100%; + } + } + + a { + font-size: $font-size-sm; + margin-top: -15px; + margin-bottom: 30px; + display: block; + } + + button.btn { + width: 100%; + font-size: $font-size-xxl; + } + } + } + } + } +} + +.adjacent-center { + .page-header { + width: 1000px !important; + display: block !important; + margin: auto; + } + + .page-content { + width: 1000px !important; + display: block !important; + margin: auto; + + .nav-aside { + width: 190px; + padding-right: 20px; + float: left; + + ul { + margin-top: 118px; + + li { + margin-bottom: 5px; + + a { + border-radius: 4px; + padding: 10px; + display: block; + text-align: right; + font-weight: 400; + color: $secondary-color; + } + + &:hover { + a { + background-color: rgba(38, 41, 44, 0.08); + } + } + + &.active { + a { + background: $primary-color; + color: $white; + font-weight: 500; + } + } + } + } + } + + .panel { + // overflow: hidden; + + .panel-header { + button.btn { + margin-right: 30px; + + .icon { + margin-right: 5px; + } + } + + input[type="submit"] { + color: $secondary-font-color; + background: transparent; + font-size: 18px; + font-weight: $font-weight-medium; + font-family: $font-family; + padding: 0; + margin-right: 30px; + border: 0; + cursor: pointer; + } + + a { + color: inherit; + margin-right: 30px; + } + } + } + } +} + +.dragable-container { + ul.dragable-list { + li.list-group-item { + margin-bottom: 10px; + position: relative; + + &.sortable-ghost { + .form-group { + .control { + border-style: dashed; + } + } + } + + .form-group { + margin: 0; + padding-right: 40px; + + .control { + margin: 0; + } + + .icon.align-justify-icon { + width: 24px; + height: 24px; + position: absolute; + right: 50px; + top: 9px; + cursor: pointer; + } + } + + .icon.trash-icon { + width: 24px; + height: 24px; + cursor: pointer; + position: absolute; + right: 5px; + top: 9px; + } + } + } + + table { + box-shadow: none; + + tr { + th { + &:first-child { + width: 40px; + } + + &:last-child { + width: 40px; + } + } + + td { + &.dragable-icon, + &.delete-icon { + .icon { + width: 24px; + height: 24px; + margin-top: 9px; + cursor: pointer; + } + } + + .form-group { + .control { + margin-top: 0; + margin-bottom: 0; + } + } + } + + &:not(.draggable) { + .control[readonly="readonly"] { + background-color: #f0f0f0; + } + } + } + } + + button.btn { + margin-top: 10px; + } +} + +.lookup-results { + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.16), 0 0 9px 0 rgba(0, 0, 0, 0.16); + z-index: 10; + text-align: left; + border-radius: 3px; + background-color: $white; + width: 100%; + max-height: 200px; + overflow-y: auto; + + &.grouped { + label { + padding: 10px 10px 0 10px; + font-weight: 500; + color: #263238; + font-size: 18px; + } + + li { + padding-left: 15px; + } + } + + li { + padding: 5px 0px; + cursor: pointer; + + &.action { + border-top: 1px solid $border-color; + } + + span { + padding: 5px 10px; + display: inline-block; + width: 100%; + + &:hover { + background-color: $primary-color; + color: $white; + } + } + } +} + +.lookup-selected-options { + margin-top: 10px; + + .badge { + margin-right: 10px; + + .icon { + cursor: pointer; + } + } +} + +.modal-container { + box-shadow: rgba(0, 0, 0, 0.25) 0px 54px 55px, + rgba(0, 0, 0, 0.12) 0px -12px 30px, rgba(0, 0, 0, 0.12) 0px 4px 6px, + rgba(0, 0, 0, 0.17) 0px 12px 13px, rgba(0, 0, 0, 0.09) 0px -3px 5px; + + .tabs-content { + border: 0; + border-top: 1px solid $border-color; + } +} + +.lead-product-list { + .lead-product { + padding-bottom: 20px; + padding-top: 20px; + border-bottom: 1px solid $border-color; + + &:first-of-type { + padding-top: 0; + } + + &:last-of-type { + margin-bottom: 20px; + } + + .top-control-group { + width: 100%; + display: inline-block; + + .form-group { + margin-bottom: 10px; + } + } + + .bottom-control-group { + width: 100%; + display: grid; + grid-template-columns: repeat(auto-fill, minmax(30%, 1fr)); + justify-items: center; + grid-auto-rows: auto; + grid-column-gap: 10px; + grid-row-gap: 0; + padding-right: 28px; + position: relative; + + .form-group { + margin-bottom: 0; + } + + .icon.trash-icon { + position: absolute; + right: 0; + top: 44px; + cursor: pointer; + } + } + } +} + +.page-content.lead-view { + .lead-content-left { + float: left; + width: 30%; + padding-right: 10px; + + .panel { + margin-bottom: 30px; + + .lead-rotten-info { + float: right; + font-weight: 400; + font-size: 14px; + color: #ff4d50; + background: #ffd0d6; + padding: 2px 12px; + border-radius: 4px; + + .icon { + width: 16px; + height: 16px; + margin-top: 3px; + margin-right: 5px; + } + } + } + } + + .lead-content-right { + width: 70%; + padding-left: 10px; + float: left; + + .tabs-content { + margin-bottom: 20px; + } + } +} + +.custom-attribute-view { + .attribute-value-row { + width: 100%; + padding: 6px; + font-size: 16px; + position: relative; + padding-right: 30px; + display: inline-block; + + &:nth-child(even) { + padding: 10px 6px; + background-color: rgba(255, 255, 255, 1); + } + + &:last-child { + border: none; + } + + .label { + width: 120px; + float: left; + color: $secondary-font-color; + } + + .value { + float: left; + padding-left: 10px; + width: calc(100% - 120px); + + span.multi-value { + border-radius: 30px; + padding: 4px 8px; + background: #eff0f5; + margin-bottom: 5px; + display: inline-block; + word-break: break-all; + + span { + color: #747678; + font-size: 16px; + } + } + + .image { + width: 100px; + height: 100px; + border: 1px solid; + border-radius: 4px; + } + } + + .icon.pencil-underline-icon { + cursor: pointer; + position: absolute; + right: 5px; + display: none; + } + + .dropdown-list { + right: 0; + width: 100%; + } + + &:hover { + // background-color: #f7f7f7; + + .icon.pencil-underline-icon { + display: inline-block; + } + } + } +} + +.form-group { + .image { + position: absolute; + top: 36px; + right: 0; + height: 33px; + width: 33px; + border-radius: 3px; + margin-right: 5px; + } + + .icon.download-icon { + position: absolute; + top: 40px; + right: 10px; + } + + &.email-control-group { + padding-left: 40px; + + > label { + position: absolute; + left: 0; + top: 10px; + } + + .tags-control { + margin-top: 0; + } + + .email-address-options { + position: absolute; + right: 10px; + top: 10px; + + label { + display: inline-block; + font-weight: $font-weight-medium; + margin-right: 10px; + cursor: pointer; + @include user-select(none); + + &:last-child { + margin-right: 0; + } + } + } + } +} + +.activity-list { + .section-tag { + position: relative; + display: inline-block; + width: 100%; + margin-left: 50px; + margin-bottom: 20px; + + span { + color: $secondary-font-color; + font-weight: $font-weight-medium; + position: absolute; + top: -11px; + background: $white; + padding-right: 10px; + } + + hr { + margin: 0; + border-top: 1px solid $border-color; + } + } + + .timeline-bar { + position: absolute; + left: 18px; + top: 38px; + bottom: 0; + } + + .activities { + position: relative; + + &.planned-activities { + margin-bottom: 30px; + + .timeline-bar { + bottom: -67px; + border-left: 2px dashed #546e7a; + } + + &.note, + &.email, + &.file { + display: none; + } + } + + &.done-activities { + .timeline-bar { + border-left: 2px solid #546e7a; + } + } + + .activity-item { + background: #fff; + padding: 15px; + margin-left: 50px; + margin-bottom: 20px; + border: 1px solid #f7f8f9; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1); + margin-bottom: 10px; + text-align: left; + position: relative; + + &:before { + content: " "; + display: inline-block; + position: absolute; + width: 36px; + height: 36px; + top: 0; + left: -51px; + border: 1px solid #546e7a; + background-color: #fff; + background-repeat: no-repeat; + background-position: 50%; + border-radius: 50%; + } + + &:last-child { + margin-bottom: 0; + } + + &.activity { + .title { + color: $secondary-font-color; + font-size: $font-size-md; + margin-bottom: 5px; + + h4 { + margin: 0 0 5px 0; + } + } + + .attachment { + font-size: 16px; + margin-bottom: 10px; + margin-top: 5px; + display: inline-block; + + .icon { + margin-left: -3px; + margin-right: 5px; + } + } + + .comment { + font-size: $font-size-md; + padding: 15px; + margin-bottom: 5px; + background-color: #fff9c4; + position: relative; + border: solid 1px #fdd835; + border-radius: 4px; + } + + .info { + color: #747678; + font-size: $font-size-sm; + + .seperator { + margin: 0 5px; + width: 8px; + display: inline-block; + cursor: default; + text-align: center; + font-weight: 700; + } + } + } + + &.email { + position: relative; + + .subject { + h5 { + margin: 0 0 5px 0; + } + + span { + color: #546e7a; + font-size: 16px; + margin-bottom: 5px; + } + } + + .content { + } + } + + .icon.ellipsis-icon { + cursor: pointer; + border-radius: 4px; + position: absolute; + top: 10px; + right: 10px; + + &:hover { + background-color: rgba(38, 41, 44, 0.05); + } + } + + .dropdown-list { + top: 40px; + right: 0; + font-weight: 400; + } + + .timeline-bar-icon { + position: absolute; + width: 18px; + height: 18px; + top: 11px; + left: -40px; + bottom: 77px; + + &.note { + background-image: url("../images/note-icon.svg"); + width: 16px; + height: 20px; + top: 8px; + } + + &.call { + background-image: url("../images/call-icon.svg"); + top: 9px; + } + + &.meeting { + background-image: url("../images/meeting-icon.svg"); + top: 9px; + } + + &.lunch { + background-image: url("../images/lunch-icon.svg"); + width: 17px; + height: 17px; + top: 10px; + left: -40px; + } + + &.file { + background-image: url("../images/file-icon.svg"); + width: 16px; + top: 10px; + } + + &.email { + background-image: url("../images/email-icon.svg"); + width: 18px; + height: 16px; + left: -41px; + } + } + } + } + + .empty-activities { + text-align: center; + font-size: 16px; + color: #546e7a; + } +} + +.dashboard { + height: unset !important; + background-color: $body-background; + + .dashboard-content { + &.print { + left: 0; + top: -60px; + width: 100%; + z-index: 10000; + position: absolute; + background-color: $white; + } + } + + > h1 { + margin-bottom: 35px; + display: inline-block; + + ~ .cards-collection { + margin: 0; + float: right; + width: 200px; + cursor: pointer; + border-radius: 3px; + border: 2px solid $border-color; + + .toggle-btn { + margin: 0; + padding: 6px 10px; + background-color: $white; + + :last-child { + float: right; + } + } + + .cards-options { + z-index: 1; + width: unset; + border: none; + position: relative; + margin-bottom: 0px; + + > div { + top: 20px; + z-index: 1; + width: 100%; + position: absolute; + padding: 20px 12px; + background: $white; + box-shadow: 0px 4px 4px rgb(84 110 122 / 25%); + transition: 0.35s cubic-bezier(0.4, 0, 0.2, 1); + + header { + margin-bottom: 10px; + padding-bottom: 15px; + border-bottom: 1px solid $border-color; + + .btn-secondary-outline { + border: none; + font-size: 16px; + padding-left: 0; + } + + .btn-primary { + float: right; + } + } + } + } + } + + ~ .card-filter-container { + z-index: 1; + float: right; + color: $secondary-color; + + .daterangepicker { + .btn-success { + padding: 10px 14px; + background-color: $primary-color; + } + + .btn-secondary { + padding: 10px 14px; + background-color: $secondary-color; + } + } + } + } + + .date { + text-align: right; + + label, + .date-container { + display: inline-block; + } + } + + .row-grid-3 { + padding: 10px 0; + align-items: start; + + .card { + height: 100%; + min-height: 300px; + border-radius: 3px; + background-color: $white; + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, + rgba(0, 0, 0, 0.06) 0px 2px 4px -1px; + + label { + height: 100%; + padding: 20px; + display: block; + font-weight: 500; + color: $font-color; + border-bottom: 1px solid rgba(193, 194, 195, 0.5); + + .card-filter-container { + cursor: pointer; + margin-left: 5px; + display: inline-block; + color: $secondary-color; + + .dropdown-toggle { + margin-bottom: 5px; + } + } + + .icon-container { + float: right; + display: none; + + .icon { + cursor: pointer; + } + } + } + + .card-header { + height: 65px; + text-transform: capitalize; + } + + .db-wg-spinner, + .card-data { + height: calc(100% - 65px); + } + + .card-data { + padding: 20px; + position: relative; + overflow-y: scroll; + + &::-webkit-scrollbar { + display: none; + } + + .line-chart, + .bar-chart { + height: 100%; + display: grid; + align-items: center; + } + + .bar-data { + display: grid; + font-size: 14px; + align-items: center; + color: $font-color; + grid-column-gap: 15px; + grid-template-columns: 70px auto 40px; + + &.activity { + > span { + &:first-child { + line-break: anywhere; + text-transform: capitalize; + } + } + } + } + + .lead { + margin-top: 20px; + color: $secondary-font-color; + + &:nth-child(1) { + margin: 0px; + } + + label { + padding: 0; + border: 0px; + font-weight: 500; + font-size: 18px; + height: max-content; + } + + .details { + display: grid; + padding: 5px 0; + font-size: 16px; + grid-template-columns: auto auto auto; + border-bottom: 1px solid rgba(193, 194, 195, 0.5); + } + } + + .column-container { + width: 100%; + margin-top: 10px; + padding-bottom: 5px; + display: inline-block; + border-bottom: 1px solid $border-color; + + &:nth-child(odd) { + margin-right: 10px; + } + + &:nth-child(1), + &:nth-child(2) { + margin-top: 0; + } + + span { + display: block; + text-align: left; + color: $secondary-font-color; + + &:first-child { + font-weight: 500; + font-size: 36px; + margin-bottom: 10px; + } + + &:last-child { + font-size: 16px; + } + } + } + + .custom-card { + text-align: center; + position: absolute; + top: calc(50% - 62px); + left: calc(50% - 62px); + color: $secondary-color; + + span { + display: block; + } + + i.icon { + width: 96px; + height: 96px; + } + } + + &.column-grid-2 { + align-items: start; + } + } + + &.dashed { + border-style: dashed; + } + + &:hover { + label { + .icon-container { + display: inline; + } + } + } + } + } +} + +.table { + tr { + td, + th { + &.subject { + width: 100%; + overflow: hidden; + text-overflow: ellipsis; + + .subject-wrapper { + display: flex; + align-items: center; + + .subject-content { + max-width: 100%; + flex: 0 0 auto; + overflow: hidden; + text-overflow: ellipsis; + font-weight: $font-weight-medium; + } + + .reply { + flex: 0 1 auto; + overflow: hidden; + text-overflow: ellipsis; + } + } + } + + &.created_at { + width: 200px; + } + + &.attachments { + width: 45px; + } + + .avatar { + display: inline-block; + width: 40px; + height: 40px; + border-radius: 43px; + background-color: $body-background; + border: 1px solid $border-color; + vertical-align: middle; + text-align: center; + margin-right: 10px; + overflow: hidden; + + img { + width: 40px; + height: 40px; + } + + .icon { + margin-top: 8px; + } + } + } + } +} + +.banner { + width: 100%; + z-index: 10; + display: none; + color: $white; + height: 50px; + position: fixed; + max-height: 50px; + padding: 13px 20px; + text-align: center; + background-color: $primary-color; + + .thumbnail { + width: 20px; + cursor: pointer; + margin-right: 10px; + } + + .hovered-container { + top: -28px; + z-index: 10; + right: 110px; + display: none; + position: relative; + + &.show { + display: inline-block; + } + + img { + position: absolute; + } + } + + span { + vertical-align: super; + } + + i { + &.close-white-icon { + float: right; + cursor: pointer; + } + } +} + +body { + &.top-banner { + .center-box, + .navbar-top, + .content-container { + top: 50px; + } + + .navbar-left { + top: 110px; + } + + .center-box { + position: relative; + } + + .banner { + display: inline-block; + } + } +} + +.email-action-container { + .btn-secondary-outline { + font-size: $font-size-md; + + span { + padding: 1px 0; + } + + .icon { + margin-right: 5px; + } + } + + .sidebar-filter { + padding: 0; + + header { + padding: 30px 20px 20px 20px; + margin-bottom: 0; + } + + .panel { + padding: 20px; + border-bottom: 1px solid $border-color; + + .panel-header { + .links { + float: right; + + .icon { + width: 24px; + height: 24px; + cursor: pointer; + + &.close-icon { + margin-top: -2px; + margin-left: 5px; + } + } + } + } + + .panel-body { + border: 1px solid $border-color; + box-shadow: none; + } + + .btn-group { + button { + width: 100%; + font-size: $font-size-lg; + margin-bottom: 10px; + + &:last-child { + margin-bottom: 0; + } + } + + .form-group { + margin-bottom: 10px; + + .control { + border: 2px solid; + padding: 6px 10px 7px 10px; + } + + .icon { + position: absolute; + right: 13px; + top: 7px; + } + } + } + + .contact-details { + .name { + color: $secondary-font-color; + margin-bottom: 10px; + } + + .email { + margin-bottom: 10px; + color: $secondary-font-color; + font-weight: $font-weight-medium; + + .icon { + margin-right: 10px; + margin-top: 1px; + } + } + } + } + } +} + +.email-list { + .email-item { + margin-bottom: 40px; + + .email-header { + margin-bottom: 20px; + + .row { + color: $secondary-font-color; + + .label { + font-weight: $font-weight-regular; + } + + .value { + font-weight: $font-weight-medium; + } + + .time { + float: right; + position: relative; + width: 215px; + text-align: right; + + > .icon { + transform: rotate(90deg); + cursor: pointer; + } + + .dropdown-list { + .icon { + margin-right: 15px; + } + } + } + } + } + + .email-content { + color: $secondary-font-color; + padding: 30px; + background-color: $white; + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, + rgba(0, 0, 0, 0.06) 0px 2px 4px -1px; + + .attachment-list { + margin-top: 30px; + + .attachment-item { + display: block; + margin-bottom: 10px; + + &:last-child { + margin-bottom: 0; + } + + a { + color: $secondary-font-color; + } + } + } + } + } + + .email-action { + span { + padding: 8px; + color: $secondary-font-color; + font-weight: $font-weight-medium; + cursor: pointer; + + &.reply-button { + margin-right: 20px; + } + + .icon { + margin-right: 10px; + } + } + } + + .email-form-container { + .panel { + .panel-bottom { + margin-top: 25px; + + button.btn { + margin-right: 30px; + } + + label { + color: $secondary-font-color; + font-size: 18px; + font-weight: 500; + cursor: pointer; + } + } + } + } +} + +.tags-container { + margin-left: 10px; + display: inline-block; + position: relative; + + .icon.tags-icon { + vertical-align: middle; + cursor: pointer; + } + + ul.tag-list { + display: inline-block; + margin-left: 10px; + + li { + display: inline-block; + padding: 3px 10px; + font-size: $font-size-md; + font-weight: $font-weight-medium; + color: $white; + border-radius: 4px; + margin-right: 8px; + + &:last-child { + margin-right: 0; + } + + .icon { + width: 15px; + height: 15px; + cursor: pointer; + } + } + } + + .tag-dropdown { + top: 35px; + width: 215px; + margin-bottom: 20px; + border: 1px solid #f0f0f0; + box-shadow: 0 2px 5px 0 rgba(39, 49, 58, 0.15); + background-color: #ffffff; + position: absolute; + z-index: 10; + text-align: left; + + .lookup-results { + color: $secondary-font-color; + font-size: $font-size-lg; + + .control-list-item { + &:hover { + background-color: $white; + } + } + } + + .form-group { + margin: 0 !important; + padding: 5px 10px; + width: 100% !important; + + .loader-active-icon { + right: 15px; + } + } + + .form-container { + padding: 5px 0; + + .form-group { + .control { + margin-top: 10px; + margin-bottom: 5px; + } + } + + .color-list { + margin-top: 10px; + margin-bottom: 5px; + + span { + width: 25px; + height: 25px; + margin-right: 3px; + border-radius: 50%; + cursor: pointer; + display: inline-block; + box-shadow: 0px 4px 15.36px 0.75px rgba(0, 0, 0, 0.1), + 0px 2px 6px 0px rgba(0, 0, 0, 0.15); + transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); + + &.active { + border: solid 3px #ffffff; + } + } + } + + .button-group { + border-top: 1px solid $border-color; + padding-top: 10px; + display: inline-block; + } + } + } +} + +.pipeline-stage-controls-wrapper { + margin-bottom: 40px; + + .pipeline-stage-container { + position: relative; + display: flex; + width: 100%; + + .pipeline-stages { + width: 100%; + display: flex; + overflow: hidden; + border-radius: 4px; + align-items: center; + flex-flow: row nowrap; + + &::-webkit-scrollbar { + display: none; + } + + .stage { + background: $gray-color; + color: $font-color; + font-weight: $font-weight-medium; + width: 100%; + font-size: $font-size-md; + min-width: 200px; + color: $font-color; + text-align: center; + background: $gray-color; + font-weight: $font-weight-medium; + + span { + display: block; + cursor: pointer; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + padding: 7px 5px 7px 22px; + + .icon { + float: right; + } + } + + &:not(:last-child) { + position: relative; + + &::before { + background: $gray-color; + box-shadow: 1px -1px 0 1px #fff, 1px -1px 0 1px #fff; + content: ""; + position: absolute; + top: 50%; + right: -12px; + width: 25px; + height: 25px; + z-index: 1; + border-radius: 0 0 0 25px; + transform: translateY(-50%) rotate(45deg); + } + } + + &.active { + background-color: $primary-color; + color: $white; + + &::before { + background: $primary-color; + } + } + + .dropdown-list { + right: 0px; + font-weight: $font-weight-regular; + + ul li { + color: $secondary-font-color; + + &:hover { + color: $white; + } + } + } + } + + &.won { + .stage { + background-color: $success-color; + color: $white; + + &::before { + background: $success-color; + } + } + } + + &.lost { + .stage { + background-color: $danger-color; + color: $white; + + &::before { + background: $danger-color; + } + } + } + } + + .pipeline-stage-controls { + display: flex; + align-items: center; + margin-left: 10px; + width: 72px; + + .btn { + border: 1px solid; + border-radius: 4px; + height: 36px; + padding: 7px; + + &:first-child { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + + &:last-child { + margin-left: -1px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + } + } + } + + .date-panel { + margin-top: 5px; + font-size: $font-size-sm; + display: inline-block; + width: 100%; + + .pull-left { + float: left; + } + + .pull-right { + float: right; + } + + .pull-left, + .pull-right { + .icon { + width: 18px; + height: 18px; + vertical-align: middle; + } + + label { + color: $secondary-font-color; + font-weight: $font-weight-medium; + } + + span { + color: $font-color; + } + } + } +} + +.switch-pipeline-container { + margin-right: 6px; + display: inline-block; + + .control { + margin: 0; + height: 40px; + border: 1px solid #c1c2c3; + } +} + +.switch-view-container { + margin-left: -5px; + margin-right: 6px; + vertical-align: top; + display: inline-block; + + .icon-container { + height: 40px; + cursor: pointer; + display: inline-block; + padding: 6px 10px 10px 8px; + border: 1px solid $border-color; + + &:first-child { + left: 5px; + position: relative; + border-radius: 3px 0px 0px 3px; + } + + &:last-child { + border-radius: 0px 3px 3px 0px; + } + + &.active { + cursor: not-allowed; + border-color: $secondary-color; + background-color: $secondary-color; + } + + .icon { + vertical-align: middle; + width: 24px; + height: 22px; + } + } +} + +.empty-record { + text-align: center; + + img { + width: 100px; + height: 100px; + margin-bottom: 15px; + } + + span { + display: block; + } +} + +.quote-item-list { + .table { + padding: 5px; + + table { + margin-bottom: 20px; + + tr { + th { + &.actions { + width: 50px; + } + } + + td { + vertical-align: top; + + &.actions { + width: 50px; + vertical-align: middle; + + .icon { + cursor: pointer; + } + } + + .form-group { + min-width: 100% !important; + + .control { + margin: 0; + } + } + } + } + } + } + + .quote-summary { + padding: 5px; + + table { + float: right; + margin-top: 40px; + + tr { + td { + font-weight: $font-weight-medium; + padding: 5px 8px; + vertical-align: text-bottom; + + .form-group { + width: 100px !important; + margin: 0; + + .control { + margin: 0; + } + } + } + } + } + } +} + +.lead-quote-list { + table { + tr { + td { + &.actions { + .icon { + cursor: pointer; + } + + .dropdown-list { + right: 60px; + } + } + } + } + } +} + +.workflow-container, +.web-form-container { + .panel-separator { + border-bottom: solid 1px #d3d3d3; + margin: 25px 0px; + } + + .workflow-panel, + .web-form-panel { + .header { + label { + color: $secondary-color; + font-size: $font-size-lg; + font-weight: $font-weight-medium; + } + + p { + font-style: italic; + font-size: 16px; + color: #6f6f6f; + margin: 5px 0px 20px 0px; + } + } + + table { + tr { + td { + &.actions { + width: 50px; + + .icon { + margin-top: 20px; + cursor: pointer; + } + } + } + } + } + } +} + +.web-form-panel { + .dropdown-list { + .dropdown-container { + ul { + li { + color: #263238; + font-weight: 500; + cursor: default; + + &:hover { + background: none; + } + + ul { + li { + font-weight: 400; + color: #546e7a; + cursor: pointer; + + &:hover { + background: #0e90d9; + color: #ffffff; + } + } + } + } + } + } + } + + .dragable-container { + table { + tr { + td { + vertical-align: bottom; + + &.dragable-icon, + &.delete-icon { + .icon { + margin-bottom: 10px; + } + } + + .form-group { + .control { + margin-top: 10px; + } + } + } + } + } + } +} + +.vuecal__event { + background-color: $primary-color !important; + color: #ffffff !important; + cursor: pointer; + + &.done { + background-color: $success-color !important; + } +} + +.image-upload-brick { + display: inline-block; + vertical-align: middle; + position: relative; + width: 100px; + height: 100px; + border-radius: 5px; + border: dashed 1px $secondary-color; + overflow: hidden; + margin-right: 15px; + transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); + + input[type="file"] { + width: 100px; + height: 100px; + position: absolute; + opacity: 0; + z-index: 3; + } + + .upload-icon { + position: absolute; + width: 40px; + height: 40px; + left: 50%; + top: 50%; + margin-left: -20px; + margin-top: -20px; + z-index: 1; + } + + img { + width: 100px; + height: 100px; + position: absolute; + z-index: 2; + display: block; + background: #ffffff; + } +} + +.image-info-brick { + display: inline-block; + vertical-align: middle; + margin: 10px 0px; + + .field-info { + display: block; + font-style: italic; + color: $secondary-color; + font-size: $font-size-md; + } +} diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/icons.scss b/packages/Webkul/Admin/src/Resources/assets/sass/icons.scss new file mode 100644 index 0000000..94c2408 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/sass/icons.scss @@ -0,0 +1,227 @@ +.icon { + width: 20px; + height: 20px; + vertical-align: top; + display: inline-block; + background-size: cover; + + &.sprite { + background-size: auto; + background-repeat: no-repeat; + } +} + +.dashboard-icon { + background-position: -371px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.leads-icon { + background-position: -130px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.quotes-icon { + background-position: -563px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.emails-icon { + width: 20px; + height: 18px; + background-position: -419px -3px; + background-image: url("../images/sprite-main.svg"); +} + +.activities-icon { + width: 17px; + height: 21px; + background-position: -324px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.phone-icon { + background-position: -178px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.products-icon { + height: 18px; + background-position: -227px -3px; + background-image: url("../images/sprite-main.svg"); +} + +.settings-icon { + background-position: -275px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.tools-icon { + background-position: -514px -2px; + background-image: url("../images/sprite-main.svg"); +} + +.avatar-icon { + width: 16px; + height: 21px; + background-image: url("../images/avatar-icon.svg"); +} + +.avatar-dark-icon { + background-image: url("../images/avatar-dark-icon.svg"); +} + +.email-send-icon { + background-image: url("../images/email-send-icon.svg"); +} + +.table-line-icon { + background-image: url("../images/table-line-icon.svg"); +} + +.table-line-active-icon { + background-image: url("../images/table-line-active-icon.svg"); +} + +.layout-column-line-icon { + background-image: url("../images/layout-column-line-icon.svg"); +} + +.layout-column-line-active-icon { + background-image: url("../images/layout-column-line-active-icon.svg"); +} + +.calendar-line-icon { + background-image: url("../images/calendar-line-icon.svg"); +} + +.calendar-line-active-icon { + background-image: url("../images/calendar-line-active-icon.svg"); +} + +.empty-kanban-icon { + background-image: url("../images/empty-kanban-icon.svg"); +} + +.menu-item.active, +.menu-item:hover { + .dashboard-icon { + background-position: -347px -2px; + } + + .leads-icon { + background-position: -106px -2px; + } + + .quotes-icon { + background-position: -539px -2px; + } + + .emails-icon { + background-position: -395px -3px; + } + + .activities-icon { + background-position: -300px -2px; + } + + .phone-icon { + background-position: -154px -2px; + } + + .products-icon { + background-position: -203px -3px; + } + + .settings-icon { + background-position: -251px -2px; + } + + .tools-icon { + background-position: -490px -2px; + } +} + +.dollar-circle-icon { + background-image: url("../images/dollar-circle-icon.svg"); +} + +.drag-icon { + background-image: url("../images/drag-icon.svg"); +} + +.empty-bar-icon { + background-image: url("../images/empty-bar-icon.svg"); +} + +.empty-bar-vertical-icon { + background-image: url("../images/empty-bar-vertical-icon.svg"); +} + +.ellipsis-icon { + background-image: url("../images/ellipsis-icon.svg"); +} + +.attribute-icon { + background-image: url("../images/attribute-icon.svg"); +} + +.lead-icon { + background-image: url("../images/lead-icon.svg"); +} + +.mail-icon { + background-image: url("../images/mail-icon.svg"); +} + +.organization-icon { + background-image: url("../images/organization-icon.svg"); +} + +.person-icon { + background-image: url("../images/person-icon.svg"); +} + +.product-icon { + background-image: url("../images/product-icon.svg"); +} + +.quotation-icon { + background-image: url("../images/quotation-icon.svg"); +} + +.group-icon { + background-image: url("../images/group-icon.svg"); +} + +.role-icon { + background-image: url("../images/role-icon.svg"); +} + +.user-icon { + background-image: url("../images/user-icon.svg"); +} + +.source-icon { + background-image: url("../images/source-icon.svg"); +} + +.type-icon { + background-image: url("../images/type-icon.svg"); +} + +.email-template-icon { + background-image: url("../images/email-template-icon.svg"); +} + +.workflow-icon { + background-image: url("../images/workflow-icon.svg"); +} + +.tag-icon { + background-image: url("../images/tag-icon.svg"); +} + +.pipeline-icon { + background-image: url("../images/pipeline-icon.svg"); +} diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/kanban.scss b/packages/Webkul/Admin/src/Resources/assets/sass/kanban.scss new file mode 100644 index 0000000..a71a78d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/sass/kanban.scss @@ -0,0 +1,245 @@ +@import "variables"; + +$ease-out: all .3s cubic-bezier(0.23, 1, 0.32, 1); + +ul.drag-list, +ul.drag-inner-list { + margin: 0; + padding: 0 5px 0 5px; + list-style-type: none; +} + +.drag-container { + margin: 0px; + overflow: auto; + height: 100%; + + span div a { + @include border-radius(4px); + + padding: 10px; + display: block; + background: $white; + text-align: center; + color: $primary-color; + border: 2px solid $primary-color; + box-shadow: rgba(14, 144, 217, 0.1) 0px 4px 6px -1px, rgba(14, 144, 217, 0.06) 0px 2px 4px -1px; + } +} + +.drag-list { + display: grid; + grid-gap: 10px; + width: max-content; + margin-bottom: 10px; + grid-auto-flow: column; + height: calc(100% - 10px); + color: $secondary-font-color; + grid-auto-columns: minmax(320px, auto); + + @media (max-width: 690px) { + display: block; + } +} + +.drag-column { + @include border-radius(4px); + + width: auto; + margin: 0px; + overflow: hidden; + vertical-align: top; + display: inline-block; + background-color: rgba(255, 255, 255, .5); + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, rgba(0, 0, 0, 0.06) 0px 2px 4px -1px; + + @media (max-width: 690px) { + margin-bottom: 30px; + } + + .drag-column-header { + display: flex; + padding: 20px; + align-items: center; + justify-content: space-between; + + > div { + width: 100%; + + h2 { + margin: 0; + font-size: 18px; + font-weight: 500; + color: $dark-color; + margin-bottom: 10px; + + span { + color: $success-color; + } + } + + a { + cursor: pointer; + } + } + } +} + +.drag-inner-list { + height: 100%; + min-height: 50px; + overflow-y: scroll; + height: calc(100% - 110px); + color: $secondary-font-color; + + &::-webkit-scrollbar { + // display: none; + } + + .empty-icon-container { + height: 100%; + display: block; + text-align: center; + position: relative; + + .icon-text-container { + position: absolute; + top: calc(50% - 75px); + left: calc(50% - 49px); + + .empty-kanban-icon { + width: 98px; + height: 98px; + } + + span { + display: block; + padding-top: 10px; + } + } + } +} + +.drag-item { + margin: 0px; + box-shadow: none; + line-height: 30px; + background: $white; + transition: $ease-out; + border: 1px solid $body-background; + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.1); + border-bottom: 1px solid rgba(193, 194, 195, .5); + + + .lead-block { + position: relative; + padding: 10px; + + &:hover { + .icons { + display: inline-block; + } + } + + &.rotten { + background: #ffd0d6; + } + + .lead-title { + font-size: 16px; + font-weight: 500; + color: $font-color; + line-break: anywhere; + display: inline-block; + width: calc(100% - 45px); + } + + .icons { + top: 5px; + right: 5px; + display: none; + cursor: pointer; + position: absolute; + } + + .lead-cost { + color: $font-color; + } + + .lead-person, + .lead-cost { + font-size: 14px; + + .icon { + margin-right: 5px; + vertical-align: middle; + } + } + } +} + +.drag-header-more { + cursor: pointer; +} + +.drag-options { + left: 0; + opacity: 0; + top: 44px; + width: 100%; + height: 100%; + padding: 10px; + position: absolute; + transform: translateX(100%); + transition: $ease-out; + + &.active { + transform: translateX(0); + opacity: 1; + } + + &-label { + display: block; + margin: 0 0 5px 0; + + input { + opacity: 0.6; + } + + span { + display: inline-block; + font-size: 0.9rem; + font-weight: 400; + margin-left: 5px; + } + } +} + +/* Dragula CSS */ + +.gu-mirror { + position: fixed !important; + margin: 0 !important; + z-index: 9999 !important; + opacity: 0.8; + list-style-type: none; +} + +.gu-hide { + display: none !important; +} + +.gu-unselectable { + -webkit-user-select: none !important; + -moz-user-select: none !important; + -ms-user-select: none !important; + user-select: none !important; +} + +.gu-transit { + opacity: 0.2; +} + +.disable-drag { + pointer-events: none; +} diff --git a/packages/Webkul/Admin/src/Resources/assets/sass/rtl.scss b/packages/Webkul/Admin/src/Resources/assets/sass/rtl.scss new file mode 100644 index 0000000..6a15cee --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/assets/sass/rtl.scss @@ -0,0 +1,440 @@ +.rtl { + direction: rtl; + + .anonymous-layout-container { + .center-box { + .adjacent-center { + text-align: right; + } + } + } + + .lead-quote-list { + table { + tr { + td { + &.actions { + .icon { + cursor: pointer; + } + + .dropdown-list { + left: 60px !important; + right: unset; + } + } + } + } + } + } + + .navbar-top { + .navbar-top-right { + text-align: left; + + .quick-create { + .dropdown-toggle { + .icon { + margin-left: 6px; + margin-right: unset; + } + } + + .dropdown-list { + right: unset; + left: 0; + } + } + + .profile-info { + .dropdown-toggle { + .avatar { + margin-left: 10px; + } + } + + .dropdown-list { + text-align: right; + right: unset; + left: 0px; + } + } + } + } + + table { + tr { + .avatar { + margin-left: 10px; + } + + .badge { + margin-left: 5px; + } + } + } + + .navbar-left { + left: unset; + right: -1px; + + .menubar { + li.menu-item { + .menu-label { + margin-left: 0; + margin-right: 10px; + } + + ul.sub-menubar { + left: unset; + right: 48px; + border-left: 1px solid #eee; + border-right: 0; + } + } + } + + &.open { + ul.menubar { + li.menu-item.active { + width: calc(100% - 0px); + } + } + } + } + + .navbar-left.open + .content-container { + padding-left: 0 !important; + padding-right: 160px; + } + + .content-container { + padding-right: 48px; + padding-left: 0; + + .dashboard { + .row-grid-3 { + .card { + label { + .icon-container { + float: left; + } + } + } + } + + > h1 ~ .card-filter-container { + float: left; + } + + .daterangepicker { + right: unset; + left: 0; + } + } + + .content { + .page-header { + .page-action { + float: left; + } + } + } + } + + .table { + .tabs-container { + .tabs-right-container { + text-align: left; + } + } + } + + .drag-item { + .lead-block .icons { + right: unset; + left: 5px; + } + } + + .tags-container { + .tag-dropdown { + .lookup-results { + text-align: right; + } + } + + ul.tag-list { + margin-left: 0; + margin-right: 10px; + + li { + margin-left: 8px; + margin-right: 0; + + &:last-child { + margin-left: 0; + } + } + } + } + + .modal-container { + .modal-header { + .header-actions { + text-align: left; + } + } + } + + .page-content.lead-view { + .lead-content-left { + float: right; + padding-right: 0; + padding-left: 10px; + + .panel { + .lead-rotten-info { + float: left; + } + } + } + + .lead-content-right { + padding-left: 0; + padding-right: 10px; + } + } + + .adjacent-center { + .page-content { + .nav-aside { + float: right; + padding-left: 20px; + padding-right: 0; + } + + .panel { + .panel-header { + button.btn { + margin-right: 0; + + .icon { + margin-right: 0; + margin-left: 5px; + } + } + } + } + } + } + + .custom-attribute-view { + .attribute-value-row { + padding-left: 30px; + padding-right: 0; + + .label { + float: right; + } + + .value { + float: right; + padding-right: 10px; + padding-left: 0; + } + } + } + + .pipeline-stage-controls-wrapper { + .pipeline-stage-container { + .pipeline-stage-controls { + margin-left: 0; + margin-right: 10px; + direction: ltr; + } + + .pipeline-stages { + .stage { + &:not(:last-child) { + &::after { + } + } + + .dropdown-list { + right: unset; + left: 0px; + } + } + } + } + } + + .activity-list { + .section-tag { + span { + padding-left: 10px; + padding-right: 0; + } + } + + .timeline-bar { + left: unset; + right: 18px; + } + + .activities { + .activity-item { + margin-left: 0; + margin-right: 50px; + text-align: right; + + &:before { + left: unset; + right: -51px; + } + + .timeline-bar-icon { + left: unset; + right: -40px; + + &.meeting { + right: -42px; + } + + &.lunch { + left: -40px; + } + + &.email { + left: unset; + right: -41px; + } + } + + .icon.ellipsis-icon { + left: 10px; + right: unset; + } + + .dropdown-list { + left: 0; + right: unset; + text-align: right; + } + + &.activity { + .attachment { + .icon { + margin-left: 5px; + margin-right: 0; + } + } + } + } + } + } + + .switch-view-container { + margin-left: unset; + + .icon-container { + &.active { + margin-left: 1px; + } + } + } + + .form-group { + &.email-control-group { + padding-left: 0; + padding-right: 40px; + + > label { + left: unset; + right: 0; + } + + .email-address-options { + right: unset; + left: 10px; + } + } + } + + .email-list { + .email-item { + .email-header { + .row { + .time { + float: left; + text-align: left; + } + } + } + } + } + + .email-action-container { + .sidebar-filter { + right: unset; + left: -420px; + + &.show { + right: unset; + left: 0; + } + + .panel { + .panel-header { + .links { + float: left; + + .icon.close-icon { + margin-left: 0; + margin-right: 5px; + } + + a { + margin-left: 0; + } + } + } + + .btn-group { + .form-group { + .icon { + right: unset; + left: 13px; + } + } + } + } + } + } + + .dropdown-list { + text-align: right; + } + + .dragable-container { + ul.dragable-list { + li.list-group-item { + .form-group { + padding-left: 40px; + padding-right: 0; + + .icon.align-justify-icon { + right: unset; + left: 50px; + } + } + + .icon.trash-icon { + right: unset; + left: 5px; + } + } + } + } +} diff --git a/packages/Webkul/Admin/src/Resources/lang/ar/app.php b/packages/Webkul/Admin/src/Resources/lang/ar/app.php new file mode 100644 index 0000000..b788c45 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/lang/ar/app.php @@ -0,0 +1,877 @@ + [ + 'title' => 'لوحة القيادة', + 'cards' => 'البطاقات', + 'column' => 'عمودي', + 'done' => 'منتهي', + 'activity' => 'نشاط', + 'activities' => 'أنشطة', + 'top_leads' => 'كبار العملاء المتوقعين', + 'pipelines' => 'خطوط الأنابيب', + 'quotes' => 'يقتبس', + 'emails' => 'رسائل البريد الإلكتروني', + 'custom_card' => 'بطاقة مخصصة', + 'customers' => 'عملاء', + 'top_customers' => 'كبار العملاء', + 'leads_started' => 'بدأ العملاء المحتملون', + 'products' => 'منتجات', + 'top_products' => 'أهم المنتجات', + 'leads_started' => 'بدأ العملاء المحتملون', + 'leads_over_time' => 'يؤدي بمرور الوقت', + 'no_record_found' => 'لا يوجد سجلات', + 'week' => 'أسبوع', + ], + + 'layouts' => [ + 'app-version' => 'إصدار : :version', + 'dashboard' => 'لوحة القيادة', + 'leads' => 'يؤدي', + 'quotes' => 'يقتبس', + 'quote' => 'اقتبس', + 'mail' => [ + 'title' => 'بريد', + 'compose' => 'مؤلف موسيقى', + 'inbox' => 'صندوق الوارد', + 'draft' => 'مشروع', + 'outbox' => 'صندوق الصادر', + 'sent' => 'أرسلت', + 'trash' => 'نفاية', + 'setting' => 'ضبط', + ], + 'activities' => 'أنشطة', + 'contacts' => 'جهات الاتصال', + 'persons' => 'الأشخاص', + 'person' => 'شخص', + 'organizations' => 'المنظمات', + 'organization' => 'منظمة', + 'products' => 'منتجات', + 'product' => 'المنتج', + 'settings' => 'إعدادات', + 'user' => 'مستخدم', + 'user-info' => 'إدارة جميع المستخدمين وأذوناتهم في CRM ، ما يُسمح لهم بفعله.', + 'groups' => 'مجموعات', + 'groups-info' => 'إضافة مجموعات أو تحريرها أو حذفها من CRM', + 'roles' => 'الأدوار', + 'role' => 'دور', + 'roles-info' => 'إضافة الأدوار أو تحريرها أو حذفها من CRM', + 'users' => 'المستخدمون', + 'users-info' => 'إضافة أو تحرير أو حذف المستخدمين من CRM', + 'lead' => 'قيادة', + 'lead-info' => 'قم بإدارة جميع الإعدادات المتعلقة بالعملاء المتوقعين في CRM', + 'pipelines' => 'خطوط الأنابيب', + 'pipelines-info' => 'إضافة أو تحرير أو حذف خطوط الأنابيب من CRM', + 'sources' => 'مصادر', + 'sources-info' => 'إضافة أو تحرير أو حذف المصادر من CRM', + 'types' => 'أنواع', + 'types-info' => 'إضافة أنواع أو تعديلها أو حذفها من CRM', + 'automation' => 'التشغيل الآلي', + 'automation-info' => 'إدارة جميع الإعدادات المتعلقة بالأتمتة في CRM', + 'attributes' => 'صفات', + 'attribute' => 'يصف', + 'attributes-info' => 'إضافة أو تحرير أو حذف السمات من CRM', + 'email-templates' => 'قوالب البريد الإلكتروني', + 'email' => 'بريد الالكتروني', + 'email-templates-info' => 'إضافة أو تحرير أو حذف قوالب البريد الإلكتروني من CRM', + 'workflows' => 'سير العمل', + 'workflows-info' => 'إضافة أو تحرير أو حذف مهام سير العمل من CRM', + 'other-settings' => 'اعدادات اخرى', + 'other-settings-info' => 'إدارة جميع الإعدادات الإضافية الخاصة بك في CRM', + 'tags' => 'العلامات', + 'tags-info' => 'إضافة أو تحرير أو حذف العلامات من CRM', + 'my-account' => 'حسابي', + 'sign-out' => 'خروج', + 'back' => 'خلف', + 'name' => 'اسم', + 'configuration' => 'إعدادات', + 'activities' => 'أنشطة', + 'howdy' => 'مرحبا!', + ], + + 'contacts' => [ + 'organizations' => [ + 'title' => 'المنظمات', + 'organization' => 'منظمة', + 'create-title' => 'إنشاء منظمة', + 'edit-title' => 'تحرير المنظمة', + 'save-btn-title' => 'حفظ كمنظمة', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'create-success' => 'تم إنشاء المنظمة بنجاح.', + 'update-success' => 'تم تحديث المنظمة بنجاح.', + 'delete-success' => 'تم حذف المنظمة بنجاح.', + 'delete-failed' => 'لا يمكن حذف المنظمة.', + ], + + 'persons' => [ + 'title' => 'الأشخاص', + 'person' => 'شخص', + 'create-title' => 'خلق الشخص', + 'edit-title' => 'تحرير الشخص', + 'save-btn-title' => 'حفظ كشخص', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'create-success' => 'تم إنشاء الشخص بنجاح.', + 'update-success' => 'تم تحديث الشخص بنجاح.', + 'delete-success' => 'تم حذف الشخص بنجاح.', + 'delete-failed' => 'لا يمكن حذف الشخص.', + ], + ], + + 'leads' => [ + 'title' => 'يؤدي', + 'lead' => 'قيادة', + 'create-title' => 'خلق الرصاص', + 'edit-title' => 'تحرير الرصاص', + 'save-btn-title' => 'حفظ كقائد', + 'save' => 'يحفظ', + 'upload' => 'تحميل', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'no-lead' => 'لا يؤدي', + 'lead-source-name' => 'مصدر الدليل', + 'details' => 'تفاصيل', + 'rotten-info' => 'الرصاص قد تعفن ل :days day(s)', + 'stage' => 'المسرح', + 'new' => 'جديد', + 'won-lost' => 'فاز / خسر', + 'won' => 'وون', + 'lost' => 'ضائع', + 'change-stage' => 'مرحلة التغيير', + 'lost-reason' => 'سبب ضائع', + 'won-value' => 'قيمة الفوز', + 'created-date:' => 'تاريخ الإنشاء:', + 'closed-date:' => 'تاريخ مغلق:', + 'closed-date' => 'تاريخ مغلق', + 'expected-close-date:' => 'تاريخ الإغلاق المتوقع:', + 'contact-person' => 'الشخص الذي يمكن الاتصال به', + 'add-tag' => 'إضافة علامة', + 'search-tag' => 'بحث الوسم', + 'name' => 'اسم', + 'color' => 'اللون', + 'email' => 'بريد الالكتروني', + 'contact-numbers' => 'ارقام التواصل', + 'organization' => 'منظمة', + 'address' => 'عنوان', + 'products' => 'منتجات', + 'item' => 'غرض', + 'price' => 'سعر', + 'quantity' => 'كمية', + 'amount' => 'كمية', + 'create-success' => 'تم إنشاء العميل المحتمل بنجاح.', + 'update-success' => 'تم تحديث العميل المحتمل بنجاح.', + 'delete-success' => 'تم حذف الرصاص بنجاح.', + 'delete-failed' => 'لا يمكن حذف الرصاص.', + 'note' => 'ملحوظة', + 'activity' => 'نشاط', + 'title-control' => 'عنوان', + 'call' => 'مكالمة', + 'meeting' => 'لقاء', + 'lunch' => 'غداء', + 'file' => 'ملف', + 'quote' => 'اقتبس', + 'create-quote' => 'إنشاء اقتباس', + 'type' => 'نوع', + 'description' => 'وصف', + 'schedule' => 'جدول', + 'from' => 'من عند', + 'to' => 'إلى', + 'location' => 'موقع', + 'participants' => 'مشاركون', + 'participant-info' => 'ابدأ في كتابة الاسم', + 'users' => 'المستخدمون', + 'persons' => 'الأشخاص', + 'cc' => 'نسخة', + 'bcc' => 'نسخة مخفية الوجهة', + 'email-placeholder' => 'اضغط على يدخل لإضافة رسائل بريد إلكتروني', + 'file' => 'ملف', + 'subject' => 'موضوعات', + 'reply' => 'رد', + 'send' => 'يرسل', + 'all' => 'الجميع', + 'notes' => 'ملحوظات', + 'select-type' => 'اختر صنف', + 'calls' => 'المكالمات', + 'meetings' => 'الاجتماعات', + 'lunches' => 'وجبات الغداء', + 'emails' => 'رسائل البريد الإلكتروني', + 'files' => 'الملفات', + 'sales-owner' => 'مالك المبيعات', + 'person' => 'شخص', + 'subject' => 'موضوعات', + 'expired-at' => 'منتهي الصلاحية في', + 'sub-total' => 'المجموع الفرعي', + 'discount' => 'خصم', + 'tax' => 'ضريبة', + 'adjustment' => 'تعديل', + 'grand-total' => 'المبلغ الإجمالي', + 'actions' => 'أجراءات', + 'planned' => 'مخطط', + 'done' => 'منتهي', + 'edit' => 'يحرر', + 'mark-as-done' => 'اعتبره منته', + 'remove' => 'يزيل', + 'export-to-pdf' => 'تصدير إلى PDF', + 'empty-planned-activities' => 'ليس لديك أنشطة مخطط لها.', + 'empty-done-activities' => 'لم تقم بأي أنشطة.', + 'note-added' => 'تمت إضافة الملاحظة', + 'call-scheduled' => 'تمت جدولة المكالمة في :from - :to', + 'meeting-scheduled' => 'الاجتماع المقرر في :from - :to', + 'lunch-scheduled' => 'الغداء المقرر في :from - :to', + 'file-added' => 'تمت إضافة الملف', + 'quote-destroy-success' => 'تمت إزالة الاقتباس بنجاح.', + 'tag-create-success' => 'تمت إضافة العلامة بنجاح.', + 'tag-destroy-success' => 'تمت إزالة العلامة بنجاح.', + 'edit' => 'تعديل', + ], + + 'quotes' => [ + 'title' => 'يقتبس', + 'quote' => 'يقتبس', + 'create-title' => 'إنشاء اقتباس', + 'edit-title' => 'تحرير الاقتباس', + 'save-btn-title' => 'حفظ كاقتباس', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'quote-information' => 'معلومات الاقتباس', + 'lead' => 'قيادة', + 'address-information' => 'معلومات العنوان', + 'quote-items' => 'عناصر الاقتباس', + 'name' => 'اسم', + 'quantity' => 'كمية', + 'price' => 'سعر', + 'amount' => 'كمية', + 'discount' => 'خصم', + 'tax' => 'ضريبة', + 'total' => 'المجموع', + 'sub-total' => 'المجموع الفرعي', + 'discount' => 'خصم', + 'tax' => 'ضريبة', + 'adjustment' => 'تعديل', + 'grand-total' => 'المبلغ الإجمالي', + 'create-success' => 'تم إنشاء الاقتباس بنجاح', + 'update-success' => 'تم تحديث الاقتباس بنجاح.', + 'delete-success' => 'تم حذف الاقتباس بنجاح.', + 'delete-failed' => 'لا يمكن حذف الاقتباس.', + 'quote-id' => 'معرف الاقتباس', + 'quote-date' => 'تاريخ الاقتباس', + 'valid-until' => 'صالح حتى', + 'sales-person' => 'مندوب مبيعات', + 'bill-to' => 'فاتورة الى', + 'ship-to' => 'سافر على متن سفينة ل', + 'sku' => 'Sku', + 'product-name' => 'اسم المنتج', + 'price' => 'سعر', + 'amount' => 'كمية', + 'quantity' => 'كمية', + 'sub-total' => 'المجموع الفرعي', + 'tax' => 'ضريبة', + 'adjustment' => 'تعديل', + 'grand-total' => 'المبلغ الإجمالي', + 'search' => 'بحث..' + ], + + 'mail' => [ + 'title' => 'بريد - :type', + 'compose' => 'مؤلف موسيقى', + 'inbox' => 'صندوق الوارد', + 'draft' => 'مشروع', + 'outbox' => 'صندوق الصادر', + 'sent' => 'أرسلت', + 'trash' => 'نفاية', + 'setting' => 'ضبط', + 'total' => 'المجموع', + 'link-mail' => 'ربط البريد', + 'link-contact' => 'ربط جهة اتصال', + 'linked-contact' => 'جهة اتصال مرتبطة', + 'add-to-existing-contact' => 'إضافة إلى جهات الاتصال الموجودة', + 'create-new-contact' => 'إنشاء اتصال جديد', + 'search-contact' => 'ابحث عن جهة اتصال', + 'link-lead' => 'ربط الرصاص', + 'linked-lead' => 'الرصاص المرتبط', + 'search-lead' => 'ابحث عن الرصاص', + 'link-to-existing-lead' => 'الارتباط الموجود', + 'add-new-lead' => 'إضافة عميل محتمل جديد', + 'send' => 'يرسل', + 'back' => 'خلف', + 'discard' => 'تجاهل', + 'from-' => 'من عند - ', + 'to-' => 'إلى - ', + 'cc-' => 'نسخة - ', + 'bcc-' => 'نسخة مخفية الوجهة - ', + 'reply' => 'رد', + 'reply-all' => 'رد على الكل', + 'forward' => 'إلى الأمام', + 'delete' => 'حذف', + 'destroy-success' => 'تم حذف رسائل البريد الإلكتروني المحددة بنجاح.', + 'save-to-draft' => 'حفظ في المسودة', + 'create-success' => 'تم إرسال البريد الإلكتروني بنجاح.', + 'update-success' => 'تم تحديث البريد الإلكتروني بنجاح.', + 'saved-to-draft' => 'تم حفظ البريد الإلكتروني في المسودة.', + 'delete-success' => 'تم حذف البريد الإلكتروني بنجاح.', + 'delete-failed' => 'لا يمكن حذف البريد الإلكتروني.', + 'mass-update-success' => 'تم تحديث رسائل البريد الإلكتروني بنجاح.', + + 'forget-password' => [ + 'subject' => 'إعادة تعيين كلمة مرور العميل', + 'dear' => 'عزيزي :name', + 'reset-password' => 'إعادة تعيين كلمة المرور', + 'info' => 'أنت تتلقى هذا البريد الإلكتروني لأننا تلقينا طلب إعادة تعيين كلمة المرور لحسابك', + 'final-summary' => 'إذا لم تطلب إعادة تعيين كلمة المرور ، فلا داعي لاتخاذ أي إجراء آخر', + 'thanks' => 'شكرا!' + ], + + 'user' => [ + 'create-subject' => 'تمت إضافتك كعضو.', + 'create-body' => 'تهانينا! أنت الآن عضو في فريقنا.', + ], + ], + + 'activities' => [ + 'title' => 'أنشطة', + 'title-control' => 'عنوان', + 'edit-title' => 'تحرير النشاط', + 'save-btn-title' => 'حفظ كنشاط', + 'back' => 'خلف', + 'type' => 'نوع', + 'note' => 'ملحوظة', + 'call' => 'مكالمة', + 'meeting' => 'لقاء', + 'lunch' => 'غداء', + 'file' => 'ملف', + 'description' => 'وصف', + 'schedule' => 'جدول', + 'from' => 'من عند', + 'to' => 'إلى', + 'location' => 'موقع', + 'participants' => 'مشاركون', + 'duration-overlapping' => 'المشاركون لديهم اجتماع آخر في هذا الوقت. هل تريد الاستمرار?', + 'file-upload-success' => 'تم تحميل الملف (الملفات) بنجاح.', + 'file-upload-error' => 'لا يمكن تحميل الملف (الملفات).', + 'create-success' => ':تم إنشاء النوع بنجاح.', + 'update-success' => ':اكتب محدث بنجاح.', + 'mass-update-success' => 'تم تحديث الأنشطة بنجاح.', + 'mass-update-failed' => 'لا يمكن تحديث الأنشطة.', + 'destroy-success' => ':اكتب تم حذفه بنجاح.', + 'delete-failed' => ':لا يمكن حذف النوع +.', + 'typing-placeholder' => 'ابدأ في كتابة الاسم', + ], + + 'products' => [ + 'title' => 'منتجات', + 'product' => 'المنتج', + 'create-title' => 'إنشاء منتج', + 'edit-title' => 'تحرير المنتج', + 'save-btn-title' => 'حفظ كمنتج', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'create-success' => 'تم إنشاء المنتج بنجاح.', + 'update-success' => 'تم إنشاء المنتج بنجاح.', + 'delete-success' => 'تم حذف المنتج بنجاح.', + 'delete-failed' => 'لا يمكن حذف المنتج.', + ], + + 'sessions' => [ + 'login' => [ + 'title' => 'تسجيل الدخول', + 'welcome' => 'مرحبا بعودتك', + 'email' => 'بريد الالكتروني', + 'password' => 'كلمه السر', + 'login' => 'تسجيل الدخول', + 'forgot-password' => 'هل نسيت كلمة السر?', + 'login-error' => 'يرجى التحقق من بيانات الاعتماد الخاصة بك وحاول مرة أخرى.', + 'activate-warning' => 'لم يتم تنشيط حسابك بعد ، يرجى الاتصال بالمسؤول.', + ], + + 'forgot-password' => [ + 'title' => 'هل نسيت كلمة السر?', + 'email' => 'بريد الالكتروني', + 'send-reset-password-email' => 'إرسال بريد إلكتروني لإعادة تعيين كلمة المرور', + 'reset-link-sent' => 'لقد أرسلنا رابط إعادة تعيين كلمة المرور بالبريد الإلكتروني.', + 'email-not-exist' => "لا يمكننا العثور على مستخدم بعنوان البريد الإلكتروني هذا.", + 'back-to-login' => 'العودة إلى تسجيل الدخول' + ], + + 'reset-password' => [ + 'title' => 'إعادة تعيين كلمة المرور', + 'email' => 'بريد الالكتروني', + 'password' => 'كلمه السر', + 'confirm-password' => 'تأكيد كلمة المرور', + 'reset-password' => 'إعادة تعيين كلمة المرور' + ] + ], + + 'settings' => [ + 'title' => 'إعدادات', + + 'groups' => [ + 'title' => 'مجموعات', + 'group' => 'مجموعة', + 'edit-title' => 'تحرير المجموعة', + 'description' => 'وصف', + 'create-title' => 'إنشاء مجموعة', + 'save-btn-title' => 'حفظ كمجموعة', + 'update-btn-title' => 'تحديث المجموعة', + 'create-success' => 'تم إنشاء المجموعة بنجاح.', + 'update-success' => 'تم تحديث المجموعة بنجاح.', + 'destroy-success' => 'تم حذف المجموعة بنجاح.', + 'delete-failed' => 'لا يمكن حذف المجموعة.', + 'user-define-error' => 'لا يمكن حذف مجموعة النظام.', + ], + + 'roles' => [ + 'title' => 'الأدوار', + 'role' => 'دور', + 'edit-title' => 'تحرير الدور', + 'description' => 'وصف', + 'create-title' => 'إنشاء دور', + 'permission_type' => 'نوع الإذن', + 'custom' => 'مخصص', + 'all' => 'الجميع', + 'save-btn-title' => 'حفظ دور', + 'update-btn-title' => 'تحديث الدور', + 'create-success' => 'تم إنشاء الدور بنجاح.', + 'update-success' => 'تم تحديث الدور بنجاح.', + 'delete-success' => 'تم حذف الدور بنجاح.', + 'delete-failed' => 'لا يمكن حذف الدور.', + 'user-define-error' => 'لا يمكن حذف دور النظام.', + 'last-delete-error' => 'مطلوب دور واحد على الأقل.', + 'current-role-delete-error' => 'لا يمكن حذف الدور المعين للمستخدم الحالي.', + 'being-used' => 'لا يمكن حذف الدور ، حيث يتم استخدامه في المستخدم الإداري.', + ], + + 'users' => [ + 'title' => 'المستخدمون', + 'create-title' => 'إنشاء المستخدم', + 'edit-title' => 'تحرير العضو', + 'general' => 'عام', + 'permission' => 'إذن', + 'name' => 'اسم', + 'email' => 'بريد الالكتروني', + 'back' => 'خلف', + 'password' => 'كلمه السر', + 'groups' => 'مجموعات', + 'role' => 'دور', + 'view-permission' => 'عرض الإذن', + 'global' => 'عالمي', + 'group' => 'مجموعة', + 'individual' => 'فرد', + 'status' => 'حالة', + 'save-btn-title' => 'حفظ كمستخدم', + 'confirm_password' => 'تأكيد كلمة المرور', + 'create-success' => 'تم إنشاء المستخدم بنجاح.', + 'update-success' => 'تم تحديث المستخدم بنجاح.', + 'delete-success' => 'تم حذف المستخدم بنجاح.', + 'delete-failed' => 'لا يمكن حذف المستخدم.', + 'user-define-error' => 'لا يمكن حذف مستخدم النظام.', + 'last-delete-error' => 'مطلوب مستخدم واحد على الأقل.', + 'user-define-error' => 'لا يمكن حذف مستخدم النظام.', + 'mass-update-success' => 'تم تحديث المستخدمين بنجاح.', + 'mass-update-failed' => 'لا يمكن تحديث المستخدمين.', + 'mass-delete-success' => 'تم حذف المستخدمين بنجاح.', + 'mass-delete-failed' => 'لا يمكن حذف المستخدمين.', + ], + + 'attributes' => [ + 'title' => 'صفات', + 'attribute' => 'يصف', + 'create-title' => 'تكوين السمة', + 'edit-title' => 'تحرير السمة', + 'save-btn-title' => 'حفظ كسمة', + 'back' => 'خلف', + 'code' => 'الشفرة', + 'name' => 'اسم', + 'type' => 'نوع', + 'text' => 'نص', + 'textarea' => 'تيكستاريا', + 'price' => 'سعر', + 'boolean' => 'قيمة منطقية', + 'select' => 'يختار', + 'multiselect' => 'تحديد متعدد', + 'email' => 'بريد الالكتروني', + 'address' => 'عنوان', + 'phone' => 'هاتف', + 'datetime' => 'التاريخ والوقت', + 'date' => 'تاريخ', + 'image' => 'صورة', + 'file' => 'ملف', + 'entity-type' => 'نوع الكيان', + 'lookup' => 'ابحث عن', + 'entity_type' => 'نوع الكيان', + 'lookup-type' => 'نوع البحث', + 'checkbox' => 'خانة اختيار', + 'is_required' => 'مطلوب', + 'is_unique' => 'فريد من نوعة', + 'yes' => 'نعم', + 'no' => 'لا', + 'input_validation' => 'التحقق من صحة المدخلات', + 'number' => 'عدد', + 'decimal' => 'عدد عشري', + 'email' => 'بريد الالكتروني', + 'url' => 'عنوان Url', + 'options-type' => 'نوع الخيار', + 'options' => 'خيارات', + 'sort-order' => 'امر ترتيب', + 'add-option-btn-title' => 'إضافة خيار', + 'create-success' => 'تم إنشاء السمة بنجاح.', + 'update-success' => 'تم تحديث السمة بنجاح.', + 'update-error' => 'تعذر تحديث السمة.', + 'delete-success' => 'تم حذف السمة بنجاح.', + 'delete-failed' => 'لا يمكن حذف السمة.', + 'user-define-error' => 'لا يمكن حذف سمة النظام.', + 'mass-delete-failed' => 'السمات لا يمكن حذفها.', + ], + + 'pipelines' => [ + 'title' => 'خطوط الأنابيب', + 'organization' => 'خط انابيب', + 'create-title' => 'إنشاء خط أنابيب', + 'edit-title' => 'تحرير خط الأنابيب', + 'save-btn-title' => 'حفظ كخط أنابيب', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'name' => 'اسم', + 'rotting-days' => 'أيام متعفنة', + 'is-default' => 'علامة كما الافتراضي', + 'probability' => 'احتمالا (%)', + 'add-stage-btn-title' => 'أضف المرحلة', + 'new-stage' => 'الجديد', + 'won-stage' => 'وون', + 'lost-stage' => 'ضائع', + 'duplicate-name' => 'لا يمكن أن يكون حقل "الاسم" مكررًا', + 'create-success' => 'تم إنشاء خط الأنابيب بنجاح.', + 'update-success' => 'تم تحديث خط الأنابيب بنجاح.', + 'delete-success' => 'تم حذف خط الأنابيب بنجاح.', + 'delete-failed' => 'لا يمكن حذف خط الأنابيب.', + 'default-delete-error' => 'لا يمكن حذف خط الأنابيب الافتراضي.', + ], + + 'sources' => [ + 'title' => 'مصادر', + 'organization' => 'مصدر', + 'create-title' => 'إنشاء مصدر', + 'edit-title' => 'تحرير المصدر', + 'save-btn-title' => 'حفظ كمصدر', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'create-success' => 'تم إنشاء المصدر بنجاح.', + 'name-exists' => 'اسم المصدر موجود بالفعل.', + 'update-success' => 'تم تحديث المصدر بنجاح.', + 'delete-success' => 'تم حذف المصدر بنجاح.', + 'delete-failed' => 'لا يمكن حذف المصدر.', + ], + + 'types' => [ + 'title' => 'أنواع', + 'organization' => 'نوع', + 'create-title' => 'نوع الإنشاء', + 'edit-title' => 'نوع التحرير', + 'save-btn-title' => 'حفظ كنوع', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'create-success' => 'تم إنشاء النوع بنجاح.', + 'name-exists' => 'اسم النوع موجود بالفعل.', + 'update-success' => 'تم تحديث النوع بنجاح.', + 'delete-success' => 'تم حذف النوع بنجاح.', + 'delete-failed' => 'لا يمكن حذف النوع.', + ], + + 'email-templates' => [ + 'title' => 'قوالب البريد الإلكتروني', + 'create-title' => 'إنشاء نموذج بريد إلكتروني', + 'edit-title' => 'تحرير قالب البريد الإلكتروني', + 'save-btn-title' => 'حفظ كقالب بريد إلكتروني', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'name' => 'اسم', + 'subject' => 'موضوعات', + 'content' => 'المحتوى', + 'placeholders' => 'العناصر النائبة', + 'create-success' => 'تم إنشاء قالب البريد الإلكتروني بنجاح.', + 'update-success' => 'تم تحديث نموذج البريد الإلكتروني بنجاح.', + 'delete-success' => 'تم حذف قالب البريد الإلكتروني بنجاح.', + 'delete-failed' => 'لا يمكن حذف قالب البريد الإلكتروني.', + ], + + 'workflows' => [ + 'title' => 'سير العمل', + 'create-title' => 'إنشاء سير العمل', + 'edit-title' => 'تحرير سير العمل', + 'save-btn-title' => 'حفظ كسير عمل', + 'back' => 'خلف', + 'cancel' => 'يلغي', + 'information' => 'معلومة', + 'name' => 'اسم', + 'description' => 'وصف', + 'event' => 'حدث', + 'events' => 'الأحداث', + 'created' => 'خلقت', + 'updated' => 'محدث', + 'deleted' => 'تم الحذف', + 'event-info' => 'يتم تشغيل الحدث تلقائيًا للتحقق من الشروط وتنفيذ مجموعة محددة مسبقًا من الإجراءات', + 'conditions' => 'شروط', + 'condition-info' => 'الشروط عبارة عن مجموعة من القواعد التي تتحقق من سيناريوهات محددة ويتم تشغيلها في مناسبات محددة', + 'condition-type' => 'نوع الشرط', + 'all-conditions-true' => 'كل الشروط صحيحة', + 'any-condition-true' => 'أي شرط صحيح', + 'add-condition' => 'أضف شرط', + 'choose-condition-to-add' => 'اختر شرط لإضافته', + 'is-equal-to' => 'يساوي', + 'is-not-equal-to' => 'لا يساوي', + 'equals-or-greater-than' => 'يساوي أو أكبر من', + 'equals-or-less-than' => 'يساوي أو أقل من', + 'greater-than' => 'أكثر من', + 'less-than' => 'أقل من', + 'contain' => 'يحتوي', + 'contains' => 'يتضمن', + 'does-not-contain' => 'لا يحتوي', + 'actions' => 'أجراءات', + 'action-info' => 'لا يقلل الإجراء من عبء العمل فحسب ، بل يسهل أيضًا أتمتة CRM', + 'choose-action-to-add' => 'اختر إجراءً لإضافته', + 'update-lead' => 'تحديث الرصاص', + 'update-person' => 'تحديث الشخص', + 'send-email-to-person' => 'إرسال بريد إلكتروني إلى شخص', + 'send-email-to-sales-owner' => 'إرسال بريد إلكتروني إلى صاحب المبيعات', + 'send-email-to-participants' => 'إرسال بريد إلكتروني إلى المشاركين', + 'add-tag' => 'إضافة علامة', + 'add-note-as-activity' => 'أضف ملاحظة كنشاط', + 'choose-attribute' => 'اختر السمة', + 'choose-option' => 'إختر خيارا', + 'update-person' => 'تحديث الشخص', + 'update-related-leads' => 'تحديث العملاء المتوقعين ذوي الصلة', + 'update-quote' => 'تحديث الاقتباس', + 'add-action' => 'أضف إجراء', + 'create-success' => 'تم إنشاء سير العمل بنجاح.', + 'update-success' => 'تم تحديث سير العمل بنجاح.', + 'delete-success' => 'تم حذف سير العمل بنجاح.', + 'delete-failed' => 'لا يمكن حذف سير العمل.', + ], + + 'tags' => [ + 'title' => 'العلامات', + 'create-title' => 'إنشاء علامة', + 'edit-title' => 'تحرير العلامة', + 'cancel' => 'يلغي', + 'save-btn-title' => 'حفظ كعلامة', + 'name' => 'اسم', + 'color' => 'اللون', + 'create-success' => 'تم إنشاء العلامة بنجاح.', + 'update-success' => 'تم تحديث العلامة بنجاح.', + 'delete-success' => 'تم حذف العلامة بنجاح.', + 'delete-failed' => 'لا يمكن حذف العلامة.', + ], + + 'web-forms' => [ + 'create-success' => 'تم تحديث نموذج الويب بنجاح', + 'update-success' => 'تم تحديث نموذج الويب بنجاح', + 'delete-success' => 'تم حذف نموذج الويب بنجاح' + ], + ], + + 'configuration' => [ + 'title' => 'لقب', + 'save-btn-title' => 'يحفظ', + 'general' => 'عام', + 'locale-settings' => 'إعدادات اللغة', + 'locale' => 'لغة', + 'timezone' => 'وحدة زمنية', + 'date-time-formats' => 'تنسيقات التاريخ والوقت', + 'save-message' => 'تم تحديث التهيئة بنجاح!', + "emails" => [ + 'email' => 'بريد الالكتروني', + 'notification_label' => 'إشعارات', + 'new_lead' => 'قيادة جديدة', + ] + ], + + 'datagrid' => [ + 'id' => 'هوية شخصية', + 'name' => 'اسم', + 'code' => 'اسم', + 'sku' => 'SKU', + 'type' => 'نوع', + 'price' => 'سعر', + 'email' => 'بريد الالكتروني', + 'attachments' => 'المرفقات', + 'from' => 'من عند', + 'lead' => 'قيادة', + 'title' => 'عنوان', + 'subject' => 'موضوعات', + 'tags' => 'العلامات', + 'emails' => 'رسائل البريد الإلكتروني', + 'stage' => 'المسرح', + 'status' => 'حالة', + 'active' => 'نشيط', + 'inactive' => 'غير نشط', + 'address' => 'عنوان', + 'quantity' => 'كمية', + 'lead_value' => 'قيمة الرصاص', + 'comment' => 'تعليق', + 'is_done' => 'تم', + 'type' => 'نوع', + 'all' => 'الجميع', + 'user' => 'مستخدم', + 'sales-person' => 'مندوب مبيعات', + 'expired_quotes' => 'اقتباسات منتهية الصلاحية', + 'person' => 'شخص', + 'sub-total' => 'المجموع الفرعي', + 'discount' => 'خصم', + 'tax' => 'ضريبة', + 'adjustment' => 'تعديل', + 'grand-total' => 'المبلغ الإجمالي', + 'persons_count' => 'عدد الأشخاص', + 'assigned_to' => 'مخصص ل', + 'created_by' => 'انشأ من قبل', + 'entity_type' => 'نوع الكيان', + 'created_at' => 'تاريخ الإنشاء', + 'expected_close_date' => 'تاريخ الإغلاق المتوقع', + 'schedule_from' => 'جدولة من', + 'schedule_to' => 'جدولة ل', + 'description' => 'وصف', + 'update_stage' => 'مرحلة التحديث', + 'contact_person' => 'الشخص الذي يمكن الاتصال به', + 'contact_numbers' => 'ارقام التواصل', + 'permission_type' => 'نوع الإذن', + 'organization_name' => 'اسم المنظمة', + 'is-default' => 'افتراضي', + 'rotten-days' => 'أيام فاسدة', + 'rotten_lead' => 'الرصاص الفاسد', + 'yes' => 'نعم', + 'no' => 'لا', + 'move-to-inbox' => 'الانتقال إلى البريد الوارد', + 'update-success' => ':تم تحديث المورد بنجاح.', + 'destroy-success' => ':تم حذف المورد بنجاح.', + 'destroy-failed' => ':لا يمكن حذف المورد.', + 'attribute_type' => 'نوع السمة', + 'filters' => [ + 'yesterday' => 'في الامس', + 'today' => 'اليوم', + 'tomorrow' => 'غدا', + 'this-week' => 'هذا الاسبوع', + 'this-month' => 'هذا الشهر', + 'custom' => 'مخصص', + ] + ], + + 'response' => [ + 'create-success' => ':تم إنشاء الاسم بنجاح.', + 'update-success' => ':تم تحديث الاسم بنجاح.', + 'destroy-success' => ':تم حذف الاسم بنجاح.', + 'destroy-failed' => ':لا يمكن حذف الاسم.', + ], + + 'acl' => [ + 'leads' => 'يؤدي', + 'lead' => 'قيادة', + 'quotes' => 'يقتبس', + 'mail' => 'بريد', + 'inbox' => 'صندوق الوارد', + 'draft' => 'مشروع', + 'outbox' => 'صندوق الصادر', + 'sent' => 'أرسلت', + 'trash' => 'نفاية', + 'activities' => 'أنشطة', + 'contacts' => 'جهات الاتصال', + 'persons' => 'الأشخاص', + 'organizations' => 'المنظمات', + 'products' => 'منتجات', + 'settings' => 'إعدادات', + 'groups' => 'مجموعات', + 'roles' => 'الأدوار', + 'users' => 'المستخدمون', + 'user' => 'مستخدم', + 'automation' => 'التشغيل الآلي', + 'attributes' => 'صفات', + 'pipelines' => 'خطوط الأنابيب', + 'sources' => 'مصادر', + 'types' => 'أنواع', + 'email-templates' => 'قوالب البريد الإلكتروني', + 'workflows' => 'سير العمل', + 'other-settings' => 'اعدادات اخرى', + 'tags' => 'العلامات', + 'configuration' => 'إعدادات', + 'create' => 'إنشاء', + 'edit' => 'يحرر', + 'view' => 'رأي', + 'print' => 'مطبعة', + 'delete' => 'حذف', + 'export' => 'يصدر', + 'mass-delete' => 'حذف جماعي', + ], + + 'common' => [ + 'back' => 'خلف', + 'address' => 'عنوان', + 'country' => 'دولة', + 'add_more' => 'أضف المزيد', + 'select-country' => 'الرجاء تحديد الدولة', + 'select-users' => 'حدد المستخدمون', + 'select_rotten_leads' => 'حدد العروض الفاسدة', + 'select-organization' => 'حدد المنظمات', + 'state' => 'ولاية', + 'select-state' => 'الرجاء تحديد الولاية', + 'city' => 'مدينة', + 'postcode' => 'الرمز البريدي', + 'address-validation' => 'حقل "العنوان" مطلوب', + 'work' => 'عمل', + 'home' => 'الصفحة الرئيسية', + 'no-result-found' => 'لم يتم العثور على السجلات بالاسم نفسه.', + 'add-as' => 'أضف كالجديد', + 'not-available' => 'غير متوفر', + 'select-options' => 'اشر على الخيارات', + 'yes' => 'نعم', + 'no' => 'لا', + 'delete' => 'حذف', + 'save' => 'يحفظ', + 'locale' => 'لغة', + 'en' => 'إنجليزي', + 'tr' => 'Turkçe', + 'ar' => 'عربي', + 'add-as' => 'أضف كالجديد', + 'no-records-found' => 'لا توجد سجلات', + 'start-typing' => 'ابدأ الكتابة للبحث في السجلات', + 'select-type' => 'اختر صنف', + 'select-call' => 'مكالمة', + 'select-meeting' => 'لقاء', + 'select-lunch' => 'غداء', + 'duplicate-value' => 'لا يمكن أن تكون القيمة مكررة', + 'unauthenticated' => 'غير مصدق', + 'resource-not-found' => 'الموارد غير موجود', + 'forbidden-error' => 'ممنوع الخطأ', + 'internal-server-error' => 'خطأ في الخادم الداخلي', + 'something-went-wrong' => 'هناك شئ خاطئ، يرجى المحاولة فى وقت لاحق.', + 'delete-confirm' => 'هل تريد حقًا تنفيذ هذا الإجراء؟', + 'system_attribute' => 'نظام', + 'custom_attribute' => 'العادة', + ], + + 'user' => [ + 'account' => [ + 'name' => 'اسم', + 'email' => 'بريد الالكتروني', + 'password' => 'كلمه السر', + 'my_account' => 'حسابي', + 'update_details' => 'تحديث التفاصيل', + 'current_password' => 'كلمة المرور الحالي', + 'confirm_password' => 'تأكيد كلمة المرور', + 'password-match' => 'كلمة المرور الحالية غير متطابقة.', + 'account-save' => 'تم حفظ تغييرات الحساب بنجاح.', + 'permission-denied' => 'تم رفض الإذن', + 'remove-image' => 'إزالة الصورة', + 'upload_image_pix' => 'تحميل صورة الملف الشخصي (100 بكسل × 100 بكسل)', + 'upload_image_format' => 'بتنسيق PNG أو JPG', + 'image_upload_message' => 'يسمح فقط بالصور (.jpeg، .jpg، .png، ..).' + ] + ], + + 'emails' => [ + 'common' => [ + 'dear' => 'عزيزي :name', + 'cheers' => 'في صحتك ، فريق
    :app_name' + ], + ] +]; + + +?> diff --git a/packages/Webkul/Admin/src/Resources/lang/en/app.php b/packages/Webkul/Admin/src/Resources/lang/en/app.php new file mode 100644 index 0000000..3219816 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/lang/en/app.php @@ -0,0 +1,882 @@ + [ + 'title' => 'Dashboard', + 'cards' => 'Cards', + 'column' => 'Column', + 'done' => 'Done', + 'activity' => 'Activity', + 'activities' => 'Activities', + 'top_leads' => 'Top Leads', + 'pipelines' => 'Pipelines', + 'quotes' => 'Quotes', + 'emails' => 'Emails', + 'custom_card' => 'Custom Card', + 'customers' => 'Customers', + 'top_customers' => 'Top Customers', + 'leads_started' => 'Leads started', + 'products' => 'Products', + 'top_products' => 'Top Products', + 'leads_started' => 'Leads started', + 'leads_over_time' => 'Leads over time', + 'no_record_found' => 'No record found', + 'week' => 'Week', + ], + + 'layouts' => [ + 'app-version' => 'Version : :version', + 'dashboard' => 'Dashboard', + 'leads' => 'Leads', + 'quotes' => 'Quotes', + 'quote' => 'Quote', + 'mail' => [ + 'title' => 'Mail', + 'compose' => 'Compose', + 'inbox' => 'Inbox', + 'draft' => 'Draft', + 'outbox' => 'Outbox', + 'sent' => 'Sent', + 'trash' => 'Trash', + 'setting' => 'Setting', + ], + 'activities' => 'Activities', + 'contacts' => 'Contacts', + 'persons' => 'Persons', + 'person' => 'Person', + 'organizations' => 'Organizations', + 'organization' => 'Organization', + 'products' => 'Products', + 'product' => 'Product', + 'settings' => 'Settings', + 'user' => 'User', + 'user-info' => 'Manage all your users and their permissions in the CRM, what they’re allowed to do.', + 'groups' => 'Groups', + 'groups-info' => 'Add, edit or delete groups from CRM', + 'roles' => 'Roles', + 'role' => 'Role', + 'roles-info' => 'Add, edit or delete roles from CRM', + 'users' => 'Users', + 'users-info' => 'Add, edit or delete users from CRM', + 'lead' => 'Lead', + 'lead-info' => 'Manage all your leads related settings in the CRM', + 'pipelines' => 'Pipelines', + 'pipelines-info' => 'Add, edit or delete pipelines from CRM', + 'sources' => 'Sources', + 'sources-info' => 'Add, edit or delete sources from CRM', + 'types' => 'Types', + 'types-info' => 'Add, edit or delete types from CRM', + 'automation' => 'Automation', + 'automation-info' => 'Manage all your automation related settings in the CRM', + 'attributes' => 'Attributes', + 'attribute' => 'Attribute', + 'attributes-info' => 'Add, edit or delete attributes from CRM', + 'email-templates' => 'Email Templates', + 'email' => 'Email', + 'email-templates-info' => 'Add, edit or delete email templates from CRM', + 'workflows' => 'Workflows', + 'workflows-info' => 'Add, edit or delete workflows from CRM', + 'other-settings' => 'Other Settings', + 'other-settings-info' => 'Manage all your extra settings in the CRM', + 'tags' => 'Tags', + 'tags-info' => 'Add, edit or delete tags from CRM', + 'my-account' => 'My Account', + 'sign-out' => 'Sign Out', + 'back' => 'Back', + 'name' => 'Name', + 'configuration' => 'Configuration', + 'activities' => 'Activities', + 'howdy' => 'Howdy!', + ], + + 'contacts' => [ + 'organizations' => [ + 'title' => 'Organizations', + 'organization' => 'Organization', + 'create-title' => 'Create Organization', + 'edit-title' => 'Edit Organization', + 'save-btn-title' => 'Save as Organization', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'create-success' => 'Organization created successfully.', + 'update-success' => 'Organization updated successfully.', + 'delete-success' => 'Organization deleted successfully.', + 'delete-failed' => 'Organization can not be deleted.', + ], + + 'persons' => [ + 'title' => 'Persons', + 'person' => 'Person', + 'create-title' => 'Create Person', + 'edit-title' => 'Edit Person', + 'save-btn-title' => 'Save as Person', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'create-success' => 'Person created successfully.', + 'update-success' => 'Person updated successfully.', + 'delete-success' => 'Person deleted successfully.', + 'delete-failed' => 'Person can not be deleted.', + ], + ], + + 'leads' => [ + 'title' => 'Leads', + 'lead' => 'Lead', + 'create-title' => 'Create Lead', + 'edit-title' => 'Edit Lead', + 'save-btn-title' => 'Save as Lead', + 'save' => 'Save', + 'upload' => 'Upload', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'no-lead' => 'No Lead', + 'lead-source-name' => 'Lead source', + 'details' => 'Details', + 'rotten-info' => 'Lead has been rotten for :days day(s)', + 'stage' => 'Stage', + 'new' => 'New', + 'won-lost' => 'Won/Lost', + 'won' => 'Won', + 'lost' => 'Lost', + 'change-stage' => 'Change Stage', + 'lost-reason' => 'Lost Reason', + 'won-value' => 'Won Value', + 'created-date:' => 'Created Date:', + 'closed-date:' => 'Closed Date:', + 'closed-date' => 'Closed Date', + 'expected-close-date:' => 'Expected Close Date:', + 'contact-person' => 'Contact Person', + 'add-tag' => 'Add Tag', + 'search-tag' => 'Search Tag', + 'name' => 'Name', + 'color' => 'Color', + 'email' => 'Email', + 'contact-numbers' => 'Contact Numbers', + 'organization' => 'Organization', + 'address' => 'Address', + 'products' => 'Products', + 'item' => 'Item', + 'price' => 'Price', + 'quantity' => 'Quantity', + 'amount' => 'Amount', + 'create-success' => 'Lead created successfully.', + 'update-success' => 'Lead updated successfully.', + 'delete-success' => 'Lead deleted successfully.', + 'delete-failed' => 'Lead can not be deleted.', + 'note' => 'Note', + 'activity' => 'Activity', + 'title-control' => 'Title', + 'call' => 'Call', + 'meeting' => 'Meeting', + 'lunch' => 'Lunch', + 'file' => 'File', + 'quote' => 'Quote', + 'create-quote' => 'Create Quote', + 'type' => 'Type', + 'description' => 'Description', + 'schedule' => 'Schedule', + 'from' => 'From', + 'to' => 'To', + 'location' => 'Location', + 'participants' => 'Participants', + 'participant-info' => 'Start typing name', + 'users' => 'Users', + 'persons' => 'Persons', + 'cc' => 'Cc', + 'bcc' => 'Bcc', + 'email-placeholder' => 'Press enter to add emails', + 'file' => 'File', + 'subject' => 'Subject', + 'reply' => 'Reply', + 'send' => 'Send', + 'all' => 'All', + 'notes' => 'Notes', + 'select-type' => 'Select Type', + 'calls' => 'Calls', + 'meetings' => 'Meetings', + 'lunches' => 'Lunches', + 'emails' => 'Emails', + 'files' => 'Files', + 'sales-owner' => 'Sales Owner', + 'person' => 'Person', + 'subject' => 'Subject', + 'expired-at' => 'Expired At', + 'sub-total' => 'Sub Total', + 'discount' => 'Discount', + 'tax' => 'Tax', + 'adjustment' => 'Adjustment', + 'grand-total' => 'Grand Total', + 'actions' => 'Actions', + 'planned' => 'Planned', + 'done' => 'Done', + 'edit' => 'Edit', + 'view' => 'View', + 'unlink' => 'Unlink', + 'mark-as-done' => 'Mark as Done', + 'remove' => 'Remove', + 'export-to-pdf' => 'Export To PDF', + 'empty-planned-activities' => 'You have no planned activities.', + 'empty-done-activities' => 'You have no done activities.', + 'note-added' => 'Note added', + 'call-scheduled' => 'Call scheduled at :from - :to', + 'meeting-scheduled' => 'Meeting scheduled at :from - :to', + 'lunch-scheduled' => 'Lunch scheduled at :from - :to', + 'file-added' => 'File added', + 'quote-destroy-success' => 'Quote removed successfully.', + 'tag-create-success' => 'Tag added successfully.', + 'tag-destroy-success' => 'Tag removed successfully.', + 'edit' => 'Edit', + ], + + 'quotes' => [ + 'title' => 'Quotes', + 'quote' => 'Quote', + 'create-title' => 'Create Quote', + 'edit-title' => 'Edit Quote', + 'save-btn-title' => 'Save as Quote', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'quote-information' => 'Quote Information', + 'lead' => 'Lead', + 'address-information' => 'Address Information', + 'quote-items' => 'Quote Items', + 'name' => 'Name', + 'quantity' => 'Quantity', + 'price' => 'Price', + 'amount' => 'Amount', + 'discount' => 'Discount', + 'tax' => 'Tax', + 'total' => 'Total', + 'sub-total' => 'Sub Total', + 'discount' => 'Discount', + 'tax' => 'Tax', + 'adjustment' => 'Adjustment', + 'grand-total' => 'Grand Total', + 'create-success' => 'Quote created successfully.', + 'update-success' => 'Quote updated successfully.', + 'delete-success' => 'Quote deleted successfully.', + 'delete-failed' => 'Quote can not be deleted.', + 'quote-id' => 'Quote Id', + 'quote-date' => 'Quote Date', + 'valid-until' => 'Valid Until', + 'sales-person' => 'Sales Person', + 'bill-to' => 'Bill To', + 'ship-to' => 'Ship To', + 'sku' => 'Sku', + 'product-name' => 'Product Name', + 'price' => 'Price', + 'amount' => 'Amount', + 'quantity' => 'Quantity', + 'sub-total' => 'Sub Total', + 'tax' => 'Tax', + 'adjustment' => 'Adjustment', + 'grand-total' => 'Grand Total', + 'search' => 'Search..' + ], + + 'mail' => [ + 'title' => 'Mail - :type', + 'compose' => 'Compose', + 'inbox' => 'Inbox', + 'draft' => 'Draft', + 'outbox' => 'Outbox', + 'sent' => 'Sent', + 'trash' => 'Trash', + 'setting' => 'Setting', + 'total' => 'Total', + 'link-mail' => 'Link Mail', + 'link-contact' => 'Link Contact', + 'linked-contact' => 'Linked Contact', + 'add-to-existing-contact' => 'Add To Existing Contact', + 'create-new-contact' => 'Create New Contact', + 'search-contact' => 'Search a contact', + 'link-lead' => 'Link Lead', + 'linked-lead' => 'Linked Lead', + 'search-lead' => 'Search for lead', + 'link-to-existing-lead' => 'Link To Existing', + 'add-new-lead' => 'Add New Lead', + 'send' => 'Send', + 'back' => 'Back', + 'discard' => 'Discard', + 'from-' => 'From - ', + 'to-' => 'To - ', + 'cc-' => 'Cc - ', + 'bcc-' => 'Bcc - ', + 'reply' => 'Reply', + 'reply-all' => 'Reply All', + 'forward' => 'Forward', + 'delete' => 'Delete', + 'destroy-success' => 'Selected emails deleted successfully.', + 'save-to-draft' => 'Save to Draft', + 'create-success' => 'Email sent successfully.', + 'update-success' => 'Email updated successfully.', + 'saved-to-draft' => 'Email saved to draft.', + 'delete-success' => 'Email deleted successfully.', + 'delete-failed' => 'Email can not be deleted.', + 'mass-update-success' => 'Emails updated successfully.', + + 'forget-password' => [ + 'subject' => 'Customer Reset Password', + 'dear' => 'Dear :name', + 'reset-password' => 'Reset Password', + 'info' => 'You are receiving this email because we received a password reset request for your account', + 'final-summary' => 'If you did not request a password reset, no further action is required', + 'thanks' => 'Thanks!' + ], + + 'user' => [ + 'create-subject' => 'You are added as a member.', + 'create-body' => 'Congratulations! You are now a member of our team.', + ], + ], + + 'activities' => [ + 'title' => 'Activities', + 'title-control' => 'Title', + 'edit-title' => 'Edit Activity', + 'save-btn-title' => 'Save as Activity', + 'back' => 'Back', + 'type' => 'Type', + 'note' => 'Note', + 'call' => 'Call', + 'meeting' => 'Meeting', + 'lunch' => 'Lunch', + 'file' => 'File', + 'description' => 'Description', + 'schedule' => 'Schedule', + 'from' => 'From', + 'to' => 'To', + 'location' => 'Location', + 'participants' => 'Participants', + 'lead' => 'Lead', + 'duration-overlapping' => 'Participants have another meeting at this time. Do you want to continue?', + 'file-upload-success' => 'File(s) uploaded successfully.', + 'file-upload-error' => 'File(s) can not be uploaded.', + 'create-success' => ':type created successfully.', + 'update-success' => ':type updated successfully.', + 'mass-update-success' => 'Activities updated successfully.', + 'mass-update-failed' => 'Activities can not be updated.', + 'destroy-success' => ':type deleted successfully.', + 'delete-failed' => ':type can not be deleted.', + 'typing-placeholder' => 'Start typing name', + ], + + 'products' => [ + 'title' => 'Products', + 'product' => 'Product', + 'create-title' => 'Create Product', + 'edit-title' => 'Edit Product', + 'save-btn-title' => 'Save as Product', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'create-success' => 'Product created successfully.', + 'update-success' => 'Product updated successfully.', + 'delete-success' => 'Product deleted successfully.', + 'delete-failed' => 'Product can not be deleted.', + ], + + 'sessions' => [ + 'login' => [ + 'title' => 'Login', + 'welcome' => 'Welcome Back', + 'email' => 'Email', + 'password' => 'Password', + 'login' => 'Login', + 'forgot-password' => 'Forgot Password?', + 'login-error' => 'Please check your credentials and try again.', + 'activate-warning' => 'Your account is yet to be activated, please contact administrator.', + ], + + 'forgot-password' => [ + 'title' => 'Forgot Password ?', + 'email' => 'Email', + 'send-reset-password-email' => 'Send Reset Password Email', + 'reset-link-sent' => 'We have e-mailed your reset password link.', + 'email-not-exist' => "We can not find a user with this e-mail address.", + 'back-to-login' => 'Back to login' + ], + + 'reset-password' => [ + 'title' => 'Reset Password', + 'email' => 'Email', + 'password' => 'Password', + 'confirm-password' => 'Confirm Password', + 'reset-password' => 'Reset Password' + ] + ], + + 'settings' => [ + 'title' => 'Settings', + + 'groups' => [ + 'title' => 'Groups', + 'group' => 'Group', + 'edit-title' => 'Edit Group', + 'description' => 'Description', + 'create-title' => 'Create Group', + 'save-btn-title' => 'Save as Group', + 'update-btn-title' => 'Update Group', + 'create-success' => 'Group created successfully.', + 'update-success' => 'Group updated successfully.', + 'destroy-success' => 'Group deleted successfully.', + 'delete-failed' => 'Group can not be deleted.', + 'user-define-error' => 'Can not delete system group.', + ], + + 'roles' => [ + 'title' => 'Roles', + 'role' => 'Role', + 'edit-title' => 'Edit Role', + 'description' => 'Description', + 'create-title' => 'Create Role', + 'permission_type' => 'Permission type', + 'custom' => 'Custom', + 'all' => 'All', + 'save-btn-title' => 'Save as Role', + 'update-btn-title' => 'Update Role', + 'create-success' => 'Role created successfully.', + 'update-success' => 'Role updated successfully.', + 'delete-success' => 'Role deleted successfully.', + 'delete-failed' => 'Role can not be deleted.', + 'user-define-error' => 'Can not delete system role.', + 'last-delete-error' => 'At least one role is required.', + 'current-role-delete-error' => 'Can not delete role assigned to the current user.', + 'being-used' => 'Role can not be deleted, as this is being used in admin user.', + ], + + 'users' => [ + 'title' => 'Users', + 'create-title' => 'Create User', + 'edit-title' => 'Edit User', + 'general' => 'General', + 'permission' => 'Permission', + 'name' => 'Name', + 'email' => 'Email', + 'back' => 'Back', + 'password' => 'Password', + 'groups' => 'Groups', + 'role' => 'Role', + 'view-permission' => 'View Permission', + 'global' => 'Global', + 'group' => 'Group', + 'individual' => 'Individual', + 'status' => 'Status', + 'save-btn-title' => 'Save as User', + 'confirm_password' => 'Confirm password', + 'create-success' => 'User created successfully.', + 'update-success' => 'User updated successfully.', + 'delete-success' => 'User deleted successfully.', + 'delete-failed' => 'User can not be deleted.', + 'user-define-error' => 'Can not delete system user.', + 'last-delete-error' => 'At least one user is required.', + 'user-define-error' => 'Can not delete system user.', + 'mass-update-success' => 'Users updated successfully.', + 'mass-update-failed' => 'Users can not be updated.', + 'mass-delete-success' => 'Users deleted successfully.', + 'mass-delete-failed' => 'Users can not be deleted.', + ], + + 'attributes' => [ + 'title' => 'Attributes', + 'attribute' => 'Attribute', + 'create-title' => 'Create Attribute', + 'edit-title' => 'Edit Attribute', + 'save-btn-title' => 'Save as Attribute', + 'back' => 'Back', + 'code' => 'Code', + 'name' => 'Name', + 'type' => 'Type', + 'text' => 'Text', + 'textarea' => 'Textarea', + 'price' => 'Price', + 'boolean' => 'Boolean', + 'select' => 'Select', + 'multiselect' => 'Multiselect', + 'email' => 'Email', + 'address' => 'Address', + 'phone' => 'Phone', + 'datetime' => 'Datetime', + 'date' => 'Date', + 'image' => 'Image', + 'file' => 'File', + 'entity-type' => 'Entity Type', + 'lookup' => 'Lookup', + 'entity_type' => 'Entity type', + 'lookup-type' => 'Lookup Type', + 'checkbox' => 'Checkbox', + 'is_required' => 'Is Required', + 'is_unique' => 'Is Unique', + 'yes' => 'Yes', + 'no' => 'No', + 'input_validation' => 'Input Validation', + 'number' => 'Number', + 'decimal' => 'Decimal', + 'email' => 'Email', + 'url' => 'Url', + 'options-type' => 'Option Type', + 'options' => 'Options', + 'sort-order' => 'Sort Order', + 'add-option-btn-title' => 'Add Option', + 'create-success' => 'Attribute created successfully.', + 'update-success' => 'Attribute updated successfully.', + 'update-error' => 'Unable to update attribute.', + 'delete-success' => 'Attribute deleted successfully.', + 'delete-failed' => 'Attribute can not be deleted.', + 'user-define-error' => 'Can not delete system attribute.', + 'mass-delete-failed' => 'Attributes can not be deleted.', + ], + + 'pipelines' => [ + 'title' => 'Pipelines', + 'organization' => 'Pipeline', + 'create-title' => 'Create Pipeline', + 'edit-title' => 'Edit Pipeline', + 'save-btn-title' => 'Save as Pipeline', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'name' => 'Name', + 'rotting-days' => 'Rotting Days', + 'is-default' => 'Mark as Default', + 'probability' => 'Probability (%)', + 'add-stage-btn-title' => 'Add Stage', + 'new-stage' => 'New', + 'won-stage' => 'Won', + 'lost-stage' => 'Lost', + 'duplicate-name' => 'The "Name" field cannot be duplicate', + 'create-success' => 'Pipeline created successfully.', + 'update-success' => 'Pipeline updated successfully.', + 'delete-success' => 'Pipeline deleted successfully.', + 'delete-failed' => 'Pipeline can not be deleted.', + 'default-delete-error' => 'Default pipeline can not be deleted.', + ], + + 'sources' => [ + 'title' => 'Sources', + 'organization' => 'Source', + 'create-title' => 'Create Source', + 'edit-title' => 'Edit Source', + 'save-btn-title' => 'Save as Source', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'create-success' => 'Source created successfully.', + 'name-exists' => 'Source name already exists.', + 'update-success' => 'Source updated successfully.', + 'delete-success' => 'Source deleted successfully.', + 'delete-failed' => 'Source can not be deleted.', + ], + + 'types' => [ + 'title' => 'Types', + 'organization' => 'Type', + 'create-title' => 'Create Type', + 'edit-title' => 'Edit Type', + 'save-btn-title' => 'Save as Type', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'create-success' => 'Type created successfully.', + 'name-exists' => 'Type name already exists.', + 'update-success' => 'Type updated successfully.', + 'delete-success' => 'Type deleted successfully.', + 'delete-failed' => 'Type can not be deleted.', + ], + + 'email-templates' => [ + 'title' => 'Email Templates', + 'create-title' => 'Create Email Template', + 'edit-title' => 'Edit Email Template', + 'save-btn-title' => 'Save as Email Template', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'name' => 'Name', + 'subject' => 'Subject', + 'content' => 'Content', + 'placeholders' => 'Placeholders', + 'create-success' => 'Email Template created successfully.', + 'update-success' => 'Email Template updated successfully.', + 'delete-success' => 'Email Template deleted successfully.', + 'delete-failed' => 'Email Template can not be deleted.', + ], + + 'workflows' => [ + 'title' => 'Workflows', + 'create-title' => 'Create Workflow', + 'edit-title' => 'Edit Workflow', + 'save-btn-title' => 'Save as Workflow', + 'back' => 'Back', + 'cancel' => 'Cancel', + 'information' => 'Information', + 'name' => 'Name', + 'description' => 'Description', + 'event' => 'Event', + 'events' => 'Events', + 'created' => 'Created', + 'updated' => 'Updated', + 'deleted' => 'Deleted', + 'event-info' => 'An event automatically triggers to check conditions and perform a respective pre-defined set of actions', + 'conditions' => 'Conditions', + 'condition-info' => 'Conditions are set of rules which checks for specific scenarios and are triggered on specific occasions', + 'condition-type' => 'Condition Type', + 'all-conditions-true' => 'All Conditions are True', + 'any-condition-true' => 'Any Condition is True', + 'add-condition' => 'Add Condition', + 'choose-condition-to-add' => 'Choose a condition to add', + 'is-equal-to' => 'Is equal to', + 'is-not-equal-to' => 'Is not equal to', + 'equals-or-greater-than' => 'Equals or greater than', + 'equals-or-less-than' => 'Equals or less than', + 'greater-than' => 'Greater than', + 'less-than' => 'Less than', + 'contain' => 'Contain', + 'contains' => 'Contains', + 'does-not-contain' => 'Does not contain', + 'actions' => 'Actions', + 'action-info' => 'An action not only reduces the workload but also makes it quite easier for CRM automation', + 'choose-action-to-add' => 'Choose action to add', + 'update-lead' => 'Update lead', + 'update-person' => 'Update person', + 'send-email-to-person' => 'Send email to person', + 'send-email-to-sales-owner' => 'Send email to sales owner', + 'send-email-to-participants' => 'Send email to participants', + 'add-tag' => 'Add tag', + 'add-note-as-activity' => 'Add note as activity', + 'choose-attribute' => 'Choose attribute', + 'choose-option' => 'Choose option', + 'update-person' => 'Update person', + 'update-related-leads' => 'Update related leads', + 'update-quote' => 'Update quote', + 'add-action' => 'Add Action', + 'create-success' => 'Workflow created successfully.', + 'update-success' => 'Workflow updated successfully.', + 'delete-success' => 'Workflow deleted successfully.', + 'delete-failed' => 'Workflow can not be deleted.', + ], + + 'tags' => [ + 'title' => 'Tags', + 'create-title' => 'Create Tag', + 'edit-title' => 'Edit Tag', + 'cancel' => 'Cancel', + 'save-btn-title' => 'Save as Tag', + 'name' => 'Name', + 'color' => 'Color', + 'create-success' => 'Tag created successfully.', + 'update-success' => 'Tag updated successfully.', + 'delete-success' => 'Tag deleted successfully.', + 'delete-failed' => 'Tag can not be deleted.', + ], + + 'web-forms' => [ + + 'create-success' => 'Web form created successfully', + 'update-success' => 'Web form Updated successfully', + 'delete-success' => 'Web form deleted successfully' + ], + ], + + 'configuration' => [ + 'title' => 'Configuration', + 'save-btn-title' => 'Save', + 'general' => 'General', + 'locale-settings' => 'Locale Settings', + 'locale' => 'Locale', + 'timezone' => 'Timezone', + 'date-time-formats' => 'Date And Time Formats', + 'save-message' => 'Configuration updated successfully!', + "emails" => [ + 'email' => 'Email', + 'notification_label' => 'Notifications', + 'new_lead' => 'New lead', + ] + ], + + 'datagrid' => [ + 'id' => 'ID', + 'name' => 'Name', + 'code' => 'Code', + 'sku' => 'SKU', + 'type' => 'Type', + 'price' => 'Price', + 'email' => 'Email', + 'attachments' => 'Attachments', + 'from' => 'From', + 'lead' => 'Lead', + 'title' => 'Title', + 'subject' => 'Subject', + 'tags' => 'Tags', + 'emails' => 'Emails', + 'stage' => 'Stage', + 'status' => 'Status', + 'active' => 'Active', + 'inactive' => 'Inactive', + 'address' => 'Address', + 'quantity' => 'Quantity', + 'lead_value' => 'Lead Value', + 'comment' => 'Comment', + 'is_done' => 'Is Done', + 'type' => 'Type', + 'all' => 'All', + 'user' => 'User', + 'sales-person' => 'Sales Person', + 'expired_quotes' => 'Expired Quotes', + 'person' => 'Person', + 'sub-total' => 'Sub Total', + 'discount' => 'Discount', + 'tax' => 'Tax', + 'adjustment' => 'Adjustment', + 'grand-total' => 'Grand Total', + 'persons_count' => 'Persons count', + 'assigned_to' => 'Assigned To', + 'created_by' => 'Created By', + 'entity_type' => 'Entity Type', + 'created_at' => 'Created Date', + 'expected_close_date' => 'Expected Close Date', + 'schedule_from' => 'Schedule From', + 'schedule_to' => 'Schedule To', + 'description' => 'Description', + 'update_stage' => 'Update Stage', + 'contact_person' => 'Contact Person', + 'contact_numbers' => 'Contact Numbers', + 'permission_type' => 'Permission Type', + 'organization_name' => 'Organization Name', + 'is-default' => 'Is Default', + 'rotten-days' => 'Rotten Days', + 'rotten_lead' => 'Rotten Lead', + 'yes' => 'Yes', + 'no' => 'No', + 'move-to-inbox' => 'Move to Inbox', + 'update-success' => ':resource updated successfully.', + 'destroy-success' => ':resource deleted successfully.', + 'destroy-failed' => ':resource can not be deleted.', + 'attribute_type' => 'Attribute Type', + 'filters' => [ + 'yesterday' => 'Yesterday', + 'today' => 'Today', + 'tomorrow' => 'Tomorrow', + 'this-week' => 'This Week', + 'this-month' => 'This Month', + 'custom' => 'Custom', + ] + ], + + 'response' => [ + 'create-success' => ':name created successfully.', + 'update-success' => ':name updated successfully.', + 'destroy-success' => ':name deleted successfully.', + 'destroy-failed' => ':name can not be deleted.', + ], + + 'acl' => [ + 'leads' => 'Leads', + 'lead' => 'Lead', + 'quotes' => 'Quotes', + 'mail' => 'Mail', + 'inbox' => 'Inbox', + 'draft' => 'Draft', + 'outbox' => 'Outbox', + 'sent' => 'Sent', + 'trash' => 'Trash', + 'activities' => 'Activities', + 'contacts' => 'Contacts', + 'persons' => 'Persons', + 'organizations' => 'Organizations', + 'products' => 'Products', + 'settings' => 'Settings', + 'groups' => 'Groups', + 'roles' => 'Roles', + 'users' => 'Users', + 'user' => 'User', + 'automation' => 'Automation', + 'attributes' => 'Attributes', + 'pipelines' => 'Pipelines', + 'sources' => 'Sources', + 'types' => 'Types', + 'email-templates' => 'Email Templates', + 'workflows' => 'Workflows', + 'other-settings' => 'Other Settings', + 'tags' => 'Tags', + 'configuration' => 'Configuration', + 'create' => 'Create', + 'edit' => 'Edit', + 'view' => 'View', + 'print' => 'Print', + 'delete' => 'Delete', + 'export' => 'Export', + 'mass-delete' => 'Mass Delete', + ], + + 'common' => [ + 'back' => 'Back', + 'address' => 'Address', + 'country' => 'Country', + 'add_more' => 'Add More', + 'select-country' => 'Please select country', + 'select-users' => 'Select Users', + 'select_rotten_leads' => 'Select Rotten Leads', + 'select-organization' => 'Select Organizations', + 'state' => 'State', + 'select-state' => 'Please select state', + 'city' => 'City', + 'postcode' => 'Postcode', + 'address-validation' => 'The "Address" field is required', + 'work' => 'Work', + 'home' => 'Home', + 'no-result-found' => 'Records not found with same name.', + 'add-as' => 'Add as new', + 'not-available' => 'Not Available', + 'select-options' => 'Select Options', + 'yes' => 'Yes', + 'no' => 'No', + 'delete' => 'Delete', + 'save' => 'Save', + 'locale' => 'Locale', + 'en' => 'English', + 'tr' => 'Türkçe', + 'ar' => 'Arabic', + 'add-as' => 'Add as new', + 'no-records-found' => 'No Records Found', + 'start-typing' => 'Start typing to search records', + 'select-type' => 'Select Type', + 'select-call' => 'Call', + 'select-meeting' => 'Meeting', + 'select-lunch' => 'Lunch', + 'duplicate-value' => 'The value cannot be duplicate', + 'unauthenticated' => 'Unauthenticated', + 'resource-not-found' => 'Resource not found', + 'forbidden-error' => '403 forbidden Error', + 'internal-server-error' => '500 Internal Server Error', + 'something-went-wrong' => 'Something went wrong, please try again later.', + 'delete-confirm' => 'Do you really want to perform this action?', + 'system_attribute' => 'System', + 'custom_attribute' => 'Custom', + ], + + 'user' => [ + 'account' => [ + 'name' => 'Name', + 'email' => 'Email', + 'password' => 'Password', + 'my_account' => 'My account', + 'update_details' => 'Update Details', + 'current_password' => 'Current password', + 'confirm_password' => 'Confirm password', + 'password-match' => 'Current password does not match.', + 'account-save' => 'Account changes saved successfully.', + 'permission-denied' => 'Permission Denied', + 'remove-image' => 'Remove Image', + 'upload_image_pix' => 'Upload a Profile Image (100px x 100px)', + 'upload_image_format' => 'in PNG or JPG Format', + 'image_upload_message' => 'Only images (.jpeg, .jpg, .png, ..) are allowed.' + ] + ], + + 'emails' => [ + 'common' => [ + 'dear' => 'Dear :name', + 'cheers' => 'Cheers,
    Team :app_name' + ], + ], + + 'errors' => [ + '401' => 'You are not authorized to access this page' + ] +]; +?> diff --git a/packages/Webkul/Admin/src/Resources/lang/tr/app.php b/packages/Webkul/Admin/src/Resources/lang/tr/app.php new file mode 100644 index 0000000..e8c2f4d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/lang/tr/app.php @@ -0,0 +1,869 @@ + [ + 'title' => 'Panel', + 'cards' => 'Kartlar', + 'column' => 'Kolon', + 'done' => 'Tamamla', + 'activity' => 'Etkinlik', + 'activities' => 'Etkinlikler', + 'top_leads' => 'En İyi Talepler', + 'pipelines' => 'İşlem Hatları', + 'quotes' => 'Teklifler', + 'emails' => 'E-postalar', + 'custom_card' => 'Özel Kart', + 'customers' => 'Müşteriler', + 'top_customers' => 'En İyi Müşteriler', + 'leads_started' => 'Olası satışlar başladı', + 'products' => 'Ürünler', + 'top_products' => 'En İyi Ürünler', + 'leads_started' => 'Olası satışlar başladı', + 'leads_over_time' => 'Zamanla yol açar', + 'no_record_found' => 'Kayıt Bulunamadı', + 'week' => 'Hafta', + ], + + 'layouts' => [ + 'app-version' => 'Sürüm : :version', + 'dashboard' => 'Panel', + 'leads' => 'Adaylar', + 'quotes' => 'Teklifler', + 'quote' => 'Teklif', + 'mail' => [ + 'title' => 'Posta', + 'compose' => 'Oluştur', + 'inbox' => 'Gelen Kutusu', + 'draft' => 'Taslak', + 'outbox' => 'Giden Kutusu', + 'sent' => 'Gönderilmiş', + 'trash' => 'Çöp', + 'setting' => 'Ayar', + ], + 'activities' => 'Faaliyetler', + 'contacts' => 'Kişiler', + 'persons' => 'Kişiler', + 'person' => 'Kişi', + 'organizations' => 'Organizasyonlar', + 'organization' => 'Organizasyon', + 'products' => 'Ürünler', + 'product' => 'Ürün', + 'settings' => 'Ayarlar', + 'user' => 'Kullanıcı', + 'user-info' => 'CRM\'deki tüm kullanıcılarınızı ve izinlerini, ne yapmalarına izin verildiğini yönetin.', + 'groups' => 'Gruplar', + 'groups-info' => 'CRM\'den grup ekleyin, düzenleyin veya silin', + 'roles' => 'Roller', + 'role' => 'Rol', + 'roles-info' => 'CRM\'den roller ekleyin, düzenleyin veya silin', + 'users' => 'Kullanıcılar', + 'users-info' => 'CRM\'den kullanıcı ekleyin, düzenleyin veya silin', + 'lead' => 'Lider', + 'lead-info' => 'Müşteri adayıyla ilgili tüm ayarlarınızı CRM\'de yönetin', + 'pipelines' => 'İşlem Hatları', + 'pipelines-info' => 'CRM\'den işlem hatları ekleyin, düzenleyin veya silin', + 'sources' => 'Kaynaklar', + 'sources-info' => 'CRM\'den kaynak ekleyin, düzenleyin veya silin', + 'types' => 'Türler', + 'types-info' => 'CRM\'den türleri ekleyin, düzenleyin veya silin', + 'automation' => 'Otomasyon', + 'automation-info' => 'Otomasyonla ilgili tüm ayarlarınızı CRM\'de yönetin', + 'attributes' => 'Özellikler', + 'attribute' => 'Özellik', + 'attributes-info' => 'CRM\'den nitelikler ekleyin, düzenleyin veya silin', + 'email-templates' => 'E-posta Şablonları', + 'email' => 'E-posta', + 'email-templates-info' => 'CRM\'den e-posta şablonları ekleyin, düzenleyin veya silin', + 'workflows' => 'İş Akışları', + 'workflows-info' => 'CRM\'den iş akışları ekleyin, düzenleyin veya silin', + 'other-settings' => 'Diğer Ayarlar', + 'other-settings-info' => 'Tüm ekstra ayarlarınızı CRM\'de yönetin', + 'tags' => 'Etiketler', + 'tags-info' => 'CRM\'den etiket ekleyin, düzenleyin veya silin', + 'my-account' => 'Hesabım', + 'sign-out' => 'Oturumu Kapat', + 'back' => 'Geri', + 'name' => 'İsim', + 'configuration' => 'Yapılandırma', + 'activities' => 'Etkinlikler', + 'howdy' => 'Merhaba!', + ], + + 'contacts' => [ + 'organizations' => [ + 'title' => 'Organizasyonlar', + 'organization' => 'Organizasyon', + 'create-title' => 'Organizasyon Oluştur', + 'edit-title' => 'Organizasyonu Düzenle', + 'save-btn-title' => 'Kuruluş Olarak Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'create-success' => 'Kuruluş başarıyla oluşturuldu.', + 'update-success' => 'Kuruluş başarıyla güncellendi.', + 'delete-success' => 'Kuruluş başarıyla silindi.', + 'delete-failed' => 'Kuruluş silinemez.', + ], + + 'persons' => [ + 'title' => 'Kişiler', + 'person' => 'Kişi', + 'create-title' => 'Kişi Oluştur', + 'edit-title' => 'Kişiyi Düzenle', + 'save-btn-title' => 'Kişi olarak kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'create-success' => 'Kişi başarıyla oluşturuldu.', + 'update-success' => 'Kişi başarıyla güncellendi.', + 'delete-success' => 'Kişi başarıyla silindi.', + 'delete-failed' => 'Kişi silinemez.', + ], + ], + + 'leads' => [ + 'title' => 'Adaylar', + 'lead' => 'Lider', + 'create-title' => 'Müşteri Adayı Oluştur', + 'edit-title' => 'Müşteri Adayını Düzenle', + 'save-btn-title' => 'Müşteri adayı olarak kaydet', + 'save' => 'Kaydet', + 'upload' => 'Yükle', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'no-lead' => 'Aday Yok', + 'details' => 'Detaylar', + 'rotten-info' => 'Müşteri adayı :days gün(ler)', + 'stage' => 'Sahne', + 'new' => 'Yeni', + 'won-lost' => 'Kazanan/Kaybeden', + 'won' => 'Kazanan', + 'lost' => 'Kaybetme', + 'change-stage' => 'Aşamayı Değiştir', + 'lost-reason' => 'Kayıp Sebep', + 'won-value' => 'Kazanılan Değer', + 'created-date:' => 'Oluşturma Tarihi:', + 'closed-date:' => 'Kapanış Tarihi:', + 'closed-date' => 'Kapanış Tarihi', + 'expected-close-date:' => 'Beklenen Kapanış Tarihi:', + 'contact-person' => 'İlgili Kişi', + 'add-tag' => 'Etiket Ekle', + 'search-tag' => 'Etiketi Ara', + 'name' => 'İsim', + 'color' => 'Renk', + 'email' => 'E-posta', + 'contact-numbers' => 'İletişim Numaraları', + 'organization' => 'Organizasyon', + 'address' => 'Adres', + 'products' => 'Ürünler', + 'item' => 'Kalem', + 'price' => 'Fiyat', + 'quantity' => 'Miktar', + 'amount' => 'Tutar', + 'create-success' => 'Müşteri adayı başarıyla oluşturuldu.', + 'update-success' => 'Müşteri adayı başarıyla güncellendi.', + 'delete-success' => 'Müşteri adayı başarıyla silindi.', + 'delete-failed' => 'Müşteri adayı silinemez.', + 'note' => 'Not', + 'activity' => 'Etkinlik', + 'title-control' => 'Başlık', + 'call' => 'Arama Yap', + 'meeting' => 'Toplantı', + 'lunch' => 'Öğle Yemeği', + 'file' => 'Dosya', + 'quote' => 'Teklif', + 'create-quote' => 'Teklif Oluştur', + 'type' => 'Tip', + 'description' => 'Açıklama', + 'schedule' => 'Takvim', + 'from' => 'İtibaren', + 'to' => 'İle', + 'location' => 'Lokasyon', + 'participants' => 'Katılımcılar', + 'participant-info' => 'Adı yazmaya başla', + 'users' => 'Kullanıcılar', + 'persons' => 'Kişiler', + 'cc' => 'Bilgi', + 'bcc' => 'Gizli', + 'email-placeholder' => 'E-posta eklemek için enter\'a basın', + 'file' => 'Dosya', + 'subject' => 'Konu', + 'reply' => 'Cevapla', + 'send' => 'Gönder', + 'all' => 'Tümü', + 'notes' => 'Notlar', + 'select-type' => 'Tür Seç', + 'calls' => 'Aramalar', + 'meetings' => 'Toplantılar', + 'lunches' => 'Öğle Yemekleri', + 'emails' => 'E-postalar', + 'files' => 'Dosyalar', + 'sales-owner' => 'Satış Sahibi', + 'person' => 'Kişi', + 'subject' => 'Konu', + 'expired-at' => 'Süresi Doldu', + 'sub-total' => 'Ara Toplam', + 'discount' => 'İndirim', + 'tax' => 'Vergi', + 'adjustment' => 'Ayarlama', + 'grand-total' => 'Genel Toplam', + 'actions' => 'Hareketler', + 'planned' => 'Planlı', + 'done' => 'Tamamla', + 'edit' => 'Düzenle', + 'view' => 'Görüntüle', + 'unlink' => 'Bağlantıyı Kaldır', + 'mark-as-done' => 'Tamamlandı olarak işaretle', + 'remove' => 'Kaldır', + 'export-to-pdf' => 'PDF\'ye Aktar', + 'empty-planned-activities' => 'Planlanmış bir etkinliğiniz yok.', + 'empty-done-activities' => 'Yaptığınız hiçbir Etkinlik yok.', + 'note-added' => 'Not eklendi', + 'call-scheduled' => 'Çağrı şu saatte planlandı :from - :to', + 'meeting-scheduled' => 'Toplantı :from - :to da planlandı', + 'lunch-scheduled' => 'Öğle yemeği :from - :to saatinde planlanmıştır', + 'file-added' => 'Dosya eklendi', + 'quote-destroy-success' => 'Alıntı başarıyla kaldırıldı.', + 'tag-create-success' => 'Etiket başarıyla eklendi.', + 'tag-destroy-success' => 'Etiket başarıyla kaldırıldı.', + ], + + 'quotes' => [ + 'title' => 'Teklifler', + 'quote' => 'Teklif', + 'create-title' => 'Teklif Oluştur', + 'edit-title' => 'Teklifi Düzenle', + 'save-btn-title' => 'Teklifi Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'quote-information' => 'Teklif Bilgileri', + 'lead' => 'Lider', + 'address-information' => 'Adres Bilgisi', + 'quote-items' => 'Teklif Öğeleri', + 'name' => 'İsim', + 'quantity' => 'Miktar', + 'price' => 'Fiyat', + 'amount' => 'Tutar', + 'discount' => 'İndirim', + 'tax' => 'Vergi', + 'total' => 'Toplam', + 'sub-total' => 'Ara Toplam', + 'discount' => 'İndirim', + 'tax' => 'Vergi', + 'adjustment' => 'Ayarlama', + 'grand-total' => 'Genel Toplam', + 'create-success' => 'Teklif başarıyla oluşturuldu.', + 'update-success' => 'Teklif başarıyla güncellendi.', + 'delete-success' => 'Teklif başarıyla silindi.', + 'delete-failed' => 'Teklif silinemez.', + 'quote-id' => 'Teklif Id', + 'quote-date' => 'Teklif Tarihi', + 'valid-until' => 'Geçerlilik Tarihi', + 'sales-person' => 'Satış Elemanı', + 'bill-to' => 'Fatura Edilen', + 'ship-to' => 'Alıcı', + 'sku' => 'Barkod', + 'product-name' => 'Ürün Adı', + 'price' => 'Fiyat', + 'amount' => 'Tutar', + 'quantity' => 'Miktar', + 'sub-total' => 'Ara Toplam', + 'tax' => 'Vergi', + 'adjustment' => 'Ayarlama', + 'grand-total' => 'Genel Toplam', + 'search' => 'Arama..' + ], + + 'mail' => [ + 'title' => 'Posta - :type', + 'compose' => 'Oluştur', + 'inbox' => 'Gelen Kutusu', + 'draft' => 'Taslak', + 'outbox' => 'Giden Kutusu', + 'sent' => 'Gönder', + 'trash' => 'Çöp', + 'setting' => 'Ayar', + 'total' => 'Toplam', + 'link-mail' => 'Posta Bağlantısı', + 'link-contact' => 'İletişim Bağlantısı', + 'linked-contact' => 'Bağlantılı Kişi', + 'add-to-existing-contact' => 'Mevcut kişiye ekle', + 'create-new-contact' => 'Yeni kişi yarat', + 'search-contact' => 'Kişi Ara', + 'link-lead' => 'Bağlantı Lideri', + 'linked-lead' => 'Bağlantılı Lider', + 'search-lead' => 'Lider Ara', + 'link-to-existing-lead' => 'Mevcut Bağlantı', + 'add-new-lead' => 'Yeni Müşteri Adayı Ekle', + 'send' => 'Gönder', + 'back' => 'Geri', + 'discard' => 'atmak', + 'from-' => 'İtibaren - ', + 'to-' => 'İle - ', + 'cc-' => 'Bilgi - ', + 'bcc-' => 'Gizli - ', + 'reply' => 'Cevapla', + 'reply-all' => 'Tümünü Cevapla', + 'forward' => 'İleri', + 'delete' => 'Sil', + 'destroy-success' => 'Seçilen e-postalar başarıyla silindi.', + 'save-to-draft' => 'Taslağa Kaydet', + 'create-success' => 'E-posta başarıyla gönderildi.', + 'update-success' => 'E-posta başarıyla güncellendi.', + 'saved-to-draft' => 'E-posta taslağa kaydedildi.', + 'delete-success' => 'E-posta başarıyla silindi.', + 'delete-failed' => 'E-posta silinemez.', + 'mass-update-success' => 'E-postalar başarıyla güncellendi.', + + 'forget-password' => [ + 'subject' => 'Müşteri Parolası Sıfırlama', + 'dear' => 'Sayın :name', + 'reset-password' => 'Şifreyi Sıfırla', + 'info' => 'Bu e-postayı, hesabınız için bir şifre sıfırlama isteği aldığımız için alıyorsunuz.', + 'final-summary' => 'Parola sıfırlama talebinde bulunmadıysanız, başka bir işlem yapmanız gerekmez', + 'thanks' => 'Teşekkürler!' + ], + + 'user' => [ + 'create-subject' => 'Üye olarak eklendiniz.', + 'create-body' => 'Tebrikler! Artık ekibimizin bir üyesisiniz.', + ], + ], + + 'activities' => [ + 'title' => 'Etkinlikler', + 'title-control' => 'Başlık', + 'edit-title' => 'Etkinlik Düzenle', + 'save-btn-title' => 'Etkinlik olarak kaydet', + 'back' => 'Geri', + 'type' => 'Tip', + 'note' => 'Not', + 'call' => 'Arama Yap', + 'meeting' => 'Toplantı', + 'lunch' => 'Öğle Yemeği', + 'file' => 'Dosya', + 'description' => 'Açıklama', + 'schedule' => 'Takvim', + 'from' => 'İtibaren', + 'to' => 'İle', + 'location' => 'Lokasyon', + 'participants' => 'Katılımcılar', + 'lead' => 'Müşteri', + 'duration-overlapping' => 'Katılımcıların şu anda başka bir toplantısı var. Devam etmek istiyor musun?', + 'file-upload-success' => 'Dosya(lar) başarıyla yüklendi.', + 'file-upload-error' => 'Dosya(lar) yüklenemiyor.', + 'create-success' => ':type başarıyla oluşturuldu.', + 'update-success' => ':type başarıyla güncellendi.', + 'mass-update-success' => 'Etkinlikler başarıyla güncellendi.', + 'mass-update-failed' => 'Etkinlikler güncellenemez.', + 'destroy-success' => ':type başarıyla silindi.', + 'delete-failed' => ':type silinemez.', + 'typing-placeholder' => 'Adı yazmaya başla', + ], + + 'products' => [ + 'title' => 'Ürünler', + 'product' => 'Ürün', + 'create-title' => 'Ürün Oluştur', + 'edit-title' => 'Ürün Düzenle', + 'save-btn-title' => 'Ürünü Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'create-success' => 'Ürün başarıyla oluşturuldu.', + 'update-success' => 'Ürün başarıyla güncellendi', + 'delete-success' => 'Ürün başarıyla silindi', + 'delete-failed' => 'Ürün silinemez.', + ], + + 'sessions' => [ + 'login' => [ + 'title' => 'Giriş Yap', + 'welcome' => 'Tekrar Hoşgeldiniz', + 'email' => 'E-posta', + 'password' => 'Şifre', + 'login' => 'Giriş Yap', + 'forgot-password' => 'Parolanızı mı unuttunuz?', + 'login-error' => 'Lütfen kimlik bilgilerinizi kontrol edin ve tekrar deneyin.', + 'activate-warning' => 'Hesabınız henüz etkinleştirilmedi, lütfen yönetici ile iletişime geçin.', + ], + + 'forgot-password' => [ + 'title' => 'Parolanızı mı unuttunuz?', + 'email' => 'E-posta', + 'send-reset-password-email' => 'Şifre Sıfırlama E-postası Gönder', + 'reset-link-sent' => 'Şifre sıfırlama bağlantınızı e-posta ile gönderdik.', + 'email-not-exist' => "Bu e-posta adresine sahip bir kullanıcı bulamıyoruz.", + 'back-to-login' => 'Girişe geri dön' + ], + + 'reset-password' => [ + 'title' => 'Şifreyi Sıfırla', + 'email' => 'E-posta', + 'password' => 'Şifre', + 'confirm-password' => 'Şifreyi Onayla', + 'reset-password' => 'Şifreyi Sıfırla' + ] + ], + + 'settings' => [ + 'title' => 'Ayarlar', + + 'groups' => [ + 'title' => 'Gruplar', + 'group' => 'Grup', + 'edit-title' => 'Grup Düzenle', + 'description' => 'Açıklama', + 'create-title' => 'Grup Oluştur', + 'save-btn-title' => 'Grubu Kaydet', + 'update-btn-title' => 'Grubu Güncelle', + 'create-success' => 'Grup başarıyla oluşturuldu', + 'update-success' => 'Grup başarıyla güncellendi', + 'destroy-success' => 'Grup başarıyla silindi', + 'delete-failed' => 'Grup silinemez.', + 'user-define-error' => 'Sistem grubu silinemez.', + ], + + 'roles' => [ + 'title' => 'Roller', + 'role' => 'Rol', + 'edit-title' => 'Rolu Düzenle', + 'description' => 'Açıklama', + 'create-title' => 'Rol Oluştur', + 'permission_type' => 'İzin Türü', + 'custom' => 'Özel', + 'all' => 'Tümü', + 'save-btn-title' => 'Rolu Kaydet', + 'update-btn-title' => 'Rolu Güncelle', + 'create-success' => 'Rol başarıyla oluşturuldu.', + 'update-success' => 'Rol başarıyla güncellendi.', + 'delete-success' => 'Rol başarıyla silindi.', + 'delete-failed' => 'Rol silinemez.', + 'user-define-error' => 'Sistem rolü silinemez.', + 'last-delete-error' => 'En az bir rol gereklidir.', + 'current-role-delete-error' => 'Geçerli kullanıcıya atanan rol silinemez.', + 'being-used' => 'Yönetici kullanıcıda kullanıldığı için rol silinemez.', + ], + + 'users' => [ + 'title' => 'Kullanıcılar', + 'create-title' => 'Kullanıcı Oluştur', + 'edit-title' => 'Kullanıcı Düzenle', + 'general' => 'Genel', + 'permission' => 'İzin', + 'name' => 'İsim', + 'email' => 'E-posta', + 'back' => 'Geri', + 'password' => 'Şifre', + 'groups' => 'Gruplar', + 'role' => 'Rol', + 'view-permission' => 'İzni Görüntüle', + 'global' => 'Küresel', + 'group' => 'Grup', + 'individual' => 'Bireysel', + 'status' => 'Durum', + 'save-btn-title' => 'Kullanıcıyı Kaydet', + 'confirm_password' => 'Şifreyi Onayla', + 'create-success' => 'Kullanıcı başarıyla oluşturuldu.', + 'update-success' => 'Kullanıcı başarıyla güncellendi.', + 'delete-success' => 'Kullanıcı başarıyla silindi.', + 'delete-failed' => 'Kullanıcı silinemez.', + 'user-define-error' => 'Sistem kullanıcısı silinemez.', + 'last-delete-error' => 'En az bir kullanıcı gereklidir.', + 'user-define-error' => 'Sistem kullanıcısı silinemez.', + 'mass-update-success' => 'Kullanıcılar başarıyla güncellendi.', + 'mass-update-failed' => 'Kullanıcılar güncellenemez.', + 'mass-delete-success' => 'Kullanıcılar başarıyla silindi.', + 'mass-delete-failed' => 'Kullanıcılar silinemez.', + ], + + 'attributes' => [ + 'title' => 'Özellikler', + 'attribute' => 'Özellik', + 'create-title' => 'Özellik Oluştur', + 'edit-title' => 'Özellik Düzenle', + 'save-btn-title' => 'Özelliği Kaydet', + 'back' => 'Geri', + 'code' => 'Kod', + 'name' => 'İsim', + 'type' => 'Tip', + 'text' => 'text', + 'textarea' => 'textarea', + 'price' => 'Fiyat', + 'boolean' => 'Boolean', + 'select' => 'Seç', + 'multiselect' => 'Çoklu Seçim', + 'email' => 'E-posta', + 'address' => 'Adres', + 'phone' => 'Telefon', + 'datetime' => 'Tarih Saat', + 'date' => 'Tarih', + 'image' => 'Görüntü', + 'file' => 'Dosya', + 'entity-type' => 'Varlık Türü', + 'lookup' => 'Yukarı Bak', + 'entity_type' => 'Varlık Türü', + 'lookup-type' => 'Lookup Type', + 'checkbox' => 'Onay Kutusu', + 'is_required' => 'Gereklidir', + 'is_unique' => 'Benzersiz', + 'yes' => 'Evet', + 'no' => 'Hayır', + 'input_validation' => 'Input Validation', + 'number' => 'Number', + 'decimal' => 'Ondalık', + 'email' => 'E-posta', + 'url' => 'Url', + 'options-type' => 'Seçenek Türü', + 'options' => 'Seçenekler', + 'sort-order' => 'Sıralama düzeni', + 'add-option-btn-title' => 'Seçenek Ekle', + 'create-success' => 'Özellik başarıyla oluşturuldu.', + 'update-success' => 'Özellik başarıyla güncellendi.', + 'update-error' => 'Özellik güncellenemiyor.', + 'delete-success' => 'Özellik başarıyla silindi.', + 'delete-failed' => 'Özellik silinemez.', + 'user-define-error' => 'Sistem özelliği silinemez.', + 'mass-delete-failed' => 'Nitelikler silinemez.', + ], + + 'pipelines' => [ + 'title' => 'İşlem Hatları', + 'organization' => 'İşlem Hattı', + 'create-title' => 'İşlem Hattı Oluştur', + 'edit-title' => 'İşlem Hattını Düzenle', + 'save-btn-title' => 'İşlem Hattını Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'name' => 'İsim', + 'rotting-days' => 'Çürüyen Günler', + 'is-default' => 'Varsayılan olarak işaretle', + 'probability' => 'Olasılık (%)', + 'add-stage-btn-title' => 'Aşama Ekle', + 'new-stage' => 'yeni', + 'won-stage' => 'kazanmak', + 'lost-stage' => 'kayıp', + 'duplicate-name' => '"Ad" alanı yinelenemez', + 'create-success' => 'İşlem hattı başarıyla oluşturuldu.', + 'update-success' => 'İşlem hattı başarıyla güncellendi.', + 'delete-success' => 'İşlem hattı başarıyla silindi.', + 'delete-failed' => 'Boru hattı silinemez.', + 'default-delete-error' => 'Varsayılan işlem hattı silinemez.', + ], + + 'sources' => [ + 'title' => 'Kaynaklar', + 'organization' => 'Kaynak', + 'create-title' => 'Kaynak Oluştur', + 'edit-title' => 'Kaynağı Düzenle', + 'save-btn-title' => 'Kaynağı Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'create-success' => 'Kaynak başarıyla oluşturuldu.', + 'name-exists' => 'Kaynak adı zaten var.', + 'update-success' => 'Kaynak başarıyla güncellendi.', + 'delete-success' => 'Kaynak başarıyla silindi.', + 'delete-failed' => 'Kaynak silinemez.', + ], + + 'types' => [ + 'title' => 'Türler', + 'organization' => 'Tür', + 'create-title' => 'Tür Oluştur', + 'edit-title' => 'Türü Düzenle', + 'save-btn-title' => 'Türü Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'create-success' => 'Tür başarıyla oluşturuldu.', + 'name-exists' => 'Tür adı zaten var.', + 'update-success' => 'Tür başarıyla güncellendi.', + 'delete-success' => 'Tür başarıyla silindi.', + 'delete-failed' => 'Tür silinemez.', + ], + + 'email-templates' => [ + 'title' => 'E-posta Şablonları', + 'create-title' => 'E-posta Şablonu Oluştur', + 'edit-title' => 'E-posta Şablonunu Düzenle', + 'save-btn-title' => 'E-posta Şablonu Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'name' => 'İsim', + 'subject' => 'Konu', + 'content' => 'İçerik', + 'placeholders' => 'yYer Tutucular', + 'create-success' => 'E-posta Şablonu başarıyla oluşturuldu.', + 'update-success' => 'E-posta Şablonu başarıyla güncellendi.', + 'delete-success' => 'E-posta Şablonu başarıyla silindi.', + 'delete-failed' => 'E-posta Şablonu silinemez.', + ], + + 'workflows' => [ + 'title' => 'İş Akışları', + 'create-title' => 'İş Akışı Oluştur', + 'edit-title' => 'İş Akışını Düzenle', + 'save-btn-title' => 'İş Akışını Kaydet', + 'back' => 'Geri', + 'cancel' => 'İptal', + 'information' => 'Bilgi', + 'name' => 'İsim', + 'description' => 'Açıklama', + 'event' => 'Etkinlik', + 'events' => 'Etkinlikler', + 'created' => 'Oluşturuldu', + 'updated' => 'Güncellendi', + 'deleted' => 'Silindi', + 'event-info' => 'Bir olay, koşulları kontrol etmek ve ilgili önceden tanımlanmış bir dizi eylemi gerçekleştirmek için otomatik olarak tetiklenir', + 'conditions' => 'Koşullar', + 'condition-info' => 'Koşullar, belirli senaryoları kontrol eden ve belirli durumlarda tetiklenen kurallar dizisidir.', + 'condition-type' => 'Koşul Türü', + 'all-conditions-true' => 'Tüm Koşullar Doğru', + 'any-condition-true' => 'Her Koşul Doğrudur', + 'add-condition' => 'Koşul Ekle', + 'choose-condition-to-add' => 'Eklemek için bir koşul seçin', + 'is-equal-to' => 'Eşittir', + 'is-not-equal-to' => 'Eşit değildir', + 'equals-or-greater-than' => 'Eşit veya daha büyük', + 'equals-or-less-than' => 'Eşit veya daha az', + 'greater-than' => 'Daha büyük', + 'less-than' => 'Daha az', + 'contain' => 'İçerir', + 'contains' => 'İçerir', + 'does-not-contain' => 'İçermiyor', + 'actions' => 'Hareketler', + 'action-info' => 'Bir eylem yalnızca iş yükünü azaltmakla kalmaz, aynı zamanda CRM otomasyonunu oldukça kolaylaştırır', + 'choose-action-to-add' => 'Eklenecek eylemi seçin', + 'update-lead' => 'Müşteriyi güncelle', + 'update-person' => 'Kişiyi Güncelle', + 'send-email-to-person' => 'Kişiye e-posta gönder', + 'send-email-to-sales-owner' => 'Satış sahibine e-posta gönder', + 'send-email-to-participants' => 'Katılımcılara e-posta gönder', + 'add-tag' => 'Etiket Ekle', + 'add-note-as-activity' => 'Etkinlik olarak not ekle', + 'choose-attribute' => 'Özelliği Seçin', + 'choose-option' => 'Seçeneği Seçin', + 'update-person' => 'Kişiyi Güncelle', + 'update-related-leads' => 'İlgili müşteri adaylarını güncelle', + 'update-quote' => 'Teklifi Güncelle', + 'add-action' => 'Eylem Ekle', + 'create-success' => 'İş akışı başarıyla oluşturuldu.', + 'update-success' => 'İş akışı başarıyla güncellendi.', + 'delete-success' => 'İş akışı başarıyla silindi.', + 'delete-failed' => 'İş akışı silinemez.', + ], + + 'tags' => [ + 'title' => 'Etiketler', + 'create-title' => 'Etiket Oluştur', + 'edit-title' => 'Etiketi Düzenle', + 'cancel' => 'İptal', + 'save-btn-title' => 'Etiketi Kaydet', + 'name' => 'İsim', + 'color' => 'Renk', + 'create-success' => 'Etiket başarıyla oluşturuldu.', + 'update-success' => 'Etiket başarıyla güncellendi.', + 'delete-success' => 'Etiket başarıyla silindi.', + 'delete-failed' => 'Etiket silinemez', + ] + ], + + 'configuration' => [ + 'title' => 'Yapılandırma', + 'save-btn-title' => 'Kaydet', + 'general' => 'Genel', + 'locale-settings' => 'Yerel Ayarlar', + 'locale' => 'Yerelleştirme', + 'timezone' => 'Saat Dilimi', + 'date-time-formats' => 'Tarih ve Saat Formatları', + 'save-message' => 'Yapılandırma başarıyla güncellendi!', + "emails" => [ + 'email' => 'E-posta', + 'notification_label' => 'Bildirimler', + 'new_lead' => 'Yeni müşteri adayı', + ] + ], + + 'datagrid' => [ + 'id' => 'ID', + 'name' => 'İsim', + 'code' => 'Kod', + 'sku' => 'Barkod', + 'type' => 'Tür', + 'price' => 'Fiyat', + 'email' => 'E-posta', + 'attachments' => 'Ekler', + 'from' => 'İtibarem', + 'lead' => 'Lider', + 'title' => 'Başlık', + 'subject' => 'Konu', + 'tags' => 'Etiketler', + 'emails' => 'E-postalar', + 'stage' => 'Sahne', + 'status' => 'Durum', + 'active' => 'Etkin', + 'inactive' => 'Etkin Değil', + 'address' => 'Adres', + 'quantity' => 'Miktar', + 'lead_value' => 'Lider Değeri', + 'comment' => 'Yorum', + 'is_done' => 'Tamamlandı', + 'type' => 'Tür', + 'all' => 'Tümü', + 'user' => 'Kullanıcı', + 'sales-person' => 'Satış Elemanı', + 'expired_quotes' => 'Süresi Dolmuş Alıntılar', + 'person' => 'Kişi', + 'sub-total' => 'Ara Toplam', + 'discount' => 'İndirim', + 'tax' => 'Vergi', + 'adjustment' => 'Ayarlama', + 'grand-total' => 'Genel Toplam', + 'persons_count' => 'Kişi Sayısı', + 'assigned_to' => 'Atandı', + 'created_by' => 'Tarafından oluşturuldu', + 'entity_type' => 'Varlık Türü', + 'created_at' => 'Oluşturulma Tarihi', + 'expected_close_date' => 'Beklenen Kapanış Tarihi', + 'schedule_from' => 'Başlangıç Zamanı', + 'schedule_to' => 'Planla', + 'description' => 'Açıklama', + 'update_stage' => 'Aşamayı Güncelle', + 'contact_person' => 'İlgili kişi', + 'contact_numbers' => 'İletişim numaraları', + 'permission_type' => 'İzin Türü', + 'organization_name' => 'Kuruluş Adı', + 'is-default' => 'Varsayılan', + 'rotten-days' => 'Çürük Günler', + 'rotten_lead' => 'çürük kurşun', + 'yes' => 'Evet', + 'no' => 'Hayır', + 'move-to-inbox' => 'Gelen Kutusuna Taşı', + 'update-success' => ':resource başarıyla güncellendi.', + 'destroy-success' => ':resource başarıyla silindi', + 'destroy-failed' => ':resource silinemez', + 'attribute_type' => 'Özellik Türü', + 'filters' => [ + 'yesterday' => 'Dün', + 'today' => 'Bugün', + 'tomorrow' => 'Yarın', + 'this-week' => 'Bu Hafta', + 'this-month' => 'Bu Ay', + 'custom' => 'Özel', + ] + ], + + 'response' => [ + 'create-success' => ':name başarıyla oluşturuldu.', + 'update-success' => ':name başarıyla güncellendi.', + 'destroy-success' => ':name başarıyla silindi.', + 'destroy-failed' => ':name silinemez.', + ], + + 'acl' => [ + 'leads' => 'Liderler', + 'lead' => 'Lider', + 'quotes' => 'Teklifler', + 'mail' => 'Posta', + 'inbox' => 'Gelen Kutusu', + 'draft' => 'Taslak', + 'outbox' => 'Giden Kutusu', + 'sent' => 'Gönder', + 'trash' => 'Çöp', + 'activities' => 'Aktiviteler', + 'contacts' => 'Kişiler', + 'persons' => 'Kişiler', + 'organizations' => 'Organizasyonlar', + 'products' => 'Ürünler', + 'settings' => 'Ayarlar', + 'groups' => 'Gruplar', + 'roles' => 'Roller', + 'users' => 'Kullanıcılar', + 'user' => 'Kullanıcı', + 'automation' => 'Otomasyon', + 'attributes' => 'Özellikler', + 'pipelines' => 'İşlem Hatları', + 'sources' => 'Kaynaklar', + 'types' => 'Türler', + 'email-templates' => 'E-posta Şablonları', + 'workflows' => 'İş Akışları', + 'other-settings' => 'Diğer Ayarlar', + 'tags' => 'Etiketler', + 'configuration' => 'Yapılandırma', + 'create' => 'Oluştur', + 'edit' => 'Düzenle', + 'view' => 'Görüntüle', + 'print' => 'Yazdır', + 'delete' => 'Kaldır', + 'export' => 'Dışa Aktar', + 'mass-delete' => 'Toplu Silme', + ], + + 'common' => [ + 'back' => 'Geri', + 'address' => 'Adres', + 'country' => 'Ülke', + 'add_more' => 'Daha Fazla Ekle', + 'select-country' => 'Lütfen ülke seçin', + 'select-users' => 'Kullanıcıları Seçin', + 'select_rotten_leads' => 'Rotten Leadsi seçin', + 'select-organization' => 'Kuruluşları Seçin', + 'state' => 'İlçe', + 'select-state' => 'Lütfen ilçe seçin', + 'city' => 'Şehir', + 'postcode' => 'Posta Kodu', + 'address-validation' => '"Adres" alanı zorunludur', + 'work' => 'İş', + 'home' => 'Ev', + 'no-result-found' => 'Aynı isimde kayıt bulunamadı.', + 'add-as' => 'Yeni Ekle', + 'not-available' => 'Müsait değil', + 'select-options' => 'Seçenekler', + 'yes' => 'Evet', + 'no' => 'Hayır', + 'delete' => 'Kaldır', + 'save' => 'Kaydet', + 'locale' => 'yerel ayar', + 'en' => 'ingilizce', + 'tr' => 'Türkçe', + 'ar' => 'Arapça', + 'add-as' => 'Yeni olarak ekle', + 'no-records-found' => 'Kayıt bulunamadı', + 'start-typing' => 'Kayıtları aramak için yazmaya başlayın', + 'select-type' => 'Türü Seç', + 'select-call' => 'Arama Yap', + 'select-meeting' => 'Toplantı', + 'select-lunch' => 'Öğle Yemeği', + 'duplicate-value' => 'Değer yinelenemez', + 'unauthenticated' => 'Kimliği doğrulanmamış', + 'resource-not-found' => 'Kaynak bulunamadı', + 'forbidden-error' => '403 yasak hatası', + 'internal-server-error' => '500 Dahili Sunucu Hatası', + 'something-went-wrong' => 'Bir ÅŸeyler yanlış oldu. Lütfen sonra tekrar deneyiniz.', + 'delete-confirm' => 'Bu eylemi gerçekten yapmak istiyor musunuz?', + 'system_attribute' => 'sistem', + 'custom_attribute' => 'Gelenek', + ], + + 'user' => [ + 'account' => [ + 'name' => 'İsim', + 'email' => 'E-posta', + 'password' => 'Şifre', + 'my_account' => 'Hesabım', + 'update_details' => 'Detayları Güncelle', + 'current_password' => 'Mevcut Şifre', + 'confirm_password' => 'Şifreyi Onayla', + 'password-match' => 'Mevcut şifre eşleşmiyor.', + 'account-save' => 'Hesap değişiklikleri başarıyla kaydedildi.', + 'permission-denied' => 'İzin Reddedildi', + 'remove-image' => 'Görüntüyü Kaldır', + 'upload_image_pix' => 'Bir Profil Resmi Yükleyin (100px x 100px)', + 'upload_image_format' => 'PNG veya JPG Formatında', + 'image_upload_message' => 'Yalnızca resimlere (.jpeg, .jpg, .png, ..) izin verilir.' + ] + ], + + 'emails' => [ + 'common' => [ + 'dear' => 'Sayın :name', + 'cheers' => 'Tebrikler,
    Takım :app_name' + ], + ] +]; +?> diff --git a/packages/Webkul/Admin/src/Resources/views/activities/datagrid/is-done.blade.php b/packages/Webkul/Admin/src/Resources/views/activities/datagrid/is-done.blade.php new file mode 100644 index 0000000..03a85fa --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/activities/datagrid/is-done.blade.php @@ -0,0 +1,13 @@ +
    + + is_done ? 'checked' : '' }} + onchange="updateStatus(event, '{{ route('admin.activities.update', $row->id) }}')" + > + + +
    \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/activities/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/activities/edit.blade.php new file mode 100644 index 0000000..85550eb --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/activities/edit.blade.php @@ -0,0 +1,351 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.activities.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.activities.edit.header.before', ['activity' => $activity]) !!} + + + + {!! view_render_event('admin.activities.edit.header.after', ['activity' => $activity]) !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.activities.edit.form_buttons.before', ['activity' => $activity]) !!} + + + + {{ __('admin::app.activities.back') }} + + {!! view_render_event('admin.activities.edit.form_buttons.after', ['activity' => $activity]) !!} +
    + +
    + {!! view_render_event('admin.activities.edit.form_controls.before', ['activity' => $activity]) !!} + + @csrf() + + + +
    + + + + + @{{ errors.first('title') }} +
    + +
    + + + type ?> + + + + @{{ errors.first('type') }} +
    + +
    + + +
    + + + + @{{ errors.first('schedule_from') }} + + + + + + @{{ errors.first('schedule_to') }} + +
    +
    + +
    + + + +
    + +
    +
    + +
    + + +
    + +
    + + + +
    + +
    + + + @include('admin::common.custom-attributes.edit.lookup') + + @php + $lookUpEntityData = app('Webkul\Attribute\Repositories\AttributeRepository') + ->getLookUpEntity( + 'leads', + old('lead_id') + ?: ( + ($lead = $activity->leads()->first()) + ? $lead->id + : null + ) + ); + @endphp + + +
    + + {!! view_render_event('admin.activities.edit.form_controls.after', ['activity' => $activity]) !!} + +
    +
    + +
    + +
    + +
    + +
    +@stop + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/activities/index.blade.php b/packages/Webkul/Admin/src/Resources/views/activities/index.blade.php new file mode 100644 index 0000000..db20e6d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/activities/index.blade.php @@ -0,0 +1,25 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.activities.title') }} +@stop + +@section('content-wrapper') + @php + $viewType = request()->view_type ?? "table"; + @endphp + + @if ($viewType == "table") + {!! view_render_event('admin.activities.index.table.before') !!} + + @include('admin::activities.index.table') + + {!! view_render_event('admin.activities.index.table.after') !!} + @else + {!! view_render_event('admin.activities.index.calendar.before') !!} + + @include('admin::activities.index.calendar') + + {!! view_render_event('admin.activities.index.calendar.after') !!} + @endif +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/activities/index/calendar.blade.php b/packages/Webkul/Admin/src/Resources/views/activities/index/calendar.blade.php new file mode 100644 index 0000000..ecd9f5c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/activities/index/calendar.blade.php @@ -0,0 +1,93 @@ +
    +
    +
    +

    + {!! view_render_event('admin.activities.index.header.before') !!} + + {{ Breadcrumbs::render('activities') }} + + {{ __('admin::app.activities.title') }} + + {!! view_render_event('admin.activities.index.header.after') !!} +

    +
    + +
    + + + + +
    +
    +
    + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/activities/index/table.blade.php b/packages/Webkul/Admin/src/Resources/views/activities/index/table.blade.php new file mode 100644 index 0000000..fcdaa6b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/activities/index/table.blade.php @@ -0,0 +1,64 @@ +
    + + + + + + +
    + +@push('scripts') + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/activities/index/view-swither.blade.php b/packages/Webkul/Admin/src/Resources/views/activities/index/view-swither.blade.php new file mode 100644 index 0000000..d8e17dc --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/activities/index/view-swither.blade.php @@ -0,0 +1,19 @@ +
    + @if (request('view_type')) + + + + + + + + @else + + + + + + + + @endif +
    diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit.blade.php new file mode 100644 index 0000000..7e1caac --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit.blade.php @@ -0,0 +1,72 @@ +@php + $formScope = $formScope ?? ''; +@endphp + +@foreach ($customAttributes as $attribute) + + @php + if (isset($customValidations[$attribute->code])) { + $validations = implode('|', $customValidations[$attribute->code]); + } else { + $validations = []; + + if ($attribute->code != 'sku') { + if ($attribute->is_required) { + array_push($validations, 'required'); + } + + if ($attribute->type == 'price') { + array_push($validations, 'decimal'); + } + + array_push($validations, $attribute->validation); + + $validations = implode('|', array_filter($validations)); + } else { + $validations = "{ "; + + if ($attribute->is_required) { + $validations .= "required: true, "; + } + + $validations .= "regex: /^[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*$/ }"; + } + } + @endphp + + @if (view()->exists($typeView = 'admin::common.custom-attributes.edit.' . $attribute->type)) + +
    type == 'multiselect') :class="[errors.has('{{ $formScope . $attribute->code }}[]') ? 'has-error' : '']" + @else :class="[errors.has('{{ $formScope . $attribute->code }}') ? 'has-error' : '']" @endif + > + + + + @include ($typeView, ['value' => isset($entity) ? $entity[$attribute->code] : null]) + + type == 'multiselect') v-if="errors.has('{{ $formScope . $attribute->code }}[]')" + @else v-if="errors.has('{{ $formScope . $attribute->code }}')" @endif + > + + @if ($attribute->type == 'multiselect') + @{{ errors.first('{!! $formScope . $attribute->code !!}[]') }} + @else + @{{ errors.first('{!! $formScope . $attribute->code !!}') }} + @endif + +
    + + @endif + +@endforeach \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/address.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/address.blade.php new file mode 100644 index 0000000..e724d46 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/address.blade.php @@ -0,0 +1,150 @@ +@if (isset($attribute)) + +@endif + +@push('scripts') + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/boolean.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/boolean.blade.php new file mode 100644 index 0000000..2e041e3 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/boolean.blade.php @@ -0,0 +1,14 @@ +code) ?: $value ?> + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/checkbox.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/checkbox.blade.php new file mode 100644 index 0000000..8d5afed --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/checkbox.blade.php @@ -0,0 +1,27 @@ +
    + + @php + $options = $attribute->lookup_type + ? app('Webkul\Attribute\Repositories\AttributeRepository')->getLookUpOptions($attribute->lookup_type) + : $attribute->options()->orderBy('sort_order')->get(); + + $selectedOption = old($attribute->code) ?: $value; + @endphp + + + + @foreach ($options as $option) + + id, explode(',', $selectedOption)) ? 'checked' : ''}} + /> + + + {{ $option->name }} + + @endforeach + +
    \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/date.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/date.blade.php new file mode 100644 index 0000000..30efcee --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/date.blade.php @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/datetime.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/datetime.blade.php new file mode 100644 index 0000000..279307a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/datetime.blade.php @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email-tags.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email-tags.blade.php new file mode 100644 index 0000000..85f8d0b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email-tags.blade.php @@ -0,0 +1,79 @@ +@once + @push('scripts') + + + + @endpush +@endonce diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email.blade.php new file mode 100644 index 0000000..81d8056 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/email.blade.php @@ -0,0 +1,137 @@ +@if (isset($attribute)) + +@endif + +@once + @push('scripts') + + + + + @endpush +@endonce diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/file.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/file.blade.php new file mode 100644 index 0000000..e0fdee8 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/file.blade.php @@ -0,0 +1,27 @@ +@if ($value) + + + +@endif + + + +@if ($value) +
    + + + + + {{ __('admin::app.common.delete') }} + +
    +@endif diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/image.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/image.blade.php new file mode 100644 index 0000000..f5e5637 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/image.blade.php @@ -0,0 +1,27 @@ +@if ($value) + + + +@endif + + + +@if ($value) +
    + + + + + {{ __('admin::app.common.delete') }} + +
    +@endif \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade.php new file mode 100644 index 0000000..be7f600 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade.php @@ -0,0 +1,157 @@ +@if (isset($attribute)) + @php + $lookUpEntityData = app('Webkul\Attribute\Repositories\AttributeRepository') + ->getLookUpEntity($attribute->lookup_type, old($attribute->code) ?: $value); + @endphp + + +@endif + +@once + @push('scripts') + + + + + + @endpush +@endonce diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade1.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade1.php new file mode 100644 index 0000000..053aaa1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/lookup.blade1.php @@ -0,0 +1,109 @@ + + +@push('scripts') + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multi-lookup.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multi-lookup.blade.php new file mode 100644 index 0000000..069a0dd --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multi-lookup.blade.php @@ -0,0 +1,126 @@ +@if (isset($attribute)) + @php + $lookUpEntityData = app('Webkul\Attribute\Repositories\AttributeRepository') + ->getLookUpEntity($attribute->lookup_type, old($attribute->code) ?: $value); + @endphp + + +@endif + +@once + @push('scripts') + + + + + + @endpush +@endonce diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multiselect.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multiselect.blade.php new file mode 100644 index 0000000..a34cde9 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/multiselect.blade.php @@ -0,0 +1,18 @@ + diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/phone.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/phone.blade.php new file mode 100644 index 0000000..4110a29 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/phone.blade.php @@ -0,0 +1,142 @@ +@if (isset($attribute)) + +@endif + +@once + @push('scripts') + + + + + + @endpush +@endonce diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/price.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/price.blade.php new file mode 100644 index 0000000..217cd89 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/price.blade.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/select.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/select.blade.php new file mode 100644 index 0000000..be30840 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/select.blade.php @@ -0,0 +1,20 @@ + diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/tags.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/tags.blade.php new file mode 100644 index 0000000..3e7c110 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/tags.blade.php @@ -0,0 +1,133 @@ +@if (isset($attribute)) + +@endif + +@once + @push('scripts') + + + + + + @endpush +@endonce diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/text.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/text.blade.php new file mode 100644 index 0000000..8b5bffe --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/text.blade.php @@ -0,0 +1,9 @@ +code == 'sku') v-validate="{{$validations}}" @else v-validate="'{{$validations}}'" @endif + data-vv-as=""{{ $attribute->name }}"" +/> \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/textarea.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/textarea.blade.php new file mode 100644 index 0000000..122eb59 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/edit/textarea.blade.php @@ -0,0 +1,7 @@ + diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view(Inline-edit).blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view(Inline-edit).blade.php new file mode 100644 index 0000000..36d8336 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view(Inline-edit).blade.php @@ -0,0 +1,74 @@ +@foreach ($customAttributes as $attribute) + + @if (view()->exists($typeView = 'admin::common.custom-attributes.view.' . $attribute->type)) + +
    +
    {{ $attribute->name }}
    + +
    + @include ($typeView, ['value' => isset($entity) ? $entity[$attribute->code] : null]) +
    + + + + +
    + + @endif + +@endforeach diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view.blade.php new file mode 100644 index 0000000..b358b97 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view.blade.php @@ -0,0 +1,15 @@ +@foreach ($customAttributes as $attribute) + + @if (view()->exists($typeView = 'admin::common.custom-attributes.view.' . $attribute->type)) + +
    +
    {{ $attribute->name }}
    + +
    + @include ($typeView, ['value' => isset($entity) ? $entity[$attribute->code] : null]) +
    +
    + + @endif + +@endforeach \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/address.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/address.blade.php new file mode 100644 index 0000000..ca3a869 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/address.blade.php @@ -0,0 +1,12 @@ +@if ($value) + + {{ $value['address'] }}
    + {{ $value['postcode'] . ' ' . $value['city'] }}
    + {{ core()->state_name($value['state']) }}
    + {{ core()->country_name($value['country']) }}
    + +@else + + {{ __('admin::app.common.not-available') }} + +@endif \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/boolean.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/boolean.blade.php new file mode 100644 index 0000000..be7e5af --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/boolean.blade.php @@ -0,0 +1 @@ +{{ $value ? __('admin::app.common.yes') : __('admin::app.common.no') }} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/checkbox.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/checkbox.blade.php new file mode 100644 index 0000000..1543aa1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/checkbox.blade.php @@ -0,0 +1,17 @@ +@php + $options = $attribute->lookup_type + ? app('Webkul\Attribute\Repositories\AttributeRepository')->getLookUpEntity($attribute->lookup_type, explode(',', $value)) + : $attribute->options()->whereIn('id', explode(',', $value))->get(); +@endphp + +@if (count($options)) + + @foreach ($options as $option) + {{ $option->name }} + @endforeach + +@else + + {{ __('admin::app.common.not-available') }} + +@endif diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/date.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/date.blade.php new file mode 100644 index 0000000..c18c798 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/date.blade.php @@ -0,0 +1 @@ +{{ $value ?? __('admin::app.common.not-available')}} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/datetime.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/datetime.blade.php new file mode 100644 index 0000000..c18c798 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/datetime.blade.php @@ -0,0 +1 @@ +{{ $value ?? __('admin::app.common.not-available')}} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/email.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/email.blade.php new file mode 100644 index 0000000..4d06f51 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/email.blade.php @@ -0,0 +1,15 @@ +@if (is_array($value)) + + @foreach ($value as $item) + + {{ $item['value'] }} + + {{ ' (' . $item['label'] . ')'}} + + @endforeach + +@else + + {{ __('admin::app.common.not-available') }} + +@endif diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/file.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/file.blade.php new file mode 100644 index 0000000..84c5b37 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/file.blade.php @@ -0,0 +1,11 @@ +@if ($value) + + + + + +@else + + {{ __('admin::app.common.not-available') }} + +@endif \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/image.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/image.blade.php new file mode 100644 index 0000000..4b167c2 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/image.blade.php @@ -0,0 +1,11 @@ +@if ($value) + + + + + +@else + + {{ __('admin::app.common.not-available') }} + +@endif \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/lookup.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/lookup.blade.php new file mode 100644 index 0000000..b2e1990 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/lookup.blade.php @@ -0,0 +1,5 @@ +@php + $lookUpEntity = app('Webkul\Attribute\Repositories\AttributeRepository')->getLookUpEntity($attribute->lookup_type, $value); +@endphp + +{{ $lookUpEntity ? $lookUpEntity->name : __('admin::app.common.not-available') }} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/multiselect.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/multiselect.blade.php new file mode 100644 index 0000000..1543aa1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/multiselect.blade.php @@ -0,0 +1,17 @@ +@php + $options = $attribute->lookup_type + ? app('Webkul\Attribute\Repositories\AttributeRepository')->getLookUpEntity($attribute->lookup_type, explode(',', $value)) + : $attribute->options()->whereIn('id', explode(',', $value))->get(); +@endphp + +@if (count($options)) + + @foreach ($options as $option) + {{ $option->name }} + @endforeach + +@else + + {{ __('admin::app.common.not-available') }} + +@endif diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/phone.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/phone.blade.php new file mode 100644 index 0000000..4d06f51 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/phone.blade.php @@ -0,0 +1,15 @@ +@if (is_array($value)) + + @foreach ($value as $item) + + {{ $item['value'] }} + + {{ ' (' . $item['label'] . ')'}} + + @endforeach + +@else + + {{ __('admin::app.common.not-available') }} + +@endif diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/price.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/price.blade.php new file mode 100644 index 0000000..145024f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/price.blade.php @@ -0,0 +1 @@ +{{ ! is_null($value) ? core()->formatBasePrice($value) : __('admin::app.common.not-available') }} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/select.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/select.blade.php new file mode 100644 index 0000000..33514f1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/select.blade.php @@ -0,0 +1,7 @@ +@php + $option = $attribute->lookup_type + ? app('Webkul\Attribute\Repositories\AttributeRepository')->getLookUpEntity($attribute->lookup_type, $value) + : $attribute->options()->where('id', $value)->first(); +@endphp + +{{ $option ? $option->name : __('admin::app.common.not-available') }} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/text.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/text.blade.php new file mode 100644 index 0000000..dec06eb --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/text.blade.php @@ -0,0 +1 @@ +{{ $value ?? __('admin::app.common.not-available') }} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/textarea.blade.php b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/textarea.blade.php new file mode 100644 index 0000000..c18c798 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/common/custom-attributes/view/textarea.blade.php @@ -0,0 +1 @@ +{{ $value ?? __('admin::app.common.not-available')}} \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php new file mode 100644 index 0000000..a819b3b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/field-type.blade.php @@ -0,0 +1,356 @@ +@php + $validations = []; + + if (isset($field['validations'])) { + array_push($validations, $field['validations']); + } + + $validations = implode('|', array_filter($validations)); + + $key = explode(".", $item['key']); + + $firstField = current($key); + + $secondField = next($key); + + $name = $item['key'] . '.' . $field['name']; + + if (isset($field['data_source'])) { + $temp = explode("@", $field['data_source']); + + $value = app(current($temp))->{end($temp)}(); + } + + $fieldName = $firstField . "[" . $secondField . "][" . $field['name'] . "]"; +@endphp + +@if ($field['type'] == 'depends') + @php + $depends = explode(":", $field['depend']); + + $dependField = current($depends); + + $dependValue = end($depends); + + if (isset($value) && $value) { + $i = 0; + + foreach ($value as $key => $result) { + $data['title'] = $result; + + $data['value'] = $key; + + $options[$i] = $data; + + $i++; + } + + $field['options'] = $options; + } + + if (! isset($field['options'])) { + $field['options'] = ''; + } + + $selectedOption = core()->getConfigData($name) ?? ''; + @endphp + + + +@else +
    + + + + @if ($field['type'] == "password" || $field['type'] == "color") + @include('admin::configuration.fields.input') + @else + @include('admin::configuration.fields.' . $field['type']) + @endif + + @if (isset($field['info'])) + {{ trans($field['info']) }} + @endif + + + @if ($field['type'] == 'multiselect') + @{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $field['name'] !!}][]') }} + @else + @{{ errors.first('{!! $firstField !!}[{!! $secondField !!}][{!! $field['name'] !!}]') }} + @endif + + +
    + +@endif + +@push('scripts') + @if ($field['type'] == 'country') + + + + + + @endif + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/boolean.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/boolean.blade.php new file mode 100644 index 0000000..2d08a89 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/boolean.blade.php @@ -0,0 +1,17 @@ +@php($selectedOption = core()->getConfigData($name) ?? '') + + + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/country.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/country.blade.php new file mode 100644 index 0000000..fc5809b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/country.blade.php @@ -0,0 +1,7 @@ +@php($countryCode = core()->getConfigData($name) ?? '') + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/file.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/file.blade.php new file mode 100644 index 0000000..5e8d459 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/file.blade.php @@ -0,0 +1,37 @@ +@php + $result = core()->getConfigData($name); + $src = explode("/", $result); + $path = end($src); +@endphp + +@if ($result) + + + +@endif + + + +@if ($result) +
    + + + + + {{ __('admin::app.configuration.delete') }} + +
    +@endif \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/image.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/image.blade.php new file mode 100644 index 0000000..8f0ee0a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/image.blade.php @@ -0,0 +1,36 @@ +@php + $src = Storage::url(core()->getConfigData($name)); + $result = core()->getConfigData($name); +@endphp + +@if ($result) + + + +@endif + + + +@if ($result) +
    + + + + + {{ __('admin::app.configuration.delete') }} + +
    +@endif diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/input.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/input.blade.php new file mode 100644 index 0000000..f59177d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/input.blade.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/multiselect.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/multiselect.blade.php new file mode 100644 index 0000000..ce9b763 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/multiselect.blade.php @@ -0,0 +1,40 @@ + diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/select.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/select.blade.php new file mode 100644 index 0000000..58d3308 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/select.blade.php @@ -0,0 +1,40 @@ + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/state.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/state.blade.php new file mode 100644 index 0000000..5f08db5 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/state.blade.php @@ -0,0 +1,7 @@ +@php($stateCode = core()->getConfigData($name) ?? '') + + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/text.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/text.blade.php new file mode 100644 index 0000000..77645f5 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/text.blade.php @@ -0,0 +1,9 @@ + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/fields/textarea.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/fields/textarea.blade.php new file mode 100644 index 0000000..c78a5f4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/fields/textarea.blade.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/configuration/index.blade.php b/packages/Webkul/Admin/src/Resources/views/configuration/index.blade.php new file mode 100644 index 0000000..c850d25 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/configuration/index.blade.php @@ -0,0 +1,77 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.configuration.title') }} +@stop + +@section('content-wrapper') +
    +
    + + + +
    +
    + + + +
    +
    + + + + {{ __('admin::app.settings.users.back') }} + +
    + + @csrf() + + @if ($groups = \Illuminate\Support\Arr::get(app('core_config')->items, request()->route('slug') . '.children')) + + + @foreach ($groups as $key => $item) + + + + @foreach ($item['fields'] as $field) + + @include ('admin::configuration.field-type', ['field' => $field]) + + @endforeach + + + + @endforeach + + + @endif + +
    + +
    +
    + +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/organizations/create.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/create.blade.php new file mode 100644 index 0000000..a3dc0b6 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/create.blade.php @@ -0,0 +1,61 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.contacts.organizations.create-title') }} +@stop + +@section('content-wrapper') +
    + + {!! view_render_event('admin.contacts.organizations.create.header.before') !!} + + + + {!! view_render_event('admin.contacts.organizations.create.header.after') !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.contacts.organizations.create.form_buttons.before') !!} + + + + {{ __('admin::app.contacts.organizations.back') }} + + {!! view_render_event('admin.contacts.organizations.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.contacts.organizations.create.form_controls.before') !!} + + @csrf() + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'organizations', + ]), + ]) + + {!! view_render_event('admin.contacts.organizations.edit.form_controls.after') !!} +
    +
    +
    +
    + +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/organizations/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/edit.blade.php new file mode 100644 index 0000000..c308055 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/edit.blade.php @@ -0,0 +1,64 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.contacts.organizations.edit-title') }} +@stop + +@section('content-wrapper') +
    + + {!! view_render_event('admin.contacts.organizations.edit.header.before', ['organization' => $organization]) !!} + + + + {!! view_render_event('admin.contacts.organizations.edit.header.after', ['organization' => $organization]) !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.contacts.organizations.edit.form_buttons.before', ['organization' => $organization]) !!} + + + + {{ __('admin::app.contacts.organizations.back') }} + + {!! view_render_event('admin.contacts.organizations.edit.form_buttons.after', ['organization' => $organization]) !!} +
    + +
    + {!! view_render_event('admin.contacts.organizations.edit.form_controls.before', ['organization' => $organization]) !!} + + @csrf() + + + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'organizations', + ]), + 'entity' => $organization, + ]) + + {!! view_render_event('admin.contacts.organizations.edit.form_controls.after', ['organization' => $organization]) !!} +
    +
    +
    +
    + +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/organizations/index.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/index.blade.php new file mode 100644 index 0000000..bda806b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/organizations/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.contacts.organizations.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('contacts.organizations.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/persons/create.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/persons/create.blade.php new file mode 100644 index 0000000..41f539d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/persons/create.blade.php @@ -0,0 +1,62 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.contacts.persons.create-title') }} +@stop + +@section('content-wrapper') +
    + + {!! view_render_event('admin.contacts.persons.create.header.before') !!} + + + + {!! view_render_event('admin.contacts.persons.create.header.after') !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.contacts.persons.create.form_buttons.before') !!} + + + + {{ __('admin::app.contacts.persons.back') }} + + {!! view_render_event('admin.contacts.persons.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.contacts.persons.create.form_controls.before') !!} + + @csrf() + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'persons', + ]), + ]) + + {!! view_render_event('admin.contacts.persons.create.form_controls.after') !!} + +
    +
    +
    +
    + +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/persons/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/persons/edit.blade.php new file mode 100644 index 0000000..0eb2fec --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/persons/edit.blade.php @@ -0,0 +1,65 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.contacts.persons.edit-title') }} +@stop + +@section('content-wrapper') +
    + + {!! view_render_event('admin.contacts.persons.edit.header.before', ['person' => $person]) !!} + + + + {!! view_render_event('admin.contacts.persons.edit.header.after', ['person' => $person]) !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.contacts.persons.edit.form_buttons.before', ['person' => $person]) !!} + + + + {{ __('admin::app.contacts.persons.back') }} + + {!! view_render_event('admin.contacts.persons.edit.form_buttons.after', ['person' => $person]) !!} +
    + +
    + {!! view_render_event('admin.contacts.persons.edit.form_controls.before', ['person' => $person]) !!} + + @csrf() + + + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'persons', + ]), + 'entity' => $person, + ]) + + {!! view_render_event('admin.contacts.persons.edit.form_controls.after', ['person' => $person]) !!} + +
    +
    +
    +
    + +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/contacts/persons/index.blade.php b/packages/Webkul/Admin/src/Resources/views/contacts/persons/index.blade.php new file mode 100644 index 0000000..789088d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/contacts/persons/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.contacts.persons.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('contacts.persons.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/dashboard/index.blade.php b/packages/Webkul/Admin/src/Resources/views/dashboard/index.blade.php new file mode 100644 index 0000000..6e73df4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/dashboard/index.blade.php @@ -0,0 +1,449 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.dashboard.title') }} +@stop + +@section('content-wrapper') +
    +

    {{ __('admin::app.dashboard.title') }}

    + + {!! view_render_event('admin.dashboard.index.filter.before') !!} + + + + {!! view_render_event('admin.dashboard.index.filter.after') !!} + + + {!! view_render_event('admin.dashboard.index.cards.before') !!} + + + + {!! view_render_event('admin.dashboard.index.cards.after') !!} +
    +@stop + +@push('scripts') + + + + + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/dashboard/template.blade.php b/packages/Webkul/Admin/src/Resources/views/dashboard/template.blade.php new file mode 100644 index 0000000..0648efa --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/dashboard/template.blade.php @@ -0,0 +1,534 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.dashboard.title') }} +@stop + +@section('content-wrapper') +
    + + +
    +
    +
    + Calendar +
    + +
    + +
    +
    + +
    +
    + Buttons +
    + +
    +

    Small

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

    Medium

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

    Large

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

    Extra Large

    + + + + + + + + + + + + +
    +
    + +
    +
    + Badges +
    + +
    +

    Small

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Small Pill

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Medium

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Medium Pill

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Large

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Large Pill

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Extra Large

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline + +

    Extra Large Pill

    + Primary + Primary Outline + Secondary + Secondary Outline + Danger + Danger Outline + Success + Success Outline + Warning + Warning Outline +
    +
    + +
    +
    + Form Controls +
    + +
    +
    + + +
    + +
    + + + This is control error +
    + +
    + + +
    + +
    + + + + + +
    + +
    + + + + + +
    + +
    + + + + + +
    + +
    + + +
    + +
    + + +
    + +
    + + + + + + Radio Value + + + + + + Radio Value (Checked) + + + + + + Radio Value (Disabled) + +
    + +
    + + + + + + Checkbox Value + + + + + + Checkbox Value (Checked) + + + + + + Checkbox Value (Disabled) + +
    + +
    + + +
    +
    +
    + +
    +
    + Tabs +
    + +
    + + + Tab 1 Content + + + + Tab 2 Content + + + + Tab 3 Content + + +
    +
    + +
    +
    + Tabs Pill +
    + +
    + + + Tab 1 Content + + + + Tab 2 Content + + + + Tab 3 Content + + +
    +
    + +
    +
    + Tabs Group +
    + +
    + + + Tab 1 Content + + + + Tab 2 Content + + + + Tab 3 Content + + +
    +
    + +
    +
    + Accordian +
    + +
    + +
    + Accordian 1 Content +
    +
    + + + +
    + Accordian 2 Content +
    +
    + + + +
    + Accordian 3 Content +
    +
    +
    +
    + +
    +
    + Alert +
    + +
    + +
    +
    + +

    Success alert message.

    + +
    + +
    + +

    Warning alert message.

    + +
    + +
    + +

    Error alert message.

    + +
    + +
    + +

    Info alert message.

    + +
    +
    +
    +
    + +
    +
    + Modal +
    + +
    + + + +

    Modal Title

    + +
    + + + +
    + +
    + Modal Content +
    +
    +
    +
    + +
    +
    + Table +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +
    IDNameCode
    1EuroEUR
    2EuroEUR
    + +
    +
    +
    + +
    +
    + Form Container +
    + +
    +
    +
    +
    + + + +
    + +
    + + + +
    + + +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/emails/common.blade.php b/packages/Webkul/Admin/src/Resources/views/emails/common.blade.php new file mode 100644 index 0000000..24bca6b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/emails/common.blade.php @@ -0,0 +1,25 @@ +@component('admin::emails.layouts.master') +
    + + {{ config('app.name') }} + +
    + +
    +
    +

    + {{ __('admin::app.emails.common.dear', ['name' => $name ?? '']) }}, +

    + + {!! $body !!} +
    + +
    +
    +
    + +

    + {!! __('admin::app.emails.common.cheers', ['app_name' => config('app.name')]) !!} +

    +
    +@endcomponent \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/emails/layouts/logo.blade.php b/packages/Webkul/Admin/src/Resources/views/emails/layouts/logo.blade.php new file mode 100644 index 0000000..2d435e7 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/emails/layouts/logo.blade.php @@ -0,0 +1,5 @@ +@if ($logo = core()->getCurrentChannel()->logo_url) + {{ config('app.name') }} +@else + {{ config('app.name') }} +@endif \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/emails/layouts/master.blade.php b/packages/Webkul/Admin/src/Resources/views/emails/layouts/master.blade.php new file mode 100644 index 0000000..af76a93 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/emails/layouts/master.blade.php @@ -0,0 +1,23 @@ + + + + + + + + + +
    +
    + {{ $header ?? '' }} +
    + +
    + {{ $slot }} + + {{ $subcopy ?? '' }} +
    +
    + + diff --git a/packages/Webkul/Admin/src/Resources/views/emails/users/create.blade.php b/packages/Webkul/Admin/src/Resources/views/emails/users/create.blade.php new file mode 100644 index 0000000..d475d63 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/emails/users/create.blade.php @@ -0,0 +1,19 @@ +@component('admin::emails.layouts.master') +
    + + {{ config('app.name') }} + +
    + +
    +
    +

    + {{ __('admin::app.mail.forget-password.dear', ['name' => $user_name]) }}, +

    + +

    + {{ __('admin::app.mail.user.create-body') }} +

    +
    +
    +@endcomponent \ No newline at end of file diff --git a/packages/Webkul/Admin/src/Resources/views/emails/users/forget-password.blade.php b/packages/Webkul/Admin/src/Resources/views/emails/users/forget-password.blade.php new file mode 100644 index 0000000..e2e5328 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/emails/users/forget-password.blade.php @@ -0,0 +1,35 @@ +@component('admin::emails.layouts.master') +
    + + {{ config('app.name') }} + +
    + +
    +
    +

    + {{ __('admin::app.mail.forget-password.dear', ['name' => $user_name]) }}, +

    + +

    + {{ __('admin::app.mail.forget-password.info') }} +

    + +

    + + {{ __('admin::app.mail.forget-password.reset-password') }} + +

    + +

    + {{ __('admin::app.mail.forget-password.final-summary') }} +

    + +

    + {{ __('admin::app.mail.forget-password.thanks') }} +

    + +
    +
    +@endcomponent diff --git a/packages/Webkul/Admin/src/Resources/views/errors/401.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/401.blade.php new file mode 100644 index 0000000..8cb9ff1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('You don\'t have necessary permissions to perform this action.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/403.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/403.blade.php new file mode 100644 index 0000000..9d75719 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'You are forbidden to do this action.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/404.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/404.blade.php new file mode 100644 index 0000000..f0f35bf --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/404.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Page Not Found')) +@section('code', '404') +@section('message', __('We were not able to find the page you are looking for.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/419.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/419.blade.php new file mode 100644 index 0000000..9c8c64d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('This page is expired.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/429.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/429.blade.php new file mode 100644 index 0000000..ed03e02 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('You have too many requests.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/500.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/500.blade.php new file mode 100644 index 0000000..7b73b9c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', __('Something went wrong, please try again later.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/503.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/503.blade.php new file mode 100644 index 0000000..9bef44f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('admin::errors.illustrated-layout') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service is currently unavailable, please try again later.')) diff --git a/packages/Webkul/Admin/src/Resources/views/errors/illustrated-layout.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/illustrated-layout.blade.php new file mode 100644 index 0000000..5709143 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/illustrated-layout.blade.php @@ -0,0 +1,189 @@ + + + + + + + @yield('title') + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + + + + + +

    @yield('code') - @yield('title')

    + +

    @yield('message')

    + + + +

    {{ __('Few of the links which may help you to get back on the track -') }}

    + + + + + +
    + +
    +
    + + diff --git a/packages/Webkul/Admin/src/Resources/views/errors/layout.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/layout.blade.php new file mode 100644 index 0000000..709353c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/layout.blade.php @@ -0,0 +1,57 @@ + + + + + + + @yield('title') + + + + + + + + + +
    +
    +
    + @yield('message') +
    +
    +
    + + diff --git a/packages/Webkul/Admin/src/Resources/views/errors/minimal.blade.php b/packages/Webkul/Admin/src/Resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..88ec652 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/errors/minimal.blade.php @@ -0,0 +1,531 @@ + + + + + + + @yield('title') + + + + + + + + + + +
    +
    +
    +
    + @yield('code') +
    + +
    + @yield('message') +
    +
    +
    +
    + + diff --git a/packages/Webkul/Admin/src/Resources/views/layouts/anonymous-master.blade.php b/packages/Webkul/Admin/src/Resources/views/layouts/anonymous-master.blade.php new file mode 100644 index 0000000..8e39282 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/layouts/anonymous-master.blade.php @@ -0,0 +1,103 @@ + + + + @yield('page_title') + + + + + + + + + + + + + + + + + + + + + + + + @yield('head') + + @yield('css') + @stack('css') + + {!! view_render_event('admin.anonymous-layout.head') !!} + + +getLocale() == 'ar') class="rtl" @endif> +
    + + + + +
    + +
    + + + + {!! view_render_event('admin.anonymous-layout.content.before') !!} + + @yield('content') + + {!! view_render_event('admin.layout.content.after') !!} + +
    + +
    + +
    + + + + + + +@stack('scripts') + +{!! view_render_event('admin.anonymous-layout.body.after') !!} + + diff --git a/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php b/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php new file mode 100644 index 0000000..c64fba3 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/layouts/master.blade.php @@ -0,0 +1,114 @@ + + + + @yield('page_title') + + + + + + + + + + + + + + + + + + + + + + + + @yield('head') + + @yield('css') + @stack('css') + + {!! view_render_event('admin.layout.head') !!} + + + +getLocale() == 'ar') class="rtl" @endif> +{!! view_render_event('admin.layout.body.before') !!} + +
    + + + + + {!! view_render_event('admin.layout.nav-top.before') !!} + + @include ('admin::layouts.nav-top') + + {!! view_render_event('admin.layout.nav-top.after') !!} + + + {!! view_render_event('admin.layout.nav-left.before') !!} + + @include ('admin::layouts.nav-left') + + {!! view_render_event('admin.layout.nav-left.after') !!} + + +
    + + {!! view_render_event('admin.layout.content.before') !!} + + @yield('content-wrapper') + + {!! view_render_event('admin.layout.content.after') !!} + +
    + +
    + + + + + + +@stack('scripts') + +{!! view_render_event('admin.layout.body.after') !!} + + + + diff --git a/packages/Webkul/Admin/src/Resources/views/layouts/nav-left.blade.php b/packages/Webkul/Admin/src/Resources/views/layouts/nav-left.blade.php new file mode 100644 index 0000000..b3fc1db --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/layouts/nav-left.blade.php @@ -0,0 +1,45 @@ +@php($menu = Menu::prepare()) + + diff --git a/packages/Webkul/Admin/src/Resources/views/layouts/nav-top.blade.php b/packages/Webkul/Admin/src/Resources/views/layouts/nav-top.blade.php new file mode 100644 index 0000000..42d002a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/layouts/nav-top.blade.php @@ -0,0 +1,172 @@ + diff --git a/packages/Webkul/Admin/src/Resources/views/leads/common/contact.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/common/contact.blade.php new file mode 100644 index 0000000..669ba9b --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/common/contact.blade.php @@ -0,0 +1,164 @@ +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/common/products.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/common/products.blade.php new file mode 100644 index 0000000..8868e38 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/common/products.blade.php @@ -0,0 +1,248 @@ +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/create.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/create.blade.php new file mode 100644 index 0000000..fc94678 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/create.blade.php @@ -0,0 +1,102 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.leads.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.leads.create.header.before') !!} + + + + {!! view_render_event('admin.leads.create.header.after') !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.leads.create.form_buttons.before') !!} + + + + {{ __('admin::app.leads.back') }} + + {!! view_render_event('admin.leads.create.form_buttons.after') !!} +
    + + {!! view_render_event('admin.leads.create.form_controls.before') !!} + + @csrf() + + + + + {!! view_render_event('admin.leads.create.form_controls.details.before') !!} + + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'leads', + 'quick_add' => 1 + ]), + 'customValidations' => [ + 'expected_close_date' => [ + 'date_format:yyyy-MM-dd', + 'after:' . \Carbon\Carbon::yesterday()->format('Y-m-d') + ], + ], + ]) + + + {!! view_render_event('admin.leads.create.form_controls.details.after') !!} + + + {!! view_render_event('admin.leads.create.form_controls.contact_person.before') !!} + + + @include('admin::leads.common.contact') + + + + + {!! view_render_event('admin.leads.create.form_controls.contact_person.after') !!} + + + {!! view_render_event('admin.leads.create.form_controls.products.before') !!} + + + @include('admin::leads.common.products') + + + + + {!! view_render_event('admin.leads.create.form_controls.products.after') !!} + + + {!! view_render_event('admin.leads.create.form_controls.after') !!} + +
    + +
    + +
    + +
    + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/leads/index.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/index.blade.php new file mode 100644 index 0000000..e440e2f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/index.blade.php @@ -0,0 +1,25 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.leads.title') }} +@stop + +@section('content-wrapper') + @php + $viewType = request()->view_type ?? "kanban"; + @endphp + + @if ($viewType == "table") + {!! view_render_event('admin.leads.index.table.before') !!} + + @include('admin::leads.index.table') + + {!! view_render_event('admin.leads.index.table.after') !!} + @else + {!! view_render_event('admin.leads.index.kanban.before') !!} + + @include('admin::leads.index.kanban') + + {!! view_render_event('admin.leads.index.kanban.after') !!} + @endif +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/leads/index/kanban.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/index/kanban.blade.php new file mode 100644 index 0000000..e203134 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/index/kanban.blade.php @@ -0,0 +1,311 @@ +@push('css') + +@endpush + +
    +
    +
    +

    + {!! view_render_event('admin.leads.index.header.before') !!} + + {{ Breadcrumbs::render('leads') }} + + {{ __('admin::app.leads.title') }} + + {!! view_render_event('admin.leads.index.header.after') !!} +

    + + @if (bouncer()->hasPermission('leads.create')) + + @endif +
    + +
    + + + +
    +
    +
    + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/index/table.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/index/table.blade.php new file mode 100644 index 0000000..a8d9b81 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/index/table.blade.php @@ -0,0 +1,27 @@ +
    + + + + + + + @if (bouncer()->hasPermission('leads.create')) + + @endif + +
    diff --git a/packages/Webkul/Admin/src/Resources/views/leads/index/view-swither.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/index/view-swither.blade.php new file mode 100644 index 0000000..87a9efe --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/index/view-swither.blade.php @@ -0,0 +1,50 @@ +
    +
    + @php + $pipelineRepository = app('Webkul\Lead\Repositories\PipelineRepository'); + + if (! $pipelineId = request('pipeline_id')) { + $pipelineId = $pipelineRepository->getDefaultPipeline()->id; + } + @endphp + + +
    +
    + +
    + @if (request('view_type')) + + + + + + + + @else + + + + + + + + @endif +
    diff --git a/packages/Webkul/Admin/src/Resources/views/leads/view.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/view.blade.php new file mode 100644 index 0000000..529e45f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/view.blade.php @@ -0,0 +1,334 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ $lead->title }} +@stop + +@section('css') + +@stop + +@section('content-wrapper') + +
    + + {!! view_render_event('admin.leads.view.header.before', ['lead' => $lead]) !!} + + + + {!! view_render_event('admin.leads.view.header.after', ['lead' => $lead]) !!} + + + {!! view_render_event('admin.leads.view.informations.before', ['lead' => $lead]) !!} + +
    + +
    + {!! view_render_event('admin.leads.view.informations.details.before', ['lead' => $lead]) !!} + +
    +
    + {{ __('admin::app.leads.details') }} + + @if (($days = $lead->rotten_days) > 0) + + + {{ __('admin::app.leads.rotten-info', ['days' => $days]) }} + + @endif +
    + +
    + +
    + @include('admin::common.custom-attributes.view', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'leads', + ]), + 'entity' => $lead, + ]) + + @if ($lead->stage->code == 'lost') +
    +
    {{ __('admin::app.leads.lost-reason') }}
    +
    {{ $lead->lost_reason }}
    +
    + @endif +
    + +
    +
    + + {!! view_render_event('admin.leads.view.informations.details.after', ['lead' => $lead]) !!} + + + {!! view_render_event('admin.leads.view.informations.contact_person.before', ['lead' => $lead]) !!} + +
    +
    + {{ __('admin::app.leads.contact-person') }} +
    + +
    + + + +
    +
    Email
    + +
    + @include ('admin::common.custom-attributes.view.email', ['value' => $lead->person->emails]) +
    +
    + +
    +
    Contact Numbers
    + +
    + @include ('admin::common.custom-attributes.view.phone', ['value' => $lead->person->contact_numbers]) +
    +
    + +
    +
    Organization
    + +
    + @if ($lead->person->organization) + + {{ $lead->person->organization->name }} + + @else + {{ __('admin::app.common.not-available') }} + @endif +
    +
    +
    +
    + + {!! view_render_event('admin.leads.view.informations.contact_person.after', ['lead' => $lead]) !!} + + + {!! view_render_event('admin.leads.view.informations.products.before', ['lead' => $lead]) !!} + +
    +
    + {{ __('admin::app.leads.products') }} +
    + +
    + @if ($lead->products->count()) +
    + + @foreach ($lead->products as $product) + +
    +
    +
    + + +
    + {{ $product->name }} +
    +
    +
    + +
    +
    + + +
    + {{ $product->price }} +
    +
    + +
    + + +
    + {{ $product->quantity }} +
    +
    + +
    + + +
    + {{ $product->price * $product->quantity }} +
    +
    +
    +
    + @endforeach + +
    + @else +
    + + + {{ __('admin::app.common.no-records-found') }} +
    + @endif +
    +
    + + {!! view_render_event('admin.leads.view.informations.products.after', ['lead' => $lead]) !!} +
    + +
    + + @include('admin::leads.view.stage') + + @include('admin::leads.view.activity-action') + + @include('admin::leads.view.activity-list') +
    + +
    + + {!! view_render_event('admin.leads.view.informations.after', ['lead' => $lead]) !!} +
    + + +@stop + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/view/activity-action.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/view/activity-action.blade.php new file mode 100644 index 0000000..383fef4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/view/activity-action.blade.php @@ -0,0 +1,577 @@ +{!! view_render_event('admin.leads.view.informations.activity_actions.before', ['lead' => $lead]) !!} + + + +{!! view_render_event('admin.leads.view.informations.activity_actions.after', ['lead' => $lead]) !!} + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/view/activity-list.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/view/activity-list.blade.php new file mode 100644 index 0000000..305d2ee --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/view/activity-list.blade.php @@ -0,0 +1,465 @@ +{!! view_render_event('admin.leads.view.informations.activity_list.before', ['lead' => $lead]) !!} + + + +{!! view_render_event('admin.leads.view.informations.activity_list.after', ['lead' => $lead]) !!} + +@push('scripts') + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/view/stage.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/view/stage.blade.php new file mode 100644 index 0000000..ce61161 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/view/stage.blade.php @@ -0,0 +1,218 @@ +{!! view_render_event('admin.leads.view.informations.stages.before', ['lead' => $lead]) !!} + + + +{!! view_render_event('admin.leads.view.informations.stages.after', ['lead' => $lead]) !!} + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/leads/view/tags.blade.php b/packages/Webkul/Admin/src/Resources/views/leads/view/tags.blade.php new file mode 100644 index 0000000..cb27fd1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/leads/view/tags.blade.php @@ -0,0 +1,249 @@ +{!! view_render_event('admin.leads.view.header.tags.before', ['lead' => $lead]) !!} + + + +{!! view_render_event('admin.leads.view.header.tags.after', ['lead' => $lead]) !!} + + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/mail/compose.blade.php b/packages/Webkul/Admin/src/Resources/views/mail/compose.blade.php new file mode 100644 index 0000000..0d0bbfa --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/mail/compose.blade.php @@ -0,0 +1,230 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.mail.compose') }} +@stop + +@section('content-wrapper') +
    + + {!! view_render_event('admin.mail.compose.header.before', ['email' => $email ?? null]) !!} + + + + {!! view_render_event('admin.mail.compose.header.after', ['email' => $email ?? null]) !!} + +
    + + + +
    + +
    +@stop + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/mail/index.blade.php b/packages/Webkul/Admin/src/Resources/views/mail/index.blade.php new file mode 100644 index 0000000..300955a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/mail/index.blade.php @@ -0,0 +1,23 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.mail.' . request('route')) }} +@stop + +@section('content-wrapper') +
    + + + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/mail/view.blade.php b/packages/Webkul/Admin/src/Resources/views/mail/view.blade.php new file mode 100644 index 0000000..8ee561c --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/mail/view.blade.php @@ -0,0 +1,1020 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ $email->subject }} +@stop + +@section('css') + +@stop + +@section('content-wrapper') + + @php + if (! $email->lead) { + $email->lead = app('\Webkul\Lead\Repositories\LeadRepository')->getModel()->fill(['title' => $email->subject]); + } + + if (! $email->person) { + $email->person = app('\Webkul\Contact\Repositories\PersonRepository')->getModel()->fill(['emails' => [['value' => $email->from, 'label' => 'work']], 'name' => $email->name]); + } + @endphp + +
    + + {!! view_render_event('admin.mail.view.header.before', ['email' => $email]) !!} + + + + {!! view_render_event('admin.mail.view.header.after', ['email' => $email]) !!} + + +
    + + {!! view_render_event('admin.mail.view.list.before', ['email' => $email]) !!} + + + + {!! view_render_event('admin.mail.view.list.after', ['email' => $email]) !!} + +
    +
    + +
    + + +

    {{ __('admin::app.contacts.persons.create-title') }}

    + +
    + {!! view_render_event('admin.mail.view.actions.persons.create.form_buttons.before', ['email' => $email]) !!} + + + + + + {!! view_render_event('admin.mail.view.actions.persons.create.form_buttons.after', ['email' => $email]) !!} +
    + +
    + {!! view_render_event('admin.mail.view.actions.persons.create.form_controls.before', ['email' => $email]) !!} + + @csrf() + + + + + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'persons', + 'quick_add' => 1 + ]), + 'entity' => $email->person, + 'formScope' => 'person-form.', + ]) + + {!! view_render_event('admin.mail.view.actions.persons.create.form_controls.after', ['email' => $email]) !!} +
    +
    + +
    + +
    + + +

    {{ __('admin::app.leads.create-title') }}

    + +
    + {!! view_render_event('admin.mail.view.actions.leads.create.form_buttons.before', ['email' => $email]) !!} + + + + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_buttons.after', ['email' => $email]) !!} +
    + +
    + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.before', ['email' => $email]) !!} + + @csrf() + + + + + + + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.details.before', ['email' => $email]) !!} + + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'leads', + 'quick_add' => 1 + ]), + 'formScope' => 'lead-form.', + 'entity' => $email->lead, + ]) + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.details.after', ['email' => $email]) !!} + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.contact_person.before', ['email' => $email]) !!} + + + @include('admin::leads.common.contact', ['formScope' => 'lead-form.']) + + + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.contact_person.after', ['email' => $email]) !!} + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.products.before', ['email' => $email]) !!} + + + @include('admin::leads.common.products', ['formScope' => 'lead-form.']) + + + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.products.after', ['email' => $email]) !!} + + + {!! view_render_event('admin.mail.view.actions.leads.create.form_controls.after', ['email' => $email]) !!} +
    +
    + +
    +@stop + +@push('scripts') + + + + + + + + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/products/create.blade.php b/packages/Webkul/Admin/src/Resources/views/products/create.blade.php new file mode 100644 index 0000000..5233e08 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/products/create.blade.php @@ -0,0 +1,64 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.products.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.products.create.header.before') !!} + + + + {!! view_render_event('admin.products.create.header.after') !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.products.create.form_buttons.before') !!} + + + + {{ __('admin::app.products.back') }} + + {!! view_render_event('admin.products.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.products.create.form_controls.before') !!} + + @csrf() + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'products', + ]), + ]) + + {!! view_render_event('admin.products.create.form_controls.after') !!} + +
    +
    + +
    + +
    + +
    + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/products/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/products/edit.blade.php new file mode 100644 index 0000000..25b6eef --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/products/edit.blade.php @@ -0,0 +1,67 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.products.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.products.edit.header.before', ['product' => $product]) !!} + + + + {!! view_render_event('admin.products.edit.header.after', ['product' => $product]) !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.products.edit.form_buttons.before', ['product' => $product]) !!} + + + + {{ __('admin::app.products.back') }} + + {!! view_render_event('admin.products.edit.form_buttons.after', ['product' => $product]) !!} +
    + +
    + {!! view_render_event('admin.products.edit.form_controls.before', ['product' => $product]) !!} + + @csrf() + + + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository')->findWhere([ + 'entity_type' => 'products', + ]), + 'entity' => $product, + ]) + + {!! view_render_event('admin.products.edit.form_controls.after', ['product' => $product]) !!} + +
    +
    + +
    + +
    + +
    + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/products/index.blade.php b/packages/Webkul/Admin/src/Resources/views/products/index.blade.php new file mode 100644 index 0000000..c28f95a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/products/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.products.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('products.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/quotes/create.blade.php b/packages/Webkul/Admin/src/Resources/views/quotes/create.blade.php new file mode 100644 index 0000000..a143294 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/quotes/create.blade.php @@ -0,0 +1,666 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.quotes.create-title') }} +@stop + +@section('content-wrapper') + @php + $quote = app('\Webkul\Quote\Repositories\QuoteRepository')->getModel(); + + if (isset($lead)) { + $quote->fill([ + 'person_id' => $lead->person_id, + 'user_id' => $lead->user_id, + 'billing_address' => $lead->person->organization ? $lead->person->organization->address : null + ]); + } + @endphp + +
    + {!! view_render_event('admin.quotes.create.header.before') !!} + + + + {!! view_render_event('admin.quotes.create.header.after') !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.quotes.create.form_buttons.before') !!} + + + + {{ __('admin::app.quotes.back') }} + + {!! view_render_event('admin.quotes.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.quotes.create.form_controls.before') !!} + + @csrf() + + {!! view_render_event('admin.quotes.create.form_controls.information.before') !!} + + +
    + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository') + ->scopeQuery(function($query) { + return $query + ->where('entity_type', 'quotes') + ->whereIn('code', [ + 'user_id', + 'subject', + 'description', + 'expired_at', + 'person_id', + ]); + })->get(), + 'customValidations' => [ + 'expired_at' => [ + 'required', + 'date_format:yyyy-MM-dd', + 'after:' . \Carbon\Carbon::yesterday()->format('Y-m-d') + ], + ], + 'entity' => $quote, + ]) + +
    + + + @include('admin::common.custom-attributes.edit.lookup') + + @php + $lookUpEntityData = app('Webkul\Attribute\Repositories\AttributeRepository') + ->getLookUpEntity('leads', request('id')); + @endphp + + +
    + +
    +
    + + {!! view_render_event('admin.quotes.create.form_controls.information.after') !!} + + + {!! view_render_event('admin.quotes.create.form_controls.address.before') !!} + + +
    + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository') + ->scopeQuery(function($query){ + return $query + ->where('entity_type', 'quotes') + ->whereIn('code', [ + 'billing_address', + 'shipping_address', + ]); + })->get(), + 'entity' => $quote, + ]) + +
    +
    + + {!! view_render_event('admin.quotes.create.form_controls.address.after') !!} + + + {!! view_render_event('admin.quotes.create.form_controls.items.before') !!} + + +
    + + + +
    +
    + + {!! view_render_event('admin.quotes.create.form_controls.items.after') !!} + + {!! view_render_event('admin.quotes.create.form_controls.after') !!} +
    +
    + +
    + +
    + +
    + +
    +@stop + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/quotes/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/quotes/edit.blade.php new file mode 100644 index 0000000..7e58b81 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/quotes/edit.blade.php @@ -0,0 +1,669 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.quotes.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.quotes.edit.header.before', ['quote' => $quote]) !!} + + + + {!! view_render_event('admin.quotes.edit.header.after', ['quote' => $quote]) !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.quotes.edit.form_buttons.before', ['quote' => $quote]) !!} + + + + {{ __('admin::app.quotes.back') }} + + {!! view_render_event('admin.quotes.edit.form_buttons.after', ['quote' => $quote]) !!} +
    + +
    + {!! view_render_event('admin.quotes.edit.form_controls.before', ['quote' => $quote]) !!} + + @csrf() + + + + {!! view_render_event('admin.quotes.edit.form_controls.information.before', ['quote' => $quote]) !!} + + +
    + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository') + ->scopeQuery(function($query){ + return $query + ->where('entity_type', 'quotes') + ->whereIn('code', [ + 'user_id', + 'subject', + 'description', + 'expired_at', + 'person_id', + ]); + })->get(), + 'customValidations' => [ + 'expired_at' => [ + 'required', + 'date_format:yyyy-MM-dd', + 'after:' . \Carbon\Carbon::yesterday()->format('Y-m-d') + ], + ], + 'entity' => $quote, + ]) + +
    + + + @include('admin::common.custom-attributes.edit.lookup') + + @php + $lookUpEntityData = app('Webkul\Attribute\Repositories\AttributeRepository') + ->getLookUpEntity( + 'leads', + old('lead_id') + ?: ( + ($lead = $quote->leads()->first()) + ? $lead->id + : null + ) + ); + @endphp + + +
    + +
    +
    + + {!! view_render_event('admin.quotes.edit.form_controls.information.after', ['quote' => $quote]) !!} + + + {!! view_render_event('admin.quotes.edit.form_controls.address.before', ['quote' => $quote]) !!} + + +
    + + @include('admin::common.custom-attributes.edit', [ + 'customAttributes' => app('Webkul\Attribute\Repositories\AttributeRepository') + ->scopeQuery(function($query){ + return $query + ->where('entity_type', 'quotes') + ->whereIn('code', [ + 'billing_address', + 'shipping_address', + ]); + })->get(), + 'entity' => $quote, + ]) + +
    +
    + + {!! view_render_event('admin.quotes.edit.form_controls.address.after', ['quote' => $quote]) !!} + + + {!! view_render_event('admin.quotes.edit.form_controls.items.before', ['quote' => $quote]) !!} + + +
    + + + +
    +
    + + {!! view_render_event('admin.quotes.edit.form_controls.items.after', ['quote' => $quote]) !!} + + {!! view_render_event('admin.quotes.edit.form_controls.after', ['quote' => $quote]) !!} +
    +
    + +
    + +
    + +
    + +
    +@stop + +@push('scripts') + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/quotes/index.blade.php b/packages/Webkul/Admin/src/Resources/views/quotes/index.blade.php new file mode 100644 index 0000000..486923d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/quotes/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.quotes.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('quotes.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/quotes/pdf.blade.php b/packages/Webkul/Admin/src/Resources/views/quotes/pdf.blade.php new file mode 100644 index 0000000..cb01c2f --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/quotes/pdf.blade.php @@ -0,0 +1,253 @@ + + + + + + + + + + +
    + +
    +
    +
    +

    {{ __('admin::app.quotes.quote') }}

    +
    +
    + +
    + {{-- --}} +
    +
    + +
    +
    + {{ __('admin::app.quotes.quote-id') }} - + #{{ $quote->id }} +
    + +
    + {{ __('admin::app.quotes.quote-date') }} - + {{ $quote->created_at->format('d-m-Y') }} +
    + +
    + {{ __('admin::app.quotes.valid-until') }} - + {{ $quote->expired_at->format('d-m-Y') }} +
    + +
    + {{ __('admin::app.quotes.sales-person') }} - + {{ $quote->user->name }} +
    + +
    + + + + + + @if ($quote->shipping_address) + + @endif + + + + + + @if ($quote->billing_address) + + @endif + + @if ($quote->shipping_address) + + @endif + + +
    {{ __('admin::app.quotes.bill-to') }}{{ __('admin::app.quotes.ship-to') }}
    +

    {{ $quote->billing_address['address'] }}

    +

    {{ $quote->billing_address['postcode'] . ' ' .$quote->billing_address['city'] }}

    +

    {{ $quote->billing_address['state'] }}

    +

    {{ core()->country_name($quote->billing_address['country']) }}

    +
    +

    {{ $quote->shipping_address['address'] }}

    +

    {{ $quote->shipping_address['postcode'] . ' ' .$quote->shipping_address['city'] }}

    +

    {{ $quote->shipping_address['state'] }}

    +

    {{ core()->country_name($quote->shipping_address['country']) }}

    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + @foreach ($quote->items as $item) + + + + + + + + + + + + + + + + + + @endforeach + + +
    {{ __('admin::app.quotes.sku') }}{{ __('admin::app.quotes.product-name') }}{{ __('admin::app.quotes.price') }}{{ __('admin::app.quotes.quantity') }}{{ __('admin::app.quotes.amount') }}{{ __('admin::app.quotes.discount') }}{{ __('admin::app.quotes.tax') }}{{ __('admin::app.quotes.grand-total') }}
    {{ $item->sku }} + {{ $item->name }} + {!! core()->formatBasePrice($item->price, true) !!}{{ $item->quantity }}{!! core()->formatBasePrice($item->total, true) !!}{!! core()->formatBasePrice($item->discount_amount, true) !!}{!! core()->formatBasePrice($item->tax_amount, true) !!}{!! core()->formatBasePrice($item->total + $item->tax_amount, true) !!}
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    {{ __('admin::app.quotes.sub-total') }}-{!! core()->formatBasePrice($quote->sub_total, true) !!}
    {{ __('admin::app.quotes.tax') }}-{!! core()->formatBasePrice($quote->tax_amount, true) !!}
    {{ __('admin::app.quotes.discount') }}-{!! core()->formatBasePrice($quote->discount_amount, true) !!}
    {{ __('admin::app.quotes.adjustment') }}-{!! core()->formatBasePrice($quote->adjustment_amount, true) !!}
    {{ __('admin::app.quotes.grand-total') }}-{!! core()->formatBasePrice($quote->grand_total, true) !!}
    + +
    + +
    + + diff --git a/packages/Webkul/Admin/src/Resources/views/sessions/forgot-password.blade.php b/packages/Webkul/Admin/src/Resources/views/sessions/forgot-password.blade.php new file mode 100644 index 0000000..a625982 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sessions/forgot-password.blade.php @@ -0,0 +1,57 @@ +@extends('admin::layouts.anonymous-master') + +@section('page_title') + {{ __('admin::app.sessions.forgot-password.title') }} +@stop + +@section('content') + +
    +
    + +
    +

    {{ __('admin::app.sessions.forgot-password.title') }}

    + +
    + {!! view_render_event('admin.sessions.forgot_password.form_controls.before') !!} + + @csrf + +
    + + + + + + @{{ errors.first('email') }} + +
    + + {{ __('admin::app.sessions.forgot-password.back-to-login') }} + + {!! view_render_event('admin.sessions.forgot_password.form_controls.after') !!} + +
    + {!! view_render_event('admin.sessions.forgot_password.form_buttons.before') !!} + + + + {!! view_render_event('admin.sessions.forgot_password.form_buttons.after') !!} +
    +
    +
    + +
    +
    + +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/sessions/login.blade.php b/packages/Webkul/Admin/src/Resources/views/sessions/login.blade.php new file mode 100644 index 0000000..1c43020 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sessions/login.blade.php @@ -0,0 +1,88 @@ +@extends('admin::layouts.anonymous-master') + +@section('page_title') + {{ __('admin::app.sessions.login.title') }} +@stop + +@section('content') +
    +
    + +
    +

    {{ __('admin::app.sessions.login.welcome') }}

    + +
    + {!! view_render_event('admin.sessions.login.form_controls.before') !!} + + @csrf + +
    + + + + + + @{{ errors.first('email') }} + +
    + +
    + + + + + + @{{ errors.first('password') }} + +
    + + {!! view_render_event('admin.sessions.login.form_controls.after') !!} + + {{ __('admin::app.sessions.login.forgot-password') }} + +
    + {!! view_render_event('admin.sessions.login.form_buttons.before') !!} + + + + {!! view_render_event('admin.sessions.login.form_buttons.after') !!} +
    +
    +
    +
    +
    +@stop + +@push('scripts') + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/sessions/reset-password.blade.php b/packages/Webkul/Admin/src/Resources/views/sessions/reset-password.blade.php new file mode 100644 index 0000000..b90471a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/sessions/reset-password.blade.php @@ -0,0 +1,93 @@ +@extends('admin::layouts.anonymous-master') + +@section('page_title') + {{ __('admin::app.sessions.reset-password.title') }} +@stop + +@section('content') + +
    +
    + +
    +

    {{ __('admin::app.sessions.reset-password.title') }}

    + +
    + {!! view_render_event('admin.sessions.reset_password.form_controls.before') !!} + + @csrf + + + +
    + + + + + + @{{ errors.first('email') }} + +
    + +
    + + + + + + @{{ errors.first('password') }} + +
    + +
    + + + + + + @{{ errors.first('password_confirmation') }} + +
    + + {!! view_render_event('admin.sessions.reset_password.form_controls.after') !!} + +
    + {!! view_render_event('admin.sessions.reset_password.form_buttons.before') !!} + + + + {!! view_render_event('admin.sessions.reset_password.form_buttons.after') !!} +
    +
    +
    + +
    +
    + +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/attributes/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/attributes/create.blade.php new file mode 100644 index 0000000..fc5479d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/attributes/create.blade.php @@ -0,0 +1,319 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.attributes.create-title') }} +@stop + +@push('css') + +@endpush + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.attributes.create.header.before') !!} + + + + {!! view_render_event('admin.settings.attributes.create.header.after') !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.settings.attributes.create.form_buttons.before') !!} + + + + {{ __('admin::app.settings.attributes.back') }} + + {!! view_render_event('admin.settings.attributes.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.attributes.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('code') }} + +
    + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + +
    + + {!! view_render_event('admin.settings.attributes.create.form_controls.after') !!} +
    +
    +
    +
    +
    +
    +@stop + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/attributes/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/attributes/edit.blade.php new file mode 100644 index 0000000..a0a8f02 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/attributes/edit.blade.php @@ -0,0 +1,385 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.attributes.edit-title') }} +@stop + +@push('css') + +@endpush + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.attributes.edit.header.before', ['attribute' => $attribute]) !!} + + + + {!! view_render_event('admin.settings.attributes.edit.header.after', ['attribute' => $attribute]) !!} + +
    + +
    +
    + +
    +
    + {!! view_render_event('admin.settings.attributes.edit.form_buttons.before', ['attribute' => $attribute]) !!} + + + + {{ __('admin::app.settings.attributes.back') }} + + {!! view_render_event('admin.settings.attributes.edit.form_buttons.after', ['attribute' => $attribute]) !!} +
    + +
    + {!! view_render_event('admin.settings.attributes.edit.form_controls.before', ['attribute' => $attribute]) !!} + + @csrf() + + + +
    + + + + + + + + @{{ errors.first('code') }} + +
    + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + entity_type ?> + + +
    + +
    + type ?> + + + + + +
    + +
    + + + +
    + +
    + + + +
    + +
    + + + + + +
    + + @if ($attribute->type == 'text') +
    + validation ?> + + + + +
    + @endif + + {!! view_render_event('admin.settings.attributes.edit.form_controls.after', ['attribute' => $attribute]) !!} +
    +
    +
    +
    +
    +
    +@stop + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/attributes/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/attributes/index.blade.php new file mode 100644 index 0000000..30b9c55 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/attributes/index.blade.php @@ -0,0 +1,31 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.attributes.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.automation.attributes.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/email-templates/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/email-templates/create.blade.php new file mode 100644 index 0000000..8c560ec --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/email-templates/create.blade.php @@ -0,0 +1,197 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.email-templates.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.email_templates.create.header.before') !!} + + + + {!! view_render_event('admin.settings.email_templates.create.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.email_templates.create.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.email_templates.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.email_templates.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + +
    +
    + + +
    + +
    + + + @{{ errors.first('subject') }} + +
    +
    +
    + +
    + + + + + + @{{ errors.first('content') }} + +
    + + {!! view_render_event('admin.settings.email_templates.create.form_controls.after') !!} +
    +
    +
    +
    +
    +
    +@stop + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/email-templates/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/email-templates/edit.blade.php new file mode 100644 index 0000000..2cba30e --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/email-templates/edit.blade.php @@ -0,0 +1,200 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.email-templates.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.email_templates.edit.header.before', ['emailTemplate' => $emailTemplate]) !!} + + + + {!! view_render_event('admin.settings.email_templates.edit.header.after', ['emailTemplate' => $emailTemplate]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.email_templates.edit.form_buttons.before', ['emailTemplate' => $emailTemplate]) !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.email_templates.edit.form_buttons.after', ['emailTemplate' => $emailTemplate]) !!} +
    + +
    + {!! view_render_event('admin.settings.email_templates.edit.form_controls.before', ['emailTemplate' => $emailTemplate]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + +
    +
    + + +
    + +
    + + + @{{ errors.first('subject') }} + +
    +
    +
    + +
    + + + + + + @{{ errors.first('content') }} + +
    + + {!! view_render_event('admin.settings.email_templates.edit.form_controls.after', ['emailTemplate' => $emailTemplate]) !!} +
    +
    +
    +
    +
    +
    +@stop + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/email-templates/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/email-templates/index.blade.php new file mode 100644 index 0000000..9127fa0 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/email-templates/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.email-templates.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.automation.email_templates.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/groups/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/groups/create.blade.php new file mode 100644 index 0000000..d070754 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/groups/create.blade.php @@ -0,0 +1,90 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.groups.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.groups.create.header.before') !!} + + + + {!! view_render_event('admin.settings.groups.create.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.groups.create.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.groups.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.groups.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('description') }} + +
    + + {!! view_render_event('admin.settings.groups.create.form_controls.after') !!} +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/groups/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/groups/edit.blade.php new file mode 100644 index 0000000..37d2ccf --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/groups/edit.blade.php @@ -0,0 +1,93 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.groups.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.groups.edit.header.before', ['group' => $group]) !!} + + + + {!! view_render_event('admin.settings.groups.edit.header.after', ['group' => $group]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.groups.edit.form_buttons.before', ['group' => $group]) !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.groups.edit.form_buttons.after', ['group' => $group]) !!} +
    + +
    + {!! view_render_event('admin.settings.groups.edit.form_controls.before', ['group' => $group]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('description') }} + +
    + + {!! view_render_event('admin.settings.groups.edit.form_controls.after', ['group' => $group]) !!} +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/groups/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/groups/index.blade.php new file mode 100644 index 0000000..5e8e653 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/groups/index.blade.php @@ -0,0 +1,31 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.groups.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.user.groups.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/index.blade.php new file mode 100644 index 0000000..fe7dd96 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/index.blade.php @@ -0,0 +1,58 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.title') }} +@stop + +@section('content-wrapper') +
    + + + +
    + @php($menu = Menu::prepare()) + + @foreach ($menu->items['settings']['children'] as $setting) +
    +
    +

    {{ $setting['name'] }}

    + +

    {{ __($setting['info']) }}

    +
    + +
    + +
    +
    + @endforeach +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/pipelines/common/pipeline-components-helper.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/common/pipeline-components-helper.blade.php new file mode 100644 index 0000000..740f55a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/common/pipeline-components-helper.blade.php @@ -0,0 +1,85 @@ +@push('scripts') + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/pipelines/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/create.blade.php new file mode 100644 index 0000000..44e0e58 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/create.blade.php @@ -0,0 +1,250 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.pipelines.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.pipelines.create.header.before') !!} + + + + {!! view_render_event('admin.settings.pipelines.create.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.pipelines.create.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.pipelines.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.pipelines.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('rotten_days') }} + +
    + +
    + + + +
    + + + + {!! view_render_event('admin.settings.pipelines.create.form_controls.after') !!} +
    +
    +
    +
    +
    +
    +@stop + +@include('admin::settings.pipelines.common.pipeline-components-helper') + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/pipelines/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/edit.blade.php new file mode 100644 index 0000000..02fe666 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/edit.blade.php @@ -0,0 +1,237 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.pipelines.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.pipelines.edit.header.before', ['pipeline' => $pipeline]) !!} + + + + {!! view_render_event('admin.settings.pipelines.edit.header.after', ['pipeline' => $pipeline]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.pipelines.edit.form_buttons.before', ['pipeline' => $pipeline]) !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.pipelines.edit.form_buttons.after', ['pipeline' => $pipeline]) !!} +
    + +
    + {!! view_render_event('admin.settings.pipelines.edit.form_controls.before', ['pipeline' => $pipeline]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('rotten_days') }} + +
    + + @if ($pipeline->is_default) + + @else +
    + + + +
    + @endif + + + + {!! view_render_event('admin.settings.pipelines.edit.form_controls.after', ['pipeline' => $pipeline]) !!} +
    +
    +
    +
    +
    +
    +@stop + +@include('admin::settings.pipelines.common.pipeline-components-helper') + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/pipelines/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/index.blade.php new file mode 100644 index 0000000..74089e9 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/pipelines/index.blade.php @@ -0,0 +1,31 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.pipelines.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.lead.pipelines.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/roles/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/roles/create.blade.php new file mode 100644 index 0000000..4bbe06d --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/roles/create.blade.php @@ -0,0 +1,135 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.roles.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.roles.create.header.before') !!} + + + + {!! view_render_event('admin.settings.roles.create.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.roles.create.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.roles.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.roles.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('description') }} + +
    + +
    + + + + + + @{{ errors.first('permission_type') }} + +
    + +
    + +
    + + {!! view_render_event('admin.settings.roles.create.form_controls.after') !!} +
    +
    +
    +
    +
    +
    +@stop + +@push('scripts') + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/roles/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/roles/edit.blade.php new file mode 100644 index 0000000..697193a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/roles/edit.blade.php @@ -0,0 +1,141 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.roles.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.roles.edit.header.before', ['role' => $role]) !!} + + + + {!! view_render_event('admin.settings.roles.edit.header.after', ['role' => $role]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.roles.edit.form_buttons.before', ['role' => $role]) !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.roles.edit.form_buttons.after', ['role' => $role]) !!} +
    + +
    + {!! view_render_event('admin.settings.roles.edit.form_controls.before', ['role' => $role]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('description') }} + +
    + +
    + + + permission_type ?> + + + + + @{{ errors.first('permission_type') }} + +
    + +
    + +
    + + {!! view_render_event('admin.settings.roles.edit.form_controls.after', ['role' => $role]) !!} +
    +
    +
    +
    +
    +
    +@stop + +@push('scripts') + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/roles/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/roles/index.blade.php new file mode 100644 index 0000000..942a734 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/roles/index.blade.php @@ -0,0 +1,31 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.roles.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.user.roles.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/sources/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/sources/edit.blade.php new file mode 100644 index 0000000..c9b2918 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/sources/edit.blade.php @@ -0,0 +1,75 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.sources.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.sources.edit.header.before', ['source' => $source]) !!} + + + + {!! view_render_event('admin.settings.sources.edit.header.after', ['source' => $source]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.sources.edit.form_buttons.before', ['source' => $source]) !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.sources.edit.form_buttons.after', ['source' => $source]) !!} +
    + +
    + {!! view_render_event('admin.settings.sources.edit.form_controls.before', ['source' => $source]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + + {!! view_render_event('admin.settings.sources.edit.form_controls.after', ['source' => $source]) !!} +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/sources/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/sources/index.blade.php new file mode 100644 index 0000000..5f08f97 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/sources/index.blade.php @@ -0,0 +1,75 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.sources.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.lead.sources.create')) + + @endif + +
    + +
    + +

    {{ __('admin::app.settings.sources.create-title') }}

    + +
    + {!! view_render_event('admin.settings.sources.create.form_buttons.before') !!} + + + + + + {!! view_render_event('admin.settings.sources.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.sources.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + + {!! view_render_event('admin.settings.sources.create.form_controls.after') !!} +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/tags/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/tags/edit.blade.php new file mode 100644 index 0000000..4c423b4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/tags/edit.blade.php @@ -0,0 +1,144 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.tags.edit-title') }} +@stop + +@section('css') + +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.tags.edit.header.before') !!} + + + + {!! view_render_event('admin.settings.tags.edit.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.tags.edit.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.tags.edit.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.tags.edit.form_controls.before') !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + +
    + + color == "#337CFF" ? 'checked' : '' }}> + + + + + color == "#FEBF00" ? 'checked' : '' }}> + + + + + color == "#E5549F" ? 'checked' : '' }}> + + + + + color == "#27B6BB" ? 'checked' : '' }}> + + + + + color == "#FB8A3F" ? 'checked' : '' }}> + + + + + color == "#337CFF" ? 'checked' : '' }}> + + +
    +
    + + {!! view_render_event('admin.settings.tags.edit.form_controls.after') !!} +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/tags/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/tags/index.blade.php new file mode 100644 index 0000000..8573257 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/tags/index.blade.php @@ -0,0 +1,145 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.tags.title') }} +@stop + +@section('css') + +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.other_settings.tags.create')) + + @endif + +
    + +
    + +

    {{ __('admin::app.settings.tags.create-title') }}

    + +
    + {!! view_render_event('admin.settings.tags.create.form_buttons.before') !!} + + + + + + {!! view_render_event('admin.settings.tags.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.tags.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + {!! view_render_event('admin.settings.tags.create.form_controls.after') !!} +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/types/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/types/edit.blade.php new file mode 100644 index 0000000..2897bed --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/types/edit.blade.php @@ -0,0 +1,75 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.types.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.types.edit.header.before', ['type' => $type]) !!} + + + + {!! view_render_event('admin.settings.types.edit.header.after', ['type' => $type]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.types.edit.form_buttons.before', ['type' => $type]) !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.types.edit.form_buttons.after', ['type' => $type]) !!} +
    + +
    + {!! view_render_event('admin.settings.types.edit.form_controls.before', ['type' => $type]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + + {!! view_render_event('admin.settings.types.edit.form_controls.after', ['type' => $type]) !!} +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/types/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/types/index.blade.php new file mode 100644 index 0000000..67cb2e4 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/types/index.blade.php @@ -0,0 +1,75 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.types.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.lead.types.create')) + + @endif + +
    + +
    + +

    {{ __('admin::app.settings.types.create-title') }}

    + +
    + {!! view_render_event('admin.settings.types.create.form_buttons.before') !!} + + + + + + {!! view_render_event('admin.settings.types.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.types.create.form_controls.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + + {!! view_render_event('admin.settings.types.create.form_controls.after') !!} +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/users/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/users/create.blade.php new file mode 100644 index 0000000..9061b05 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/users/create.blade.php @@ -0,0 +1,228 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.users.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.users.create.header.before') !!} + + + + {!! view_render_event('admin.settings.users.create.header.after') !!} + +
    +
    +
    + +
    +
    + {!! view_render_event('admin.settings.users.create.form_buttons.before') !!} + + + + + {{ __('admin::app.settings.users.back') }} + + + {!! view_render_event('admin.settings.users.create.form_buttons.after') !!} +
    + + + + {!! view_render_event('admin.settings.users.create.form_controls.general.before') !!} + + @csrf() + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('email') }} + +
    + +
    + + + +
    + +
    + + + + + + @{{ errors.first('password') }} + +
    + +
    + + + + + + @{{ errors.first('confirm_password') }} + +
    + + {!! view_render_event('admin.settings.users.create.form_controls.general.after') !!} +
    + + + {!! view_render_event('admin.settings.users.create.form_controls.permission.before') !!} + +
    + + + +
    + +
    + + + + + + @{{ errors.first('role_id') }} + +
    + +
    + + + + + + @{{ errors.first('view_permission') }} + +
    + + {!! view_render_event('admin.settings.users.create.form_controls.permission.after') !!} +
    +
    +
    + +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/users/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/users/edit.blade.php new file mode 100644 index 0000000..537945a --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/users/edit.blade.php @@ -0,0 +1,244 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.users.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.users.edit.header.before', ['admin' => $admin]) !!} + + + + {!! view_render_event('admin.settings.users.edit.header.after', ['admin' => $admin]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.users.edit.form_buttons.before', ['admin' => $admin]) !!} + + + + + {{ __('admin::app.settings.users.back') }} + + + {!! view_render_event('admin.settings.users.edit.form_buttons.after', ['admin' => $admin]) !!} +
    + + + + {!! view_render_event('admin.settings.users.edit.form_controls.general.before', ['admin' => $admin]) !!} + + @csrf() + + + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('email') }} + +
    + + @if ($admin->id != auth()->guard('user')->user()->id) +
    + + + +
    + @endif + +
    + + + + + + @{{ errors.first('password') }} + +
    + +
    + + + + + + @{{ errors.first('confirm_password') }} + +
    + + {!! view_render_event('admin.settings.users.edit.form_controls.general.after', ['admin' => $admin]) !!} +
    + + + {!! view_render_event('admin.settings.users.edit.form_controls.permission.before', ['admin' => $admin]) !!} + +
    + + + groups->pluck('id')->toArray() ?> + + +
    + +
    + + + role_id ?> + + + + + @{{ errors.first('role_id') }} + +
    + +
    + + + view_permission ?> + + + + + @{{ errors.first('view_permission') }} + +
    + + {!! view_render_event('admin.settings.users.edit.form_controls.permission.after', ['admin' => $admin]) !!} +
    +
    +
    +
    +
    +
    +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/users/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/users/index.blade.php new file mode 100644 index 0000000..a1fc60e --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/users/index.blade.php @@ -0,0 +1,31 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.users.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.user.users.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/settings/workflows/create.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/workflows/create.blade.php new file mode 100644 index 0000000..a8378f7 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/workflows/create.blade.php @@ -0,0 +1,760 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.workflows.create-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.workflows.create.header.before') !!} + + + + {!! view_render_event('admin.settings.workflows.create.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.workflows.create.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.workflows.create.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.workflows.create.form_controls.before') !!} + + @csrf() + + + + {!! view_render_event('admin.settings.workflows.create.form_controls.after') !!} +
    +
    +
    +
    +
    +
    + + @include('admin::common.custom-attributes.edit.lookup') +@stop + +@push('scripts') + @parent + + + + + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/workflows/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/workflows/edit.blade.php new file mode 100644 index 0000000..fb28bbf --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/workflows/edit.blade.php @@ -0,0 +1,773 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.workflows.edit-title') }} +@stop + +@section('content-wrapper') +
    + {!! view_render_event('admin.settings.workflows.edit.header.before') !!} + + + + {!! view_render_event('admin.settings.workflows.edit.header.after') !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.workflows.edit.form_buttons.before') !!} + + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.workflows.edit.form_buttons.after') !!} +
    + +
    + {!! view_render_event('admin.settings.workflows.edit.form_controls.before') !!} + + @csrf() + + + + + + {!! view_render_event('admin.settings.workflows.edit.form_controls.after') !!} +
    +
    +
    +
    +
    +
    + + @include('admin::common.custom-attributes.edit.lookup') +@stop + +@push('scripts') + @parent + + + + + + + + + +@endpush diff --git a/packages/Webkul/Admin/src/Resources/views/settings/workflows/index.blade.php b/packages/Webkul/Admin/src/Resources/views/settings/workflows/index.blade.php new file mode 100644 index 0000000..7204ec1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/settings/workflows/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.settings.workflows.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.automation.workflows.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/Admin/src/Resources/views/user/account/edit.blade.php b/packages/Webkul/Admin/src/Resources/views/user/account/edit.blade.php new file mode 100644 index 0000000..79e91d1 --- /dev/null +++ b/packages/Webkul/Admin/src/Resources/views/user/account/edit.blade.php @@ -0,0 +1,227 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('admin::app.user.account.my_account') }} +@stop + +@section('css') + +@stop + +@section('content-wrapper') +
    + +
    +
    +
    + +
    +
    + {!! view_render_event('admin.user_profile.edit.form_buttons.before', ['user' => $user]) !!} + + + + {{ __('admin::app.common.back') }} + + {!! view_render_event('admin.user_profile.edit.form_buttons.after', ['user' => $user]) !!} +
    + +
    + {!! view_render_event('admin.user_profile.edit.form_controls.before', ['user' => $user]) !!} + + @csrf() + + + + + + @if(isset($user->image_url) && $user->image_url != NULL) + + + + @endif + +
    + + + + + + @{{ errors.first('name') }} + +
    + +
    + + + + + + @{{ errors.first('email') }} + +
    + +
    + + + + + + @{{ errors.first('current_password') }} + +
    + +
    + + + + + + @{{ errors.first('password') }} + +
    + +
    + + + + + + @{{ errors.first('password_confirmation') }} + +
    + + {!! view_render_event('admin.user_profile.edit.form_controls.after', ['user' => $user]) !!} +
    +
    +
    +
    +
    +
    +@stop + + +@push('scripts') + + + +@endpush diff --git a/packages/Webkul/Admin/src/Traits/ProvideDropdownOptions.php b/packages/Webkul/Admin/src/Traits/ProvideDropdownOptions.php new file mode 100644 index 0000000..5d13d5e --- /dev/null +++ b/packages/Webkul/Admin/src/Traits/ProvideDropdownOptions.php @@ -0,0 +1,270 @@ +booleanDropdownChoices); + } + + /** + * Get boolean dropdown options. + * + * @param string $choice + * @return array + */ + public function getBooleanDropdownOptions($choice = 'active_inactive'): array + { + return $this->isBooleanDropdownChoiceExists($choice) && $choice == 'active_inactive' + ? $this->getActiveInactiveDropdownOptions() + : $this->getYesNoDropdownOptions(); + } + + /** + * Get active/inactive dropdown options. + * + * @return array + */ + public function getActiveInactiveDropdownOptions(): array + { + return [ + [ + 'value' => '', + 'label' => __('admin::app.common.select-options'), + 'disabled' => true, + 'selected' => true, + ], + [ + 'label' => trans('admin::app.datagrid.active'), + 'value' => 1, + 'disabled' => false, + 'selected' => false, + ], [ + 'label' => trans('admin::app.datagrid.inactive'), + 'value' => 0, + 'disabled' => false, + 'selected' => false, + ], + ]; + } + + /** + * Get yes/no dropdown options. + * + * @return array + */ + public function getYesNoDropdownOptions(): array + { + return [ + [ + 'value' => '', + 'label' => __('admin::app.common.select-options'), + 'disabled' => true, + 'selected' => true, + ], + [ + 'value' => 0, + 'label' => __('admin::app.common.no'), + 'disabled' => false, + 'selected' => false, + ], [ + 'value' => 1, + 'label' => __('admin::app.common.yes'), + 'disabled' => false, + 'selected' => false, + ] + ]; + } + + /** + * Get user dropdown options. + * + * @return array + */ + public function getUserDropdownOptions(): array + { + $options = app(\Webkul\User\Repositories\UserRepository::class) + ->get(['id as value', 'name as label']) + ->map(function ($item, $key) { + $item->disabled = false; + + $item->selected = false; + + return $item; + }) + ->toArray(); + + return [ + [ + 'label' => __('admin::app.common.select-users'), + 'value' => '', + 'disabled' => true, + 'selected' => true, + ], + ...$options + ]; + } + + /** + * Get lead source options. + * + * @return array + */ + public function getleadSourcesOptions(): array + { + $options = app(\Webkul\Lead\Repositories\SourceRepository::class) + ->get(['id as value', 'name as label']) + ->map(function ($item, $key) { + $item->disabled = false; + + $item->selected = false; + + return $item; + }) + ->toArray(); + + return [ + [ + 'label' => __('admin::app.common.select-users'), + 'value' => '', + 'disabled' => true, + 'selected' => true, + ], + ...$options + ]; + } + + /** + * Get organization dropdown options. + * + * @return array + */ + public function getOrganizationDropdownOptions(): array + { + $options = app(\Webkul\Contact\Repositories\OrganizationRepository::class) + ->get(['id as value', 'name as label']) + ->map(function ($item, $key) { + $item->disabled = false; + + $item->selected = false; + + return $item; + }) + ->toArray(); + + return [ + [ + 'label' => __('admin::app.common.select-organization'), + 'value' => '', + 'disabled' => true, + 'selected' => true, + ], + ...$options + ]; + } + + /** + * Get role dropdown options. + * + * @return array + */ + public function getRoleDropdownOptions(): array + { + return [ + [ + 'label' => trans('admin::app.settings.roles.all'), + 'value' => 'all', + 'disabled' => false, + 'selected' => false, + ], [ + 'label' => trans('admin::app.settings.roles.custom'), + 'value' => 'custom', + 'disabled' => false, + 'selected' => false, + ], + ]; + } + + /** + * Get activity type dropdown options. + * + * @return array + */ + public function getActivityTypeDropdownOptions(): array + { + return [ + [ + 'label' => trans('admin::app.common.select-type'), + 'value' => '', + 'disabled' => true, + 'selected' => true, + ], [ + 'label' => trans('admin::app.common.select-call'), + 'value' => 'call', + 'disabled' => false, + 'selected' => false, + ], [ + 'label' => trans('admin::app.common.select-meeting'), + 'value' => 'meeting', + 'disabled' => false, + 'selected' => false, + ], [ + 'label' => trans('admin::app.common.select-lunch'), + 'value' => 'lunch', + 'disabled' => false, + 'selected' => false, + ], + ]; + } + + /** + * Get attribute type dropdown options. + * + * @return array + */ + public function getAttributeTypeDropdownOptions(): array + { + return [ + [ + 'label' => trans('admin::app.common.select-options'), + 'value' => '', + 'disabled' => true, + 'selected' => true, + ], + [ + 'label' => trans('admin::app.common.system_attribute'), + 'value' => '0', + 'disabled' => false, + 'selected' => false, + ], + [ + 'label' => trans('admin::app.common.custom_attribute'), + 'value' => '1', + 'disabled' => false, + 'selected' => false, + ], + ]; + } +} diff --git a/packages/Webkul/Admin/webpack.mix.js b/packages/Webkul/Admin/webpack.mix.js new file mode 100644 index 0000000..6ce9976 --- /dev/null +++ b/packages/Webkul/Admin/webpack.mix.js @@ -0,0 +1,39 @@ +const mix = require("laravel-mix"); + +if (mix == 'undefined') { + const {mix} = require("laravel-mix"); +} + +require("laravel-mix-merge-manifest"); + +if (mix.inProduction()) { + var publicPath = 'publishable/assets'; +} else { + var publicPath = "../../../public/vendor/webkul/admin/assets"; +} + +mix.setPublicPath(publicPath).mergeManifest(); +mix.disableNotifications(); + +mix.js(__dirname + "/src/Resources/assets/js/app.js", "js/admin.js") + .copy(__dirname + "/src/Resources/assets/images", publicPath + "/images") + .sass(__dirname + "/src/Resources/assets/sass/app.scss", "css/admin.css") + .options({ + processCssUrls: false + }).vue(); + +mix.webpackConfig({ + resolve: { + alias: { + 'vue$': 'vue/dist/vue.runtime.js' + } + } +}); + +if (!mix.inProduction()) { + mix.sourceMaps(); +} + +if (mix.inProduction()) { + mix.version(); +} diff --git a/packages/Webkul/Attribute/composer.json b/packages/Webkul/Attribute/composer.json new file mode 100644 index 0000000..6b4552b --- /dev/null +++ b/packages/Webkul/Attribute/composer.json @@ -0,0 +1,27 @@ +{ + "name": "krayin/laravel-attribute", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "krayin/laravel-core": "^1.0" + }, + "autoload": { + "psr-4": { + "Webkul\\Attribute\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Attribute\\Providers\\AttributeServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/packages/Webkul/Attribute/src/Config/attribute_lookups.php b/packages/Webkul/Attribute/src/Config/attribute_lookups.php new file mode 100644 index 0000000..05e0b10 --- /dev/null +++ b/packages/Webkul/Attribute/src/Config/attribute_lookups.php @@ -0,0 +1,4 @@ +increments('id'); + $table->string('code'); + $table->string('name'); + $table->string('type'); + $table->string('lookup_type')->nullable(); + $table->string('entity_type'); + $table->integer('sort_order')->nullable(); + $table->string('validation')->nullable(); + $table->boolean('is_required')->default(0); + $table->boolean('is_unique')->default(0); + $table->boolean('quick_add')->default(0); + $table->boolean('is_user_defined')->default(1); + $table->unique(['code', 'entity_type']); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('attributes'); + } +} diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080837_create_attribute_options_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080837_create_attribute_options_table.php new file mode 100644 index 0000000..87f7156 --- /dev/null +++ b/packages/Webkul/Attribute/src/Database/Migrations/2021_04_02_080837_create_attribute_options_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->string('name')->nullable(); + $table->integer('sort_order')->nullable(); + $table->integer('attribute_id')->unsigned(); + $table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('attribute_options'); + } +} diff --git a/packages/Webkul/Attribute/src/Database/Migrations/2021_04_06_122751_create_attribute_values_table.php b/packages/Webkul/Attribute/src/Database/Migrations/2021_04_06_122751_create_attribute_values_table.php new file mode 100644 index 0000000..e911a0a --- /dev/null +++ b/packages/Webkul/Attribute/src/Database/Migrations/2021_04_06_122751_create_attribute_values_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->string('entity_type')->default('leads'); + $table->text('text_value')->nullable(); + $table->boolean('boolean_value')->nullable(); + $table->integer('integer_value')->nullable(); + $table->double('float_value')->nullable(); + $table->datetime('datetime_value')->nullable(); + $table->date('date_value')->nullable(); + $table->json('json_value')->nullable(); + + $table->integer('entity_id')->unsigned(); + $table->integer('attribute_id')->unsigned(); + + $table->foreign('attribute_id')->references('id')->on('attributes')->onDelete('cascade'); + $table->unique(['entity_type', 'entity_id', 'attribute_id'], 'entity_type_attribute_value_index_unique'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('attribute_values'); + } +} \ No newline at end of file diff --git a/packages/Webkul/Attribute/src/Http/Requests/AttributeForm.php b/packages/Webkul/Attribute/src/Http/Requests/AttributeForm.php new file mode 100644 index 0000000..222a2c1 --- /dev/null +++ b/packages/Webkul/Attribute/src/Http/Requests/AttributeForm.php @@ -0,0 +1,140 @@ +attributeRepository = $attributeRepository; + + $this->attributeValueRepository = $attributeValueRepository; + } + + /** + * Determine if the product is authorized to make this request. + * + * @return bool + */ + public function authorize() + { + return true; + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + $attributes = $this->attributeRepository->scopeQuery(function ($query) { + $query = $query->whereIn('code', array_keys(request()->all())) + ->where('entity_type', request('entity_type')); + + if (request()->has('quick_add')) { + $query = $query->where('quick_add', 1); + } + + return $query; + })->get(); + + foreach ($attributes as $attribute) { + $validations = []; + + if ($attribute->type == 'boolean') { + continue; + } else if ($attribute->type == 'address') { + if (!$attribute->is_required) { + continue; + } + + $validations = [ + $attribute->code . '.address' => 'required', + $attribute->code . '.country' => 'required', + $attribute->code . '.state' => 'required', + $attribute->code . '.city' => 'required', + $attribute->code . '.postcode' => 'required', + ]; + } else if ($attribute->type == 'email') { + $validations = [ + $attribute->code => [$attribute->is_required ? 'required' : 'nullable'], + $attribute->code . '.*.value' => [$attribute->is_required ? 'required' : 'nullable', 'email'], + $attribute->code . '.*.label' => $attribute->is_required ? 'required' : 'nullable', + ]; + } else if ($attribute->type == 'phone') { + $validations = [ + $attribute->code => [$attribute->is_required ? 'required' : 'nullable'], + $attribute->code . '.*.value' => [$attribute->is_required ? 'required' : 'nullable'], + $attribute->code . '.*.label' => $attribute->is_required ? 'required' : 'nullable', + ]; + } else { + $validations[$attribute->code] = [$attribute->is_required ? 'required' : 'nullable']; + + if ($attribute->type == 'text' && $attribute->validation) { + array_push($validations[$attribute->code], + $attribute->validation == 'decimal' + ? new Decimal + : $attribute->validation + ); + } + + if ($attribute->type == 'price') { + array_push($validations[$attribute->code], new Decimal); + } + + if ($attribute->type == 'image' && !request($attribute->code . '.delete')) { + array_push($validations[$attribute->code], 'mimes:bmp,jpeg,jpg,png,webp'); + } + } + + if ($attribute->is_unique) { + array_push($validations[in_array($attribute->type, ['email', 'phone']) + ? $attribute->code . '.*.value' + : $attribute->code], function ($field, $value, $fail) use ($attribute) { + if (!$this->attributeValueRepository->isValueUnique($this->id, $attribute->entity_type, $attribute, request($field))) { + $fail('The value has already been taken.'); + } + }); + } + + $this->rules = array_merge($this->rules, $validations); + } + + return $this->rules; + } +} diff --git a/packages/Webkul/Attribute/src/Models/Attribute.php b/packages/Webkul/Attribute/src/Models/Attribute.php new file mode 100644 index 0000000..06c901a --- /dev/null +++ b/packages/Webkul/Attribute/src/Models/Attribute.php @@ -0,0 +1,35 @@ +hasMany(AttributeOptionProxy::modelClass()); + } +} diff --git a/packages/Webkul/Attribute/src/Models/AttributeOption.php b/packages/Webkul/Attribute/src/Models/AttributeOption.php new file mode 100644 index 0000000..2ec0622 --- /dev/null +++ b/packages/Webkul/Attribute/src/Models/AttributeOption.php @@ -0,0 +1,30 @@ +belongsTo(AttributeProxy::modelClass()); + } +} diff --git a/packages/Webkul/Attribute/src/Models/AttributeOptionProxy.php b/packages/Webkul/Attribute/src/Models/AttributeOptionProxy.php new file mode 100644 index 0000000..5a2a4c1 --- /dev/null +++ b/packages/Webkul/Attribute/src/Models/AttributeOptionProxy.php @@ -0,0 +1,10 @@ + 'array', + ]; + + protected $fillable = [ + 'attribute_id', + 'text_value', + 'boolean_value', + 'integer_value', + 'float_value', + 'datetime_value', + 'date_value', + 'json_value', + 'entity_id', + 'entity_type', + ]; + + /** + * @var array + */ + public static $attributeTypeFields = [ + 'text' => 'text_value', + 'textarea' => 'text_value', + 'price' => 'float_value', + 'boolean' => 'boolean_value', + 'select' => 'integer_value', + 'multiselect' => 'text_value', + 'checkbox' => 'text_value', + 'email' => 'json_value', + 'address' => 'json_value', + 'phone' => 'json_value', + 'lookup' => 'integer_value', + 'datetime' => 'datetime_value', + 'date' => 'date_value', + 'file' => 'text_value', + 'image' => 'text_value', + ]; + + /** + * Get the attribute that owns the attribute value. + */ + public function attribute() + { + return $this->belongsTo(AttributeProxy::modelClass()); + } + + /** + * Get the parent entity model (leads, products, persons or organizations). + */ + public function entity() + { + return $this->morphTo(); + } +} diff --git a/packages/Webkul/Attribute/src/Models/AttributeValueProxy.php b/packages/Webkul/Attribute/src/Models/AttributeValueProxy.php new file mode 100644 index 0000000..c7838a5 --- /dev/null +++ b/packages/Webkul/Attribute/src/Models/AttributeValueProxy.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + $this->registerConfig(); + } + + /** + * Register package config. + * + * @return void + */ + protected function registerConfig() + { + $this->mergeConfigFrom( + dirname(__DIR__) . '/Config/attribute_lookups.php', 'attribute_lookups' + ); + } +} diff --git a/packages/Webkul/Attribute/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Attribute/src/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..f63823c --- /dev/null +++ b/packages/Webkul/Attribute/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,14 @@ +attributeOptionRepository = $attributeOptionRepository; + + parent::__construct($container); + } + + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Attribute\Contracts\Attribute'; + } + + /** + * @param array $data + * @return \Webkul\Attribute\Contracts\Attribute + */ + public function create(array $data) + { + $options = isset($data['options']) ? $data['options'] : []; + + $attribute = $this->model->create($data); + + if (in_array($attribute->type, ['select', 'multiselect', 'checkbox']) && count($options)) { + $sortOrder = 1; + + foreach ($options as $optionInputs) { + $this->attributeOptionRepository->create(array_merge([ + 'attribute_id' => $attribute->id, + 'sort_order' => $sortOrder++, + ], $optionInputs)); + } + } + + return $attribute; + } + + /** + * @param array $data + * @param int $id + * @param string $attribute + * @return \Webkul\Attribute\Contracts\Attribute + */ + public function update(array $data, $id, $attribute = "id") + { + $attribute = $this->find($id); + + $attribute->update($data); + + $previousOptionIds = $attribute->options()->pluck('id'); + + if (in_array($attribute->type, ['select', 'multiselect', 'checkbox']) && isset($data['options'])) { + $sortOrder = 1; + + foreach ($data['options'] as $optionId => $optionInputs) { + if (Str::contains($optionId, 'option_')) { + $this->attributeOptionRepository->create(array_merge([ + 'attribute_id' => $attribute->id, + 'sort_order' => $sortOrder++, + ], $optionInputs)); + } else { + if (is_numeric($index = $previousOptionIds->search($optionId))) { + $previousOptionIds->forget($index); + } + + $this->attributeOptionRepository->update(array_merge([ + 'sort_order' => $sortOrder++, + ], $optionInputs), $optionId); + } + } + } + + foreach ($previousOptionIds as $optionId) { + $this->attributeOptionRepository->delete($optionId); + } + + return $attribute; + } + + /** + * @param string $code + * @return \Webkul\Attribute\Contracts\Attribute + */ + public function getAttributeByCode($code) + { + static $attributes = []; + + if (array_key_exists($code, $attributes)) { + return $attributes[$code]; + } + + return $attributes[$code] = $this->findOneByField('code', $code); + } + + /** + * @param integer $lookup + * @param string $query + * @param array $columns + * @return array + */ + public function getLookUpOptions($lookup, $query = '', $columns = []) + { + $lookup = config('attribute_lookups.' . $lookup); + + if (!count($columns)) { + $columns = [($lookup['value_column'] ?? 'id') . ' as id', ($lookup['label_column'] ?? 'name') . ' as name']; + } + + return app($lookup['repository'])->findWhere([ + [$lookup['label_column'] ?? 'name', 'like', '%' . urldecode($query) . '%'] + ], $columns); + } + + /** + * @param string $lookup + * @param integer|array $entityId + * @param array $columns + * @return mixed + */ + public function getLookUpEntity($lookup, $entityId = null, $columns = []) + { + if (!$entityId) { + return; + } + + $lookup = config('attribute_lookups.' . $lookup); + + if (!count($columns)) { + $columns = [($lookup['value_column'] ?? 'id') . ' as id', ($lookup['label_column'] ?? 'name') . ' as name']; + } + + if (is_array($entityId)) { + return app($lookup['repository'])->findWhereIn( + 'id', + $entityId, + $columns + ); + } else { + return app($lookup['repository'])->find($entityId, $columns); + } + } +} diff --git a/packages/Webkul/Attribute/src/Repositories/AttributeValueRepository.php b/packages/Webkul/Attribute/src/Repositories/AttributeValueRepository.php new file mode 100644 index 0000000..a3697dd --- /dev/null +++ b/packages/Webkul/Attribute/src/Repositories/AttributeValueRepository.php @@ -0,0 +1,160 @@ +attributeRepository = $attributeRepository; + + parent::__construct($container); + } + + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Attribute\Contracts\AttributeValue'; + } + + /** + * @param array $data + * @param int $entityId + * @return void + */ + public function save(array $data, $entityId) + { + $conditions = ['entity_type' => $data['entity_type']]; + + if (isset($data['quick_add'])) { + $conditions['quick_add'] = 1; + } + + $attributes = $this->attributeRepository->findWhere($conditions); + + foreach ($attributes as $attribute) { + $typeColumn = $this->model::$attributeTypeFields[$attribute->type]; + + if ($attribute->type === 'boolean') { + $data[$attribute->code] = isset($data[$attribute->code]) && $data[$attribute->code] ? 1 : 0; + } + + if (!isset($data[$attribute->code])) { + continue; + } + + if ($attribute->type === 'price' + && isset($data[$attribute->code]) + && $data[$attribute->code] === '' + ) { + $data[$attribute->code] = null; + } + + if ($attribute->type === 'date' && $data[$attribute->code] === '') { + $data[$attribute->code] = null; + } + + if ($attribute->type === 'multiselect' || $attribute->type === 'checkbox') { + $data[$attribute->code] = implode(',', $data[$attribute->code]); + } + + if ($attribute->type === 'email' || $attribute->type === 'phone') { + $data[$attribute->code] = $this->sanitizeEmailAndPhone($data[$attribute->code]); + } + + if ($attribute->type === 'image' || $attribute->type === 'file') { + $data[$attribute->code] = gettype($data[$attribute->code]) === 'object' + ? request()->file($attribute->code)->store($data['entity_type'] . '/' . $entityId) + : null; + } + + $attributeValue = $this->findOneWhere([ + 'entity_id' => $entityId, + 'entity_type' => $data['entity_type'], + 'attribute_id' => $attribute->id, + ]); + + if (!$attributeValue) { + $this->create([ + 'entity_id' => $entityId, + 'entity_type' => $data['entity_type'], + 'attribute_id' => $attribute->id, + $typeColumn => $data[$attribute->code], + ]); + } else { + $this->update([ + $typeColumn => $data[$attribute->code], + ], $attributeValue->id); + + if ($attribute->type == 'image' || $attribute->type == 'file') { + Storage::delete($attributeValue->text_value); + } + } + } + } + + /** + * @param int $entityId + * @param string $entityType + * @param \Webkul\Attribute\Contracts\Attribute $attribute + * @param string $value + * @return boolean + */ + public function isValueUnique($entityId, $entityType, $attribute, $value) + { + $query = $this->resetScope()->model + ->where('attribute_id', $attribute->id) + ->where('entity_type', $entityType) + ->where('entity_id', '!=', $entityId); + + if (in_array($attribute->type, ['email', 'phone'])) { + $query->where($this->model::$attributeTypeFields[$attribute->type], 'like', "%{$value}%"); + } else { + $query->where($this->model::$attributeTypeFields[$attribute->type], $value); + } + + return $query->get()->count() ? false : true; + } + + /** + * Removed null values from email and phone fields. + * + * @param array $data + * @return array + */ + public function sanitizeEmailAndPhone($data) + { + foreach ($data as $key => $row) { + if (is_null($row['value'])) { + unset($data[$key]); + } + } + + return $data; + } +} diff --git a/packages/Webkul/Attribute/src/Traits/CustomAttribute.php b/packages/Webkul/Attribute/src/Traits/CustomAttribute.php new file mode 100644 index 0000000..7523100 --- /dev/null +++ b/packages/Webkul/Attribute/src/Traits/CustomAttribute.php @@ -0,0 +1,176 @@ + 'text_value', + 'textarea' => 'text_value', + 'price' => 'float_value', + 'boolean' => 'boolean_value', + 'select' => 'integer_value', + 'multiselect' => 'text_value', + 'checkbox' => 'text_value', + 'email' => 'json_value', + 'address' => 'json_value', + 'phone' => 'json_value', + 'lookup' => 'integer_value', + 'datetime' => 'datetime_value', + 'date' => 'date_value', + 'file' => 'text_value', + 'image' => 'text_value', + ]; + + /** + * Get the attribute values that owns the entity. + */ + public function attribute_values() + { + return $this->morphMany(AttributeValueProxy::modelClass(), 'entity'); + } + + /** + * Get an attribute from the model. + * + * @param string $key + * @return mixed + */ + public function getAttribute($key) + { + if (!method_exists(static::class, $key) && !isset($this->attributes[$key])) { + if (isset($this->id)) { + $this->attributes[$key] = ''; + + $attribute = app(AttributeRepository::class)->getAttributeByCode($key); + + $this->attributes[$key] = $this->getCustomAttributeValue($attribute); + + return $this->getAttributeValue($key); + } + } + + return parent::getAttribute($key); + } + + /** + * @return array + */ + public function attributesToArray() + { + $attributes = parent::attributesToArray(); + + $hiddenAttributes = $this->getHidden(); + + if (isset($this->id)) { + $customAttributes = $this->getCustomAttributes(); + + foreach ($customAttributes as $attribute) { + if (in_array($attribute->code, $hiddenAttributes) && isset($this->attributes[$attribute->code])) { + continue; + } + + $attributes[$attribute->code] = $this->getCustomAttributeValue($attribute); + } + } + + return $attributes; + } + + /** + * Check in loaded family attributes. + * + * @return object + */ + public function getCustomAttributes() + { + static $attributes; + + if ($attributes) { + return $attributes; + } + + return $attributes = app(AttributeRepository::class)->where('entity_type', $this->getTable())->get(); + } + + /** + * Get an product attribute value. + * + * @return mixed + */ + public function getCustomAttributeValue($attribute) + { + if (!$attribute) { + return; + } + + $attributeValue = $this->attribute_values->where('attribute_id', $attribute->id)->first(); + + return $attributeValue[self::$attributeTypeFields[$attribute->type]] ?? null; + } + + /** + * Create a new instance of the given model. + * + * @param array $attributes + * @return Collection + */ + public function getLookUpAttributes($attributes) + { + $attributes = app(AttributeRepository::class)->scopeQuery(function ($query) use ($attributes) { + return $query->distinct() + ->where('type', 'lookup') + ->where('entity_type', request('entity_type')) + ->whereIn('code', array_keys($attributes, '', false)); + })->get(); + + return $attributes; + } + + /** + * Create a new instance of the given model. + * + * @param array $attributes + * @param bool $exists + * @return static + */ + public function newInstance($attributes = [], $exists = false) + { + // $attributes = $this->getLookUpAttributes($attributes); + + // Play with data here + + return parent::newInstance($attributes, $exists); + } + + /** + * Fill the model with an array of attributes. + * + * @param array $attributes + * @return $this + * + * @throws \Illuminate\Database\Eloquent\MassAssignmentException + */ + public function fill(array $attributes) + { + // Play with data here + + return parent::fill($attributes); + } + + // Delete model's attribute values + public static function boot() + { + parent::boot(); + + static::deleting(function ($entity) { + $entity->attribute_values()->delete(); + }); + } +} diff --git a/packages/Webkul/Contact/composer.json b/packages/Webkul/Contact/composer.json new file mode 100644 index 0000000..205e43f --- /dev/null +++ b/packages/Webkul/Contact/composer.json @@ -0,0 +1,28 @@ +{ + "name": "krayin/laravel-contact", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "krayin/laravel-attribute": "^1.0", + "krayin/laravel-core": "^1.0" + }, + "autoload": { + "psr-4": { + "Webkul\\Contact\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Contact\\Providers\\ContactServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/packages/Webkul/Contact/src/Contracts/Organization.php b/packages/Webkul/Contact/src/Contracts/Organization.php new file mode 100644 index 0000000..8b40fc9 --- /dev/null +++ b/packages/Webkul/Contact/src/Contracts/Organization.php @@ -0,0 +1,7 @@ + $this->faker->name(), + 'emails' => [$this->faker->unique()->safeEmail()], + 'contact_numbers' => [$this->faker->randomNumber(9)], + ]; + } +} diff --git a/packages/Webkul/Contact/src/Database/Migrations/2021_04_09_051326_create_organizations_table.php b/packages/Webkul/Contact/src/Database/Migrations/2021_04_09_051326_create_organizations_table.php new file mode 100644 index 0000000..834e236 --- /dev/null +++ b/packages/Webkul/Contact/src/Database/Migrations/2021_04_09_051326_create_organizations_table.php @@ -0,0 +1,34 @@ +increments('id'); + $table->string('name'); + $table->json('address')->nullable(); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('organizations'); + } +} diff --git a/packages/Webkul/Contact/src/Database/Migrations/2021_04_09_065617_create_persons_table.php b/packages/Webkul/Contact/src/Database/Migrations/2021_04_09_065617_create_persons_table.php new file mode 100644 index 0000000..8042619 --- /dev/null +++ b/packages/Webkul/Contact/src/Database/Migrations/2021_04_09_065617_create_persons_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('name'); + $table->json('emails'); + $table->json('contact_numbers')->nullable(); + + $table->integer('organization_id')->unsigned()->nullable(); + $table->foreign('organization_id')->references('id')->on('organizations')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('persons'); + } +} diff --git a/packages/Webkul/Contact/src/Database/Migrations/2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php b/packages/Webkul/Contact/src/Database/Migrations/2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php new file mode 100644 index 0000000..6e8519e --- /dev/null +++ b/packages/Webkul/Contact/src/Database/Migrations/2021_09_22_194103_add_unique_index_to_name_in_organizations_table.php @@ -0,0 +1,32 @@ +unique('name'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('organizations', function (Blueprint $table) { + $table->dropUnique('organizations_name_unique'); + }); + } +} diff --git a/packages/Webkul/Contact/src/Models/Organization.php b/packages/Webkul/Contact/src/Models/Organization.php new file mode 100644 index 0000000..073bb66 --- /dev/null +++ b/packages/Webkul/Contact/src/Models/Organization.php @@ -0,0 +1,26 @@ + 'array', + ]; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'name', + 'address', + ]; +} diff --git a/packages/Webkul/Contact/src/Models/OrganizationProxy.php b/packages/Webkul/Contact/src/Models/OrganizationProxy.php new file mode 100644 index 0000000..58c875a --- /dev/null +++ b/packages/Webkul/Contact/src/Models/OrganizationProxy.php @@ -0,0 +1,10 @@ + 'array', + 'contact_numbers' => 'array', + ]; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'name', + 'emails', + 'contact_numbers', + 'organization_id', + ]; + + /** + * Get the organization that owns the person. + * + * @return \Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function organization() + { + return $this->belongsTo(OrganizationProxy::modelClass()); + } + + /** + * Create a new factory instance for the model. + * + * @return \Illuminate\Database\Eloquent\Factories\Factory + */ + protected static function newFactory() + { + return PersonFactory::new(); + } +} diff --git a/packages/Webkul/Contact/src/Models/PersonProxy.php b/packages/Webkul/Contact/src/Models/PersonProxy.php new file mode 100644 index 0000000..e74851d --- /dev/null +++ b/packages/Webkul/Contact/src/Models/PersonProxy.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + } +} \ No newline at end of file diff --git a/packages/Webkul/Contact/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Contact/src/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..4ae4d60 --- /dev/null +++ b/packages/Webkul/Contact/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,13 @@ +attributeValueRepository = $attributeValueRepository; + + parent::__construct($container); + } + + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Contact\Contracts\Organization'; + } + + /** + * @param array $data + * @return \Webkul\Contact\Contracts\Organization + */ + public function create(array $data) + { + $organization = parent::create($data); + + $this->attributeValueRepository->save($data, $organization->id); + + return $organization; + } + + /** + * @param array $data + * @param int $id + * @param string $attribute + * @return \Webkul\Contact\Contracts\Organization + */ + public function update(array $data, $id, $attribute = "id") + { + $organization = parent::update($data, $id); + + $this->attributeValueRepository->save($data, $id); + + return $organization; + } +} diff --git a/packages/Webkul/Contact/src/Repositories/PersonRepository.php b/packages/Webkul/Contact/src/Repositories/PersonRepository.php new file mode 100644 index 0000000..a7ae27c --- /dev/null +++ b/packages/Webkul/Contact/src/Repositories/PersonRepository.php @@ -0,0 +1,85 @@ +attributeValueRepository = $attributeValueRepository; + + parent::__construct($container); + } + + /** + * Specify Model class name + * + * @return mixed + */ + function model() + { + return 'Webkul\Contact\Contracts\Person'; + } + + /** + * @param array $data + * @return \Webkul\Contact\Contracts\Person + */ + public function create(array $data) + { + $person = parent::create($data); + + $this->attributeValueRepository->save($data, $person->id); + + return $person; + } + + /** + * @param array $data + * @param int $id + * @param string $attribute + * @return \Webkul\Contact\Contracts\Person + */ + public function update(array $data, $id, $attribute = "id") + { + $person = parent::update($data, $id); + + $this->attributeValueRepository->save($data, $id); + + return $person; + } + + /** + * Retrieves customers count based on date + * + * @return number + */ + public function getCustomerCount($startDate, $endDate) + { + return $this + ->whereBetween('created_at', [$startDate, $endDate]) + ->get() + ->count(); + } +} diff --git a/packages/Webkul/Core/composer.json b/packages/Webkul/Core/composer.json new file mode 100644 index 0000000..e7efca4 --- /dev/null +++ b/packages/Webkul/Core/composer.json @@ -0,0 +1,26 @@ +{ + "name": "krayin/laravel-core", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + }, + "autoload": { + "psr-4": { + "Webkul\\Core\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Core\\Providers\\CoreServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Config/concord.php b/packages/Webkul/Core/src/Config/concord.php new file mode 100644 index 0000000..1096800 --- /dev/null +++ b/packages/Webkul/Core/src/Config/concord.php @@ -0,0 +1,22 @@ + [ + \Webkul\Activity\Providers\ModuleServiceProvider::class, + \Webkul\Admin\Providers\ModuleServiceProvider::class, + \Webkul\Attribute\Providers\ModuleServiceProvider::class, + \Webkul\Contact\Providers\ModuleServiceProvider::class, + \Webkul\Core\Providers\ModuleServiceProvider::class, + \Webkul\Email\Providers\ModuleServiceProvider::class, + \Webkul\EmailTemplate\Providers\ModuleServiceProvider::class, + \Webkul\Lead\Providers\ModuleServiceProvider::class, + \Webkul\Product\Providers\ModuleServiceProvider::class, + \Webkul\Quote\Providers\ModuleServiceProvider::class, + \Webkul\Tag\Providers\ModuleServiceProvider::class, + \Webkul\UI\Providers\ModuleServiceProvider::class, + \Webkul\User\Providers\ModuleServiceProvider::class, + \Webkul\WebForm\Providers\ModuleServiceProvider::class, + \Webkul\Workflow\Providers\ModuleServiceProvider::class, + ], + 'register_route_models' => true +]; diff --git a/packages/Webkul/Core/src/Config/cors.php b/packages/Webkul/Core/src/Config/cors.php new file mode 100644 index 0000000..ddaaf28 --- /dev/null +++ b/packages/Webkul/Core/src/Config/cors.php @@ -0,0 +1,62 @@ + [ + 'admin/web-forms/forms/*' + ], + + /* + * Matches the request method. `['*']` allows all methods. + */ + 'allowed_methods' => ['*'], + + /* + * Matches the request origin. `['*']` allows all origins. Wildcards can be used, eg `*.mydomain.com` + */ + 'allowed_origins' => ['*'], + + /* + * Patterns that can be used with `preg_match` to match the origin. + */ + 'allowed_origins_patterns' => [], + + /* + * Sets the Access-Control-Allow-Headers response header. `['*']` allows all headers. + */ + 'allowed_headers' => ['*'], + + /* + * Sets the Access-Control-Expose-Headers response header with these headers. + */ + 'exposed_headers' => [], + + /* + * Sets the Access-Control-Max-Age response header when > 0. + */ + 'max_age' => 0, + + /* + * Sets the Access-Control-Allow-Credentials header. + */ + 'supports_credentials' => false, +]; diff --git a/packages/Webkul/Core/src/Config/sanctum.php b/packages/Webkul/Core/src/Config/sanctum.php new file mode 100644 index 0000000..6b98c27 --- /dev/null +++ b/packages/Webkul/Core/src/Config/sanctum.php @@ -0,0 +1,65 @@ + explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf( + '%s%s', + 'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1', + env('APP_URL') ? ',' . parse_url(env('APP_URL'), PHP_URL_HOST) : '' + ))), + + /* + |-------------------------------------------------------------------------- + | Sanctum Guards + |-------------------------------------------------------------------------- + | + | This array contains the authentication guards that will be checked when + | Sanctum is trying to authenticate a request. If none of these guards + | are able to authenticate the request, Sanctum will use the bearer + | token that's present on an incoming request for authentication. + | + */ + + 'guard' => ['user'], + + /* + |-------------------------------------------------------------------------- + | Expiration Minutes + |-------------------------------------------------------------------------- + | + | This value controls the number of minutes until an issued token will be + | considered expired. If this value is null, personal access tokens do + | not expire. This won't tweak the lifetime of first-party sessions. + | + */ + + 'expiration' => null, + + /* + |-------------------------------------------------------------------------- + | Sanctum Middleware + |-------------------------------------------------------------------------- + | + | When authenticating your first-party SPA with Sanctum you may need to + | customize some of the middleware Sanctum uses while processing the + | request. You may change the middleware listed below as required. + | + */ + + 'middleware' => [ + 'verify_csrf_token' => App\Http\Middleware\VerifyCsrfToken::class, + 'encrypt_cookies' => App\Http\Middleware\EncryptCookies::class, + ], + +]; diff --git a/packages/Webkul/Core/src/Console/Commands/Install.php b/packages/Webkul/Core/src/Console/Commands/Install.php new file mode 100644 index 0000000..4665420 --- /dev/null +++ b/packages/Webkul/Core/src/Console/Commands/Install.php @@ -0,0 +1,227 @@ +checkForEnvFile(); + + // loading values at runtime + $this->loadEnvConfigAtRuntime(); + + // running `php artisan migrate` + $this->warn('Step: Migrating all tables into database...'); + $migrate = $this->call('migrate:fresh'); + $this->info($migrate); + + // running `php artisan db:seed` + $this->warn('Step: Seeding basic data for Krayin CRM kickstart...'); + $result = $this->call('db:seed'); + $this->info($result); + + // running `php artisan vendor:publish --all` + $this->warn('Step: Publishing assets and configurations...'); + $result = $this->call('vendor:publish', ['--all' => true, '--force' => true]); + $this->info($result); + + // running `php artisan storage:link` + $this->warn('Step: Linking storage directory...'); + $result = $this->call('storage:link'); + $this->info($result); + + // optimizing stuffs + $this->warn('Step: Optimizing...'); + $result = $this->call('optimize'); + $this->info($result); + + // running `composer dump-autoload` + $this->warn('Step: Composer autoload...'); + $result = shell_exec('composer dump-autoload'); + $this->info($result); + + // final information + $this->info('-----------------------------'); + $this->info('Congratulations!'); + $this->info('The installation has been finished and you can now use Krayin CRM.'); + $this->info('Go to ' . url(config('app.admin_path')) . ' and authenticate with:'); + $this->info('Email: admin@example.com'); + $this->info('Password: admin123'); + $this->info('Cheers!'); + } + + /** + * Checking .env file and if not found then create .env file. + * Then ask for database name, password & username to set + * On .env file so that we can easily migrate to our db. + */ + protected function checkForEnvFile() + { + $envExists = File::exists(base_path() . '/.env'); + + if (!$envExists) { + $this->info('Creating the environment configuration file.'); + $this->createEnvFile(); + } else { + $this->info('Great! your environment configuration file already exists.'); + } + + $this->call('key:generate'); + } + + /** + * Create a new .env file. + */ + protected function createEnvFile() + { + try { + File::copy('.env.example', '.env'); + + $default_app_url = 'http://localhost:8000'; + $input_app_url = $this->ask('Please Enter the APP URL : '); + $this->envUpdate('APP_URL=', $input_app_url ? $input_app_url : $default_app_url); + + $default_admin_path = 'admin'; + $input_admin_path = $this->ask('Please Enter the Admin URL : '); + $this->envUpdate('APP_ADMIN_PATH=', $input_admin_path ?: $default_admin_path); + + $locale = $this->choice('Please select the default available locale or press enter to continue', ['en'], 0); + $this->envUpdate('APP_LOCALE=', $locale); + + $TimeZones = timezone_identifiers_list(); + $timezone = $this->anticipate('Please enter the default timezone', $TimeZones, date_default_timezone_get()); + $this->envUpdate('APP_TIMEZONE=', $timezone); + + $currency = $this->choice('Please enter the default currency', ['USD', 'EUR'], 'USD'); + $this->envUpdate('APP_CURRENCY=', $currency); + + $this->addDatabaseDetails(); + } catch (\Exception $e) { + $this->error('Error in creating .env file, please create it manually and then run `php artisan migrate` again.'); + } + } + + /** + * Add the database credentials to the .env file. + */ + protected function addDatabaseDetails() + { + $dbName = $this->ask('What is the database name to be used by Krayin CRM ?'); + $this->envUpdate('DB_DATABASE=', $dbName); + + $dbUser = $this->anticipate('What is your database username?', ['root']); + $this->envUpdate('DB_USERNAME=', $dbUser); + + $dbPass = $this->secret('What is your database password?'); + $this->envUpdate('DB_PASSWORD=', $dbPass); + } + + /** + * Load `.env` config at runtime. + */ + protected function loadEnvConfigAtRuntime() + { + $this->warn('Loading configs...'); + + /* environment directly checked from `.env` so changing in config won't reflect */ + app()['env'] = $this->getEnvAtRuntime('APP_ENV'); + + /* setting for the first time and then `.env` values will be incharged */ + config(['database.connections.mysql.database' => $this->getEnvAtRuntime('DB_DATABASE')]); + config(['database.connections.mysql.username' => $this->getEnvAtRuntime('DB_USERNAME')]); + config(['database.connections.mysql.password' => $this->getEnvAtRuntime('DB_PASSWORD')]); + DB::purge('mysql'); + + $this->info('Configuration loaded..'); + } + + /** + * Check key in `.env` file because it will help to find values at runtime. + */ + protected static function getEnvAtRuntime($key) + { + $path = base_path() . '/.env'; + $data = file($path); + + if ($data) { + foreach ($data as $line) { + $line = preg_replace('/\s+/', '', $line); + $rowValues = explode('=', $line); + + if (strlen($line) !== 0) { + if (strpos($key, $rowValues[0]) !== false) { + return $rowValues[1]; + } + } + } + } + + return false; + } + + /** + * Update the .env values. + */ + protected static function envUpdate($key, $value) + { + $path = base_path() . '/.env'; + $data = file($path); + $keyValueData = $changedData = []; + + if ($data) { + foreach ($data as $line) { + $line = preg_replace('/\s+/', '', $line); + $rowValues = explode('=', $line); + + if (strlen($line) !== 0) { + $keyValueData[$rowValues[0]] = $rowValues[1]; + + if (strpos($key, $rowValues[0]) !== false) { + $keyValueData[$rowValues[0]] = $value; + } + } + } + } + + foreach ($keyValueData as $key => $value) { + $changedData[] = $key . '=' . $value; + } + + $changedData = implode(PHP_EOL, $changedData); + + file_put_contents($path, $changedData); + } +} diff --git a/packages/Webkul/Core/src/Console/Commands/Version.php b/packages/Webkul/Core/src/Console/Commands/Version.php new file mode 100644 index 0000000..9207d35 --- /dev/null +++ b/packages/Webkul/Core/src/Console/Commands/Version.php @@ -0,0 +1,42 @@ +comment('v' . config('app.version')); + } +} diff --git a/packages/Webkul/Core/src/Contracts/CoreConfig.php b/packages/Webkul/Core/src/Contracts/CoreConfig.php new file mode 100644 index 0000000..4ea3968 --- /dev/null +++ b/packages/Webkul/Core/src/Contracts/CoreConfig.php @@ -0,0 +1,7 @@ +countryRepository = $countryRepository; + + $this->countryStateRepository = $countryStateRepository; + + $this->coreConfigRepository = $coreConfigRepository; + } + + /** + * Retrieve all timezones. + * + * @return array + */ + public function timezones() + { + $timezones = []; + + foreach (timezone_identifiers_list() as $timezone) { + $timezones[$timezone] = $timezone; + } + + return $timezones; + } + + /** + * Retrieve all locales. + * + * @return array + */ + public function locales() + { + return config('app.available_locales'); + } + + /** + * Retrieve all countries. + * + * @return \Illuminate\Support\Collection + */ + public function countries() + { + return $this->countryRepository->all(); + } + + /** + * Returns country name by code. + * + * @param string $code + * + * @return string + */ + public function country_name($code) + { + $country = $this->countryRepository->findOneByField('code', $code); + + return $country ? $country->name : ''; + } + + /** + * Returns state name by code. + * + * @param string $code + * + * @return string + */ + public function state_name($code) + { + $state = $this->countryStateRepository->findOneByField('code', $code); + + return $state ? $state->name : $code; + } + + /** + * Retrieve all country states. + * + * @param string $countryCode + * + * @return \Illuminate\Support\Collection + */ + public function states($countryCode) + { + return $this->countryStateRepository->findByField('country_code', $countryCode); + } + + /** + * Retrieve all grouped states by country code. + * + * @return \Illuminate\Support\Collection + */ + public function groupedStatesByCountries() + { + $collection = []; + + foreach ($this->countryStateRepository->all() as $state) { + $collection[$state->country_code][] = $state->toArray(); + } + + return $collection; + } + + /** + * Retrieve all grouped states by country code. + * + * @return \Illuminate\Support\Collection + */ + public function findStateByCountryCode($countryCode = null, $stateCode = null) + { + $collection = []; + + $collection = $this->countryStateRepository->findByField([ + 'country_code' => $countryCode, + 'code' => $stateCode + ]); + + if (count($collection)) { + return $collection->first(); + } else { + return false; + } + } + + /** + * Method to sort through the acl items and put them in order. + * + * @param array $items + * + * @return array + */ + public function sortItems($items) + { + foreach ($items as &$item) { + if (count($item['children'])) { + $item['children'] = $this->sortItems($item['children']); + } + } + + usort($items, function ($a, $b) { + if ($a['sort'] == $b['sort']) { + return 0; + } + + return ($a['sort'] < $b['sort']) ? -1 : 1; + }); + + return $this->convertToAssociativeArray($items); + } + + /** + * @param array $items + * @param string $key + * @param string|int|float $value + * + * @return array + */ + public function array_set(&$array, $key, $value) + { + if (is_null($key)) { + return $array = $value; + } + + $keys = explode('.', $key); + $count = count($keys); + + while (count($keys) > 1) { + $key = array_shift($keys); + + if (!isset($array[$key]) || !is_array($array[$key])) { + $array[$key] = []; + } + + $array = &$array[$key]; + } + + $finalKey = array_shift($keys); + + if (isset($array[$finalKey])) { + $array[$finalKey] = $this->arrayMerge($array[$finalKey], $value); + } else { + $array[$finalKey] = $value; + } + + return $array; + } + + /** + * @param array $items + * + * @return array + */ + public function convertToAssociativeArray($items) + { + foreach ($items as $key1 => $level1) { + unset($items[$key1]); + $items[$level1['key']] = $level1; + + if (count($level1['children'])) { + foreach ($level1['children'] as $key2 => $level2) { + $temp2 = explode('.', $level2['key']); + $finalKey2 = end($temp2); + unset($items[$level1['key']]['children'][$key2]); + $items[$level1['key']]['children'][$finalKey2] = $level2; + + if (count($level2['children'])) { + foreach ($level2['children'] as $key3 => $level3) { + $temp3 = explode('.', $level3['key']); + $finalKey3 = end($temp3); + unset($items[$level1['key']]['children'][$finalKey2]['children'][$key3]); + $items[$level1['key']]['children'][$finalKey2]['children'][$finalKey3] = $level3; + } + } + + } + } + } + + return $items; + } + + /** + * @param array $array1 + * @param array $array2 + * + * @return array + */ + protected function arrayMerge(array &$array1, array &$array2) + { + $merged = $array1; + + foreach ($array2 as $key => &$value) { + if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { + $merged[$key] = $this->arrayMerge($merged[$key], $value); + } else { + $merged[$key] = $value; + } + } + + return $merged; + } + + /** + * Create singleton object through single facade. + * + * @param string $className + * @return mixed + */ + public function getSingletonInstance($className) + { + static $instances = []; + + if (array_key_exists($className, $instances)) { + return $instances[$className]; + } + + return $instances[$className] = app($className); + } + + /** + * Format date + * + * @return string + */ + public function formatDate($date, $format = 'd M Y h:iA') + { + return Carbon::parse($date)->format($format); + } + + /** + * Return currency symbol from currency code. + * + * @param float $price + * + * @return string + */ + public function currencySymbol($code) + { + $formatter = new \NumberFormatter(app()->getLocale() . '@currency=' . $code, \NumberFormatter::CURRENCY); + + return $formatter->getSymbol(\NumberFormatter::CURRENCY_SYMBOL); + } + + /** + * Format price with base currency symbol. This method also give ability to encode + * the base currency symbol and its optional. + * + * @param float $price + * + * @return string + */ + public function formatBasePrice($price) + { + if (is_null($price)) { + $price = 0; + } + + $formater = new \NumberFormatter(app()->getLocale(), \NumberFormatter::CURRENCY); + + return $formater->formatCurrency($price, config('app.currency')); + } + + /** + * @param string $fieldName + * + * @return array + */ + public function getConfigField($fieldName) + { + foreach (config('core_config') as $coreData) { + if (isset($coreData['fields'])) { + foreach ($coreData['fields'] as $field) { + $name = $coreData['key'] . '.' . $field['name']; + + if ($name == $fieldName) { + return $field; + } + } + } + } + } + + /** + * Retrieve information for configuration + * + * @param string $field + * @param int|string|null $channelId + * @param string|null $locale + * + * @return mixed + */ + public function getConfigData($field) + { + $fields = $this->getConfigField($field); + + $coreConfigValue = $this->coreConfigRepository->findOneWhere([ + 'code' => $field, + ]); + + if (!$coreConfigValue) { + $fields = explode(".", $field); + + array_shift($fields); + + $field = implode(".", $fields); + + return Config::get($field); + } + + return $coreConfigValue->value; + } +} diff --git a/packages/Webkul/Core/src/Data/countries.json b/packages/Webkul/Core/src/Data/countries.json new file mode 100644 index 0000000..f14f454 --- /dev/null +++ b/packages/Webkul/Core/src/Data/countries.json @@ -0,0 +1,1277 @@ +[ + { + "id": 1, + "code": "AF", + "name": "Afghanistan" + }, + { + "id": 2, + "code": "AX", + "name": "\u00c5land Islands" + }, + { + "id": 3, + "code": "AL", + "name": "Albania" + }, + { + "id": 4, + "code": "DZ", + "name": "Algeria" + }, + { + "id": 5, + "code": "AS", + "name": "American Samoa" + }, + { + "id": 6, + "code": "AD", + "name": "Andorra" + }, + { + "id": 7, + "code": "AO", + "name": "Angola" + }, + { + "id": 8, + "code": "AI", + "name": "Anguilla" + }, + { + "id": 9, + "code": "AQ", + "name": "Antarctica" + }, + { + "id": 10, + "code": "AG", + "name": "Antigua & Barbuda" + }, + { + "id": 11, + "code": "AR", + "name": "Argentina" + }, + { + "id": 12, + "code": "AM", + "name": "Armenia" + }, + { + "id": 13, + "code": "AW", + "name": "Aruba" + }, + { + "id": 14, + "code": "AC", + "name": "Ascension Island" + }, + { + "id": 15, + "code": "AU", + "name": "Australia" + }, + { + "id": 16, + "code": "AT", + "name": "Austria" + }, + { + "id": 17, + "code": "AZ", + "name": "Azerbaijan" + }, + { + "id": 18, + "code": "BS", + "name": "Bahamas" + }, + { + "id": 19, + "code": "BH", + "name": "Bahrain" + }, + { + "id": 20, + "code": "BD", + "name": "Bangladesh" + }, + { + "id": 21, + "code": "BB", + "name": "Barbados" + }, + { + "id": 22, + "code": "BY", + "name": "Belarus" + }, + { + "id": 23, + "code": "BE", + "name": "Belgium" + }, + { + "id": 24, + "code": "BZ", + "name": "Belize" + }, + { + "id": 25, + "code": "BJ", + "name": "Benin" + }, + { + "id": 26, + "code": "BM", + "name": "Bermuda" + }, + { + "id": 27, + "code": "BT", + "name": "Bhutan" + }, + { + "id": 28, + "code": "BO", + "name": "Bolivia" + }, + { + "id": 29, + "code": "BA", + "name": "Bosnia & Herzegovina" + }, + { + "id": 30, + "code": "BW", + "name": "Botswana" + }, + { + "id": 31, + "code": "BR", + "name": "Brazil" + }, + { + "id": 32, + "code": "IO", + "name": "British Indian Ocean Territory" + }, + { + "id": 33, + "code": "VG", + "name": "British Virgin Islands" + }, + { + "id": 34, + "code": "BN", + "name": "Brunei" + }, + { + "id": 35, + "code": "BG", + "name": "Bulgaria" + }, + { + "id": 36, + "code": "BF", + "name": "Burkina Faso" + }, + { + "id": 37, + "code": "BI", + "name": "Burundi" + }, + { + "id": 38, + "code": "KH", + "name": "Cambodia" + }, + { + "id": 39, + "code": "CM", + "name": "Cameroon" + }, + { + "id": 40, + "code": "CA", + "name": "Canada" + }, + { + "id": 41, + "code": "IC", + "name": "Canary Islands" + }, + { + "id": 42, + "code": "CV", + "name": "Cape Verde" + }, + { + "id": 43, + "code": "BQ", + "name": "Caribbean Netherlands" + }, + { + "id": 44, + "code": "KY", + "name": "Cayman Islands" + }, + { + "id": 45, + "code": "CF", + "name": "Central African Republic" + }, + { + "id": 46, + "code": "EA", + "name": "Ceuta & Melilla" + }, + { + "id": 47, + "code": "TD", + "name": "Chad" + }, + { + "id": 48, + "code": "CL", + "name": "Chile" + }, + { + "id": 49, + "code": "CN", + "name": "China" + }, + { + "id": 50, + "code": "CX", + "name": "Christmas Island" + }, + { + "id": 51, + "code": "CC", + "name": "Cocos (Keeling) Islands" + }, + { + "id": 52, + "code": "CO", + "name": "Colombia" + }, + { + "id": 53, + "code": "KM", + "name": "Comoros" + }, + { + "id": 54, + "code": "CG", + "name": "Congo - Brazzaville" + }, + { + "id": 55, + "code": "CD", + "name": "Congo - Kinshasa" + }, + { + "id": 56, + "code": "CK", + "name": "Cook Islands" + }, + { + "id": 57, + "code": "CR", + "name": "Costa Rica" + }, + { + "id": 58, + "code": "CI", + "name": "C\u00f4te d\u2019Ivoire" + }, + { + "id": 59, + "code": "HR", + "name": "Croatia" + }, + { + "id": 60, + "code": "CU", + "name": "Cuba" + }, + { + "id": 61, + "code": "CW", + "name": "Cura\u00e7ao" + }, + { + "id": 62, + "code": "CY", + "name": "Cyprus" + }, + { + "id": 63, + "code": "CZ", + "name": "Czechia" + }, + { + "id": 64, + "code": "DK", + "name": "Denmark" + }, + { + "id": 65, + "code": "DG", + "name": "Diego Garcia" + }, + { + "id": 66, + "code": "DJ", + "name": "Djibouti" + }, + { + "id": 67, + "code": "DM", + "name": "Dominica" + }, + { + "id": 68, + "code": "DO", + "name": "Dominican Republic" + }, + { + "id": 69, + "code": "EC", + "name": "Ecuador" + }, + { + "id": 70, + "code": "EG", + "name": "Egypt" + }, + { + "id": 71, + "code": "SV", + "name": "El Salvador" + }, + { + "id": 72, + "code": "GQ", + "name": "Equatorial Guinea" + }, + { + "id": 73, + "code": "ER", + "name": "Eritrea" + }, + { + "id": 74, + "code": "EE", + "name": "Estonia" + }, + { + "id": 75, + "code": "ET", + "name": "Ethiopia" + }, + { + "id": 76, + "code": "EZ", + "name": "Eurozone" + }, + { + "id": 77, + "code": "FK", + "name": "Falkland Islands" + }, + { + "id": 78, + "code": "FO", + "name": "Faroe Islands" + }, + { + "id": 79, + "code": "FJ", + "name": "Fiji" + }, + { + "id": 80, + "code": "FI", + "name": "Finland" + }, + { + "id": 81, + "code": "FR", + "name": "France" + }, + { + "id": 82, + "code": "GF", + "name": "French Guiana" + }, + { + "id": 83, + "code": "PF", + "name": "French Polynesia" + }, + { + "id": 84, + "code": "TF", + "name": "French Southern Territories" + }, + { + "id": 85, + "code": "GA", + "name": "Gabon" + }, + { + "id": 86, + "code": "GM", + "name": "Gambia" + }, + { + "id": 87, + "code": "GE", + "name": "Georgia" + }, + { + "id": 88, + "code": "DE", + "name": "Germany" + }, + { + "id": 89, + "code": "GH", + "name": "Ghana" + }, + { + "id": 90, + "code": "GI", + "name": "Gibraltar" + }, + { + "id": 91, + "code": "GR", + "name": "Greece" + }, + { + "id": 92, + "code": "GL", + "name": "Greenland" + }, + { + "id": 93, + "code": "GD", + "name": "Grenada" + }, + { + "id": 94, + "code": "GP", + "name": "Guadeloupe" + }, + { + "id": 95, + "code": "GU", + "name": "Guam" + }, + { + "id": 96, + "code": "GT", + "name": "Guatemala" + }, + { + "id": 97, + "code": "GG", + "name": "Guernsey" + }, + { + "id": 98, + "code": "GN", + "name": "Guinea" + }, + { + "id": 99, + "code": "GW", + "name": "Guinea-Bissau" + }, + { + "id": 100, + "code": "GY", + "name": "Guyana" + }, + { + "id": 101, + "code": "HT", + "name": "Haiti" + }, + { + "id": 102, + "code": "HN", + "name": "Honduras" + }, + { + "id": 103, + "code": "HK", + "name": "Hong Kong SAR China" + }, + { + "id": 104, + "code": "HU", + "name": "Hungary" + }, + { + "id": 105, + "code": "IS", + "name": "Iceland" + }, + { + "id": 106, + "code": "IN", + "name": "India" + }, + { + "id": 107, + "code": "ID", + "name": "Indonesia" + }, + { + "id": 108, + "code": "IR", + "name": "Iran" + }, + { + "id": 109, + "code": "IQ", + "name": "Iraq" + }, + { + "id": 110, + "code": "IE", + "name": "Ireland" + }, + { + "id": 111, + "code": "IM", + "name": "Isle of Man" + }, + { + "id": 112, + "code": "IL", + "name": "Israel" + }, + { + "id": 113, + "code": "IT", + "name": "Italy" + }, + { + "id": 114, + "code": "JM", + "name": "Jamaica" + }, + { + "id": 115, + "code": "JP", + "name": "Japan" + }, + { + "id": 116, + "code": "JE", + "name": "Jersey" + }, + { + "id": 117, + "code": "JO", + "name": "Jordan" + }, + { + "id": 118, + "code": "KZ", + "name": "Kazakhstan" + }, + { + "id": 119, + "code": "KE", + "name": "Kenya" + }, + { + "id": 120, + "code": "KI", + "name": "Kiribati" + }, + { + "id": 121, + "code": "XK", + "name": "Kosovo" + }, + { + "id": 122, + "code": "KW", + "name": "Kuwait" + }, + { + "id": 123, + "code": "KG", + "name": "Kyrgyzstan" + }, + { + "id": 124, + "code": "LA", + "name": "Laos" + }, + { + "id": 125, + "code": "LV", + "name": "Latvia" + }, + { + "id": 126, + "code": "LB", + "name": "Lebanon" + }, + { + "id": 127, + "code": "LS", + "name": "Lesotho" + }, + { + "id": 128, + "code": "LR", + "name": "Liberia" + }, + { + "id": 129, + "code": "LY", + "name": "Libya" + }, + { + "id": 130, + "code": "LI", + "name": "Liechtenstein" + }, + { + "id": 131, + "code": "LT", + "name": "Lithuania" + }, + { + "id": 132, + "code": "LU", + "name": "Luxembourg" + }, + { + "id": 133, + "code": "MO", + "name": "Macau SAR China" + }, + { + "id": 134, + "code": "MK", + "name": "Macedonia" + }, + { + "id": 135, + "code": "MG", + "name": "Madagascar" + }, + { + "id": 136, + "code": "MW", + "name": "Malawi" + }, + { + "id": 137, + "code": "MY", + "name": "Malaysia" + }, + { + "id": 138, + "code": "MV", + "name": "Maldives" + }, + { + "id": 139, + "code": "ML", + "name": "Mali" + }, + { + "id": 140, + "code": "MT", + "name": "Malta" + }, + { + "id": 141, + "code": "MH", + "name": "Marshall Islands" + }, + { + "id": 142, + "code": "MQ", + "name": "Martinique" + }, + { + "id": 143, + "code": "MR", + "name": "Mauritania" + }, + { + "id": 144, + "code": "MU", + "name": "Mauritius" + }, + { + "id": 145, + "code": "YT", + "name": "Mayotte" + }, + { + "id": 146, + "code": "MX", + "name": "Mexico" + }, + { + "id": 147, + "code": "FM", + "name": "Micronesia" + }, + { + "id": 148, + "code": "MD", + "name": "Moldova" + }, + { + "id": 149, + "code": "MC", + "name": "Monaco" + }, + { + "id": 150, + "code": "MN", + "name": "Mongolia" + }, + { + "id": 151, + "code": "ME", + "name": "Montenegro" + }, + { + "id": 152, + "code": "MS", + "name": "Montserrat" + }, + { + "id": 153, + "code": "MA", + "name": "Morocco" + }, + { + "id": 154, + "code": "MZ", + "name": "Mozambique" + }, + { + "id": 155, + "code": "MM", + "name": "Myanmar (Burma)" + }, + { + "id": 156, + "code": "NA", + "name": "Namibia" + }, + { + "id": 157, + "code": "NR", + "name": "Nauru" + }, + { + "id": 158, + "code": "NP", + "name": "Nepal" + }, + { + "id": 159, + "code": "NL", + "name": "Netherlands" + }, + { + "id": 160, + "code": "NC", + "name": "New Caledonia" + }, + { + "id": 161, + "code": "NZ", + "name": "New Zealand" + }, + { + "id": 162, + "code": "NI", + "name": "Nicaragua" + }, + { + "id": 163, + "code": "NE", + "name": "Niger" + }, + { + "id": 164, + "code": "NG", + "name": "Nigeria" + }, + { + "id": 165, + "code": "NU", + "name": "Niue" + }, + { + "id": 166, + "code": "NF", + "name": "Norfolk Island" + }, + { + "id": 167, + "code": "KP", + "name": "North Korea" + }, + { + "id": 168, + "code": "MP", + "name": "Northern Mariana Islands" + }, + { + "id": 169, + "code": "NO", + "name": "Norway" + }, + { + "id": 170, + "code": "OM", + "name": "Oman" + }, + { + "id": 171, + "code": "PK", + "name": "Pakistan" + }, + { + "id": 172, + "code": "PW", + "name": "Palau" + }, + { + "id": 173, + "code": "PS", + "name": "Palestinian Territories" + }, + { + "id": 174, + "code": "PA", + "name": "Panama" + }, + { + "id": 175, + "code": "PG", + "name": "Papua New Guinea" + }, + { + "id": 176, + "code": "PY", + "name": "Paraguay" + }, + { + "id": 177, + "code": "PE", + "name": "Peru" + }, + { + "id": 178, + "code": "PH", + "name": "Philippines" + }, + { + "id": 179, + "code": "PN", + "name": "Pitcairn Islands" + }, + { + "id": 180, + "code": "PL", + "name": "Poland" + }, + { + "id": 181, + "code": "PT", + "name": "Portugal" + }, + { + "id": 182, + "code": "PR", + "name": "Puerto Rico" + }, + { + "id": 183, + "code": "QA", + "name": "Qatar" + }, + { + "id": 184, + "code": "RE", + "name": "R\u00e9union" + }, + { + "id": 185, + "code": "RO", + "name": "Romania" + }, + { + "id": 186, + "code": "RU", + "name": "Russia" + }, + { + "id": 187, + "code": "RW", + "name": "Rwanda" + }, + { + "id": 188, + "code": "WS", + "name": "Samoa" + }, + { + "id": 189, + "code": "SM", + "name": "San Marino" + }, + { + "id": 190, + "code": "ST", + "name": "S\u00e3o Tom\u00e9 & Pr\u00edncipe" + }, + { + "id": 191, + "code": "SA", + "name": "Saudi Arabia" + }, + { + "id": 192, + "code": "SN", + "name": "Senegal" + }, + { + "id": 193, + "code": "RS", + "name": "Serbia" + }, + { + "id": 194, + "code": "SC", + "name": "Seychelles" + }, + { + "id": 195, + "code": "SL", + "name": "Sierra Leone" + }, + { + "id": 196, + "code": "SG", + "name": "Singapore" + }, + { + "id": 197, + "code": "SX", + "name": "Sint Maarten" + }, + { + "id": 198, + "code": "SK", + "name": "Slovakia" + }, + { + "id": 199, + "code": "SI", + "name": "Slovenia" + }, + { + "id": 200, + "code": "SB", + "name": "Solomon Islands" + }, + { + "id": 201, + "code": "SO", + "name": "Somalia" + }, + { + "id": 202, + "code": "ZA", + "name": "South Africa" + }, + { + "id": 203, + "code": "GS", + "name": "South Georgia & South Sandwich Islands" + }, + { + "id": 204, + "code": "KR", + "name": "South Korea" + }, + { + "id": 205, + "code": "SS", + "name": "South Sudan" + }, + { + "id": 206, + "code": "ES", + "name": "Spain" + }, + { + "id": 207, + "code": "LK", + "name": "Sri Lanka" + }, + { + "id": 208, + "code": "BL", + "name": "St. Barth\u00e9lemy" + }, + { + "id": 209, + "code": "SH", + "name": "St. Helena" + }, + { + "id": 210, + "code": "KN", + "name": "St. Kitts & Nevis" + }, + { + "id": 211, + "code": "LC", + "name": "St. Lucia" + }, + { + "id": 212, + "code": "MF", + "name": "St. Martin" + }, + { + "id": 213, + "code": "PM", + "name": "St. Pierre & Miquelon" + }, + { + "id": 214, + "code": "VC", + "name": "St. Vincent & Grenadines" + }, + { + "id": 215, + "code": "SD", + "name": "Sudan" + }, + { + "id": 216, + "code": "SR", + "name": "Suriname" + }, + { + "id": 217, + "code": "SJ", + "name": "Svalbard & Jan Mayen" + }, + { + "id": 218, + "code": "SZ", + "name": "Swaziland" + }, + { + "id": 219, + "code": "SE", + "name": "Sweden" + }, + { + "id": 220, + "code": "CH", + "name": "Switzerland" + }, + { + "id": 221, + "code": "SY", + "name": "Syria" + }, + { + "id": 222, + "code": "TW", + "name": "Taiwan" + }, + { + "id": 223, + "code": "TJ", + "name": "Tajikistan" + }, + { + "id": 224, + "code": "TZ", + "name": "Tanzania" + }, + { + "id": 225, + "code": "TH", + "name": "Thailand" + }, + { + "id": 226, + "code": "TL", + "name": "Timor-Leste" + }, + { + "id": 227, + "code": "TG", + "name": "Togo" + }, + { + "id": 228, + "code": "TK", + "name": "Tokelau" + }, + { + "id": 229, + "code": "TO", + "name": "Tonga" + }, + { + "id": 230, + "code": "TT", + "name": "Trinidad & Tobago" + }, + { + "id": 231, + "code": "TA", + "name": "Tristan da Cunha" + }, + { + "id": 232, + "code": "TN", + "name": "Tunisia" + }, + { + "id": 233, + "code": "TR", + "name": "Turkey" + }, + { + "id": 234, + "code": "TM", + "name": "Turkmenistan" + }, + { + "id": 235, + "code": "TC", + "name": "Turks & Caicos Islands" + }, + { + "id": 236, + "code": "TV", + "name": "Tuvalu" + }, + { + "id": 237, + "code": "UM", + "name": "U.S. Outlying Islands" + }, + { + "id": 238, + "code": "VI", + "name": "U.S. Virgin Islands" + }, + { + "id": 239, + "code": "UG", + "name": "Uganda" + }, + { + "id": 240, + "code": "UA", + "name": "Ukraine" + }, + { + "id": 241, + "code": "AE", + "name": "United Arab Emirates" + }, + { + "id": 242, + "code": "GB", + "name": "United Kingdom" + }, + { + "id": 243, + "code": "UN", + "name": "United Nations" + }, + { + "id": 244, + "code": "US", + "name": "United States" + }, + { + "id": 245, + "code": "UY", + "name": "Uruguay" + }, + { + "id": 246, + "code": "UZ", + "name": "Uzbekistan" + }, + { + "id": 247, + "code": "VU", + "name": "Vanuatu" + }, + { + "id": 248, + "code": "VA", + "name": "Vatican City" + }, + { + "id": 249, + "code": "VE", + "name": "Venezuela" + }, + { + "id": 250, + "code": "VN", + "name": "Vietnam" + }, + { + "id": 251, + "code": "WF", + "name": "Wallis & Futuna" + }, + { + "id": 252, + "code": "EH", + "name": "Western Sahara" + }, + { + "id": 253, + "code": "YE", + "name": "Yemen" + }, + { + "id": 254, + "code": "ZM", + "name": "Zambia" + }, + { + "id": 255, + "code": "ZW", + "name": "Zimbabwe" + } +] diff --git a/packages/Webkul/Core/src/Data/states.json b/packages/Webkul/Core/src/Data/states.json new file mode 100644 index 0000000..19076e9 --- /dev/null +++ b/packages/Webkul/Core/src/Data/states.json @@ -0,0 +1,3978 @@ +[ + { + "id": 1, + "country_code": "US", + "code": "AL", + "name": "Alabama", + "country_id": 244 + }, + { + "id": 2, + "country_code": "US", + "code": "AK", + "name": "Alaska", + "country_id": 244 + }, + { + "id": 3, + "country_code": "US", + "code": "AS", + "name": "American Samoa", + "country_id": 244 + }, + { + "id": 4, + "country_code": "US", + "code": "AZ", + "name": "Arizona", + "country_id": 244 + }, + { + "id": 5, + "country_code": "US", + "code": "AR", + "name": "Arkansas", + "country_id": 244 + }, + { + "id": 6, + "country_code": "US", + "code": "AE", + "name": "Armed Forces Africa", + "country_id": 244 + }, + { + "id": 7, + "country_code": "US", + "code": "AA", + "name": "Armed Forces Americas", + "country_id": 244 + }, + { + "id": 8, + "country_code": "US", + "code": "AE", + "name": "Armed Forces Canada", + "country_id": 244 + }, + { + "id": 9, + "country_code": "US", + "code": "AE", + "name": "Armed Forces Europe", + "country_id": 244 + }, + { + "id": 10, + "country_code": "US", + "code": "AE", + "name": "Armed Forces Middle East", + "country_id": 244 + }, + { + "id": 11, + "country_code": "US", + "code": "AP", + "name": "Armed Forces Pacific", + "country_id": 244 + }, + { + "id": 12, + "country_code": "US", + "code": "CA", + "name": "California", + "country_id": 244 + }, + { + "id": 13, + "country_code": "US", + "code": "CO", + "name": "Colorado", + "country_id": 244 + }, + { + "id": 14, + "country_code": "US", + "code": "CT", + "name": "Connecticut", + "country_id": 244 + }, + { + "id": 15, + "country_code": "US", + "code": "DE", + "name": "Delaware", + "country_id": 244 + }, + { + "id": 16, + "country_code": "US", + "code": "DC", + "name": "District of Columbia", + "country_id": 244 + }, + { + "id": 17, + "country_code": "US", + "code": "FM", + "name": "Federated States Of Micronesia", + "country_id": 244 + }, + { + "id": 18, + "country_code": "US", + "code": "FL", + "name": "Florida", + "country_id": 244 + }, + { + "id": 19, + "country_code": "US", + "code": "GA", + "name": "Georgia", + "country_id": 244 + }, + { + "id": 20, + "country_code": "US", + "code": "GU", + "name": "Guam", + "country_id": 244 + }, + { + "id": 21, + "country_code": "US", + "code": "HI", + "name": "Hawaii", + "country_id": 244 + }, + { + "id": 22, + "country_code": "US", + "code": "ID", + "name": "Idaho", + "country_id": 244 + }, + { + "id": 23, + "country_code": "US", + "code": "IL", + "name": "Illinois", + "country_id": 244 + }, + { + "id": 24, + "country_code": "US", + "code": "IN", + "name": "Indiana", + "country_id": 244 + }, + { + "id": 25, + "country_code": "US", + "code": "IA", + "name": "Iowa", + "country_id": 244 + }, + { + "id": 26, + "country_code": "US", + "code": "KS", + "name": "Kansas", + "country_id": 244 + }, + { + "id": 27, + "country_code": "US", + "code": "KY", + "name": "Kentucky", + "country_id": 244 + }, + { + "id": 28, + "country_code": "US", + "code": "LA", + "name": "Louisiana", + "country_id": 244 + }, + { + "id": 29, + "country_code": "US", + "code": "ME", + "name": "Maine", + "country_id": 244 + }, + { + "id": 30, + "country_code": "US", + "code": "MH", + "name": "Marshall Islands", + "country_id": 244 + }, + { + "id": 31, + "country_code": "US", + "code": "MD", + "name": "Maryland", + "country_id": 244 + }, + { + "id": 32, + "country_code": "US", + "code": "MA", + "name": "Massachusetts", + "country_id": 244 + }, + { + "id": 33, + "country_code": "US", + "code": "MI", + "name": "Michigan", + "country_id": 244 + }, + { + "id": 34, + "country_code": "US", + "code": "MN", + "name": "Minnesota", + "country_id": 244 + }, + { + "id": 35, + "country_code": "US", + "code": "MS", + "name": "Mississippi", + "country_id": 244 + }, + { + "id": 36, + "country_code": "US", + "code": "MO", + "name": "Missouri", + "country_id": 244 + }, + { + "id": 37, + "country_code": "US", + "code": "MT", + "name": "Montana", + "country_id": 244 + }, + { + "id": 38, + "country_code": "US", + "code": "NE", + "name": "Nebraska", + "country_id": 244 + }, + { + "id": 39, + "country_code": "US", + "code": "NV", + "name": "Nevada", + "country_id": 244 + }, + { + "id": 40, + "country_code": "US", + "code": "NH", + "name": "New Hampshire", + "country_id": 244 + }, + { + "id": 41, + "country_code": "US", + "code": "NJ", + "name": "New Jersey", + "country_id": 244 + }, + { + "id": 42, + "country_code": "US", + "code": "NM", + "name": "New Mexico", + "country_id": 244 + }, + { + "id": 43, + "country_code": "US", + "code": "NY", + "name": "New York", + "country_id": 244 + }, + { + "id": 44, + "country_code": "US", + "code": "NC", + "name": "North Carolina", + "country_id": 244 + }, + { + "id": 45, + "country_code": "US", + "code": "ND", + "name": "North Dakota", + "country_id": 244 + }, + { + "id": 46, + "country_code": "US", + "code": "MP", + "name": "Northern Mariana Islands", + "country_id": 244 + }, + { + "id": 47, + "country_code": "US", + "code": "OH", + "name": "Ohio", + "country_id": 244 + }, + { + "id": 48, + "country_code": "US", + "code": "OK", + "name": "Oklahoma", + "country_id": 244 + }, + { + "id": 49, + "country_code": "US", + "code": "OR", + "name": "Oregon", + "country_id": 244 + }, + { + "id": 50, + "country_code": "US", + "code": "PW", + "name": "Palau", + "country_id": 244 + }, + { + "id": 51, + "country_code": "US", + "code": "PA", + "name": "Pennsylvania", + "country_id": 244 + }, + { + "id": 52, + "country_code": "US", + "code": "PR", + "name": "Puerto Rico", + "country_id": 244 + }, + { + "id": 53, + "country_code": "US", + "code": "RI", + "name": "Rhode Island", + "country_id": 244 + }, + { + "id": 54, + "country_code": "US", + "code": "SC", + "name": "South Carolina", + "country_id": 244 + }, + { + "id": 55, + "country_code": "US", + "code": "SD", + "name": "South Dakota", + "country_id": 244 + }, + { + "id": 56, + "country_code": "US", + "code": "TN", + "name": "Tennessee", + "country_id": 244 + }, + { + "id": 57, + "country_code": "US", + "code": "TX", + "name": "Texas", + "country_id": 244 + }, + { + "id": 58, + "country_code": "US", + "code": "UT", + "name": "Utah", + "country_id": 244 + }, + { + "id": 59, + "country_code": "US", + "code": "VT", + "name": "Vermont", + "country_id": 244 + }, + { + "id": 60, + "country_code": "US", + "code": "VI", + "name": "Virgin Islands", + "country_id": 244 + }, + { + "id": 61, + "country_code": "US", + "code": "VA", + "name": "Virginia", + "country_id": 244 + }, + { + "id": 62, + "country_code": "US", + "code": "WA", + "name": "Washington", + "country_id": 244 + }, + { + "id": 63, + "country_code": "US", + "code": "WV", + "name": "West Virginia", + "country_id": 244 + }, + { + "id": 64, + "country_code": "US", + "code": "WI", + "name": "Wisconsin", + "country_id": 244 + }, + { + "id": 65, + "country_code": "US", + "code": "WY", + "name": "Wyoming", + "country_id": 244 + }, + { + "id": 66, + "country_code": "CA", + "code": "AB", + "name": "Alberta", + "country_id": 40 + }, + { + "id": 67, + "country_code": "CA", + "code": "BC", + "name": "British Columbia", + "country_id": 40 + }, + { + "id": 68, + "country_code": "CA", + "code": "MB", + "name": "Manitoba", + "country_id": 40 + }, + { + "id": 69, + "country_code": "CA", + "code": "NL", + "name": "Newfoundland and Labrador", + "country_id": 40 + }, + { + "id": 70, + "country_code": "CA", + "code": "NB", + "name": "New Brunswick", + "country_id": 40 + }, + { + "id": 71, + "country_code": "CA", + "code": "NS", + "name": "Nova Scotia", + "country_id": 40 + }, + { + "id": 72, + "country_code": "CA", + "code": "NT", + "name": "Northwest Territories", + "country_id": 40 + }, + { + "id": 73, + "country_code": "CA", + "code": "NU", + "name": "Nunavut", + "country_id": 40 + }, + { + "id": 74, + "country_code": "CA", + "code": "ON", + "name": "Ontario", + "country_id": 40 + }, + { + "id": 75, + "country_code": "CA", + "code": "PE", + "name": "Prince Edward Island", + "country_id": 40 + }, + { + "id": 76, + "country_code": "CA", + "code": "QC", + "name": "Quebec", + "country_id": 40 + }, + { + "id": 77, + "country_code": "CA", + "code": "SK", + "name": "Saskatchewan", + "country_id": 40 + }, + { + "id": 78, + "country_code": "CA", + "code": "YT", + "name": "Yukon Territory", + "country_id": 40 + }, + { + "id": 79, + "country_code": "DE", + "code": "NDS", + "name": "Niedersachsen", + "country_id": 88 + }, + { + "id": 80, + "country_code": "DE", + "code": "BAW", + "name": "Baden-W\u00fcrttemberg", + "country_id": 88 + }, + { + "id": 81, + "country_code": "DE", + "code": "BAY", + "name": "Bayern", + "country_id": 88 + }, + { + "id": 82, + "country_code": "DE", + "code": "BER", + "name": "Berlin", + "country_id": 88 + }, + { + "id": 83, + "country_code": "DE", + "code": "BRG", + "name": "Brandenburg", + "country_id": 88 + }, + { + "id": 84, + "country_code": "DE", + "code": "BRE", + "name": "Bremen", + "country_id": 88 + }, + { + "id": 85, + "country_code": "DE", + "code": "HAM", + "name": "Hamburg", + "country_id": 88 + }, + { + "id": 86, + "country_code": "DE", + "code": "HES", + "name": "Hessen", + "country_id": 88 + }, + { + "id": 87, + "country_code": "DE", + "code": "MEC", + "name": "Mecklenburg-Vorpommern", + "country_id": 88 + }, + { + "id": 88, + "country_code": "DE", + "code": "NRW", + "name": "Nordrhein-Westfalen", + "country_id": 88 + }, + { + "id": 89, + "country_code": "DE", + "code": "RHE", + "name": "Rheinland-Pfalz", + "country_id": 88 + }, + { + "id": 90, + "country_code": "DE", + "code": "SAR", + "name": "Saarland", + "country_id": 88 + }, + { + "id": 91, + "country_code": "DE", + "code": "SAS", + "name": "Sachsen", + "country_id": 88 + }, + { + "id": 92, + "country_code": "DE", + "code": "SAC", + "name": "Sachsen-Anhalt", + "country_id": 88 + }, + { + "id": 93, + "country_code": "DE", + "code": "SCN", + "name": "Schleswig-Holstein", + "country_id": 88 + }, + { + "id": 94, + "country_code": "DE", + "code": "THE", + "name": "Th\u00fcringen", + "country_id": 88 + }, + { + "id": 95, + "country_code": "AT", + "code": "WI", + "name": "Wien", + "country_id": 16 + }, + { + "id": 96, + "country_code": "AT", + "code": "NO", + "name": "Nieder\u00f6sterreich", + "country_id": 16 + }, + { + "id": 97, + "country_code": "AT", + "code": "OO", + "name": "Ober\u00f6sterreich", + "country_id": 16 + }, + { + "id": 98, + "country_code": "AT", + "code": "SB", + "name": "Salzburg", + "country_id": 16 + }, + { + "id": 99, + "country_code": "AT", + "code": "KN", + "name": "K\u00e4rnten", + "country_id": 16 + }, + { + "id": 100, + "country_code": "AT", + "code": "ST", + "name": "Steiermark", + "country_id": 16 + }, + { + "id": 101, + "country_code": "AT", + "code": "TI", + "name": "Tirol", + "country_id": 16 + }, + { + "id": 102, + "country_code": "AT", + "code": "BL", + "name": "Burgenland", + "country_id": 16 + }, + { + "id": 103, + "country_code": "AT", + "code": "VB", + "name": "Vorarlberg", + "country_id": 16 + }, + { + "id": 104, + "country_code": "CH", + "code": "AG", + "name": "Aargau", + "country_id": 220 + }, + { + "id": 105, + "country_code": "CH", + "code": "AI", + "name": "Appenzell Innerrhoden", + "country_id": 220 + }, + { + "id": 106, + "country_code": "CH", + "code": "AR", + "name": "Appenzell Ausserrhoden", + "country_id": 220 + }, + { + "id": 107, + "country_code": "CH", + "code": "BE", + "name": "Bern", + "country_id": 220 + }, + { + "id": 108, + "country_code": "CH", + "code": "BL", + "name": "Basel-Landschaft", + "country_id": 220 + }, + { + "id": 109, + "country_code": "CH", + "code": "BS", + "name": "Basel-Stadt", + "country_id": 220 + }, + { + "id": 110, + "country_code": "CH", + "code": "FR", + "name": "Freiburg", + "country_id": 220 + }, + { + "id": 111, + "country_code": "CH", + "code": "GE", + "name": "Genf", + "country_id": 220 + }, + { + "id": 112, + "country_code": "CH", + "code": "GL", + "name": "Glarus", + "country_id": 220 + }, + { + "id": 113, + "country_code": "CH", + "code": "GR", + "name": "Graub\u00fcnden", + "country_id": 220 + }, + { + "id": 114, + "country_code": "CH", + "code": "JU", + "name": "Jura", + "country_id": 220 + }, + { + "id": 115, + "country_code": "CH", + "code": "LU", + "name": "Luzern", + "country_id": 220 + }, + { + "id": 116, + "country_code": "CH", + "code": "NE", + "name": "Neuenburg", + "country_id": 220 + }, + { + "id": 117, + "country_code": "CH", + "code": "NW", + "name": "Nidwalden", + "country_id": 220 + }, + { + "id": 118, + "country_code": "CH", + "code": "OW", + "name": "Obwalden", + "country_id": 220 + }, + { + "id": 119, + "country_code": "CH", + "code": "SG", + "name": "St. Gallen", + "country_id": 220 + }, + { + "id": 120, + "country_code": "CH", + "code": "SH", + "name": "Schaffhausen", + "country_id": 220 + }, + { + "id": 121, + "country_code": "CH", + "code": "SO", + "name": "Solothurn", + "country_id": 220 + }, + { + "id": 122, + "country_code": "CH", + "code": "SZ", + "name": "Schwyz", + "country_id": 220 + }, + { + "id": 123, + "country_code": "CH", + "code": "TG", + "name": "Thurgau", + "country_id": 220 + }, + { + "id": 124, + "country_code": "CH", + "code": "TI", + "name": "Tessin", + "country_id": 220 + }, + { + "id": 125, + "country_code": "CH", + "code": "UR", + "name": "Uri", + "country_id": 220 + }, + { + "id": 126, + "country_code": "CH", + "code": "VD", + "name": "Waadt", + "country_id": 220 + }, + { + "id": 127, + "country_code": "CH", + "code": "VS", + "name": "Wallis", + "country_id": 220 + }, + { + "id": 128, + "country_code": "CH", + "code": "ZG", + "name": "Zug", + "country_id": 220 + }, + { + "id": 129, + "country_code": "CH", + "code": "ZH", + "name": "Z\u00fcrich", + "country_id": 220 + }, + { + "id": 130, + "country_code": "ES", + "code": "A Coru\u0441a", + "name": "A Coru\u00f1a", + "country_id": 206 + }, + { + "id": 131, + "country_code": "ES", + "code": "Alava", + "name": "Alava", + "country_id": 206 + }, + { + "id": 132, + "country_code": "ES", + "code": "Albacete", + "name": "Albacete", + "country_id": 206 + }, + { + "id": 133, + "country_code": "ES", + "code": "Alicante", + "name": "Alicante", + "country_id": 206 + }, + { + "id": 134, + "country_code": "ES", + "code": "Almeria", + "name": "Almeria", + "country_id": 206 + }, + { + "id": 135, + "country_code": "ES", + "code": "Asturias", + "name": "Asturias", + "country_id": 206 + }, + { + "id": 136, + "country_code": "ES", + "code": "Avila", + "name": "Avila", + "country_id": 206 + }, + { + "id": 137, + "country_code": "ES", + "code": "Badajoz", + "name": "Badajoz", + "country_id": 206 + }, + { + "id": 138, + "country_code": "ES", + "code": "Baleares", + "name": "Baleares", + "country_id": 206 + }, + { + "id": 139, + "country_code": "ES", + "code": "Barcelona", + "name": "Barcelona", + "country_id": 206 + }, + { + "id": 140, + "country_code": "ES", + "code": "Burgos", + "name": "Burgos", + "country_id": 206 + }, + { + "id": 141, + "country_code": "ES", + "code": "Caceres", + "name": "Caceres", + "country_id": 206 + }, + { + "id": 142, + "country_code": "ES", + "code": "Cadiz", + "name": "Cadiz", + "country_id": 206 + }, + { + "id": 143, + "country_code": "ES", + "code": "Cantabria", + "name": "Cantabria", + "country_id": 206 + }, + { + "id": 144, + "country_code": "ES", + "code": "Castellon", + "name": "Castellon", + "country_id": 206 + }, + { + "id": 145, + "country_code": "ES", + "code": "Ceuta", + "name": "Ceuta", + "country_id": 206 + }, + { + "id": 146, + "country_code": "ES", + "code": "Ciudad Real", + "name": "Ciudad Real", + "country_id": 206 + }, + { + "id": 147, + "country_code": "ES", + "code": "Cordoba", + "name": "Cordoba", + "country_id": 206 + }, + { + "id": 148, + "country_code": "ES", + "code": "Cuenca", + "name": "Cuenca", + "country_id": 206 + }, + { + "id": 149, + "country_code": "ES", + "code": "Girona", + "name": "Girona", + "country_id": 206 + }, + { + "id": 150, + "country_code": "ES", + "code": "Granada", + "name": "Granada", + "country_id": 206 + }, + { + "id": 151, + "country_code": "ES", + "code": "Guadalajara", + "name": "Guadalajara", + "country_id": 206 + }, + { + "id": 152, + "country_code": "ES", + "code": "Guipuzcoa", + "name": "Guipuzcoa", + "country_id": 206 + }, + { + "id": 153, + "country_code": "ES", + "code": "Huelva", + "name": "Huelva", + "country_id": 206 + }, + { + "id": 154, + "country_code": "ES", + "code": "Huesca", + "name": "Huesca", + "country_id": 206 + }, + { + "id": 155, + "country_code": "ES", + "code": "Jaen", + "name": "Jaen", + "country_id": 206 + }, + { + "id": 156, + "country_code": "ES", + "code": "La Rioja", + "name": "La Rioja", + "country_id": 206 + }, + { + "id": 157, + "country_code": "ES", + "code": "Las Palmas", + "name": "Las Palmas", + "country_id": 206 + }, + { + "id": 158, + "country_code": "ES", + "code": "Leon", + "name": "Leon", + "country_id": 206 + }, + { + "id": 159, + "country_code": "ES", + "code": "Lleida", + "name": "Lleida", + "country_id": 206 + }, + { + "id": 160, + "country_code": "ES", + "code": "Lugo", + "name": "Lugo", + "country_id": 206 + }, + { + "id": 161, + "country_code": "ES", + "code": "Madrid", + "name": "Madrid", + "country_id": 206 + }, + { + "id": 162, + "country_code": "ES", + "code": "Malaga", + "name": "Malaga", + "country_id": 206 + }, + { + "id": 163, + "country_code": "ES", + "code": "Melilla", + "name": "Melilla", + "country_id": 206 + }, + { + "id": 164, + "country_code": "ES", + "code": "Murcia", + "name": "Murcia", + "country_id": 206 + }, + { + "id": 165, + "country_code": "ES", + "code": "Navarra", + "name": "Navarra", + "country_id": 206 + }, + { + "id": 166, + "country_code": "ES", + "code": "Ourense", + "name": "Ourense", + "country_id": 206 + }, + { + "id": 167, + "country_code": "ES", + "code": "Palencia", + "name": "Palencia", + "country_id": 206 + }, + { + "id": 168, + "country_code": "ES", + "code": "Pontevedra", + "name": "Pontevedra", + "country_id": 206 + }, + { + "id": 169, + "country_code": "ES", + "code": "Salamanca", + "name": "Salamanca", + "country_id": 206 + }, + { + "id": 170, + "country_code": "ES", + "code": "Santa Cruz de Tenerife", + "name": "Santa Cruz de Tenerife", + "country_id": 206 + }, + { + "id": 171, + "country_code": "ES", + "code": "Segovia", + "name": "Segovia", + "country_id": 206 + }, + { + "id": 172, + "country_code": "ES", + "code": "Sevilla", + "name": "Sevilla", + "country_id": 206 + }, + { + "id": 173, + "country_code": "ES", + "code": "Soria", + "name": "Soria", + "country_id": 206 + }, + { + "id": 174, + "country_code": "ES", + "code": "Tarragona", + "name": "Tarragona", + "country_id": 206 + }, + { + "id": 175, + "country_code": "ES", + "code": "Teruel", + "name": "Teruel", + "country_id": 206 + }, + { + "id": 176, + "country_code": "ES", + "code": "Toledo", + "name": "Toledo", + "country_id": 206 + }, + { + "id": 177, + "country_code": "ES", + "code": "Valencia", + "name": "Valencia", + "country_id": 206 + }, + { + "id": 178, + "country_code": "ES", + "code": "Valladolid", + "name": "Valladolid", + "country_id": 206 + }, + { + "id": 179, + "country_code": "ES", + "code": "Vizcaya", + "name": "Vizcaya", + "country_id": 206 + }, + { + "id": 180, + "country_code": "ES", + "code": "Zamora", + "name": "Zamora", + "country_id": 206 + }, + { + "id": 181, + "country_code": "ES", + "code": "Zaragoza", + "name": "Zaragoza", + "country_id": 206 + }, + { + "id": 182, + "country_code": "FR", + "code": "1", + "name": "Ain", + "country_id": 81 + }, + { + "id": 183, + "country_code": "FR", + "code": "2", + "name": "Aisne", + "country_id": 81 + }, + { + "id": 184, + "country_code": "FR", + "code": "3", + "name": "Allier", + "country_id": 81 + }, + { + "id": 185, + "country_code": "FR", + "code": "4", + "name": "Alpes-de-Haute-Provence", + "country_id": 81 + }, + { + "id": 186, + "country_code": "FR", + "code": "5", + "name": "Hautes-Alpes", + "country_id": 81 + }, + { + "id": 187, + "country_code": "FR", + "code": "6", + "name": "Alpes-Maritimes", + "country_id": 81 + }, + { + "id": 188, + "country_code": "FR", + "code": "7", + "name": "Ard\u00e8che", + "country_id": 81 + }, + { + "id": 189, + "country_code": "FR", + "code": "8", + "name": "Ardennes", + "country_id": 81 + }, + { + "id": 190, + "country_code": "FR", + "code": "9", + "name": "Ari\u00e8ge", + "country_id": 81 + }, + { + "id": 191, + "country_code": "FR", + "code": "10", + "name": "Aube", + "country_id": 81 + }, + { + "id": 192, + "country_code": "FR", + "code": "11", + "name": "Aude", + "country_id": 81 + }, + { + "id": 193, + "country_code": "FR", + "code": "12", + "name": "Aveyron", + "country_id": 81 + }, + { + "id": 194, + "country_code": "FR", + "code": "13", + "name": "Bouches-du-Rh\u00f4ne", + "country_id": 81 + }, + { + "id": 195, + "country_code": "FR", + "code": "14", + "name": "Calvados", + "country_id": 81 + }, + { + "id": 196, + "country_code": "FR", + "code": "15", + "name": "Cantal", + "country_id": 81 + }, + { + "id": 197, + "country_code": "FR", + "code": "16", + "name": "Charente", + "country_id": 81 + }, + { + "id": 198, + "country_code": "FR", + "code": "17", + "name": "Charente-Maritime", + "country_id": 81 + }, + { + "id": 199, + "country_code": "FR", + "code": "18", + "name": "Cher", + "country_id": 81 + }, + { + "id": 200, + "country_code": "FR", + "code": "19", + "name": "Corr\u00e8ze", + "country_id": 81 + }, + { + "id": 201, + "country_code": "FR", + "code": "2A", + "name": "Corse-du-Sud", + "country_id": 81 + }, + { + "id": 202, + "country_code": "FR", + "code": "2B", + "name": "Haute-Corse", + "country_id": 81 + }, + { + "id": 203, + "country_code": "FR", + "code": "21", + "name": "C\u00f4te-d'Or", + "country_id": 81 + }, + { + "id": 204, + "country_code": "FR", + "code": "22", + "name": "C\u00f4tes-d'Armor", + "country_id": 81 + }, + { + "id": 205, + "country_code": "FR", + "code": "23", + "name": "Creuse", + "country_id": 81 + }, + { + "id": 206, + "country_code": "FR", + "code": "24", + "name": "Dordogne", + "country_id": 81 + }, + { + "id": 207, + "country_code": "FR", + "code": "25", + "name": "Doubs", + "country_id": 81 + }, + { + "id": 208, + "country_code": "FR", + "code": "26", + "name": "Dr\u00f4me", + "country_id": 81 + }, + { + "id": 209, + "country_code": "FR", + "code": "27", + "name": "Eure", + "country_id": 81 + }, + { + "id": 210, + "country_code": "FR", + "code": "28", + "name": "Eure-et-Loir", + "country_id": 81 + }, + { + "id": 211, + "country_code": "FR", + "code": "29", + "name": "Finist\u00e8re", + "country_id": 81 + }, + { + "id": 212, + "country_code": "FR", + "code": "30", + "name": "Gard", + "country_id": 81 + }, + { + "id": 213, + "country_code": "FR", + "code": "31", + "name": "Haute-Garonne", + "country_id": 81 + }, + { + "id": 214, + "country_code": "FR", + "code": "32", + "name": "Gers", + "country_id": 81 + }, + { + "id": 215, + "country_code": "FR", + "code": "33", + "name": "Gironde", + "country_id": 81 + }, + { + "id": 216, + "country_code": "FR", + "code": "34", + "name": "H\u00e9rault", + "country_id": 81 + }, + { + "id": 217, + "country_code": "FR", + "code": "35", + "name": "Ille-et-Vilaine", + "country_id": 81 + }, + { + "id": 218, + "country_code": "FR", + "code": "36", + "name": "Indre", + "country_id": 81 + }, + { + "id": 219, + "country_code": "FR", + "code": "37", + "name": "Indre-et-Loire", + "country_id": 81 + }, + { + "id": 220, + "country_code": "FR", + "code": "38", + "name": "Is\u00e8re", + "country_id": 81 + }, + { + "id": 221, + "country_code": "FR", + "code": "39", + "name": "Jura", + "country_id": 81 + }, + { + "id": 222, + "country_code": "FR", + "code": "40", + "name": "Landes", + "country_id": 81 + }, + { + "id": 223, + "country_code": "FR", + "code": "41", + "name": "Loir-et-Cher", + "country_id": 81 + }, + { + "id": 224, + "country_code": "FR", + "code": "42", + "name": "Loire", + "country_id": 81 + }, + { + "id": 225, + "country_code": "FR", + "code": "43", + "name": "Haute-Loire", + "country_id": 81 + }, + { + "id": 226, + "country_code": "FR", + "code": "44", + "name": "Loire-Atlantique", + "country_id": 81 + }, + { + "id": 227, + "country_code": "FR", + "code": "45", + "name": "Loiret", + "country_id": 81 + }, + { + "id": 228, + "country_code": "FR", + "code": "46", + "name": "Lot", + "country_id": 81 + }, + { + "id": 229, + "country_code": "FR", + "code": "47", + "name": "Lot-et-Garonne", + "country_id": 81 + }, + { + "id": 230, + "country_code": "FR", + "code": "48", + "name": "Loz\u00e8re", + "country_id": 81 + }, + { + "id": 231, + "country_code": "FR", + "code": "49", + "name": "Maine-et-Loire", + "country_id": 81 + }, + { + "id": 232, + "country_code": "FR", + "code": "50", + "name": "Manche", + "country_id": 81 + }, + { + "id": 233, + "country_code": "FR", + "code": "51", + "name": "Marne", + "country_id": 81 + }, + { + "id": 234, + "country_code": "FR", + "code": "52", + "name": "Haute-Marne", + "country_id": 81 + }, + { + "id": 235, + "country_code": "FR", + "code": "53", + "name": "Mayenne", + "country_id": 81 + }, + { + "id": 236, + "country_code": "FR", + "code": "54", + "name": "Meurthe-et-Moselle", + "country_id": 81 + }, + { + "id": 237, + "country_code": "FR", + "code": "55", + "name": "Meuse", + "country_id": 81 + }, + { + "id": 238, + "country_code": "FR", + "code": "56", + "name": "Morbihan", + "country_id": 81 + }, + { + "id": 239, + "country_code": "FR", + "code": "57", + "name": "Moselle", + "country_id": 81 + }, + { + "id": 240, + "country_code": "FR", + "code": "58", + "name": "Ni\u00e8vre", + "country_id": 81 + }, + { + "id": 241, + "country_code": "FR", + "code": "59", + "name": "Nord", + "country_id": 81 + }, + { + "id": 242, + "country_code": "FR", + "code": "60", + "name": "Oise", + "country_id": 81 + }, + { + "id": 243, + "country_code": "FR", + "code": "61", + "name": "Orne", + "country_id": 81 + }, + { + "id": 244, + "country_code": "FR", + "code": "62", + "name": "Pas-de-Calais", + "country_id": 81 + }, + { + "id": 245, + "country_code": "FR", + "code": "63", + "name": "Puy-de-D\u00f4me", + "country_id": 81 + }, + { + "id": 246, + "country_code": "FR", + "code": "64", + "name": "Pyr\u00e9n\u00e9es-Atlantiques", + "country_id": 81 + }, + { + "id": 247, + "country_code": "FR", + "code": "65", + "name": "Hautes-Pyr\u00e9n\u00e9es", + "country_id": 81 + }, + { + "id": 248, + "country_code": "FR", + "code": "66", + "name": "Pyr\u00e9n\u00e9es-Orientales", + "country_id": 81 + }, + { + "id": 249, + "country_code": "FR", + "code": "67", + "name": "Bas-Rhin", + "country_id": 81 + }, + { + "id": 250, + "country_code": "FR", + "code": "68", + "name": "Haut-Rhin", + "country_id": 81 + }, + { + "id": 251, + "country_code": "FR", + "code": "69", + "name": "Rh\u00f4ne", + "country_id": 81 + }, + { + "id": 252, + "country_code": "FR", + "code": "70", + "name": "Haute-Sa\u00f4ne", + "country_id": 81 + }, + { + "id": 253, + "country_code": "FR", + "code": "71", + "name": "Sa\u00f4ne-et-Loire", + "country_id": 81 + }, + { + "id": 254, + "country_code": "FR", + "code": "72", + "name": "Sarthe", + "country_id": 81 + }, + { + "id": 255, + "country_code": "FR", + "code": "73", + "name": "Savoie", + "country_id": 81 + }, + { + "id": 256, + "country_code": "FR", + "code": "74", + "name": "Haute-Savoie", + "country_id": 81 + }, + { + "id": 257, + "country_code": "FR", + "code": "75", + "name": "Paris", + "country_id": 81 + }, + { + "id": 258, + "country_code": "FR", + "code": "76", + "name": "Seine-Maritime", + "country_id": 81 + }, + { + "id": 259, + "country_code": "FR", + "code": "77", + "name": "Seine-et-Marne", + "country_id": 81 + }, + { + "id": 260, + "country_code": "FR", + "code": "78", + "name": "Yvelines", + "country_id": 81 + }, + { + "id": 261, + "country_code": "FR", + "code": "79", + "name": "Deux-S\u00e8vres", + "country_id": 81 + }, + { + "id": 262, + "country_code": "FR", + "code": "80", + "name": "Somme", + "country_id": 81 + }, + { + "id": 263, + "country_code": "FR", + "code": "81", + "name": "Tarn", + "country_id": 81 + }, + { + "id": 264, + "country_code": "FR", + "code": "82", + "name": "Tarn-et-Garonne", + "country_id": 81 + }, + { + "id": 265, + "country_code": "FR", + "code": "83", + "name": "Var", + "country_id": 81 + }, + { + "id": 266, + "country_code": "FR", + "code": "84", + "name": "Vaucluse", + "country_id": 81 + }, + { + "id": 267, + "country_code": "FR", + "code": "85", + "name": "Vend\u00e9e", + "country_id": 81 + }, + { + "id": 268, + "country_code": "FR", + "code": "86", + "name": "Vienne", + "country_id": 81 + }, + { + "id": 269, + "country_code": "FR", + "code": "87", + "name": "Haute-Vienne", + "country_id": 81 + }, + { + "id": 270, + "country_code": "FR", + "code": "88", + "name": "Vosges", + "country_id": 81 + }, + { + "id": 271, + "country_code": "FR", + "code": "89", + "name": "Yonne", + "country_id": 81 + }, + { + "id": 272, + "country_code": "FR", + "code": "90", + "name": "Territoire-de-Belfort", + "country_id": 81 + }, + { + "id": 273, + "country_code": "FR", + "code": "91", + "name": "Essonne", + "country_id": 81 + }, + { + "id": 274, + "country_code": "FR", + "code": "92", + "name": "Hauts-de-Seine", + "country_id": 81 + }, + { + "id": 275, + "country_code": "FR", + "code": "93", + "name": "Seine-Saint-Denis", + "country_id": 81 + }, + { + "id": 276, + "country_code": "FR", + "code": "94", + "name": "Val-de-Marne", + "country_id": 81 + }, + { + "id": 277, + "country_code": "FR", + "code": "95", + "name": "Val-d'Oise", + "country_id": 81 + }, + { + "id": 278, + "country_code": "RO", + "code": "AB", + "name": "Alba", + "country_id": 185 + }, + { + "id": 279, + "country_code": "RO", + "code": "AR", + "name": "Arad", + "country_id": 185 + }, + { + "id": 280, + "country_code": "RO", + "code": "AG", + "name": "Arge\u015f", + "country_id": 185 + }, + { + "id": 281, + "country_code": "RO", + "code": "BC", + "name": "Bac\u0103u", + "country_id": 185 + }, + { + "id": 282, + "country_code": "RO", + "code": "BH", + "name": "Bihor", + "country_id": 185 + }, + { + "id": 283, + "country_code": "RO", + "code": "BN", + "name": "Bistri\u0163a-N\u0103s\u0103ud", + "country_id": 185 + }, + { + "id": 284, + "country_code": "RO", + "code": "BT", + "name": "Boto\u015fani", + "country_id": 185 + }, + { + "id": 285, + "country_code": "RO", + "code": "BV", + "name": "Bra\u015fov", + "country_id": 185 + }, + { + "id": 286, + "country_code": "RO", + "code": "BR", + "name": "Br\u0103ila", + "country_id": 185 + }, + { + "id": 287, + "country_code": "RO", + "code": "B", + "name": "Bucure\u015fti", + "country_id": 185 + }, + { + "id": 288, + "country_code": "RO", + "code": "BZ", + "name": "Buz\u0103u", + "country_id": 185 + }, + { + "id": 289, + "country_code": "RO", + "code": "CS", + "name": "Cara\u015f-Severin", + "country_id": 185 + }, + { + "id": 290, + "country_code": "RO", + "code": "CL", + "name": "C\u0103l\u0103ra\u015fi", + "country_id": 185 + }, + { + "id": 291, + "country_code": "RO", + "code": "CJ", + "name": "Cluj", + "country_id": 185 + }, + { + "id": 292, + "country_code": "RO", + "code": "CT", + "name": "Constan\u0163a", + "country_id": 185 + }, + { + "id": 293, + "country_code": "RO", + "code": "CV", + "name": "Covasna", + "country_id": 185 + }, + { + "id": 294, + "country_code": "RO", + "code": "DB", + "name": "D\u00e2mbovi\u0163a", + "country_id": 185 + }, + { + "id": 295, + "country_code": "RO", + "code": "DJ", + "name": "Dolj", + "country_id": 185 + }, + { + "id": 296, + "country_code": "RO", + "code": "GL", + "name": "Gala\u0163i", + "country_id": 185 + }, + { + "id": 297, + "country_code": "RO", + "code": "GR", + "name": "Giurgiu", + "country_id": 185 + }, + { + "id": 298, + "country_code": "RO", + "code": "GJ", + "name": "Gorj", + "country_id": 185 + }, + { + "id": 299, + "country_code": "RO", + "code": "HR", + "name": "Harghita", + "country_id": 185 + }, + { + "id": 300, + "country_code": "RO", + "code": "HD", + "name": "Hunedoara", + "country_id": 185 + }, + { + "id": 301, + "country_code": "RO", + "code": "IL", + "name": "Ialomi\u0163a", + "country_id": 185 + }, + { + "id": 302, + "country_code": "RO", + "code": "IS", + "name": "Ia\u015fi", + "country_id": 185 + }, + { + "id": 303, + "country_code": "RO", + "code": "IF", + "name": "Ilfov", + "country_id": 185 + }, + { + "id": 304, + "country_code": "RO", + "code": "MM", + "name": "Maramure\u015f", + "country_id": 185 + }, + { + "id": 305, + "country_code": "RO", + "code": "MH", + "name": "Mehedin\u0163i", + "country_id": 185 + }, + { + "id": 306, + "country_code": "RO", + "code": "MS", + "name": "Mure\u015f", + "country_id": 185 + }, + { + "id": 307, + "country_code": "RO", + "code": "NT", + "name": "Neam\u0163", + "country_id": 185 + }, + { + "id": 308, + "country_code": "RO", + "code": "OT", + "name": "Olt", + "country_id": 185 + }, + { + "id": 309, + "country_code": "RO", + "code": "PH", + "name": "Prahova", + "country_id": 185 + }, + { + "id": 310, + "country_code": "RO", + "code": "SM", + "name": "Satu-Mare", + "country_id": 185 + }, + { + "id": 311, + "country_code": "RO", + "code": "SJ", + "name": "S\u0103laj", + "country_id": 185 + }, + { + "id": 312, + "country_code": "RO", + "code": "SB", + "name": "Sibiu", + "country_id": 185 + }, + { + "id": 313, + "country_code": "RO", + "code": "SV", + "name": "Suceava", + "country_id": 185 + }, + { + "id": 314, + "country_code": "RO", + "code": "TR", + "name": "Teleorman", + "country_id": 185 + }, + { + "id": 315, + "country_code": "RO", + "code": "TM", + "name": "Timi\u015f", + "country_id": 185 + }, + { + "id": 316, + "country_code": "RO", + "code": "TL", + "name": "Tulcea", + "country_id": 185 + }, + { + "id": 317, + "country_code": "RO", + "code": "VS", + "name": "Vaslui", + "country_id": 185 + }, + { + "id": 318, + "country_code": "RO", + "code": "VL", + "name": "V\u00e2lcea", + "country_id": 185 + }, + { + "id": 319, + "country_code": "RO", + "code": "VN", + "name": "Vrancea", + "country_id": 185 + }, + { + "id": 320, + "country_code": "FI", + "code": "Lappi", + "name": "Lappi", + "country_id": 80 + }, + { + "id": 321, + "country_code": "FI", + "code": "Pohjois-Pohjanmaa", + "name": "Pohjois-Pohjanmaa", + "country_id": 80 + }, + { + "id": 322, + "country_code": "FI", + "code": "Kainuu", + "name": "Kainuu", + "country_id": 80 + }, + { + "id": 323, + "country_code": "FI", + "code": "Pohjois-Karjala", + "name": "Pohjois-Karjala", + "country_id": 80 + }, + { + "id": 324, + "country_code": "FI", + "code": "Pohjois-Savo", + "name": "Pohjois-Savo", + "country_id": 80 + }, + { + "id": 325, + "country_code": "FI", + "code": "Etel\u00e4-Savo", + "name": "Etel\u00e4-Savo", + "country_id": 80 + }, + { + "id": 326, + "country_code": "FI", + "code": "Etel\u00e4-Pohjanmaa", + "name": "Etel\u00e4-Pohjanmaa", + "country_id": 80 + }, + { + "id": 327, + "country_code": "FI", + "code": "Pohjanmaa", + "name": "Pohjanmaa", + "country_id": 80 + }, + { + "id": 328, + "country_code": "FI", + "code": "Pirkanmaa", + "name": "Pirkanmaa", + "country_id": 80 + }, + { + "id": 329, + "country_code": "FI", + "code": "Satakunta", + "name": "Satakunta", + "country_id": 80 + }, + { + "id": 330, + "country_code": "FI", + "code": "Keski-Pohjanmaa", + "name": "Keski-Pohjanmaa", + "country_id": 80 + }, + { + "id": 331, + "country_code": "FI", + "code": "Keski-Suomi", + "name": "Keski-Suomi", + "country_id": 80 + }, + { + "id": 332, + "country_code": "FI", + "code": "Varsinais-Suomi", + "name": "Varsinais-Suomi", + "country_id": 80 + }, + { + "id": 333, + "country_code": "FI", + "code": "Etel\u00e4-Karjala", + "name": "Etel\u00e4-Karjala", + "country_id": 80 + }, + { + "id": 334, + "country_code": "FI", + "code": "P\u00e4ij\u00e4t-H\u00e4me", + "name": "P\u00e4ij\u00e4t-H\u00e4me", + "country_id": 80 + }, + { + "id": 335, + "country_code": "FI", + "code": "Kanta-H\u00e4me", + "name": "Kanta-H\u00e4me", + "country_id": 80 + }, + { + "id": 336, + "country_code": "FI", + "code": "Uusimaa", + "name": "Uusimaa", + "country_id": 80 + }, + { + "id": 337, + "country_code": "FI", + "code": "It\u00e4-Uusimaa", + "name": "It\u00e4-Uusimaa", + "country_id": 80 + }, + { + "id": 338, + "country_code": "FI", + "code": "Kymenlaakso", + "name": "Kymenlaakso", + "country_id": 80 + }, + { + "id": 339, + "country_code": "FI", + "code": "Ahvenanmaa", + "name": "Ahvenanmaa", + "country_id": 80 + }, + { + "id": 340, + "country_code": "EE", + "code": "EE-37", + "name": "Harjumaa", + "country_id": 74 + }, + { + "id": 341, + "country_code": "EE", + "code": "EE-39", + "name": "Hiiumaa", + "country_id": 74 + }, + { + "id": 342, + "country_code": "EE", + "code": "EE-44", + "name": "Ida-Virumaa", + "country_id": 74 + }, + { + "id": 343, + "country_code": "EE", + "code": "EE-49", + "name": "J\u00f5gevamaa", + "country_id": 74 + }, + { + "id": 344, + "country_code": "EE", + "code": "EE-51", + "name": "J\u00e4rvamaa", + "country_id": 74 + }, + { + "id": 345, + "country_code": "EE", + "code": "EE-57", + "name": "L\u00e4\u00e4nemaa", + "country_id": 74 + }, + { + "id": 346, + "country_code": "EE", + "code": "EE-59", + "name": "L\u00e4\u00e4ne-Virumaa", + "country_id": 74 + }, + { + "id": 347, + "country_code": "EE", + "code": "EE-65", + "name": "P\u00f5lvamaa", + "country_id": 74 + }, + { + "id": 348, + "country_code": "EE", + "code": "EE-67", + "name": "P\u00e4rnumaa", + "country_id": 74 + }, + { + "id": 349, + "country_code": "EE", + "code": "EE-70", + "name": "Raplamaa", + "country_id": 74 + }, + { + "id": 350, + "country_code": "EE", + "code": "EE-74", + "name": "Saaremaa", + "country_id": 74 + }, + { + "id": 351, + "country_code": "EE", + "code": "EE-78", + "name": "Tartumaa", + "country_id": 74 + }, + { + "id": 352, + "country_code": "EE", + "code": "EE-82", + "name": "Valgamaa", + "country_id": 74 + }, + { + "id": 353, + "country_code": "EE", + "code": "EE-84", + "name": "Viljandimaa", + "country_id": 74 + }, + { + "id": 354, + "country_code": "EE", + "code": "EE-86", + "name": "V\u00f5rumaa", + "country_id": 74 + }, + { + "id": 355, + "country_code": "LV", + "code": "LV-DGV", + "name": "Daugavpils", + "country_id": 125 + }, + { + "id": 356, + "country_code": "LV", + "code": "LV-JEL", + "name": "Jelgava", + "country_id": 125 + }, + { + "id": 357, + "country_code": "LV", + "code": "J\u0113kabpils", + "name": "J\u0113kabpils", + "country_id": 125 + }, + { + "id": 358, + "country_code": "LV", + "code": "LV-JUR", + "name": "J\u016brmala", + "country_id": 125 + }, + { + "id": 359, + "country_code": "LV", + "code": "LV-LPX", + "name": "Liep\u0101ja", + "country_id": 125 + }, + { + "id": 360, + "country_code": "LV", + "code": "LV-LE", + "name": "Liep\u0101jas novads", + "country_id": 125 + }, + { + "id": 361, + "country_code": "LV", + "code": "LV-REZ", + "name": "R\u0113zekne", + "country_id": 125 + }, + { + "id": 362, + "country_code": "LV", + "code": "LV-RIX", + "name": "R\u012bga", + "country_id": 125 + }, + { + "id": 363, + "country_code": "LV", + "code": "LV-RI", + "name": "R\u012bgas novads", + "country_id": 125 + }, + { + "id": 364, + "country_code": "LV", + "code": "Valmiera", + "name": "Valmiera", + "country_id": 125 + }, + { + "id": 365, + "country_code": "LV", + "code": "LV-VEN", + "name": "Ventspils", + "country_id": 125 + }, + { + "id": 366, + "country_code": "LV", + "code": "Aglonas novads", + "name": "Aglonas novads", + "country_id": 125 + }, + { + "id": 367, + "country_code": "LV", + "code": "LV-AI", + "name": "Aizkraukles novads", + "country_id": 125 + }, + { + "id": 368, + "country_code": "LV", + "code": "Aizputes novads", + "name": "Aizputes novads", + "country_id": 125 + }, + { + "id": 369, + "country_code": "LV", + "code": "Akn\u012bstes novads", + "name": "Akn\u012bstes novads", + "country_id": 125 + }, + { + "id": 370, + "country_code": "LV", + "code": "Alojas novads", + "name": "Alojas novads", + "country_id": 125 + }, + { + "id": 371, + "country_code": "LV", + "code": "Alsungas novads", + "name": "Alsungas novads", + "country_id": 125 + }, + { + "id": 372, + "country_code": "LV", + "code": "LV-AL", + "name": "Al\u016bksnes novads", + "country_id": 125 + }, + { + "id": 373, + "country_code": "LV", + "code": "Amatas novads", + "name": "Amatas novads", + "country_id": 125 + }, + { + "id": 374, + "country_code": "LV", + "code": "Apes novads", + "name": "Apes novads", + "country_id": 125 + }, + { + "id": 375, + "country_code": "LV", + "code": "Auces novads", + "name": "Auces novads", + "country_id": 125 + }, + { + "id": 376, + "country_code": "LV", + "code": "Bab\u012btes novads", + "name": "Bab\u012btes novads", + "country_id": 125 + }, + { + "id": 377, + "country_code": "LV", + "code": "Baldones novads", + "name": "Baldones novads", + "country_id": 125 + }, + { + "id": 378, + "country_code": "LV", + "code": "Baltinavas novads", + "name": "Baltinavas novads", + "country_id": 125 + }, + { + "id": 379, + "country_code": "LV", + "code": "LV-BL", + "name": "Balvu novads", + "country_id": 125 + }, + { + "id": 380, + "country_code": "LV", + "code": "LV-BU", + "name": "Bauskas novads", + "country_id": 125 + }, + { + "id": 381, + "country_code": "LV", + "code": "Bever\u012bnas novads", + "name": "Bever\u012bnas novads", + "country_id": 125 + }, + { + "id": 382, + "country_code": "LV", + "code": "Broc\u0113nu novads", + "name": "Broc\u0113nu novads", + "country_id": 125 + }, + { + "id": 383, + "country_code": "LV", + "code": "Burtnieku novads", + "name": "Burtnieku novads", + "country_id": 125 + }, + { + "id": 384, + "country_code": "LV", + "code": "Carnikavas novads", + "name": "Carnikavas novads", + "country_id": 125 + }, + { + "id": 385, + "country_code": "LV", + "code": "Cesvaines novads", + "name": "Cesvaines novads", + "country_id": 125 + }, + { + "id": 386, + "country_code": "LV", + "code": "Ciblas novads", + "name": "Ciblas novads", + "country_id": 125 + }, + { + "id": 387, + "country_code": "LV", + "code": "LV-CE", + "name": "C\u0113su novads", + "country_id": 125 + }, + { + "id": 388, + "country_code": "LV", + "code": "Dagdas novads", + "name": "Dagdas novads", + "country_id": 125 + }, + { + "id": 389, + "country_code": "LV", + "code": "LV-DA", + "name": "Daugavpils novads", + "country_id": 125 + }, + { + "id": 390, + "country_code": "LV", + "code": "LV-DO", + "name": "Dobeles novads", + "country_id": 125 + }, + { + "id": 391, + "country_code": "LV", + "code": "Dundagas novads", + "name": "Dundagas novads", + "country_id": 125 + }, + { + "id": 392, + "country_code": "LV", + "code": "Durbes novads", + "name": "Durbes novads", + "country_id": 125 + }, + { + "id": 393, + "country_code": "LV", + "code": "Engures novads", + "name": "Engures novads", + "country_id": 125 + }, + { + "id": 394, + "country_code": "LV", + "code": "Garkalnes novads", + "name": "Garkalnes novads", + "country_id": 125 + }, + { + "id": 395, + "country_code": "LV", + "code": "Grobi\u0146as novads", + "name": "Grobi\u0146as novads", + "country_id": 125 + }, + { + "id": 396, + "country_code": "LV", + "code": "LV-GU", + "name": "Gulbenes novads", + "country_id": 125 + }, + { + "id": 397, + "country_code": "LV", + "code": "Iecavas novads", + "name": "Iecavas novads", + "country_id": 125 + }, + { + "id": 398, + "country_code": "LV", + "code": "Ik\u0161\u0137iles novads", + "name": "Ik\u0161\u0137iles novads", + "country_id": 125 + }, + { + "id": 399, + "country_code": "LV", + "code": "Il\u016bkstes novads", + "name": "Il\u016bkstes novads", + "country_id": 125 + }, + { + "id": 400, + "country_code": "LV", + "code": "In\u010dukalna novads", + "name": "In\u010dukalna novads", + "country_id": 125 + }, + { + "id": 401, + "country_code": "LV", + "code": "Jaunjelgavas novads", + "name": "Jaunjelgavas novads", + "country_id": 125 + }, + { + "id": 402, + "country_code": "LV", + "code": "Jaunpiebalgas novads", + "name": "Jaunpiebalgas novads", + "country_id": 125 + }, + { + "id": 403, + "country_code": "LV", + "code": "Jaunpils novads", + "name": "Jaunpils novads", + "country_id": 125 + }, + { + "id": 404, + "country_code": "LV", + "code": "LV-JL", + "name": "Jelgavas novads", + "country_id": 125 + }, + { + "id": 405, + "country_code": "LV", + "code": "LV-JK", + "name": "J\u0113kabpils novads", + "country_id": 125 + }, + { + "id": 406, + "country_code": "LV", + "code": "Kandavas novads", + "name": "Kandavas novads", + "country_id": 125 + }, + { + "id": 407, + "country_code": "LV", + "code": "Kokneses novads", + "name": "Kokneses novads", + "country_id": 125 + }, + { + "id": 408, + "country_code": "LV", + "code": "Krimuldas novads", + "name": "Krimuldas novads", + "country_id": 125 + }, + { + "id": 409, + "country_code": "LV", + "code": "Krustpils novads", + "name": "Krustpils novads", + "country_id": 125 + }, + { + "id": 410, + "country_code": "LV", + "code": "LV-KR", + "name": "Kr\u0101slavas novads", + "country_id": 125 + }, + { + "id": 411, + "country_code": "LV", + "code": "LV-KU", + "name": "Kuld\u012bgas novads", + "country_id": 125 + }, + { + "id": 412, + "country_code": "LV", + "code": "K\u0101rsavas novads", + "name": "K\u0101rsavas novads", + "country_id": 125 + }, + { + "id": 413, + "country_code": "LV", + "code": "Lielv\u0101rdes novads", + "name": "Lielv\u0101rdes novads", + "country_id": 125 + }, + { + "id": 414, + "country_code": "LV", + "code": "LV-LM", + "name": "Limba\u017eu novads", + "country_id": 125 + }, + { + "id": 415, + "country_code": "LV", + "code": "Lub\u0101nas novads", + "name": "Lub\u0101nas novads", + "country_id": 125 + }, + { + "id": 416, + "country_code": "LV", + "code": "LV-LU", + "name": "Ludzas novads", + "country_id": 125 + }, + { + "id": 417, + "country_code": "LV", + "code": "L\u012bgatnes novads", + "name": "L\u012bgatnes novads", + "country_id": 125 + }, + { + "id": 418, + "country_code": "LV", + "code": "L\u012bv\u0101nu novads", + "name": "L\u012bv\u0101nu novads", + "country_id": 125 + }, + { + "id": 419, + "country_code": "LV", + "code": "LV-MA", + "name": "Madonas novads", + "country_id": 125 + }, + { + "id": 420, + "country_code": "LV", + "code": "Mazsalacas novads", + "name": "Mazsalacas novads", + "country_id": 125 + }, + { + "id": 421, + "country_code": "LV", + "code": "M\u0101lpils novads", + "name": "M\u0101lpils novads", + "country_id": 125 + }, + { + "id": 422, + "country_code": "LV", + "code": "M\u0101rupes novads", + "name": "M\u0101rupes novads", + "country_id": 125 + }, + { + "id": 423, + "country_code": "LV", + "code": "Nauk\u0161\u0113nu novads", + "name": "Nauk\u0161\u0113nu novads", + "country_id": 125 + }, + { + "id": 424, + "country_code": "LV", + "code": "Neretas novads", + "name": "Neretas novads", + "country_id": 125 + }, + { + "id": 425, + "country_code": "LV", + "code": "N\u012bcas novads", + "name": "N\u012bcas novads", + "country_id": 125 + }, + { + "id": 426, + "country_code": "LV", + "code": "LV-OG", + "name": "Ogres novads", + "country_id": 125 + }, + { + "id": 427, + "country_code": "LV", + "code": "Olaines novads", + "name": "Olaines novads", + "country_id": 125 + }, + { + "id": 428, + "country_code": "LV", + "code": "Ozolnieku novads", + "name": "Ozolnieku novads", + "country_id": 125 + }, + { + "id": 429, + "country_code": "LV", + "code": "LV-PR", + "name": "Prei\u013cu novads", + "country_id": 125 + }, + { + "id": 430, + "country_code": "LV", + "code": "Priekules novads", + "name": "Priekules novads", + "country_id": 125 + }, + { + "id": 431, + "country_code": "LV", + "code": "Prieku\u013cu novads", + "name": "Prieku\u013cu novads", + "country_id": 125 + }, + { + "id": 432, + "country_code": "LV", + "code": "P\u0101rgaujas novads", + "name": "P\u0101rgaujas novads", + "country_id": 125 + }, + { + "id": 433, + "country_code": "LV", + "code": "P\u0101vilostas novads", + "name": "P\u0101vilostas novads", + "country_id": 125 + }, + { + "id": 434, + "country_code": "LV", + "code": "P\u013cavi\u0146u novads", + "name": "P\u013cavi\u0146u novads", + "country_id": 125 + }, + { + "id": 435, + "country_code": "LV", + "code": "Raunas novads", + "name": "Raunas novads", + "country_id": 125 + }, + { + "id": 436, + "country_code": "LV", + "code": "Riebi\u0146u novads", + "name": "Riebi\u0146u novads", + "country_id": 125 + }, + { + "id": 437, + "country_code": "LV", + "code": "Rojas novads", + "name": "Rojas novads", + "country_id": 125 + }, + { + "id": 438, + "country_code": "LV", + "code": "Ropa\u017eu novads", + "name": "Ropa\u017eu novads", + "country_id": 125 + }, + { + "id": 439, + "country_code": "LV", + "code": "Rucavas novads", + "name": "Rucavas novads", + "country_id": 125 + }, + { + "id": 440, + "country_code": "LV", + "code": "Rug\u0101ju novads", + "name": "Rug\u0101ju novads", + "country_id": 125 + }, + { + "id": 441, + "country_code": "LV", + "code": "Rund\u0101les novads", + "name": "Rund\u0101les novads", + "country_id": 125 + }, + { + "id": 442, + "country_code": "LV", + "code": "LV-RE", + "name": "R\u0113zeknes novads", + "country_id": 125 + }, + { + "id": 443, + "country_code": "LV", + "code": "R\u016bjienas novads", + "name": "R\u016bjienas novads", + "country_id": 125 + }, + { + "id": 444, + "country_code": "LV", + "code": "Salacgr\u012bvas novads", + "name": "Salacgr\u012bvas novads", + "country_id": 125 + }, + { + "id": 445, + "country_code": "LV", + "code": "Salas novads", + "name": "Salas novads", + "country_id": 125 + }, + { + "id": 446, + "country_code": "LV", + "code": "Salaspils novads", + "name": "Salaspils novads", + "country_id": 125 + }, + { + "id": 447, + "country_code": "LV", + "code": "LV-SA", + "name": "Saldus novads", + "country_id": 125 + }, + { + "id": 448, + "country_code": "LV", + "code": "Saulkrastu novads", + "name": "Saulkrastu novads", + "country_id": 125 + }, + { + "id": 449, + "country_code": "LV", + "code": "Siguldas novads", + "name": "Siguldas novads", + "country_id": 125 + }, + { + "id": 450, + "country_code": "LV", + "code": "Skrundas novads", + "name": "Skrundas novads", + "country_id": 125 + }, + { + "id": 451, + "country_code": "LV", + "code": "Skr\u012bveru novads", + "name": "Skr\u012bveru novads", + "country_id": 125 + }, + { + "id": 452, + "country_code": "LV", + "code": "Smiltenes novads", + "name": "Smiltenes novads", + "country_id": 125 + }, + { + "id": 453, + "country_code": "LV", + "code": "Stopi\u0146u novads", + "name": "Stopi\u0146u novads", + "country_id": 125 + }, + { + "id": 454, + "country_code": "LV", + "code": "Stren\u010du novads", + "name": "Stren\u010du novads", + "country_id": 125 + }, + { + "id": 455, + "country_code": "LV", + "code": "S\u0113jas novads", + "name": "S\u0113jas novads", + "country_id": 125 + }, + { + "id": 456, + "country_code": "LV", + "code": "LV-TA", + "name": "Talsu novads", + "country_id": 125 + }, + { + "id": 457, + "country_code": "LV", + "code": "LV-TU", + "name": "Tukuma novads", + "country_id": 125 + }, + { + "id": 458, + "country_code": "LV", + "code": "T\u0113rvetes novads", + "name": "T\u0113rvetes novads", + "country_id": 125 + }, + { + "id": 459, + "country_code": "LV", + "code": "Vai\u0146odes novads", + "name": "Vai\u0146odes novads", + "country_id": 125 + }, + { + "id": 460, + "country_code": "LV", + "code": "LV-VK", + "name": "Valkas novads", + "country_id": 125 + }, + { + "id": 461, + "country_code": "LV", + "code": "LV-VM", + "name": "Valmieras novads", + "country_id": 125 + }, + { + "id": 462, + "country_code": "LV", + "code": "Varak\u013c\u0101nu novads", + "name": "Varak\u013c\u0101nu novads", + "country_id": 125 + }, + { + "id": 463, + "country_code": "LV", + "code": "Vecpiebalgas novads", + "name": "Vecpiebalgas novads", + "country_id": 125 + }, + { + "id": 464, + "country_code": "LV", + "code": "Vecumnieku novads", + "name": "Vecumnieku novads", + "country_id": 125 + }, + { + "id": 465, + "country_code": "LV", + "code": "LV-VE", + "name": "Ventspils novads", + "country_id": 125 + }, + { + "id": 466, + "country_code": "LV", + "code": "Vies\u012btes novads", + "name": "Vies\u012btes novads", + "country_id": 125 + }, + { + "id": 467, + "country_code": "LV", + "code": "Vi\u013cakas novads", + "name": "Vi\u013cakas novads", + "country_id": 125 + }, + { + "id": 468, + "country_code": "LV", + "code": "Vi\u013c\u0101nu novads", + "name": "Vi\u013c\u0101nu novads", + "country_id": 125 + }, + { + "id": 469, + "country_code": "LV", + "code": "V\u0101rkavas novads", + "name": "V\u0101rkavas novads", + "country_id": 125 + }, + { + "id": 470, + "country_code": "LV", + "code": "Zilupes novads", + "name": "Zilupes novads", + "country_id": 125 + }, + { + "id": 471, + "country_code": "LV", + "code": "\u0100da\u017eu novads", + "name": "\u0100da\u017eu novads", + "country_id": 125 + }, + { + "id": 472, + "country_code": "LV", + "code": "\u0112rg\u013cu novads", + "name": "\u0112rg\u013cu novads", + "country_id": 125 + }, + { + "id": 473, + "country_code": "LV", + "code": "\u0136eguma novads", + "name": "\u0136eguma novads", + "country_id": 125 + }, + { + "id": 474, + "country_code": "LV", + "code": "\u0136ekavas novads", + "name": "\u0136ekavas novads", + "country_id": 125 + }, + { + "id": 475, + "country_code": "LT", + "code": "LT-AL", + "name": "Alytaus Apskritis", + "country_id": 131 + }, + { + "id": 476, + "country_code": "LT", + "code": "LT-KU", + "name": "Kauno Apskritis", + "country_id": 131 + }, + { + "id": 477, + "country_code": "LT", + "code": "LT-KL", + "name": "Klaip\u0117dos Apskritis", + "country_id": 131 + }, + { + "id": 478, + "country_code": "LT", + "code": "LT-MR", + "name": "Marijampol\u0117s Apskritis", + "country_id": 131 + }, + { + "id": 479, + "country_code": "LT", + "code": "LT-PN", + "name": "Panev\u0117\u017eio Apskritis", + "country_id": 131 + }, + { + "id": 480, + "country_code": "LT", + "code": "LT-SA", + "name": "\u0160iauli\u0173 Apskritis", + "country_id": 131 + }, + { + "id": 481, + "country_code": "LT", + "code": "LT-TA", + "name": "Taurag\u0117s Apskritis", + "country_id": 131 + }, + { + "id": 482, + "country_code": "LT", + "code": "LT-TE", + "name": "Tel\u0161i\u0173 Apskritis", + "country_id": 131 + }, + { + "id": 483, + "country_code": "LT", + "code": "LT-UT", + "name": "Utenos Apskritis", + "country_id": 131 + }, + { + "id": 484, + "country_code": "LT", + "code": "LT-VL", + "name": "Vilniaus Apskritis", + "country_id": 131 + }, + { + "id": 485, + "country_code": "BR", + "code": "AC", + "name": "Acre", + "country_id": 31 + }, + { + "id": 486, + "country_code": "BR", + "code": "AL", + "name": "Alagoas", + "country_id": 31 + }, + { + "id": 487, + "country_code": "BR", + "code": "AP", + "name": "Amap\u00e1", + "country_id": 31 + }, + { + "id": 488, + "country_code": "BR", + "code": "AM", + "name": "Amazonas", + "country_id": 31 + }, + { + "id": 489, + "country_code": "BR", + "code": "BA", + "name": "Bahia", + "country_id": 31 + }, + { + "id": 490, + "country_code": "BR", + "code": "CE", + "name": "Cear\u00e1", + "country_id": 31 + }, + { + "id": 491, + "country_code": "BR", + "code": "ES", + "name": "Esp\u00edrito Santo", + "country_id": 31 + }, + { + "id": 492, + "country_code": "BR", + "code": "GO", + "name": "Goi\u00e1s", + "country_id": 31 + }, + { + "id": 493, + "country_code": "BR", + "code": "MA", + "name": "Maranh\u00e3o", + "country_id": 31 + }, + { + "id": 494, + "country_code": "BR", + "code": "MT", + "name": "Mato Grosso", + "country_id": 31 + }, + { + "id": 495, + "country_code": "BR", + "code": "MS", + "name": "Mato Grosso do Sul", + "country_id": 31 + }, + { + "id": 496, + "country_code": "BR", + "code": "MG", + "name": "Minas Gerais", + "country_id": 31 + }, + { + "id": 497, + "country_code": "BR", + "code": "PA", + "name": "Par\u00e1", + "country_id": 31 + }, + { + "id": 498, + "country_code": "BR", + "code": "PB", + "name": "Para\u00edba", + "country_id": 31 + }, + { + "id": 499, + "country_code": "BR", + "code": "PR", + "name": "Paran\u00e1", + "country_id": 31 + }, + { + "id": 500, + "country_code": "BR", + "code": "PE", + "name": "Pernambuco", + "country_id": 31 + }, + { + "id": 501, + "country_code": "BR", + "code": "PI", + "name": "Piau\u00ed", + "country_id": 31 + }, + { + "id": 502, + "country_code": "BR", + "code": "RJ", + "name": "Rio de Janeiro", + "country_id": 31 + }, + { + "id": 503, + "country_code": "BR", + "code": "RN", + "name": "Rio Grande do Norte", + "country_id": 31 + }, + { + "id": 504, + "country_code": "BR", + "code": "RS", + "name": "Rio Grande do Sul", + "country_id": 31 + }, + { + "id": 505, + "country_code": "BR", + "code": "RO", + "name": "Rond\u00f4nia", + "country_id": 31 + }, + { + "id": 506, + "country_code": "BR", + "code": "RR", + "name": "Roraima", + "country_id": 31 + }, + { + "id": 507, + "country_code": "BR", + "code": "SC", + "name": "Santa Catarina", + "country_id": 31 + }, + { + "id": 508, + "country_code": "BR", + "code": "SP", + "name": "S\u00e3o Paulo", + "country_id": 31 + }, + { + "id": 509, + "country_code": "BR", + "code": "SE", + "name": "Sergipe", + "country_id": 31 + }, + { + "id": 510, + "country_code": "BR", + "code": "TO", + "name": "Tocantins", + "country_id": 31 + }, + { + "id": 511, + "country_code": "BR", + "code": "DF", + "name": "Distrito Federal", + "country_id": 31 + }, + { + "id": 512, + "country_code": "HR", + "code": "HR-01", + "name": "Zagreba\u010dka \u017eupanija", + "country_id": 59 + }, + { + "id": 513, + "country_code": "HR", + "code": "HR-02", + "name": "Krapinsko-zagorska \u017eupanija", + "country_id": 59 + }, + { + "id": 514, + "country_code": "HR", + "code": "HR-03", + "name": "Sisa\u010dko-moslava\u010dka \u017eupanija", + "country_id": 59 + }, + { + "id": 515, + "country_code": "HR", + "code": "HR-04", + "name": "Karlova\u010dka \u017eupanija", + "country_id": 59 + }, + { + "id": 516, + "country_code": "HR", + "code": "HR-05", + "name": "Vara\u017edinska \u017eupanija", + "country_id": 59 + }, + { + "id": 517, + "country_code": "HR", + "code": "HR-06", + "name": "Koprivni\u010dko-kri\u017eeva\u010dka \u017eupanija", + "country_id": 59 + }, + { + "id": 518, + "country_code": "HR", + "code": "HR-07", + "name": "Bjelovarsko-bilogorska \u017eupanija", + "country_id": 59 + }, + { + "id": 519, + "country_code": "HR", + "code": "HR-08", + "name": "Primorsko-goranska \u017eupanija", + "country_id": 59 + }, + { + "id": 520, + "country_code": "HR", + "code": "HR-09", + "name": "Li\u010dko-senjska \u017eupanija", + "country_id": 59 + }, + { + "id": 521, + "country_code": "HR", + "code": "HR-10", + "name": "Viroviti\u010dko-podravska \u017eupanija", + "country_id": 59 + }, + { + "id": 522, + "country_code": "HR", + "code": "HR-11", + "name": "Po\u017ee\u0161ko-slavonska \u017eupanija", + "country_id": 59 + }, + { + "id": 523, + "country_code": "HR", + "code": "HR-12", + "name": "Brodsko-posavska \u017eupanija", + "country_id": 59 + }, + { + "id": 524, + "country_code": "HR", + "code": "HR-13", + "name": "Zadarska \u017eupanija", + "country_id": 59 + }, + { + "id": 525, + "country_code": "HR", + "code": "HR-14", + "name": "Osje\u010dko-baranjska \u017eupanija", + "country_id": 59 + }, + { + "id": 526, + "country_code": "HR", + "code": "HR-15", + "name": "\u0160ibensko-kninska \u017eupanija", + "country_id": 59 + }, + { + "id": 527, + "country_code": "HR", + "code": "HR-16", + "name": "Vukovarsko-srijemska \u017eupanija", + "country_id": 59 + }, + { + "id": 528, + "country_code": "HR", + "code": "HR-17", + "name": "Splitsko-dalmatinska \u017eupanija", + "country_id": 59 + }, + { + "id": 529, + "country_code": "HR", + "code": "HR-18", + "name": "Istarska \u017eupanija", + "country_id": 59 + }, + { + "id": 530, + "country_code": "HR", + "code": "HR-19", + "name": "Dubrova\u010dko-neretvanska \u017eupanija", + "country_id": 59 + }, + { + "id": 531, + "country_code": "HR", + "code": "HR-20", + "name": "Me\u0111imurska \u017eupanija", + "country_id": 59 + }, + { + "id": 532, + "country_code": "HR", + "code": "HR-21", + "name": "Grad Zagreb", + "country_id": 59 + }, + { + "id": 533, + "country_code": "IN", + "code": "AN", + "name": "Andaman and Nicobar Islands", + "country_id": 106 + }, + { + "id": 534, + "country_code": "IN", + "code": "AP", + "name": "Andhra Pradesh", + "country_id": 106 + }, + { + "id": 535, + "country_code": "IN", + "code": "AR", + "name": "Arunachal Pradesh", + "country_id": 106 + }, + { + "id": 536, + "country_code": "IN", + "code": "AS", + "name": "Assam", + "country_id": 106 + }, + { + "id": 537, + "country_code": "IN", + "code": "BR", + "name": "Bihar", + "country_id": 106 + }, + { + "id": 538, + "country_code": "IN", + "code": "CH", + "name": "Chandigarh", + "country_id": 106 + }, + { + "id": 539, + "country_code": "IN", + "code": "CT", + "name": "Chhattisgarh", + "country_id": 106 + }, + { + "id": 540, + "country_code": "IN", + "code": "DN", + "name": "Dadra and Nagar Haveli", + "country_id": 106 + }, + { + "id": 541, + "country_code": "IN", + "code": "DD", + "name": "Daman and Diu", + "country_id": 106 + }, + { + "id": 542, + "country_code": "IN", + "code": "DL", + "name": "Delhi", + "country_id": 106 + }, + { + "id": 543, + "country_code": "IN", + "code": "GA", + "name": "Goa", + "country_id": 106 + }, + { + "id": 544, + "country_code": "IN", + "code": "GJ", + "name": "Gujarat", + "country_id": 106 + }, + { + "id": 545, + "country_code": "IN", + "code": "HR", + "name": "Haryana", + "country_id": 106 + }, + { + "id": 546, + "country_code": "IN", + "code": "HP", + "name": "Himachal Pradesh", + "country_id": 106 + }, + { + "id": 547, + "country_code": "IN", + "code": "JK", + "name": "Jammu and Kashmir", + "country_id": 106 + }, + { + "id": 548, + "country_code": "IN", + "code": "JH", + "name": "Jharkhand", + "country_id": 106 + }, + { + "id": 549, + "country_code": "IN", + "code": "KA", + "name": "Karnataka", + "country_id": 106 + }, + { + "id": 550, + "country_code": "IN", + "code": "KL", + "name": "Kerala", + "country_id": 106 + }, + { + "id": 551, + "country_code": "IN", + "code": "LD", + "name": "Lakshadweep", + "country_id": 106 + }, + { + "id": 552, + "country_code": "IN", + "code": "MP", + "name": "Madhya Pradesh", + "country_id": 106 + }, + { + "id": 553, + "country_code": "IN", + "code": "MH", + "name": "Maharashtra", + "country_id": 106 + }, + { + "id": 554, + "country_code": "IN", + "code": "MN", + "name": "Manipur", + "country_id": 106 + }, + { + "id": 555, + "country_code": "IN", + "code": "ML", + "name": "Meghalaya", + "country_id": 106 + }, + { + "id": 556, + "country_code": "IN", + "code": "MZ", + "name": "Mizoram", + "country_id": 106 + }, + { + "id": 557, + "country_code": "IN", + "code": "NL", + "name": "Nagaland", + "country_id": 106 + }, + { + "id": 558, + "country_code": "IN", + "code": "OR", + "name": "Odisha", + "country_id": 106 + }, + { + "id": 559, + "country_code": "IN", + "code": "PY", + "name": "Puducherry", + "country_id": 106 + }, + { + "id": 560, + "country_code": "IN", + "code": "PB", + "name": "Punjab", + "country_id": 106 + }, + { + "id": 561, + "country_code": "IN", + "code": "RJ", + "name": "Rajasthan", + "country_id": 106 + }, + { + "id": 562, + "country_code": "IN", + "code": "SK", + "name": "Sikkim", + "country_id": 106 + }, + { + "id": 563, + "country_code": "IN", + "code": "TN", + "name": "Tamil Nadu", + "country_id": 106 + }, + { + "id": 564, + "country_code": "IN", + "code": "TG", + "name": "Telangana", + "country_id": 106 + }, + { + "id": 565, + "country_code": "IN", + "code": "TR", + "name": "Tripura", + "country_id": 106 + }, + { + "id": 566, + "country_code": "IN", + "code": "UP", + "name": "Uttar Pradesh", + "country_id": 106 + }, + { + "id": 567, + "country_code": "IN", + "code": "UT", + "name": "Uttarakhand", + "country_id": 106 + }, + { + "id": 568, + "country_code": "IN", + "code": "WB", + "name": "West Bengal", + "country_id": 106 + } +] diff --git a/packages/Webkul/Core/src/Database/Migrations/2021_03_12_060658_create_core_config_table.php b/packages/Webkul/Core/src/Database/Migrations/2021_03_12_060658_create_core_config_table.php new file mode 100644 index 0000000..e0feed4 --- /dev/null +++ b/packages/Webkul/Core/src/Database/Migrations/2021_03_12_060658_create_core_config_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('code'); + $table->string('value'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('core_config'); + } +} diff --git a/packages/Webkul/Core/src/Database/Migrations/2021_04_12_173232_create_countries_table.php b/packages/Webkul/Core/src/Database/Migrations/2021_04_12_173232_create_countries_table.php new file mode 100644 index 0000000..735350c --- /dev/null +++ b/packages/Webkul/Core/src/Database/Migrations/2021_04_12_173232_create_countries_table.php @@ -0,0 +1,32 @@ +increments('id'); + $table->string('code'); + $table->string('name'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('countries'); + } +} diff --git a/packages/Webkul/Core/src/Database/Migrations/2021_04_12_173344_create_country_states_table.php b/packages/Webkul/Core/src/Database/Migrations/2021_04_12_173344_create_country_states_table.php new file mode 100644 index 0000000..934b10c --- /dev/null +++ b/packages/Webkul/Core/src/Database/Migrations/2021_04_12_173344_create_country_states_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->string('country_code'); + $table->string('code'); + $table->string('name'); + + $table->integer('country_id')->unsigned(); + $table->foreign('country_id')->references('id')->on('countries')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('country_states'); + } +} diff --git a/packages/Webkul/Core/src/Database/Seeders/CountriesSeeder.php b/packages/Webkul/Core/src/Database/Seeders/CountriesSeeder.php new file mode 100644 index 0000000..182f35d --- /dev/null +++ b/packages/Webkul/Core/src/Database/Seeders/CountriesSeeder.php @@ -0,0 +1,18 @@ +delete(); + + $countries = json_decode(file_get_contents(__DIR__ . '/../../Data/countries.json'), true); + + DB::table('countries')->insert($countries); + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php b/packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php new file mode 100644 index 0000000..a60fa11 --- /dev/null +++ b/packages/Webkul/Core/src/Database/Seeders/DatabaseSeeder.php @@ -0,0 +1,19 @@ +call(CountriesSeeder::class); + $this->call(StatesSeeder::class); + } +} diff --git a/packages/Webkul/Core/src/Database/Seeders/StatesSeeder.php b/packages/Webkul/Core/src/Database/Seeders/StatesSeeder.php new file mode 100644 index 0000000..ed44422 --- /dev/null +++ b/packages/Webkul/Core/src/Database/Seeders/StatesSeeder.php @@ -0,0 +1,18 @@ +delete(); + + $states = json_decode(file_get_contents(__DIR__ . '/../../Data/states.json'), true); + + DB::table('country_states')->insert($states); + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Eloquent/Repository.php b/packages/Webkul/Core/src/Eloquent/Repository.php new file mode 100644 index 0000000..893b146 --- /dev/null +++ b/packages/Webkul/Core/src/Eloquent/Repository.php @@ -0,0 +1,140 @@ +findByField($field, $value, $columns = ['*']); + + return $model->first(); + } + + /** + * Find data by field and value + * + * @param string $field + * @param string $value + * @param array $columns + * @return mixed + */ + public function findOneWhere(array $where, $columns = ['*']) + { + $model = $this->findWhere($where, $columns); + + return $model->first(); + } + + /** + * Find data by id + * + * @param int $id + * @param array $columns + * @return mixed + */ + public function find($id, $columns = ['*']) + { + $this->applyCriteria(); + $this->applyScope(); + $model = $this->model->find($id, $columns); + $this->resetModel(); + + return $this->parserResult($model); + } + + /** + * Find data by id + * + * @param int $id + * @param array $columns + * @return mixed + */ + public function findOrFail($id, $columns = ['*']) + { + $this->applyCriteria(); + $this->applyScope(); + $model = $this->model->findOrFail($id, $columns); + $this->resetModel(); + + return $this->parserResult($model); + } + + /** + * Count results of repository + * + * @param array $where + * @param string $columns + * @return int + */ + public function count(array $where = [], $columns = '*') + { + $this->applyCriteria(); + $this->applyScope(); + + if ($where) { + $this->applyConditions($where); + } + + $result = $this->model->count($columns); + $this->resetModel(); + $this->resetScope(); + + return $result; + } + + /** + * @param string $columns + * @return mixed + */ + public function sum($columns) + { + $this->applyCriteria(); + $this->applyScope(); + + $sum = $this->model->sum($columns); + $this->resetModel(); + + return $sum; + } + + /** + * @param string $columns + * @return mixed + */ + public function avg($columns) + { + $this->applyCriteria(); + $this->applyScope(); + + $avg = $this->model->avg($columns); + $this->resetModel(); + + return $avg; + } + + /** + * @return mixed + */ + public function getModel($data = []) + { + return $this->model; + } +} diff --git a/packages/Webkul/Core/src/Eloquent/TranslatableModel.php b/packages/Webkul/Core/src/Eloquent/TranslatableModel.php new file mode 100644 index 0000000..14b74c8 --- /dev/null +++ b/packages/Webkul/Core/src/Eloquent/TranslatableModel.php @@ -0,0 +1,23 @@ +defaultLocale) { + return $this->defaultLocale; + } + + return config('translatable.locale') ?: app()->make('translator')->getLocale(); + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Facades/Core.php b/packages/Webkul/Core/src/Facades/Core.php new file mode 100644 index 0000000..b1ae6af --- /dev/null +++ b/packages/Webkul/Core/src/Facades/Core.php @@ -0,0 +1,18 @@ +getLocale(); + + $path = __DIR__ . "/../../../$packageName/src/Resources/lang/$currentLocale/app.php"; + + if (is_string($path) && is_readable($path)) { + return include $path; + } else { + $currentLocale = "en"; + + $path = __DIR__ . "/../../../$packageName/src/Resources/lang/$currentLocale/app.php"; + + return include $path; + } + } +} diff --git a/packages/Webkul/Core/src/Http/Controllers/CoreController.php b/packages/Webkul/Core/src/Http/Controllers/CoreController.php new file mode 100644 index 0000000..d5ef549 --- /dev/null +++ b/packages/Webkul/Core/src/Http/Controllers/CoreController.php @@ -0,0 +1,40 @@ +_config = request('_config'); + } + + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view($this->_config['view'], $this->_config); + } +} diff --git a/packages/Webkul/Core/src/Http/helpers.php b/packages/Webkul/Core/src/Http/helpers.php new file mode 100644 index 0000000..d0e1952 --- /dev/null +++ b/packages/Webkul/Core/src/Http/helpers.php @@ -0,0 +1,24 @@ +make('core'); + } +} + +if (!function_exists('view_render_event')) { + function view_render_event($eventName, $params = null) + { + app()->singleton(ViewRenderEventManager::class); + + $viewEventManager = app()->make(ViewRenderEventManager::class); + + $viewEventManager->handleRenderEvent($eventName, $params); + + return $viewEventManager->render(); + } +} +?> diff --git a/packages/Webkul/Core/src/Models/CoreConfig.php b/packages/Webkul/Core/src/Models/CoreConfig.php new file mode 100644 index 0000000..1ce6a6b --- /dev/null +++ b/packages/Webkul/Core/src/Models/CoreConfig.php @@ -0,0 +1,25 @@ +areMigrationsEnabled()) { + $this->registerMigrations(); + } + + if ($this->areModelsEnabled()) { + $this->registerModels(); + $this->registerEnums(); + $this->registerRequestTypes(); + } + + if ($this->areViewsEnabled()) { + $this->registerViews(); + } + + if ($routes = $this->config('routes', true)) { + $this->registerRoutes($routes); + } + } +} \ No newline at end of file diff --git a/packages/Webkul/Core/src/Providers/CoreServiceProvider.php b/packages/Webkul/Core/src/Providers/CoreServiceProvider.php new file mode 100644 index 0000000..7020cd7 --- /dev/null +++ b/packages/Webkul/Core/src/Providers/CoreServiceProvider.php @@ -0,0 +1,79 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + + $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'core'); + + $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'core'); + + $this->publishes([ + dirname(__DIR__) . '/Config/concord.php' => config_path('concord.php'), + dirname(__DIR__) . '/Config/cors.php' => config_path('cors.php'), + dirname(__DIR__) . '/Config/sanctum.php' => config_path('sanctum.php'), + ]); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + $this->registerCommands(); + + $this->registerFacades(); + } + + /** + * Register Bouncer as a singleton. + * + * @return void + */ + protected function registerFacades() + { + $loader = AliasLoader::getInstance(); + + $loader->alias('core', CoreFacade::class); + + $this->app->singleton('core', function () { + return app()->make(Core::class); + }); + } + + /** + * Register the console commands of this package + * + * @return void + */ + protected function registerCommands(): void + { + if ($this->app->runningInConsole()) { + $this->commands([ + Version::class, + Install::class, + ]); + } + } +} diff --git a/packages/Webkul/Core/src/Providers/ModuleServiceProvider.php b/packages/Webkul/Core/src/Providers/ModuleServiceProvider.php new file mode 100644 index 0000000..e69a2ea --- /dev/null +++ b/packages/Webkul/Core/src/Providers/ModuleServiceProvider.php @@ -0,0 +1,12 @@ + $fieldData) { + $recurssiveData = $this->recuressiveArray($fieldData, $method); + + foreach ($recurssiveData as $fieldName => $value) { + $field = core()->getConfigField($fieldName); + + if (getType($value) == 'array' && !isset($value['delete'])) { + $value = implode(",", $value); + } + + $coreConfigValue = $this->model + ->where('code', $fieldName) + ->get(); + + if (request()->hasFile($fieldName)) { + $value = request()->file($fieldName)->store('configuration'); + } + + if (!count($coreConfigValue)) { + $this->model->create([ + 'code' => $fieldName, + 'value' => $value, + ]); + } else { + foreach ($coreConfigValue as $coreConfig) { + Storage::delete($coreConfig['value']); + + if (isset($value['delete'])) { + $this->model->destroy($coreConfig['id']); + } else { + $coreConfig->update([ + 'code' => $fieldName, + 'value' => $value, + ]); + } + } + } + } + } + } + + /** + * @param array $formData + * @param string $method + * @return array + */ + public function recuressiveArray(array $formData, $method) + { + static $data = []; + + static $recuressiveArrayData = []; + + foreach ($formData as $form => $formValue) { + $value = $method . '.' . $form; + + if (is_array($formValue)) { + $dim = $this->countDim($formValue); + + if ($dim > 1) { + $this->recuressiveArray($formValue, $value); + } elseif ($dim == 1) { + $data[$value] = $formValue; + } + } + } + + foreach ($data as $key => $value) { + $field = core()->getConfigField($key); + + if ($field) { + $recuressiveArrayData[$key] = $value; + } else { + foreach ($value as $key1 => $val) { + $recuressiveArrayData[$key . '.' . $key1] = $val; + } + } + } + + return $recuressiveArrayData; + } + + /** + * Return dimension of array + * + * @param array $array + * @return int + */ + public function countDim($array) + { + if (is_array(reset($array))) { + $return = $this->countDim(reset($array)) + 1; + } else { + $return = 1; + } + + return $return; + } +} diff --git a/packages/Webkul/Core/src/Repositories/CountryRepository.php b/packages/Webkul/Core/src/Repositories/CountryRepository.php new file mode 100644 index 0000000..8fe6d68 --- /dev/null +++ b/packages/Webkul/Core/src/Repositories/CountryRepository.php @@ -0,0 +1,21 @@ +roles[$route] = $item['key']; + } + } else { + $this->roles[$item['route']] = $item['key']; + } + } + + core()->array_set($this->items, $children, $item); + } +} diff --git a/packages/Webkul/Core/src/ViewRenderEventManager.php b/packages/Webkul/Core/src/ViewRenderEventManager.php new file mode 100644 index 0000000..92dcb1a --- /dev/null +++ b/packages/Webkul/Core/src/ViewRenderEventManager.php @@ -0,0 +1,90 @@ +params = $params ?? []; + + Event::dispatch($eventName, $this); + + return $this->templates; + } + + /** + * get params + * + * @return array + */ + public function getParams() + { + return $this->params; + } + + /** + * get param + * + * @param $name + * @return mixed + */ + public function getParam($name) + { + return optional($this->params)[$name]; + } + + /** + * Add templates for render + * + * @param string $template + * @return void + */ + public function addTemplate($template) + { + array_push($this->templates, $template); + } + + /** + * Renders templates + * + * @return string + */ + public function render() + { + $string = ""; + + foreach ($this->templates as $template) { + if (view()->exists($template)) { + $string .= view($template, $this->params)->render(); + } elseif (is_string($template)) { + $string .= $template; + } + } + + return $string; + } +} diff --git a/packages/Webkul/Email/composer.json b/packages/Webkul/Email/composer.json new file mode 100644 index 0000000..3f314f1 --- /dev/null +++ b/packages/Webkul/Email/composer.json @@ -0,0 +1,28 @@ +{ + "name": "krayin/laravel-email", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "krayin/laravel-contact": "^1.0", + "krayin/laravel-core": "^1.0" + }, + "autoload": { + "psr-4": { + "Webkul\\Email\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\Email\\Providers\\EmailServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/packages/Webkul/Email/src/Contracts/Attachment.php b/packages/Webkul/Email/src/Contracts/Attachment.php new file mode 100644 index 0000000..d8b812d --- /dev/null +++ b/packages/Webkul/Email/src/Contracts/Attachment.php @@ -0,0 +1,7 @@ +increments('id'); + $table->string('subject')->nullable(); + $table->string('source'); + $table->string('user_type'); + $table->string('name')->nullable(); + $table->text('reply')->nullable(); + $table->boolean('is_read')->default(0); + $table->json('folders')->nullable(); + $table->json('from')->nullable(); + $table->json('sender')->nullable(); + $table->json('reply_to')->nullable(); + $table->json('cc')->nullable(); + $table->json('bcc')->nullable(); + $table->string('unique_id')->nullable()->unique(); + $table->string('message_id')->unique(); + $table->json('reference_ids')->nullable(); + + $table->integer('person_id')->unsigned()->nullable(); + $table->foreign('person_id')->references('id')->on('persons')->onDelete('set null'); + + $table->integer('lead_id')->unsigned()->nullable(); + $table->foreign('lead_id')->references('id')->on('leads')->onDelete('set null'); + + $table->timestamps(); + }); + + Schema::table('emails', function (Blueprint $table) { + $table->integer('parent_id')->unsigned()->nullable(); + $table->foreign('parent_id')->references('id')->on('emails')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('emails'); + } +} diff --git a/packages/Webkul/Email/src/Database/Migrations/2021_05_25_072700_create_email_attachments_table.php b/packages/Webkul/Email/src/Database/Migrations/2021_05_25_072700_create_email_attachments_table.php new file mode 100644 index 0000000..1e83761 --- /dev/null +++ b/packages/Webkul/Email/src/Database/Migrations/2021_05_25_072700_create_email_attachments_table.php @@ -0,0 +1,40 @@ +increments('id'); + $table->string('name')->nullable(); + $table->string('path'); + $table->integer('size')->nullable(); + $table->string('content_type')->nullable(); + $table->string('content_id')->nullable(); + + $table->integer('email_id')->unsigned(); + $table->foreign('email_id')->references('id')->on('emails')->onDelete('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('email_attachments'); + } +} diff --git a/packages/Webkul/Email/src/Helpers/Attachment.php b/packages/Webkul/Email/src/Helpers/Attachment.php new file mode 100644 index 0000000..daae5af --- /dev/null +++ b/packages/Webkul/Email/src/Helpers/Attachment.php @@ -0,0 +1,148 @@ +filename = $filename; + + $this->contentType = $contentType; + + $this->stream = $stream; + + $this->content = null; + + $this->contentDisposition = $contentDisposition; + + $this->contentId = $contentId; + + $this->headers = $headers; + } + + /** + * retrieve the attachment filename + * + * @return string + */ + public function getFilename() + { + return $this->filename; + } + + /** + * Retrieve the Attachment Content-Type + * + * @return string + */ + public function getContentType() + { + return $this->contentType; + } + + /** + * Retrieve the Attachment Content-Disposition + * + * @return string + */ + public function getContentDisposition() + { + return $this->contentDisposition; + } + + /** + * Retrieve the Attachment Content-ID + * + * @return string + */ + public function getContentID() + { + return $this->contentId; + } + + /** + * Retrieve the Attachment Headers + * + * @return string + */ + public function getHeaders() + { + return $this->headers; + } + + /** + * Read the contents a few bytes at a time until completed + * Once read to completion, it always returns false + * + * @param integer $bytes + * @return string + */ + public function read($bytes = 2082) + { + return feof($this->stream) ? false : fread($this->stream, $bytes); + } + + /** + * Retrieve the file content in one go + * Once you retreive the content you cannot use MimeMailParser_attachment::read() + * + * @return string + */ + public function getContent() + { + if ($this->content === null) { + fseek($this->stream, 0); + + while (($buf = $this->read()) !== false) { + $this->content .= $buf; + } + } + + return $this->content; + } +} diff --git a/packages/Webkul/Email/src/Helpers/Charset.php b/packages/Webkul/Email/src/Helpers/Charset.php new file mode 100644 index 0000000..ae76459 --- /dev/null +++ b/packages/Webkul/Email/src/Helpers/Charset.php @@ -0,0 +1,352 @@ + 'us-ascii', + 'us-ascii' => 'us-ascii', + 'ansi_x3.4-1968' => 'us-ascii', + '646' => 'us-ascii', + 'iso-8859-1' => 'ISO-8859-1', + 'iso-8859-2' => 'ISO-8859-2', + 'iso-8859-3' => 'ISO-8859-3', + 'iso-8859-4' => 'ISO-8859-4', + 'iso-8859-5' => 'ISO-8859-5', + 'iso-8859-6' => 'ISO-8859-6', + 'iso-8859-6-i' => 'ISO-8859-6-I', + 'iso-8859-6-e' => 'ISO-8859-6-E', + 'iso-8859-7' => 'ISO-8859-7', + 'iso-8859-8' => 'ISO-8859-8', + 'iso-8859-8-i' => 'ISO-8859-8-I', + 'iso-8859-8-e' => 'ISO-8859-8-E', + 'iso-8859-9' => 'ISO-8859-9', + 'iso-8859-10' => 'ISO-8859-10', + 'iso-8859-11' => 'ISO-8859-11', + 'iso-8859-13' => 'ISO-8859-13', + 'iso-8859-14' => 'ISO-8859-14', + 'iso-8859-15' => 'ISO-8859-15', + 'iso-8859-16' => 'ISO-8859-16', + 'iso-ir-111' => 'ISO-IR-111', + 'iso-2022-cn' => 'ISO-2022-CN', + 'iso-2022-cn-ext' => 'ISO-2022-CN', + 'iso-2022-kr' => 'ISO-2022-KR', + 'iso-2022-jp' => 'ISO-2022-JP', + 'utf-16be' => 'UTF-16BE', + 'utf-16le' => 'UTF-16LE', + 'utf-16' => 'UTF-16', + 'windows-1250' => 'windows-1250', + 'windows-1251' => 'windows-1251', + 'windows-1252' => 'windows-1252', + 'windows-1253' => 'windows-1253', + 'windows-1254' => 'windows-1254', + 'windows-1255' => 'windows-1255', + 'windows-1256' => 'windows-1256', + 'windows-1257' => 'windows-1257', + 'windows-1258' => 'windows-1258', + 'ibm866' => 'IBM866', + 'ibm850' => 'IBM850', + 'ibm852' => 'IBM852', + 'ibm855' => 'IBM855', + 'ibm857' => 'IBM857', + 'ibm862' => 'IBM862', + 'ibm864' => 'IBM864', + 'utf-8' => 'UTF-8', + 'utf-7' => 'UTF-7', + 'shift_jis' => 'Shift_JIS', + 'big5' => 'Big5', + 'euc-jp' => 'EUC-JP', + 'euc-kr' => 'EUC-KR', + 'gb2312' => 'GB2312', + 'gb18030' => 'gb18030', + 'viscii' => 'VISCII', + 'koi8-r' => 'KOI8-R', + 'koi8_r' => 'KOI8-R', + 'cskoi8r' => 'KOI8-R', + 'koi' => 'KOI8-R', + 'koi8' => 'KOI8-R', + 'koi8-u' => 'KOI8-U', + 'tis-620' => 'TIS-620', + 't.61-8bit' => 'T.61-8bit', + 'hz-gb-2312' => 'HZ-GB-2312', + 'big5-hkscs' => 'Big5-HKSCS', + 'gbk' => 'gbk', + 'cns11643' => 'x-euc-tw', + 'x-imap4-modified-utf7' => 'x-imap4-modified-utf7', + 'x-euc-tw' => 'x-euc-tw', + 'x-mac-ce' => 'x-mac-ce', + 'x-mac-turkish' => 'x-mac-turkish', + 'x-mac-greek' => 'x-mac-greek', + 'x-mac-icelandic' => 'x-mac-icelandic', + 'x-mac-croatian' => 'x-mac-croatian', + 'x-mac-romanian' => 'x-mac-romanian', + 'x-mac-cyrillic' => 'x-mac-cyrillic', + 'x-mac-ukrainian' => 'x-mac-cyrillic', + 'x-mac-hebrew' => 'x-mac-hebrew', + 'x-mac-arabic' => 'x-mac-arabic', + 'x-mac-farsi' => 'x-mac-farsi', + 'x-mac-devanagari' => 'x-mac-devanagari', + 'x-mac-gujarati' => 'x-mac-gujarati', + 'x-mac-gurmukhi' => 'x-mac-gurmukhi', + 'armscii-8' => 'armscii-8', + 'x-viet-tcvn5712' => 'x-viet-tcvn5712', + 'x-viet-vps' => 'x-viet-vps', + 'iso-10646-ucs-2' => 'UTF-16BE', + 'x-iso-10646-ucs-2-be' => 'UTF-16BE', + 'x-iso-10646-ucs-2-le' => 'UTF-16LE', + 'x-user-defined' => 'x-user-defined', + 'x-johab' => 'x-johab', + 'latin1' => 'ISO-8859-1', + 'iso_8859-1' => 'ISO-8859-1', + 'iso8859-1' => 'ISO-8859-1', + 'iso8859-2' => 'ISO-8859-2', + 'iso8859-3' => 'ISO-8859-3', + 'iso8859-4' => 'ISO-8859-4', + 'iso8859-5' => 'ISO-8859-5', + 'iso8859-6' => 'ISO-8859-6', + 'iso8859-7' => 'ISO-8859-7', + 'iso8859-8' => 'ISO-8859-8', + 'iso8859-9' => 'ISO-8859-9', + 'iso8859-10' => 'ISO-8859-10', + 'iso8859-11' => 'ISO-8859-11', + 'iso8859-13' => 'ISO-8859-13', + 'iso8859-14' => 'ISO-8859-14', + 'iso8859-15' => 'ISO-8859-15', + 'iso_8859-1:1987' => 'ISO-8859-1', + 'iso-ir-100' => 'ISO-8859-1', + 'l1' => 'ISO-8859-1', + 'ibm819' => 'ISO-8859-1', + 'cp819' => 'ISO-8859-1', + 'csisolatin1' => 'ISO-8859-1', + 'latin2' => 'ISO-8859-2', + 'iso_8859-2' => 'ISO-8859-2', + 'iso_8859-2:1987' => 'ISO-8859-2', + 'iso-ir-101' => 'ISO-8859-2', + 'l2' => 'ISO-8859-2', + 'csisolatin2' => 'ISO-8859-2', + 'latin3' => 'ISO-8859-3', + 'iso_8859-3' => 'ISO-8859-3', + 'iso_8859-3:1988' => 'ISO-8859-3', + 'iso-ir-109' => 'ISO-8859-3', + 'l3' => 'ISO-8859-3', + 'csisolatin3' => 'ISO-8859-3', + 'latin4' => 'ISO-8859-4', + 'iso_8859-4' => 'ISO-8859-4', + 'iso_8859-4:1988' => 'ISO-8859-4', + 'iso-ir-110' => 'ISO-8859-4', + 'l4' => 'ISO-8859-4', + 'csisolatin4' => 'ISO-8859-4', + 'cyrillic' => 'ISO-8859-5', + 'iso_8859-5' => 'ISO-8859-5', + 'iso_8859-5:1988' => 'ISO-8859-5', + 'iso-ir-144' => 'ISO-8859-5', + 'csisolatincyrillic' => 'ISO-8859-5', + 'arabic' => 'ISO-8859-6', + 'iso_8859-6' => 'ISO-8859-6', + 'iso_8859-6:1987' => 'ISO-8859-6', + 'iso-ir-127' => 'ISO-8859-6', + 'ecma-114' => 'ISO-8859-6', + 'asmo-708' => 'ISO-8859-6', + 'csisolatinarabic' => 'ISO-8859-6', + 'csiso88596i' => 'ISO-8859-6-I', + 'csiso88596e' => 'ISO-8859-6-E', + 'greek' => 'ISO-8859-7', + 'greek8' => 'ISO-8859-7', + 'sun_eu_greek' => 'ISO-8859-7', + 'iso_8859-7' => 'ISO-8859-7', + 'iso_8859-7:1987' => 'ISO-8859-7', + 'iso-ir-126' => 'ISO-8859-7', + 'elot_928' => 'ISO-8859-7', + 'ecma-118' => 'ISO-8859-7', + 'csisolatingreek' => 'ISO-8859-7', + 'hebrew' => 'ISO-8859-8', + 'iso_8859-8' => 'ISO-8859-8', + 'visual' => 'ISO-8859-8', + 'iso_8859-8:1988' => 'ISO-8859-8', + 'iso-ir-138' => 'ISO-8859-8', + 'csisolatinhebrew' => 'ISO-8859-8', + 'csiso88598i' => 'ISO-8859-8-I', + 'iso-8859-8i' => 'ISO-8859-8-I', + 'logical' => 'ISO-8859-8-I', + 'csiso88598e' => 'ISO-8859-8-E', + 'latin5' => 'ISO-8859-9', + 'iso_8859-9' => 'ISO-8859-9', + 'iso_8859-9:1989' => 'ISO-8859-9', + 'iso-ir-148' => 'ISO-8859-9', + 'l5' => 'ISO-8859-9', + 'csisolatin5' => 'ISO-8859-9', + 'unicode-1-1-utf-8' => 'UTF-8', + 'utf8' => 'UTF-8', + 'x-sjis' => 'Shift_JIS', + 'shift-jis' => 'Shift_JIS', + 'ms_kanji' => 'Shift_JIS', + 'csshiftjis' => 'Shift_JIS', + 'windows-31j' => 'Shift_JIS', + 'cp932' => 'Shift_JIS', + 'sjis' => 'Shift_JIS', + 'cseucpkdfmtjapanese' => 'EUC-JP', + 'x-euc-jp' => 'EUC-JP', + 'csiso2022jp' => 'ISO-2022-JP', + 'iso-2022-jp-2' => 'ISO-2022-JP', + 'csiso2022jp2' => 'ISO-2022-JP', + 'csbig5' => 'Big5', + 'cn-big5' => 'Big5', + 'x-x-big5' => 'Big5', + 'zh_tw-big5' => 'Big5', + 'cseuckr' => 'EUC-KR', + 'ks_c_5601-1987' => 'EUC-KR', + 'iso-ir-149' => 'EUC-KR', + 'ks_c_5601-1989' => 'EUC-KR', + 'ksc_5601' => 'EUC-KR', + 'ksc5601' => 'EUC-KR', + 'korean' => 'EUC-KR', + 'csksc56011987' => 'EUC-KR', + '5601' => 'EUC-KR', + 'windows-949' => 'EUC-KR', + 'gb_2312-80' => 'GB2312', + 'iso-ir-58' => 'GB2312', + 'chinese' => 'GB2312', + 'csiso58gb231280' => 'GB2312', + 'csgb2312' => 'GB2312', + 'zh_cn.euc' => 'GB2312', + 'gb_2312' => 'GB2312', + 'x-cp1250' => 'windows-1250', + 'x-cp1251' => 'windows-1251', + 'x-cp1252' => 'windows-1252', + 'x-cp1253' => 'windows-1253', + 'x-cp1254' => 'windows-1254', + 'x-cp1255' => 'windows-1255', + 'x-cp1256' => 'windows-1256', + 'x-cp1257' => 'windows-1257', + 'x-cp1258' => 'windows-1258', + 'windows-874' => 'windows-874', + 'ibm874' => 'windows-874', + 'dos-874' => 'windows-874', + 'macintosh' => 'macintosh', + 'x-mac-roman' => 'macintosh', + 'mac' => 'macintosh', + 'csmacintosh' => 'macintosh', + 'cp866' => 'IBM866', + 'cp-866' => 'IBM866', + '866' => 'IBM866', + 'csibm866' => 'IBM866', + 'cp850' => 'IBM850', + '850' => 'IBM850', + 'csibm850' => 'IBM850', + 'cp852' => 'IBM852', + '852' => 'IBM852', + 'csibm852' => 'IBM852', + 'cp855' => 'IBM855', + '855' => 'IBM855', + 'csibm855' => 'IBM855', + 'cp857' => 'IBM857', + '857' => 'IBM857', + 'csibm857' => 'IBM857', + 'cp862' => 'IBM862', + '862' => 'IBM862', + 'csibm862' => 'IBM862', + 'cp864' => 'IBM864', + '864' => 'IBM864', + 'csibm864' => 'IBM864', + 'ibm-864' => 'IBM864', + 't.61' => 'T.61-8bit', + 'iso-ir-103' => 'T.61-8bit', + 'csiso103t618bit' => 'T.61-8bit', + 'x-unicode-2-0-utf-7' => 'UTF-7', + 'unicode-2-0-utf-7' => 'UTF-7', + 'unicode-1-1-utf-7' => 'UTF-7', + 'csunicode11utf7' => 'UTF-7', + 'csunicode' => 'UTF-16BE', + 'csunicode11' => 'UTF-16BE', + 'iso-10646-ucs-basic' => 'UTF-16BE', + 'csunicodeascii' => 'UTF-16BE', + 'iso-10646-unicode-latin1' => 'UTF-16BE', + 'csunicodelatin1' => 'UTF-16BE', + 'iso-10646' => 'UTF-16BE', + 'iso-10646-j-1' => 'UTF-16BE', + 'latin6' => 'ISO-8859-10', + 'iso-ir-157' => 'ISO-8859-10', + 'l6' => 'ISO-8859-10', + 'csisolatin6' => 'ISO-8859-10', + 'iso_8859-15' => 'ISO-8859-15', + 'csisolatin9' => 'ISO-8859-15', + 'l9' => 'ISO-8859-15', + 'ecma-cyrillic' => 'ISO-IR-111', + 'csiso111ecmacyrillic' => 'ISO-IR-111', + 'csiso2022kr' => 'ISO-2022-KR', + 'csviscii' => 'VISCII', + 'zh_tw-euc' => 'x-euc-tw', + 'iso88591' => 'ISO-8859-1', + 'iso88592' => 'ISO-8859-2', + 'iso88593' => 'ISO-8859-3', + 'iso88594' => 'ISO-8859-4', + 'iso88595' => 'ISO-8859-5', + 'iso88596' => 'ISO-8859-6', + 'iso88597' => 'ISO-8859-7', + 'iso88598' => 'ISO-8859-8', + 'iso88599' => 'ISO-8859-9', + 'iso885910' => 'ISO-8859-10', + 'iso885911' => 'ISO-8859-11', + 'iso885912' => 'ISO-8859-12', + 'iso885913' => 'ISO-8859-13', + 'iso885914' => 'ISO-8859-14', + 'iso885915' => 'ISO-8859-15', + 'tis620' => 'TIS-620', + 'cp1250' => 'windows-1250', + 'cp1251' => 'windows-1251', + 'cp1252' => 'windows-1252', + 'cp1253' => 'windows-1253', + 'cp1254' => 'windows-1254', + 'cp1255' => 'windows-1255', + 'cp1256' => 'windows-1256', + 'cp1257' => 'windows-1257', + 'cp1258' => 'windows-1258', + 'x-gbk' => 'gbk', + 'windows-936' => 'gbk', + 'ansi-1251' => 'windows-1251' + // '' => 'UTF-8', + ]; + + /** + * Decode the string from Charset + * + * @param string $encodedString + * @param string $charset + * @return string + */ + public function decodeCharset($encodedString, $charset) + { + if (strtolower($charset) == 'utf-8' || strtolower($charset) == 'us-ascii') { + return $encodedString; + } + + try { + return iconv($this->getCharsetAlias($charset), 'UTF-8//TRANSLIT', $encodedString); + } catch (\Exception $e) { + return iconv($this->getCharsetAlias($charset), 'UTF-8//IGNORE', $encodedString); + } + } + + /** + * Get charset alias + * + * @param string $charset . + * @return string + */ + public function getCharsetAlias($charset) + { + $charset = strtolower($charset); + + if (array_key_exists($charset, $this->charsetAlias)) { + return $this->charsetAlias[$charset]; + } else { + return null; + } + } +} diff --git a/packages/Webkul/Email/src/Helpers/Contracts/CharsetManager.php b/packages/Webkul/Email/src/Helpers/Contracts/CharsetManager.php new file mode 100644 index 0000000..2feab71 --- /dev/null +++ b/packages/Webkul/Email/src/Helpers/Contracts/CharsetManager.php @@ -0,0 +1,21 @@ +'; + } else { + $fulltag = '<' . $tagname; + if (is_array($attary) && sizeof($attary)) { + $atts = []; + + while (list($attname, $attvalue) = each($attary)) { + array_push($atts, "$attname=$attvalue"); + } + + $fulltag .= ' ' . join(' ', $atts); + } + + if ($tagtype == 3) { + $fulltag .= ' /'; + } + + $fulltag .= '>'; + } + + return $fulltag; + } + + /** + * A small helper function to use with array_walk. Modifies a by-ref + * value and makes it lowercase. + * + * @param string $val a value passed by-ref. + * @return void since it modifies a by-ref value. + */ + public function tln_casenormalize(&$val) + { + $val = strtolower($val); + } + + /** + * This function skips any whitespace from the current position within + * a string and to the next non-whitespace value. + * + * @param string $body the string + * @param integer $offset the offset within the string where we should start + * looking for the next non-whitespace character. + * @return integer the location within the $body where the next non-whitespace char is located. + */ + public function tln_skipspace($body, $offset) + { + preg_match('/^(\s*)/s', substr($body, $offset), $matches); + + try { + if (sizeof($matches[1])) { + $count = strlen($matches[1]); + $offset += $count; + } + } catch (\Exception $e) { + // Do nothing ... + } + + return $offset; + } + + /** + * This function looks for the next character within a string. It's + * really just a glorified "strpos", except it catches the failures + * nicely. + * + * @param string $body The string to look for needle in. + * @param integer $offset Start looking from this position. + * @param string $needle The character/string to look for. + * @return integer location of the next occurrence of the needle, or strlen($body) if needle wasn't found. + */ + public function tln_findnxstr($body, $offset, $needle) + { + $pos = strpos($body, $needle, $offset); + + if ($pos === false) { + $pos = strlen($body); + } + + return $pos; + } + + /** + * This function takes a PCRE-style regexp and tries to match it + * within the string. + * + * @param string $body The string to look for needle in. + * @param integer $offset Start looking from here. + * @param string $reg A PCRE-style regex to match. + * @return array|boolean Returns a false if no matches found, or an array + * with the following members: + * - integer with the location of the match within $body + * - string with whatever content between offset and the match + * - string with whatever it is we matched + */ + public function tln_findnxreg($body, $offset, $reg) + { + $matches = $retarr = []; + + $preg_rule = '%^(.*?)(' . $reg . ')%s'; + + preg_match($preg_rule, substr($body, $offset), $matches); + + if (!isset($matches[0]) || !$matches[0]) { + $retarr = false; + } else { + $retarr[0] = $offset + strlen($matches[1]); + + $retarr[1] = $matches[1]; + + $retarr[2] = $matches[2]; + } + + return $retarr; + } + + /** + * This function looks for the next tag. + * + * @param string $body String where to look for the next tag. + * @param integer $offset Start looking from here. + * @return array|boolean false if no more tags exist in the body, or + * an array with the following members: + * - string with the name of the tag + * - array with attributes and their values + * - integer with tag type (1, 2, or 3) + * - integer where the tag starts (starting "<") + * - integer where the tag ends (ending ">") + * first three members will be false, if the tag is invalid. + */ + public function tln_getnxtag($body, $offset) + { + if ($offset > strlen($body)) { + return false; + } + + $lt = $this->tln_findnxstr($body, $offset, '<'); + + if ($lt == strlen($body)) { + return false; + } + + /** + * We are here: + * blah blah + * \---------^ + */ + $pos = $this->tln_skipspace($body, $lt + 1); + + if ($pos >= strlen($body)) { + return array(false, false, false, $lt, strlen($body)); + } + + /** + * There are 3 kinds of tags: + * 1. Opening tag, e.g.: + * + * 2. Closing tag, e.g.: + * + * 3. XHTML-style content-less tag, e.g.: + * + */ + switch (substr($body, $pos, 1)) { + case '/': + $tagtype = 2; + $pos++; + break; + + case '!': + /** + * A comment or an SGML declaration. + */ + if (substr($body, $pos + 1, 2) == '--') { + $gt = strpos($body, '-->', $pos); + + if ($gt === false) { + $gt = strlen($body); + } else { + $gt += 2; + } + + return array(false, false, false, $lt, $gt); + } else { + $gt = $this->tln_findnxstr($body, $pos, '>'); + + return array(false, false, false, $lt, $gt); + } + break; + + default: + /** + * Assume tagtype 1 for now. If it's type 3, we'll switch values + * later. + */ + $tagtype = 1; + break; + } + + /** + * Look for next [\W-_], which will indicate the end of the tag name. + */ + $regary = $this->tln_findnxreg($body, $pos, '[^\w\-_]'); + + if ($regary == false) { + return array(false, false, false, $lt, strlen($body)); + } + + list($pos, $tagname, $match) = $regary; + + $tagname = strtolower($tagname); + + /** + * $match can be either of these: + * '>' indicating the end of the tag entirely. + * '\s' indicating the end of the tag name. + * '/' indicating that this is type-3 xhtml tag. + * + * Whatever else we find there indicates an invalid tag. + */ + switch ($match) { + case '/': + /** + * This is an xhtml-style tag with a closing / at the + * end, like so: . Check if it's followed + * by the closing bracket. If not, then this tag is invalid + */ + if (substr($body, $pos, 2) == '/>') { + $pos++; + + $tagtype = 3; + } else { + $gt = $this->tln_findnxstr($body, $pos, '>'); + $retary = array(false, false, false, $lt, $gt); + + return $retary; + } + + //intentional fall-through + case '>': + return array($tagname, false, $tagtype, $lt, $pos); + break; + + default: + /** + * Check if it's whitespace + */ + if (!preg_match('/\s/', $match)) { + /** + * This is an invalid tag! Look for the next closing ">". + */ + $gt = $this->tln_findnxstr($body, $lt, '>'); + + return array(false, false, false, $lt, $gt); + } + break; + } + + /** + * At this point we're here: + * + * \-------^ + * + * At this point we loop in order to find all attributes. + */ + $attary = []; + + while ($pos <= strlen($body)) { + $pos = $this->tln_skipspace($body, $pos); + + if ($pos == strlen($body)) { + /** + * Non-closed tag. + */ + return array(false, false, false, $lt, $pos); + } + + /** + * See if we arrived at a ">" or "/>", which means that we reached + * the end of the tag. + */ + $matches = []; + + if (preg_match('%^(\s*)(>|/>)%s', substr($body, $pos), $matches)) { + /** + * Yep. So we did. + */ + $pos += strlen($matches[1]); + + if ($matches[2] == '/>') { + $tagtype = 3; + $pos++; + } + + return array($tagname, $attary, $tagtype, $lt, $pos); + } + + /** + * There are several types of attributes, with optional + * [:space:] between members. + * Type 1: + * attrname[:space:]=[:space:]'CDATA' + * Type 2: + * attrname[:space:]=[:space:]"CDATA" + * Type 3: + * attr[:space:]=[:space:]CDATA + * Type 4: + * attrname + * + * We leave types 1 and 2 the same, type 3 we check for + * '"' and convert to """ if needed, then wrap in + * double quotes. Type 4 we convert into: + * attrname="yes". + */ + $regary = $this->tln_findnxreg($body, $pos, '[^\w\-_]'); + + if ($regary == false) { + /** + * Looks like body ended before the end of tag. + */ + return array(false, false, false, $lt, strlen($body)); + } + + list($pos, $attname, $match) = $regary; + + $attname = strtolower($attname); + + /** + * We arrived at the end of attribute name. Several things possible + * here: + * '>' means the end of the tag and this is attribute type 4 + * '/' if followed by '>' means the same thing as above + * '\s' means a lot of things -- look what it's followed by. + * anything else means the attribute is invalid. + */ + switch ($match) { + case '/': + /** + * This is an xhtml-style tag with a closing / at the + * end, like so: . Check if it's followed + * by the closing bracket. If not, then this tag is invalid + */ + if (substr($body, $pos, 2) == '/>') { + $pos++; + $tagtype = 3; + } else { + $gt = $this->tln_findnxstr($body, $pos, '>'); + $retary = array(false, false, false, $lt, $gt); + return $retary; + } + + //intentional fall-through + case '>': + $attary[$attname] = '"yes"'; + + return array($tagname, $attary, $tagtype, $lt, $pos); + break; + + default: + /** + * Skip whitespace and see what we arrive at. + */ + $pos = $this->tln_skipspace($body, $pos); + + $char = substr($body, $pos, 1); + /** + * Two things are valid here: + * '=' means this is attribute type 1 2 or 3. + * \w means this was attribute type 4. + * anything else we ignore and re-loop. End of tag and + * invalid stuff will be caught by our checks at the beginning + * of the loop. + */ + if ($char == '=') { + $pos++; + + $pos = $this->tln_skipspace($body, $pos); + /** + * Here are 3 possibilities: + * "'" attribute type 1 + * '"' attribute type 2 + * everything else is the content of tag type 3 + */ + $quot = substr($body, $pos, 1); + + if ($quot == '\'') { + $regary = $this->tln_findnxreg($body, $pos + 1, '\''); + + if ($regary == false) { + return array(false, false, false, $lt, strlen($body)); + } + + list($pos, $attval, $match) = $regary; + + $pos++; + + $attary[$attname] = '\'' . $attval . '\''; + } elseif ($quot == '"') { + $regary = $this->tln_findnxreg($body, $pos + 1, '\"'); + + if ($regary == false) { + return array(false, false, false, $lt, strlen($body)); + } + + list($pos, $attval, $match) = $regary; + + $pos++; + + $attary[$attname] = '"' . $attval . '"'; + } else { + /** + * These are hateful. Look for \s, or >. + */ + $regary = $this->tln_findnxreg($body, $pos, '[\s>]'); + + if ($regary == false) { + return array(false, false, false, $lt, strlen($body)); + } + + list($pos, $attval, $match) = $regary; + + /** + * If it's ">" it will be caught at the top. + */ + $attval = preg_replace('/\"/s', '"', $attval); + + $attary[$attname] = '"' . $attval . '"'; + } + } elseif (preg_match('|[\w/>]|', $char)) { + /** + * That was attribute type 4. + */ + $attary[$attname] = '"yes"'; + } else { + /** + * An illegal character. Find next '>' and return. + */ + $gt = $this->tln_findnxstr($body, $pos, '>'); + + return array(false, false, false, $lt, $gt); + } + break; + } + } + + /** + * The fact that we got here indicates that the tag end was never + * found. Return invalid tag indication so it gets stripped. + */ + return array(false, false, false, $lt, strlen($body)); + } + + /** + * Translates entities into literal values so they can be checked. + * + * @param string $attvalue the by-ref value to check. + * @param string $regex the regular expression to check against. + * @param boolean $hex whether the entites are hexadecimal. + * @return boolean True or False depending on whether there were matches. + */ + public function tln_deent(&$attvalue, $regex, $hex = false) + { + preg_match_all($regex, $attvalue, $matches); + + if (is_array($matches) && sizeof($matches[0]) > 0) { + $repl = []; + + for ($i = 0; $i < sizeof($matches[0]); $i++) { + $numval = $matches[1][$i]; + + if ($hex) { + $numval = hexdec($numval); + } + + $repl[$matches[0][$i]] = chr($numval); + } + + $attvalue = strtr($attvalue, $repl); + + return true; + } else { + return false; + } + } + + /** + * This function checks attribute values for entity-encoded values + * and returns them translated into 8-bit strings so we can run + * checks on them. + * + * @param string $attvalue A string to run entity check against. + * @return Void, modifies a reference value. + */ + public function tln_defang(&$attvalue) + { + /** + * Skip this if there aren't ampersands or backslashes. + */ + if (strpos($attvalue, '&') === false + && strpos($attvalue, '\\') === false + ) { + return; + } + + do { + $m = false; + $m = $m || $this->tln_deent($attvalue, '/\�*(\d+);*/s'); + $m = $m || $this->tln_deent($attvalue, '/\�*((\d|[a-f])+);*/si', true); + $m = $m || $this->tln_deent($attvalue, '/\\\\(\d+)/s', true); + } while ($m == true); + + $attvalue = stripslashes($attvalue); + } + + /** + * Kill any tabs, newlines, or carriage returns. Our friends the + * makers of the browser with 95% market value decided that it'd + * be funny to make "java[tab]script" be just as good as "javascript". + * + * @param string $attvalue The attribute value before extraneous spaces removed. + * @return Void, modifies a reference value. + */ + public function tln_unspace(&$attvalue) + { + if (strcspn($attvalue, "\t\r\n\0 ") != strlen($attvalue)) { + $attvalue = str_replace( + array("\t", "\r", "\n", "\0", " "), + array('', '', '', '', ''), + $attvalue + ); + } + } + + /** + * This function runs various checks against the attributes. + * + * @param string $tagname String with the name of the tag. + * @param array $attary Array with all tag attributes. + * @param array $rm_attnames See description for tln_sanitize + * @param array $bad_attvals See description for tln_sanitize + * @param array $add_attr_to_tag See description for tln_sanitize + * @param string $trans_image_path + * @param boolean $block_external_images + * @return Array with modified attributes. + */ + public function tln_fixatts( + $tagname, + $attary, + $rm_attnames, + $bad_attvals, + $add_attr_to_tag, + $trans_image_path, + $block_external_images + ) + { + while (list($attname, $attvalue) = each($attary)) { + /** + * See if this attribute should be removed. + */ + foreach ($rm_attnames as $matchtag => $matchattrs) { + if (preg_match($matchtag, $tagname)) { + foreach ($matchattrs as $matchattr) { + if (preg_match($matchattr, $attname)) { + unset($attary[$attname]); + continue; + } + } + } + } + + /** + * Remove any backslashes, entities, or extraneous whitespace. + */ + $oldattvalue = $attvalue; + + $this->tln_defang($attvalue); + + // if ($attname == 'style' && $attvalue !== $oldattvalue) { + // $attvalue = "idiocy"; + // $attary{$attname} = $attvalue; + // } + + $this->tln_unspace($attvalue); + + /** + * Now let's run checks on the attvalues. + * I don't expect anyone to comprehend this. If you do, + * get in touch with me so I can drive to where you live and + * shake your hand personally. :) + */ + foreach ($bad_attvals as $matchtag => $matchattrs) { + if (preg_match($matchtag, $tagname)) { + foreach ($matchattrs as $matchattr => $valary) { + if (preg_match($matchattr, $attname)) { + /** + * There are two arrays in valary. + * First is matches. + * Second one is replacements + */ + list($valmatch, $valrepl) = $valary; + + $newvalue = preg_replace($valmatch, $valrepl, $attvalue); + + if ($newvalue != $attvalue) { + $attary[$attname] = $newvalue; + $attvalue = $newvalue; + } + } + } + } + } + + // if ($attname == 'style') { + // if (preg_match('/[\0-\37\200-\377]+/', $attvalue)) { + // $attary{$attname} = '"disallowed character"'; + // } + // preg_match_all("/url\s*\((.+)\)/si", $attvalue, $aMatch); + // if (count($aMatch)) { + // foreach($aMatch[1] as $sMatch) { + // $urlvalue = $sMatch; + // $this->tln_fixurl($attname, $urlvalue, $trans_image_path, $block_external_images); + // $attary{$attname} = str_replace($sMatch, $urlvalue, $attvalue); + // } + // } + // } + } + + /** + * See if we need to append any attributes to this tag. + */ + foreach ($add_attr_to_tag as $matchtag => $addattary) { + if (preg_match($matchtag, $tagname)) { + $attary = array_merge($attary, $addattary); + } + } + + return $attary; + } + + public function tln_fixurl($attname, &$attvalue, $trans_image_path, $block_external_images) + { + $sQuote = '"'; + + $attvalue = trim($attvalue); + + if ($attvalue && ($attvalue[0] == '"' || $attvalue[0] == "'")) { + // remove the double quotes + $sQuote = $attvalue[0]; + + $attvalue = trim(substr($attvalue, 1, -1)); + } + + /** + * Replace empty src tags with the blank image. src is only used + * for frames, images, and image inputs. Doing a replace should + * not affect them working as should be, however it will stop + * IE from being kicked off when src for img tags are not set + */ + if ($attvalue == '') { + $attvalue = $sQuote . $trans_image_path . $sQuote; + } else { + // first, disallow 8 bit characters and control characters + if (preg_match('/[\0-\37\200-\377]+/', $attvalue)) { + switch ($attname) { + case 'href': + $attvalue = $sQuote . 'http://invalid-stuff-detected.example.com' . $sQuote; + break; + + default: + $attvalue = $sQuote . $trans_image_path . $sQuote; + break; + } + } else { + $aUrl = parse_url($attvalue); + + if (isset($aUrl['scheme'])) { + switch (strtolower($aUrl['scheme'])) { + case 'mailto': + case 'http': + case 'https': + case 'ftp': + if ($attname != 'href') { + if ($block_external_images == true) { + $attvalue = $sQuote . $trans_image_path . $sQuote; + } else { + if (!isset($aUrl['path'])) { + $attvalue = $sQuote . $trans_image_path . $sQuote; + } + } + } else { + $attvalue = $sQuote . $attvalue . $sQuote; + } + break; + case 'outbind': + $attvalue = $sQuote . $attvalue . $sQuote; + break; + case 'cid': + $attvalue = $sQuote . $attvalue . $sQuote; + break; + default: + $attvalue = $sQuote . $trans_image_path . $sQuote; + break; + } + } else { + if (!isset($aUrl['path']) || $aUrl['path'] != $trans_image_path) { + $$attvalue = $sQuote . $trans_image_path . $sQuote; + } + } + } + } + } + + public function tln_fixstyle($body, $pos, $trans_image_path, $block_external_images) + { + $me = 'tln_fixstyle'; + + // workaround for in between comments + $iCurrentPos = $pos; + + $content = ''; + + $sToken = ''; + + $bSucces = false; + + $bEndTag = false; + + for ($i = $pos, $iCount = strlen($body); $i < $iCount; ++$i) { + $char = $body[$i]; + + switch ($char) { + case '<': + $sToken = $char; + break; + case '/': + if ($sToken == '<') { + $sToken .= $char; + $bEndTag = true; + } else { + $content .= $char; + } + break; + case '>': + if ($bEndTag) { + $sToken .= $char; + if (preg_match('/\<\/\s*style\s*\>/i', $sToken, $aMatch)) { + $newpos = $i + 1; + $bSucces = true; + break 2; + } else { + $content .= $sToken; + } + $bEndTag = false; + } else { + $content .= $char; + } + break; + case '!': + if ($sToken == '<') { + // possible comment + if (isset($body[$i + 2]) && substr($body, $i, 3) == '!--') { + $i = strpos($body, '-->', $i + 3); + if ($i === false) { // no end comment + $i = strlen($body); + } + $sToken = ''; + } + } else { + $content .= $char; + } + break; + default: + if ($bEndTag) { + $sToken .= $char; + } else { + $content .= $char; + } + break; + } + } + + if ($bSucces == FALSE) { + return array(FALSE, strlen($body)); + } + + + /** + * First look for general BODY style declaration, which would be + * like so: + * body {background: blah-blah} + * and change it to .bodyclass so we can just assign it to a
    + */ + $content = preg_replace("|body(\s*\{.*?\})|si", ".bodyclass\\1", $content); + + $trans_image_path = $trans_image_path; + + /** + * Fix url('blah') declarations. + */ + // $content = preg_replace("|url\s*\(\s*([\'\"])\s*\S+script\s*:.*?([\'\"])\s*\)|si", + // "url(\\1$trans_image_path\\2)", $content); + + // first check for 8bit sequences and disallowed control characters + if (preg_match('/[\16-\37\200-\377]+/', $content)) { + $content = ''; + return array($content, $newpos); + } + + // remove @import line + $content = preg_replace("/^\s*(@import.*)$/mi", "\n\n", $content); + + $content = preg_replace("/(\\\\)?u(\\\\)?r(\\\\)?l(\\\\)?/i", 'url', $content); + + preg_match_all("/url\s*\((.+)\)/si", $content, $aMatch); + + if (count($aMatch)) { + $aValue = $aReplace = []; + + foreach ($aMatch[1] as $sMatch) { + // url value + $urlvalue = $sMatch; + $this->tln_fixurl('style', $urlvalue, $trans_image_path, $block_external_images); + $aValue[] = $sMatch; + $aReplace[] = $urlvalue; + } + + $content = str_replace($aValue, $aReplace, $content); + } + + /** + * Remove any backslashes, entities, and extraneous whitespace. + */ + $contentTemp = $content; + $this->tln_defang($contentTemp); + $this->tln_unspace($contentTemp); + + $match = array('/\/\*.*\*\//', + '/expression/i', + '/behaviou*r/i', + '/binding/i', + '/include-source/i', + '/javascript/i', + '/script/i', + '/position/i'); + + $replace = array('', 'idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', 'idiocy', ''); + + $contentNew = preg_replace($match, $replace, $contentTemp); + + if ($contentNew !== $contentTemp) { + $content = $contentNew; + } + + return array($content, $newpos); + } + + public function tln_body2div($attary, $trans_image_path) + { + $me = 'tln_body2div'; + + $divattary = array('class' => "'bodyclass'"); + + $text = '#000000'; + + $has_bgc_stl = $has_txt_stl = false; + + $styledef = ''; + + if (is_array($attary) && sizeof($attary) > 0) { + foreach ($attary as $attname => $attvalue) { + $quotchar = substr($attvalue, 0, 1); + + $attvalue = str_replace($quotchar, "", $attvalue); + + switch ($attname) { + case 'background': + $styledef .= "background-image: url('$trans_image_path'); "; + break; + case 'bgcolor': + $has_bgc_stl = true; + $styledef .= "background-color: $attvalue; "; + break; + case 'text': + $has_txt_stl = true; + $styledef .= "color: $attvalue; "; + break; + } + } + + // Outlook defines a white bgcolor and no text color. This can lead to + // white text on a white bg with certain themes. + if ($has_bgc_stl && !$has_txt_stl) { + $styledef .= "color: $text; "; + } + + if (strlen($styledef) > 0) { + $divattary["style"] = "\"$styledef\""; + } + } + + return $divattary; + } + + /** + * + * @param string $body The HTML you wish to filter + * @param array $tag_list see description above + * @param array $rm_tags_with_content see description above + * @param array $self_closing_tags see description above + * @param boolean $force_tag_closing see description above + * @param array $rm_attnames see description above + * @param array $bad_attvals see description above + * @param array $add_attr_to_tag see description above + * @param string $trans_image_path + * @param boolean $block_external_images + * @return string Sanitized html safe to show on your pages. + */ + public function tln_sanitize( + $body, + $tag_list, + $rm_tags_with_content, + $self_closing_tags, + $force_tag_closing, + $rm_attnames, + $bad_attvals, + $add_attr_to_tag, + $trans_image_path, + $block_external_images + ) + { + /** + * Normalize rm_tags and rm_tags_with_content. + */ + $rm_tags = array_shift($tag_list); + + @array_walk($tag_list, 'tln_casenormalize'); + + @array_walk($rm_tags_with_content, 'tln_casenormalize'); + + @array_walk($self_closing_tags, 'tln_casenormalize'); + + /** + * See if tag_list is of tags to remove or tags to allow. + * false means remove these tags + * true means allow these tags + */ + $curpos = 0; + $open_tags = []; + $trusted = ""; + $skip_content = false; + + /** + * Take care of netscape's stupid javascript entities like + * &{alert('boo')}; + */ + $body = preg_replace('/&(\{.*?\};)/si', '&\\1', $body); + + while (($curtag = $this->tln_getnxtag($body, $curpos)) != false) { + list($tagname, $attary, $tagtype, $lt, $gt) = $curtag; + $free_content = substr($body, $curpos, $lt - $curpos); + + /** + * Take care of diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/bar-chart.vue b/packages/Webkul/UI/src/Resources/assets/js/components/bar-chart.vue new file mode 100644 index 0000000..ca6bf78 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/bar-chart.vue @@ -0,0 +1,92 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/color-picker.vue b/packages/Webkul/UI/src/Resources/assets/js/components/color-picker.vue new file mode 100644 index 0000000..30179e0 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/color-picker.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/datetime.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/datetime.vue new file mode 100644 index 0000000..836e8bc --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/datetime.vue @@ -0,0 +1,38 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/filters.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/filters.vue new file mode 100644 index 0000000..e2ce0fb --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/filters.vue @@ -0,0 +1,897 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/pagination.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/pagination.vue new file mode 100644 index 0000000..5503d15 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/pagination.vue @@ -0,0 +1,93 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/side-filter.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/side-filter.vue new file mode 100644 index 0000000..11490b8 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/side-filter.vue @@ -0,0 +1,324 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-body.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-body.vue new file mode 100644 index 0000000..27ba8c6 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-body.vue @@ -0,0 +1,215 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-head.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-head.vue new file mode 100644 index 0000000..77fb7d3 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table-head.vue @@ -0,0 +1,110 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table.vue new file mode 100644 index 0000000..81993bc --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datagrid/table.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/date-range-basic.vue b/packages/Webkul/UI/src/Resources/assets/js/components/date-range-basic.vue new file mode 100644 index 0000000..094dbfb --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/date-range-basic.vue @@ -0,0 +1,83 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/date-range.vue b/packages/Webkul/UI/src/Resources/assets/js/components/date-range.vue new file mode 100644 index 0000000..dbd9c6d --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/date-range.vue @@ -0,0 +1,144 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/date.vue b/packages/Webkul/UI/src/Resources/assets/js/components/date.vue new file mode 100644 index 0000000..49848ac --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/date.vue @@ -0,0 +1,62 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/datetime.vue b/packages/Webkul/UI/src/Resources/assets/js/components/datetime.vue new file mode 100644 index 0000000..4b6d3e4 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/datetime.vue @@ -0,0 +1,45 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/flash-wrapper.vue b/packages/Webkul/UI/src/Resources/assets/js/components/flash-wrapper.vue new file mode 100644 index 0000000..3cf3f51 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/flash-wrapper.vue @@ -0,0 +1,40 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/flash.vue b/packages/Webkul/UI/src/Resources/assets/js/components/flash.vue new file mode 100644 index 0000000..f193a44 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/flash.vue @@ -0,0 +1,38 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/image/image-item.vue b/packages/Webkul/UI/src/Resources/assets/js/components/image/image-item.vue new file mode 100644 index 0000000..e72252a --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/image/image-item.vue @@ -0,0 +1,83 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/image/image-upload.vue b/packages/Webkul/UI/src/Resources/assets/js/components/image/image-upload.vue new file mode 100644 index 0000000..ef7d028 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/image/image-upload.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/image/image-wrapper.vue b/packages/Webkul/UI/src/Resources/assets/js/components/image/image-wrapper.vue new file mode 100644 index 0000000..05986a7 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/image/image-wrapper.vue @@ -0,0 +1,125 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/line-chart.vue b/packages/Webkul/UI/src/Resources/assets/js/components/line-chart.vue new file mode 100644 index 0000000..48949dd --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/line-chart.vue @@ -0,0 +1,93 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/modal.vue b/packages/Webkul/UI/src/Resources/assets/js/components/modal.vue new file mode 100644 index 0000000..35f2775 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/modal.vue @@ -0,0 +1,59 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/overlay-loader.vue b/packages/Webkul/UI/src/Resources/assets/js/components/overlay-loader.vue new file mode 100644 index 0000000..f951fb2 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/overlay-loader.vue @@ -0,0 +1,31 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/spinner-meter.vue b/packages/Webkul/UI/src/Resources/assets/js/components/spinner-meter.vue new file mode 100644 index 0000000..55c34e6 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/spinner-meter.vue @@ -0,0 +1,23 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tabs/tab.vue b/packages/Webkul/UI/src/Resources/assets/js/components/tabs/tab.vue new file mode 100644 index 0000000..4096099 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tabs/tab.vue @@ -0,0 +1,53 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tabs/tabs.vue b/packages/Webkul/UI/src/Resources/assets/js/components/tabs/tabs.vue new file mode 100644 index 0000000..1c19b8f --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tabs/tabs.vue @@ -0,0 +1,105 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/time.vue b/packages/Webkul/UI/src/Resources/assets/js/components/time.vue new file mode 100644 index 0000000..e5915e7 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/time.vue @@ -0,0 +1,39 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/trans.js b/packages/Webkul/UI/src/Resources/assets/js/components/trans.js new file mode 100644 index 0000000..56fc2ce --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/trans.js @@ -0,0 +1,24 @@ +module.exports = { + methods: { + /** + * Translate the given key. + */ + __(key, params) { + let splitedKey = key.split('.'); + let translation = window._translations; + + splitedKey.forEach(key => { + translation = translation[key]; + }); + + if (params) { + Object.keys(params).forEach(key => { + let value = params[key]; + translation = translation.replace(`:${key}`, value); + }); + } + + return translation + } + }, +} \ No newline at end of file diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/index.js b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/index.js new file mode 100644 index 0000000..683464c --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/index.js @@ -0,0 +1 @@ +export {default as Treeview} from './tree-view'; diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-checkbox.vue b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-checkbox.vue new file mode 100644 index 0000000..9d2d8ed --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-checkbox.vue @@ -0,0 +1,92 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-item.vue b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-item.vue new file mode 100644 index 0000000..2a866ac --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-item.vue @@ -0,0 +1,257 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-radio.vue b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-radio.vue new file mode 100644 index 0000000..b8aa54f --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-radio.vue @@ -0,0 +1,25 @@ + + + diff --git a/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-view.vue b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-view.vue new file mode 100644 index 0000000..385960f --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/components/tree-view/tree-view.vue @@ -0,0 +1,128 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/debounce.js b/packages/Webkul/UI/src/Resources/assets/js/debounce.js new file mode 100644 index 0000000..17a495c --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/debounce.js @@ -0,0 +1,13 @@ +module.exports = function debounce(fn, delay) { + var timeoutID = null + + return function () { + clearTimeout(timeoutID) + var args = arguments; + var that = this; + + timeoutID = setTimeout(function () { + fn.apply(that, args) + }, delay) + } +} diff --git a/packages/Webkul/UI/src/Resources/assets/js/directives/alert.vue b/packages/Webkul/UI/src/Resources/assets/js/directives/alert.vue new file mode 100644 index 0000000..a645e76 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/directives/alert.vue @@ -0,0 +1,18 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/directives/code.vue b/packages/Webkul/UI/src/Resources/assets/js/directives/code.vue new file mode 100644 index 0000000..9be8fac --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/directives/code.vue @@ -0,0 +1,16 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/directives/debounce.vue b/packages/Webkul/UI/src/Resources/assets/js/directives/debounce.vue new file mode 100644 index 0000000..ec71bb3 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/directives/debounce.vue @@ -0,0 +1,13 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/directives/slugify-target.vue b/packages/Webkul/UI/src/Resources/assets/js/directives/slugify-target.vue new file mode 100644 index 0000000..ccdf410 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/directives/slugify-target.vue @@ -0,0 +1,26 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/directives/slugify.vue b/packages/Webkul/UI/src/Resources/assets/js/directives/slugify.vue new file mode 100644 index 0000000..750a5cf --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/directives/slugify.vue @@ -0,0 +1,23 @@ + diff --git a/packages/Webkul/UI/src/Resources/assets/js/dropdown.js b/packages/Webkul/UI/src/Resources/assets/js/dropdown.js new file mode 100644 index 0000000..5ba43ed --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/dropdown.js @@ -0,0 +1,93 @@ +$(function () { + $(document).click(function (e) { + var target = e.target; + + if (!$(target).parents('.dropdown-open').length || $(target).is('li') || $(target).is('a')) { + $('.dropdown-list').hide(); + $('.dropdown-toggle').removeClass('active'); + } + }); + + $('body').delegate('.dropdown-toggle', 'click', function (e) { + toggleDropdown(e); + }); + + function toggleDropdown(e) { + var currentElement = $(e.currentTarget); + + $('.dropdown-list').hide(); + + if (currentElement.hasClass('active')) { + currentElement.removeClass('active'); + } else { + currentElement.addClass('active'); + currentElement.parent().find('.dropdown-list').fadeIn(100); + currentElement.parent().addClass('dropdown-open'); + autoDropupDropdown(); + } + } + + $('.dropdown-list .search-box .control').on('input', function () { + var currentElement = $(this); + + currentElement.parents(".dropdown-list").find('li').each(function () { + var text = $(this).text().trim().toLowerCase(); + var value = $(this).attr('data-id'); + + if (value) { + var isTextContained = text.search(currentElement.val().toLowerCase()); + var isValueContained = value.search(currentElement.val()); + + if (isTextContained < 0 && isValueContained < 0) { + $(this).hide(); + } else { + $(this).show(); + flag = 1; + } + } else { + var isTextContained = text.search(currentElement.val().toLowerCase()); + + if (isTextContained < 0) { + $(this).hide(); + } else { + $(this).show(); + } + } + }); + }); + + function autoDropupDropdown() { + dropdown = $(".dropdown-open"); + + if (!dropdown.find('.dropdown-list').hasClass('top-left') && !dropdown.find('.dropdown-list').hasClass('top-right') && dropdown.length) { + dropdown = dropdown.find('.dropdown-list'); + height = dropdown.height() + 50; + var topOffset = dropdown.offset().top - 70; + var bottomOffset = $(window).height() - topOffset - dropdown.height(); + + if (bottomOffset > topOffset || height < bottomOffset) { + dropdown.removeClass("bottom"); + + if (dropdown.hasClass('top-right')) { + dropdown.removeClass('top-right') + dropdown.addClass('bottom-right') + } else if (dropdown.hasClass('top-left')) { + dropdown.removeClass('top-left') + dropdown.addClass('bottom-left') + } + } else { + if (dropdown.hasClass('bottom-right')) { + dropdown.removeClass('bottom-right') + dropdown.addClass('top-right') + } else if (dropdown.hasClass('bottom-left')) { + dropdown.removeClass('bottom-left') + dropdown.addClass('top-left') + } + } + } + } + + $('div').scroll(function () { + autoDropupDropdown() + }); +}); diff --git a/packages/Webkul/UI/src/Resources/assets/js/store/actions.js b/packages/Webkul/UI/src/Resources/assets/js/store/actions.js new file mode 100644 index 0000000..823a09c --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/store/actions.js @@ -0,0 +1,29 @@ +const toggleSidebarFilter = ({state}) => { + state.sidebarFilter = !state.sidebarFilter; + + $('.sidebar-filter').toggleClass('show'); +}; + +const updateFilterValues = ({commit}, payload) => { + commit('UPDATE_FILTER_VALUES', payload); +}; + +const selectAllRows = ({commit}, payload) => { + commit('SELECT_ALL_ROWS', payload); +}; + +const selectTableRow = ({commit}, payload) => { + commit('SELECT_TABLE_ROW', payload); +}; + +const updateTableData = ({state}, payload) => { + state.tableData = payload; +}; + +export default { + toggleSidebarFilter, + updateFilterValues, + selectAllRows, + selectTableRow, + updateTableData +}; diff --git a/packages/Webkul/UI/src/Resources/assets/js/store/index.js b/packages/Webkul/UI/src/Resources/assets/js/store/index.js new file mode 100644 index 0000000..6d30405 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/store/index.js @@ -0,0 +1,12 @@ +import Vuex from "vuex"; +import state from './state'; +import actions from './actions'; +import mutations from './mutations'; + +const store = new Vuex.Store({ + state, + actions, + mutations +}); + +export default store; \ No newline at end of file diff --git a/packages/Webkul/UI/src/Resources/assets/js/store/mutations.js b/packages/Webkul/UI/src/Resources/assets/js/store/mutations.js new file mode 100644 index 0000000..293c3b1 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/store/mutations.js @@ -0,0 +1,58 @@ +const UPDATE_FILTER_VALUES = (state, payload) => { + var key = payload?.key || null; + + if (key) { + for (const filterKey in state.tableData.columns) { + if (filterKey == key) { + key = state.tableData.columns[filterKey].index; + state.tableData.columns[filterKey].values = payload.values; + } + } + } + + EventBus.$emit('updateFilter', { + key, + value: payload?.values?.toString(), + cond: payload?.condition || 'in', + }); +}; + +const SELECT_ALL_ROWS = (state, payload) => { + if (!(payload && state.selectedTableRows.length > 0)) { + state.selectedTableRows = []; + + state.allSelected = payload || !state.allSelected; + + state.tableData.records.data.forEach(row => { + if (state.allSelected) { + state.selectedTableRows.push(row.id); + } + }); + } else { + state.selectedTableRows = []; + state.allSelected = false; + } +}; + +const SELECT_TABLE_ROW = (state, payload) => { + var isExisting = false; + + state.selectedTableRows.forEach((rowId, index) => { + if (rowId == payload) { + isExisting = true; + state.selectedTableRows.splice(index, 1); + } + }); + + if (!isExisting) { + state.selectedTableRows.push(payload); + } + + state.allSelected = (state.tableData.records.data.length == state.selectedTableRows.length); +}; + +export default { + UPDATE_FILTER_VALUES, + SELECT_ALL_ROWS, + SELECT_TABLE_ROW, +}; diff --git a/packages/Webkul/UI/src/Resources/assets/js/store/state.js b/packages/Webkul/UI/src/Resources/assets/js/store/state.js new file mode 100644 index 0000000..c712b7d --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/js/store/state.js @@ -0,0 +1,59 @@ +var state = { + filters: {}, + tableData: { + records: { + data: {} + }, + + columns: [], + + actions: [], + + tabFilters: [], + + massactions: [], + + paginationData: { + has_pages: false + } + }, + allSelected: false, + sidebarFilter: false, + selectedTableRows: [], + filterData: { + deal_amount_range: { + label: 'Deal Amount Range', + type: 'integer_range', + values: ['1000', '50000'], + }, + contact_person: { + label: 'Contact Person', + type: 'add', + placeholder: 'Add Person', + input_field_placeholder: 'Enter Person', + values: ['Shubham', 'Webkul'], + }, + date_range: { + label: 'Date Range', + type: 'date_range', + values: ['2021-04-02', '2021-04-03'], + }, + status: { + label: 'Status', + type: 'dropdown', + placeholder: 'Select Status', + values: ['Won', 'Lost'], + options: ['Won', 'Lost'] + }, + phone_number: { + label: 'Phone', + type: 'add', + placeholder: 'Add Number', + input_field_placeholder: 'Enter Number', + values: ['987654321', '987654321'], + }, + }, + customTabFilter: false, +}; + +export default state; \ No newline at end of file diff --git a/packages/Webkul/UI/src/Resources/assets/sass/_mixins.scss b/packages/Webkul/UI/src/Resources/assets/sass/_mixins.scss new file mode 100644 index 0000000..486e083 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/_mixins.scss @@ -0,0 +1,26 @@ +// Mixins +@mixin box-shadow($shadows...) { + -webkit-box-shadow: $shadows; + -moz-box-shadow: $shadows; + box-shadow: $shadows; +} + +@mixin border-radius($radius) { + -webkit-border-radius: $radius; + -moz-border-radius: $radius; + -ms-border-radius: $radius; + border-radius: $radius; +} + +@mixin user-select($value) { + -webkit-user-select: $value; /* Chrome all / Safari all */ + -moz-user-select: $value; /* Firefox all */ + -ms-user-select: $value; /* IE 10+ */ + user-select: $value; /* Likely future */ +} + +@mixin display-grid($colums) { + display: grid; + align-items: center; + grid-template-columns: $colums; +} diff --git a/packages/Webkul/UI/src/Resources/assets/sass/_variables.scss b/packages/Webkul/UI/src/Resources/assets/sass/_variables.scss new file mode 100644 index 0000000..60caeff --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/_variables.scss @@ -0,0 +1,30 @@ +// Typography +$font-color: #263238; +$secondary-font-color: #546E7A; +$font-family: 'Roboto'; +$font-size-xxl: 24px; +$font-size-xl: 20px; +$font-size-lg: 18px; +$font-size-md: 16px; +$font-size-sm: 14px; +$font-weight-regular: 400; +$font-weight-medium: 500; +$font-weight-large: 600; + +// Colors +$dark-color: #263238; +$primary-color: #0E90D9; +$secondary-color: #546E7A; +$info-color: #204d74; +$danger-color: #FF4D50; +$success-color: #53C41A; +$warning-color: #FBAD15; +$white: #FFFFFF; +$black: #000000; +$gray-color: #C1C2C3; // Can be modified +$link-color: #0E90D9; +$table-active-cell-color: #D4EDFB; +$border-color: #C1C2C3; +$control-border-color: #C7C7C7; +$brand-color: #0041FF; +$light-background-color: #F7F8F9; diff --git a/packages/Webkul/UI/src/Resources/assets/sass/animations.scss b/packages/Webkul/UI/src/Resources/assets/sass/animations.scss new file mode 100644 index 0000000..5921474 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/animations.scss @@ -0,0 +1,49 @@ +@keyframes jelly { + 0% { + transform: translateY(0px) scale(0.7); + opacity: 0; + } + 70% { + transform: translateY(5px) scale(1.05); + opacity: 1; + } + 100% { + transform: translateY(0px) scale(1); + opacity: 1; + } +} + +@keyframes jelly-out { + 0% { + transform: translateY(0px) scale(1); + opacity: 1; + } + 30% { + transform: translateY(-5px) scale(1.05); + opacity: 1; + } + 100% { + transform: translateY(0px) scale(0.7); + opacity: 0; + } +} + +@keyframes spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} + +/* Meter Spinner Animation */ +@keyframes meter-animate-before { + 0% { + transform: rotate(-45deg); + } + + 100% { + transform: rotate(315deg); + } +} diff --git a/packages/Webkul/UI/src/Resources/assets/sass/app.scss b/packages/Webkul/UI/src/Resources/assets/sass/app.scss new file mode 100644 index 0000000..b1da437 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/app.scss @@ -0,0 +1,2085 @@ +@import "fonts"; +@import "icons"; +@import "variables"; +@import "mixins"; +@import "animations"; +@import "rtl"; + +* { + box-sizing: border-box; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +*:focus { + outline: none; +} + +body { + color: $font-color; + font-family: $font-family; + font-size: $font-size-lg; + font-weight: $font-weight-regular; + letter-spacing: -0.26px; + line-height: 22px; + background: $white; +} + +a { + color: $link-color; + + &:link, + &:hover, + &:visited, + &:focus, + &:active { + // padding: 6px 0px; + text-decoration: none; + color: $primary-color; + } +} + +::selection { + background-color: $primary-color; + color: $white; +} + +::-webkit-input-placeholder { + color: $secondary-font-color; + opacity: 0.5; +} + +:-ms-input-placeholder { + color: $secondary-font-color; + opacity: 0.5; +} + +::placeholder { + color: $secondary-font-color; + opacity: 0.5; +} + +textarea { + resize: none; +} + +ul { + margin: 0; + padding: 0; + list-style: none; +} + +h1 { + font-size: $font-size-xxl; + font-weight: $font-weight-medium; + color: $font-color; + margin-top: 0; +} + +h2 { + font-size: $font-size-xl; + font-weight: $font-weight-medium; + color: $font-color; +} + +h3 { + font-size: $font-size-lg; + font-weight: $font-weight-medium; + color: $font-color; +} + +h4 { + font-size: $font-size-md; + font-weight: $font-weight-medium; + color: $font-color; +} + +h5 { + font-size: $font-size-sm; + font-weight: $font-weight-medium; + color: $font-color; +} + +.hide { + display: none !important; +} + +.btn { + @include border-radius(4px); + border: none; + color: $white; + cursor: pointer; + transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); + font: inherit; + font-weight: $font-weight-medium; + display: inline-block; + border: 2px solid transparent; + padding: 10px 14px; + + &:hover, + &:active, + &:focus { + opacity: 0.75; + } + + &.btn-sm { + height: 40px; + padding: 7px 12px; + font-size: $font-size-sm; + } + + &.btn-md { + padding: 10px 14px; + } + + &.btn-lg { + padding: 12px 18px; + font-size: $font-size-xxl; + } + + &.btn-xl { + padding: 14px 22px; + font-size: $font-size-xxl; + } + + &.btn-primary { + background: $primary-color; + color: $white; + } + + &.btn-primary-outline { + background: $white; + color: $primary-color; + border: 2px solid $primary-color; + } + + &.btn-secondary { + background: $secondary-color; + color: $white; + } + + &.btn-secondary-outline { + background: $white; + color: $secondary-color; + border: 2px solid $secondary-color; + } + + &.btn-danger { + background: $danger-color; + color: $white; + } + + &.btn-danger-outline { + background: $white; + color: $danger-color; + border: 2px solid $danger-color; + } + + &.btn-success { + background: $success-color; + color: $white; + } + + &.btn-success-outline { + background: $white; + color: $success-color; + border: 2px solid $success-color; + } + + &.btn-warning { + background: $warning-color; + color: $white; + } + + &.btn-warning-outline { + background: $white; + color: $warning-color; + border: 2px solid $warning-color; + } + + &.btn-white { + background: $white; + color: $primary-color; + + &.text-black { + color: $black; + } + } + + &.btn-white-outline { + background: $white; + color: $primary-color; + border: 2px solid $primary-color; + } + + &:disabled, + &[disabled="disabled"], + &[disabled="disabled"]:hover, + &[disabled="disabled"]:active { + cursor: not-allowed; + background: #b1b1ae; + box-shadow: none; + opacity: 1; + } +} + +.dropdown-list { + width: 215px; + margin-bottom: 20px; + border: 1px solid #f0f0f0; + box-shadow: 0 2px 5px 0 rgba(39, 49, 58, 0.15); + background-color: $white; + position: absolute; + display: none; + z-index: 10; + text-align: left; + + &.bottom-left { + top: 42px; + left: 0px; + } + + &.bottom-right { + top: 42px; + right: 0px; + } + + &.top-left { + bottom: 0px; + left: 42px; + } + + &.top-right { + bottom: 0px; + right: 42px; + } + + .dropdown-container { + overflow-y: auto; + + ul { + margin: 0px; + list-style-type: none; + padding: 0px; + + li { + padding: 8px 12px; + font-size: $font-size-md; + cursor: pointer; + color: $secondary-font-color; + + a { + &:link, + &:active, + &:visited, + &:focus { + color: $secondary-font-color; + display: block; + } + } + + &:hover { + background-color: $primary-color; + color: $white; + + a { + color: $white; + } + } + } + } + } +} + +.table { + width: 100%; + overflow-x: auto !important; + + .table-header { + margin-bottom: 20px; + @include display-grid(repeat(2, auto)); + + h1 { + margin-bottom: 0; + display: inline-block; + } + + .table-action { + // display: block; + text-align: right; + + .export-import { + margin-right: 20px; + cursor: pointer; + + .icon { + width: 24px; + height: 24px; + margin-bottom: 2px; + vertical-align: middle; + } + + span { + color: $secondary-font-color; + } + } + + button { + max-height: 40px; + padding: 8px 14px; + max-height: 40px; + } + } + } + + .table-body { + .custom-design-container { + right: 25px; + width: 350px; + padding: 10px; + margin-top: 8px; + position: absolute; + background-color: $white; + border: 1px solid $border-color; + + .form-group { + margin: 20px 0; + grid-gap: 5px; + text-align: center; + @include display-grid(150px auto 150px); + + &.date { + .date-container { + display: inline-block; + + .control { + margin: 0; + height: 40px; + } + + &::after { + top: calc(50% - 2px); + } + } + } + } + + i.close-icon { + float: right; + cursor: pointer; + } + } + + .checkbox { + margin: 0; + text-overflow: unset; + } + + .empty-table { + div { + position: absolute; + top: calc(50% - 50px); + left: calc(50% - 75px); + + img { + width: 150px; + } + + span { + display: block; + margin-top: 20px; + } + } + } + } + + table { + @include border-radius(4px); + + width: 100%; + border: none; + text-align: left; + margin-top: 20px; + background: $white; + table-layout: fixed; + font-size: $font-size-md; + border-collapse: collapse; + + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, + rgba(0, 0, 0, 0.06) 0px 2px 4px -1px; + + th, + td { + width: 100%; + padding: 10px; + vertical-align: top; + text-overflow: ellipsis; + color: $secondary-font-color; + border-right: 1px solid $border-color; + border-bottom: 1px solid $border-color; + } + + thead { + th { + border-right: 0px; + color: $dark-color; + cursor: not-allowed; + text-transform: capitalize; + font-weight: $font-weight-medium; + border-bottom: 1px solid rgba(193, 194, 195, 0.5); + + &.master-checkbox { + width: 41px; + text-overflow: unset; + } + + &.id { + width: 80px; + } + + &.actions { + width: 100px; + text-align: right; + + .action { + display: inline-flex; + } + + .icon { + cursor: pointer; + vertical-align: middle; + } + } + } + } + + tbody { + tr { + border-bottom: 1px solid rgba(193, 194, 195, 0.5); + + &.active { + background-color: $table-active-cell-color; + border-bottom: 1px solid rgba(14, 144, 217, 0.35); + } + + td { + border-right: 0px; + color: $dark-color; + border-bottom: none; + background-color: rgba(255, 255, 255, 0.5); + word-break: break-all; + + &.empty { + text-align: center; + } + + &.action-container { + a { + cursor: pointer; + } + } + + .bold { + font-weight: $font-weight-medium; + } + + &.action { + text-align: right; + + a { + cursor: pointer; + margin-right: 5px; + + &:last-child { + margin-right: 0; + } + } + } + + .spinner-container { + margin-top: 5px; + } + } + + &:last-child td { + border-bottom: 0; + } + + &.active, + &:hover { + td { + background-color: rgba(193, 194, 195, 0.1); + } + } + + &.no-records { + text-align: center; + } + } + } + } + + .form-group { + width: 100%; + margin-bottom: 0; + // min-width: 140px; + + .control { + width: 100%; + } + + &.datagrid-filters { + margin-bottom: 20px; + + input[type="search"].control { + margin: 0px; + width: 280px; + height: 40px; + font-size: 15px; + } + } + } + + .dropdown-container { + width: 100%; + padding: 0px; + position: relative; + margin-bottom: 0px; + + &.dropdown-list { + ul { + position: absolute; + padding: 15px; + margin-bottom: 20px; + background-color: $white; + width: 100%; + margin-top: 10px; + + li { + .form-group { + margin-bottom: 15px; + } + } + } + + .apply-filter { + padding: 10px; + width: 100%; + } + } + } + + .filtered-tags { + margin: 20px 0 0 0; + + .filter-tag { + grid-gap: 5px; + margin-right: 20px; + width: max-content; + text-transform: capitalize; + @include display-grid(repeat(2, auto)); + display: inline-grid; + + .wrapper { + font-size: 14px; + grid-gap: 10px; + color: #000311; + line-height: 40px; + padding: 0px 10px; + background: #e7e7e7; + @include border-radius(2px); + @include display-grid(auto 20px); + display: inline-grid; + + .icon.close-icon { + top: -2px; + cursor: pointer; + position: relative; + } + } + } + } + + .search-filter { + margin-right: 6px; + position: relative; + width: max-content; + display: inline-block; + + .input-search-icon { + left: 7px; + top: 10px; + z-index: 1; + position: absolute; + + ~ input[type="search"] { + padding-left: 30px; + } + } + + .control { + margin: 0; + width: 280px; + height: 40px; + font-size: 15px; + padding-left: 10px; + -webkit-appearance: none; + color: $secondary-font-color; + border: 1px solid $border-color; + } + + .contorl:focus { + border-color: $brand-color; + } + + .icon-wrapper { + width: 36px; + height: 36px; + padding: 3px; + float: right; + border-radius: 3px; + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border: 2px solid $control-border-color; + } + } + + .datagrid-filters { + width: 100%; + @include display-grid(repeat(2, auto)); + + .filter-right { + text-align: right; + + .pagination { + height: 40px; + margin-right: 6px; + display: inline-block; + + .page-item { + .icon { + top: 10px; + vertical-align: top; + } + } + } + + .filter-btn { + cursor: pointer; + display: inline-block; + + .grid-dropdown-header { + width: 105px; + height: 40px; + border-radius: 3px; + align-items: center; + display: inline-flex; + vertical-align: middle; + padding: 0px 7px 0px 10px; + background-color: $white; + color: $secondary-font-color; + justify-content: space-between; + font-weight: $font-weight-medium; + border: 1px solid $secondary-font-color; + + .arrow-icon-down { + float: right; + } + } + } + } + + .dropdown-filters { + margin-right: 6px; + display: inline-block; + + &.per-page { + .form-group { + grid-gap: 10px; + @include display-grid(repeat(2, auto)); + + .control { + margin: 0; + height: 40px; + border: 1px solid $gray-color; + } + } + } + } + + .form-group { + font-size: 16px; + + .control { + font-size: 16px; + } + } + } + + .tabs-container { + margin: 20px 0; + @include display-grid(repeat(2, auto)); + + .tabs-right-container { + text-align: right; + + section { + display: inline-block; + } + + .covered { + border: 1px solid; + padding: 7px ​10px; + } + + .group { + vertical-align: top; + } + } + } + + .mass-actions { + width: max-content; + display: inline-block; + + .control { + margin: 0; + height: 40px; + width: 140px; + font-size: 16px; + padding: 9px 10px; + } + + button { + height: 40px; + vertical-align: middle; + } + } +} + +.pagination { + margin-top: 20px; + + .page-item { + height: 100%; + margin-right: 5px; + background: $white; + text-decoration: none; + display: inline-block; + vertical-align: middle; + padding: 0 9px 0 9px; + font-size: $font-size-md; + border: 1px solid $border-color; + + &.previous { + border-radius: 3px 0 0 3px; + } + + &.next { + border-radius: 0 3px 3px 0; + } + + &.disabled { + cursor: not-allowed !important; + } + + &.active { + color: $white; + background: $brand-color; + border-color: $brand-color; + } + + .icon { + top: 4px; + position: relative; + vertical-align: middle; + } + } + + &.tab-view { + height: 34px; + margin-top: 0; + + .previous { + float: left; + border-right: 0; + } + + .previous, + .next { + margin: 0; + cursor: pointer; + } + } + + &.full-view { + margin-top: 120px; + } + + i, + a { + font-weight: 700; + font-size: 16px !important; + } +} + +.form-group, +.field-container { + display: block; + margin-bottom: 20px; + font-size: $font-size-lg; + color: $secondary-font-color; + width: 100%; + position: relative; + + label { + display: block; + font-size: $font-size-md; + + &.required::after { + content: "*"; + font-weight: 700; + padding-left: 4px; + color: $danger-color; + display: inline-block; + } + } + + textarea.control { + height: 100px; + padding: 10px; + } + + .control { + width: 100%; + padding: 10px; + margin-top: 10px; + margin-bottom: 5px; + background: $white; + display: inline-block; + vertical-align: middle; + font-size: $font-size-lg; + @include border-radius(3px); + color: $secondary-font-color; + border: 1px solid $border-color; + transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1); + + &:focus { + border-color: $primary-color; + } + + &[disabled="disabled"] { + border-color: $gray-color; + background-color: $gray-color; + cursor: not-allowed; + } + + &[multiple] { + height: 100px; + } + } + + .control-faker { + padding: 10px; + margin-top: 10px; + margin-bottom: 5px; + @include border-radius(3px); + border: 1px solid $border-color; + word-break: break-all; + } + + &.date, + &.datetime, + &.time { + .control { + padding-right: 40px; + } + + .date-container, + .datetime-container, + .time-container { + position: relative; + + &::after { + background-image: url("../images/calendar-icon.svg"); + width: 24px; + height: 24px; + content: ""; + margin-left: -34px; + pointer-events: none; + position: absolute; + right: 10px; + top: 29px; + margin-top: -9px; + } + } + + .time-container { + &::after { + background-image: url("../images/time-icon.svg"); + } + } + } + + .control-info { + display: block; + font-size: $font-size-md; + color: #adadad; + font-style: italic; + } + + .control-error { + display: none; + color: $danger-color; + margin-top: 5px; + } + + &.has-error { + .control:not([aria-invalid="false"]) { + border-color: $danger-color; + } + + .control-error { + width: 100%; + display: block; + } + + &.hide-error { + input { + border: 1px solid $gray-color !important; + } + + .control-error { + display: none !important; + } + } + } + + .address-left { + width: 50%; + padding-right: 5px; + float: left; + + .control { + height: 204px; + margin-bottom: 0; + } + } + + .address-right { + width: 50%; + padding-left: 5px; + display: inline-block; + + .control { + margin-bottom: 0; + } + } + + &.input-group { + margin-bottom: 0; + } + + .input-group { + position: relative; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-align: stretch; + -ms-flex-align: stretch; + align-items: stretch; + width: 100%; + + .input-group-append, + .input-group-prepend { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + } + + > .control, + > .date-container, + > .datetime-container { + position: relative; + -webkit-box-flex: 1; + -ms-flex: 1 1 auto; + flex: 1 1 auto; + width: 1% !important; + + &:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + &:not(:last-child) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } + + > .date-container, + > .datetime-container { + &:not(:first-child) { + margin-left: 10px; + } + + &:not(:last-child) { + margin-right: 10px; + } + } + + .input-group-prepend { + margin-right: -1px; + + .control, + .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + } + } + + .input-group-append { + margin-left: -1px; + + .control, + .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + } + + .trash-icon { + margin-top: 21px; + margin-left: 7px; + cursor: pointer; + } + } + + .loader-active-icon { + position: absolute; + right: 4px; + top: 14px; + } +} + +.checkbox { + position: relative; + display: inline-block; + margin: 10px 5px 5px 0px; + + .checkbox-view, + .checkbox-dash { + margin: 0; + width: 24px; + height: 24px; + margin-right: 5px; + vertical-align: middle; + display: inline-block !important; + background-image: url("../images/checkbox-icon.svg"); + } + + .checkbox-dash { + background-image: url("../images/checkbox-dash-icon.svg"); + } + + input { + position: absolute; + width: 24px; + height: 24px; + opacity: 0; + z-index: 100; + + &:checked + .checkbox-view { + background-image: url("../images/checkbox-checked-icon.svg"); + } + + &:disabled + .checkbox-view { + opacity: 0.5; + cursor: not-allowed; + } + } +} + +.radio { + position: relative; + display: block; + margin: 10px 5px 5px 0px; + + .radio-view { + background-image: url("../images/radio-icon.svg"); + height: 24px; + width: 24px; + margin: 0; + display: inline-block !important; + vertical-align: middle; + margin-right: 5px; + } + + input { + position: absolute; + top: 0; + left: 0; + opacity: 0; + z-index: 100; + + &:checked + .radio-view { + background-image: url("../images/radio-checked-icon.svg"); + } + + &:disabled + .radio-view { + opacity: 0.5; + cursor: not-allowed; + } + } +} + +.form-group { + .switch { + position: relative; + display: inline-block; + width: 60px; + height: 34px; + margin-top: 10px; + margin-bottom: 5px; + + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: $gray-color; + -webkit-transition: 0.2s; + transition: 0.2s; + + &:before { + position: absolute; + content: ""; + height: 26px; + width: 26px; + left: 4px; + bottom: 4px; + background-color: $white; + -webkit-transition: 0.2s; + transition: 0.2s; + } + + &.round { + border-radius: 34px; + } + + &.round:before { + border-radius: 50%; + } + } + + input { + opacity: 0; + width: 0; + height: 0; + + &:checked + .slider { + background-color: $primary-color; + } + + &:focus + .slider { + box-shadow: 0 0 1px $primary-color; + } + + &:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); + } + } + } +} + +.alert-wrapper { + width: 100%; + bottom: 10px; + right: 10px; + position: fixed; + z-index: 100; + + .alert { + width: 648px; + position: relative; + left: 50%; + margin-bottom: 10px; + margin-left: -324px; + padding: 15px 44px 15px 44px; + @include border-radius(3px); + display: block; + @include box-shadow( + 0px 4px 15.36px 0.64px rgba(0, 0, 0, 0.1), + 0px 2px 6px 0px rgba(0, 0, 0, 0.12) + ); + animation: jelly 0.5s ease-in-out; + transform-origin: center top; + z-index: $font-weight-medium; + text-align: left; + + &.error { + background: $danger-color; + } + + &.info { + background: $info-color; + } + + &.success { + background: $success-color; + } + + &.warning { + background: $warning-color; + } + + .icon { + position: absolute; + + &:first-child { + left: 10px; + top: 15px; + } + + &:last-child { + right: 10px; + top: 10px; + cursor: pointer; + } + } + + p { + color: $white; + margin: 0px; + font-size: $font-size-md; + } + } +} + +.tabs { + ul { + li { + display: inline-block; + + a { + color: $secondary-font-color; + font-weight: $font-weight-medium; + cursor: pointer; + padding: 10px 30px; + text-align: center; + display: block; + @include user-select(none); + } + + &.has-error { + a { + color: $danger-color; + } + } + + &.active a { + color: $primary-color; + box-shadow: inset 0px -2px 0px $primary-color; + } + } + } +} + +.tabs-content { + border: none; + padding: 30px; + background: $white; + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, + rgba(0, 0, 0, 0.06) 0px 2px 4px -1px; +} + +.pill { + height: 34px; + display: inline-block; + + .tabs { + ul { + li { + font-size: $font-size-md; + + &:first-child { + a { + padding-left: 0px; + } + } + + a { + padding: 6px 15px; + } + + &.active { + a { + color: $white; + padding: 5px 15px; + border-radius: 22px; + background: $primary-color; + } + } + } + } + } +} + +.group { + height: 34px; + display: inline-block; + + .tabs { + ul { + li { + font-size: $font-size-md; + border: 1px solid $border-color; + + &:not(:last-child) { + border-right: 0px; + } + + &.active { + background: $primary-color; + border-radius: 0 !important; + + a { + color: $white; + } + } + + a { + padding: 5px 10px; + } + } + } + } +} + +accordian, +.accordian { + display: inline-block; + width: 100%; + + .accordian-header, + div[slot*="header"] { + width: 100%; + padding: 15px 30px; + margin-top: -1px; + display: inline-block; + color: $secondary-font-color; + font-size: $font-size-lg; + font-weight: $font-weight-medium; + border-bottom: solid 1px $border-color; + cursor: pointer; + @include user-select(none); + + h1 { + margin: 0; + font-weight: $font-weight-medium; + display: inline-block; + } + + .icon { + float: right; + + &.left { + float: left; + } + } + } + + &.has-error { + .accordian-header { + color: $danger-color; + } + } + + .accordian-content, + div[slot*="body"] { + width: 100%; + padding: 30px; + border: 1px solid #d3d3d3; + border-top: 0; + display: none; + } + + &.active > .accordian-content { + display: inline-block; + } +} + +.panel { + .panel-header { + padding: 16px 0; + font-size: 18px; + color: $dark-color; + color: $secondary-font-color; + font-weight: $font-weight-medium; + } + + .panel-body { + border: none; + padding: 16px; + border-radius: 3px; + background-color: $white; + box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px -1px, + rgba(0, 0, 0, 0.06) 0px 2px 4px -1px; + } +} + +modal { + display: none; +} + +.modal-overlay { + display: none; + overflow-y: auto; + z-index: 10; + top: 0px; + right: 0px; + bottom: 0px; + left: 0px; + position: fixed; + background: $dark-color; + opacity: 0.5; +} + +.modal-container { + background: $white; + position: fixed; + top: 100px; + left: 50%; + margin-left: -300px; + width: 600px; + max-width: 80%; + max-height: 80%; + z-index: 11; + overflow-y: auto; + overflow-x: hidden; + animation: jelly 0.5s ease-in-out; + @include border-radius(8px); + + .modal-header { + z-index: 10; + width: inherit; + position: relative; + background: $white; + padding: 20px 20px 10px 20px; + @include display-grid(repeat(2, auto)); + border-bottom: 1px solid $border-color; + + h3 { + margin: 0; + display: table-cell; + vertical-align: middle; + font-weight: $font-weight-medium; + } + + h2 { + margin: 0; + display: inline-block; + } + + .header-actions { + text-align: right; + + .icon { + cursor: pointer; + } + } + } + + .modal-body { + // top: 75px; + padding: 30px; + position: relative; + + .tabs-content { + box-shadow: none; + } + } +} + +.modal-open { + overflow: hidden; + + .modal-overlay { + display: block; + } +} + +.badge { + @include border-radius(4px); + border: none; + color: $white; + font-size: $font-size-md; + display: inline-block; + border: 2px solid transparent; + + &.badge-pill { + padding: 2px 8px; + } + + &.badge-sm { + padding: 2px 8px; + } + + &.badge-md { + padding: 4px 10px; + } + + &.badge-lg { + padding: 6px 12px; + } + + &.badge-xl { + padding: 8px 14px; + } + + &.badge-pill { + @include border-radius(10rem); + } + + &.badge-primary { + background: $primary-color; + color: $white; + } + + &.badge-primary-outline { + background: $white; + color: $primary-color; + border: 2px solid $primary-color; + } + + &.badge-secondary { + background: $secondary-color; + color: $white; + } + + &.badge-secondary-outline { + background: $white; + color: $secondary-color; + border: 2px solid $secondary-color; + } + + &.badge-danger { + background: $danger-color; + color: $white; + } + + &.badge-danger-outline { + background: $white; + color: $danger-color; + border: 2px solid $danger-color; + } + + &.badge-success { + background: $success-color; + color: $white; + } + + &.badge-success-outline { + background: $white; + color: $success-color; + border: 2px solid $success-color; + } + + &.badge-warning { + background: $warning-color; + color: $white; + } + + &.badge-warning-outline { + background: $white; + color: $warning-color; + border: 2px solid $warning-color; + } + + &.badge-white { + background: $white; + color: $primary-color; + } + + &.badge-white-outline { + background: $white; + color: $primary-color; + border: 2px solid $primary-color; + } + + &.badge-round { + padding: 0; + width: 8px; + height: 8px; + margin-right: 5px; + } +} + +.overlay-loader { + position: fixed; + z-index: 11; + top: 50%; + left: 50%; + margin-top: -24px; + margin-left: -24px; +} + +.tooltip { + display: block !important; + z-index: 10000; + + &.hide { + display: none !important; + } + + .tooltip-inner { + background: $primary-color; + color: $white; + border-radius: 4px; + padding: 5px 10px 4px; + font-size: $font-size-md; + } + + .tooltip-arrow { + width: 0; + height: 0; + border-style: solid; + position: absolute; + margin: 5px; + border-color: $primary-color; + z-index: 1; + } + + &[x-placement^="top"] { + margin-bottom: 5px; + + .tooltip-arrow { + border-width: 5px 5px 0 5px; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + bottom: -5px; + left: calc(50% - 5px); + margin-top: 0; + margin-bottom: 0; + } + } + + &[x-placement^="bottom"] { + margin-top: 5px; + + .tooltip-arrow { + border-width: 0 5px 5px 5px; + border-left-color: transparent !important; + border-right-color: transparent !important; + border-top-color: transparent !important; + top: -5px; + left: calc(50% - 5px); + margin-top: 0; + margin-bottom: 0; + } + } + + &[x-placement^="right"] { + margin-left: 5px; + + .tooltip-arrow { + border-width: 5px 5px 5px 0; + border-left-color: transparent !important; + border-top-color: transparent !important; + border-bottom-color: transparent !important; + left: -5px; + top: calc(50% - 5px); + margin-left: 0; + margin-right: 0; + } + } + + &[x-placement^="left"] { + margin-right: 5px; + + .tooltip-arrow { + border-width: 5px 0 5px 5px; + border-top-color: transparent !important; + border-right-color: transparent !important; + border-bottom-color: transparent !important; + right: -5px; + top: calc(50% - 5px); + margin-left: 0; + margin-right: 0; + } + } +} + +.sidebar-filter { + top: 0; + z-index: 10; + width: 420px; + height: 100vh; + right: -420px; + position: fixed; + overflow-y: scroll; + display: inline-block; + background-color: $white; + padding: 30px 15px 30px 20px; + box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.18); + transition: 0.35s cubic-bezier(0.4, 0, 0.2, 1); + + &.show { + right: 0; + } + + header { + padding-bottom: 25px; + margin-bottom: 25px; + border-bottom: 1px solid $border-color; + + h1 { + padding: 0; + margin: 0; + font-weight: 400; + @include display-grid(repeat(2, auto)); + + .right { + text-align: right; + + label { + cursor: pointer; + margin-right: 20px; + color: $primary-color; + display: inline-block; + font-size: $font-size-lg; + } + + i.close-icon { + vertical-align: middle; + } + } + } + } + + .field-container { + margin-bottom: 10px; + padding-right: 25px; + position: relative; + + label { + font-weight: 500; + } + + .control { + font-size: 16px; + max-height: 40px; + + &.half { + width: 151px; + } + } + + .middle-text { + margin: 0 8px; + } + + .date-container { + display: inline-block; + } + + .enter-new { + width: 100%; + display: inline-block; + + input { + width: 100%; + } + } + + > i { + &.close-icon { + position: absolute; + top: 17px; + right: 0; + } + } + } + + .selected-options { + margin-top: 10px; + + .badge { + margin-bottom: 10px; + color: $secondary-font-color; + background-color: $light-background-color; + } + } + + .form-group { + margin-bottom: 20px; + } + + i { + &.close-icon, + &.add-icon { + cursor: pointer; + } + } +} + +.tree-wrapper { + .icon { + margin-right: 10px; + } + + .checkbox { + margin-top: 0px !important; + margin-bottom: 15px !important; + } + + .tree-item { + padding-left: 30px; + + &.active { + > .arrow-down-icon { + background-image: url("../images/arrow-down-icon.svg"); + } + } + + > .arrow-down-icon { + cursor: pointer; + background-image: url("../images/arrow-right-icon.svg"); + } + } + + .tree-container { + > .tree-item { + padding: 0; + } + + .tree-item { + > .tree-item { + display: none; + } + + &.active { + > .tree-item { + display: block; + } + } + } + } +} + +ol.breadcrumb { + list-style: none; + padding: 0; + font-size: $font-size-sm; + font-weight: $font-weight-regular; + margin-top: 0; + margin-bottom: 5px; + + li.breadcrumb-item { + display: inline-block; + + & + .breadcrumb-item::before { + display: inline-block; + padding-right: 5px; + padding-left: 5px; + content: "/"; + } + } +} + +.float-left { + float: left; +} + +.float-right { + float: right; +} + +.ml-10 { + margin-left: 10px; +} + +.pl-0 { + padding-left: 0 !important; +} + +.fs-18 { + font-size: $font-size-lg !important; +} + +.tags-control { + height: 43px; + padding: 4px !important; + + ul.tags { + display: flex; + + li { + float: left; + + &.tag-choice { + white-space: nowrap; + user-select: none; + font-size: $font-size-sm; + margin-right: 10px; + padding: 4px 8px; + border-radius: 30px; + color: $font-color; + background-color: $light-background-color; + } + + &.tag-input { + margin: 0; + padding: 0; + flex: 1 1 20px; + white-space: nowrap; + + input { + width: 100%; + color: #546e7a; + font-size: $font-size-lg; + padding: 6px 10px; + outline: 0; + border: 0; + } + } + } + } +} + +.attachment-wrapper { + .attachment-item { + margin-bottom: 10px; + + span { + display: inline-block; + padding: 8px 5px; + border: 2px solid $secondary-color; + + input { + display: none; + } + + .icon { + cursor: pointer; + } + } + } + + .add-attachment-link { + font-size: $font-size-lg; + margin-top: 10px; + display: inline-block; + } +} + +.row-grid-3 { + grid-row-gap: 15px; + grid-auto-rows: auto; + grid-column-gap: 15px; + @include display-grid(repeat(3, 1fr)); +} + +.bar { + height: 10px; + background-color: $table-active-cell-color; + + > div { + height: 10px; + transition: 0.35s cubic-bezier(0.4, 0, 0.2, 1); + + &.primary { + background-color: $primary-color; + } + + &.warning { + background-color: $warning-color; + } + + &.success { + background-color: $success-color; + } + + &.danger { + background-color: $danger-color; + } + } +} + +.spinner-container { + width: 100%; + text-align: center; + position: relative; + top: calc(50% - 24px); + + .meter { + width: 48px; + height: 48px; + border-radius: 50%; + display: inline-block; + box-sizing: border-box; + border: solid 6px $primary-color; + + &:before { + top: 5px; + width: 6px; + height: 20px; + content: " "; + text-align: center; + border-radius: 3px; + position: absolute; + display: inline-block; + box-sizing: border-box; + background-color: $primary-color; + transform-origin: center bottom; + animation: meter-animate-before 1s linear infinite; + } + } + + &.full-page { + top: 0; + left: 0; + z-index: 11; + width: 100%; + height: 100%; + position: fixed; + background-color: rgba(255, 255, 255, 0.7); + + .meter { + top: 50%; + position: relative; + + &:before { + top: 0; + } + } + } +} + +.cursor-pointer { + cursor: pointer !important; +} + +.display-grid { + display: grid; +} + +.column-grid-2 { + grid-gap: 10px; + @include display-grid(repeat(2, auto)); +} + +.bar-chart, +.line-chart { + canvas { + ~ img { + display: none; + } + } +} diff --git a/packages/Webkul/UI/src/Resources/assets/sass/fonts.scss b/packages/Webkul/UI/src/Resources/assets/sass/fonts.scss new file mode 100644 index 0000000..8986379 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/fonts.scss @@ -0,0 +1,15 @@ +@font-face { + font-display: swap; + font-style: normal; + font-weight: 500; + font-family: 'Roboto'; + src: url('../fonts/Roboto-Medium.ttf'); +} + +@font-face { + font-display: swap; + font-family: 'Roboto'; + font-weight: 400; + font-style: normal; + src: url('../fonts/Roboto-Regular.ttf'); +} \ No newline at end of file diff --git a/packages/Webkul/UI/src/Resources/assets/sass/icons.scss b/packages/Webkul/UI/src/Resources/assets/sass/icons.scss new file mode 100644 index 0000000..35145fd --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/icons.scss @@ -0,0 +1,218 @@ +.icon { + width: 20px; + height: 20px; + display: inline-block; + background-size: cover; +} + +.menu-fold-icon { + width: 24px; + height: 24px; + background-image: url("../images/menu-fold-icon.svg"); +} + +.menu-fold-icon:hover { + background-image: url("../images/menu-fold-active-icon.svg"); +} + +.menu-unfold-icon { + width: 24px; + height: 24px; + background-image: url("../images/menu-unfold-icon.svg"); +} + +.menu-unfold-icon:hover { + background-image: url("../images/menu-unfold-active-icon.svg"); +} + +.arrow-down-icon { + background-image: url("../images/arrow-down-icon.svg"); +} + +.arrow-up-icon { + background-image: url("../images/arrow-up-icon.svg"); +} + +.arrow-left-icon { + background-image: url("../images/arrow-left-icon.svg"); +} + +.arrow-right-icon { + background-image: url("../images/arrow-right-icon.svg"); +} + +.arrow-left-line-icon { + background-image: url("../images/arrow-left-line-icon.svg"); +} + +.arrow-right-line-icon { + background-image: url("../images/arrow-right-line-icon.svg"); +} + +.arrow-down-s-icon { + background-image: url("../images/arrow-down-s-icon.svg"); +} + +.add-icon { + background-image: url("../images/add-icon.svg"); +} + +.close-icon { + background-image: url("../images/close-icon.svg"); +} + +.close-white-icon { + background-image: url("../images/close-white-icon.svg"); +} + +.circle-check-white-icon { + background-image: url("../images/circle-check-white-icon.svg"); +} + +.circle-close-white-icon { + background-image: url("../images/circle-close-white-icon.svg"); +} + +.circle-info-white-icon { + background-image: url("../images/circle-info-white-icon.svg"); +} + +.calendar-icon { + background-image: url("../images/calendar-icon.svg"); +} + +.time-icon { + background-image: url("../images/time-icon.svg"); +} + +.align-justify-icon { + background-image: url("../images/align-justify-icon.svg"); +} + +.reply-icon { + background-image: url("../images/reply-icon.svg"); +} + +.reply-white-icon { + background-image: url("../images/reply-white-icon.svg"); +} + +.reply-all-icon { + background-image: url("../images/reply-all-icon.svg"); +} + +.reply-all-white-icon { + background-image: url("../images/reply-all-white-icon.svg"); +} + +.forward-icon { + background-image: url("../images/forward-icon.svg"); +} + +.forward-white-icon { + background-image: url("../images/forward-white-icon.svg"); +} + +.trash-icon { + background-image: url("../images/trash-icon.svg"); +} + +.trash-white-icon { + background-image: url("../images/trash-white-icon.svg"); +} + +.pencil-icon { + background-image: url("../images/pencil-icon.svg"); +} + +.pencil-underline-icon { + background-image: url("../images/pencil-underline-icon.svg"); +} + +.eye-icon { + background-image: url("../images/eye-icon.svg"); +} + +.folder-icon { + background-image: url("../images/folder-icon.svg"); +} + +.plus-primary-icon { + background-image: url("../images/plus-primary-icon.svg"); +} + +.plus-black-icon { + background-image: url("../images/plus-black-icon.svg"); +} + +.plus-white-icon { + background-image: url("../images/plus-white-icon.svg"); +} + +.download-icon { + background-image: url("../images/download-icon.svg"); +} + +.search-icon { + background-image: url("../images/search-icon.svg"); +} + +.ellipsis-icon { + width: 24px !important; + height: 24px !important; + background-image: url("../images/ellipsis-icon.svg"); +} + +.attachment-icon { + width: 24px !important; + height: 24px !important; + background-image: url("../images/attachment-icon.svg"); +} + +.link-icon { + width: 24px !important; + height: 24px !important; + background-image: url("../images/link-icon.svg"); +} + +.external-link-icon { + width: 24px !important; + height: 24px !important; + background-image: url("../images/external-link-icon.svg"); +} + +.tags-icon { + background-image: url("../images/tags-icon.svg"); +} + +.loader-icon { + width: 24px !important; + height: 24px !important; + background-image: url("../images/loader-icon.svg"); + animation-name: spin; + animation-duration: 1000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +.loader-active-icon { + width: 24px !important; + height: 24px !important; + background-image: url("../images/loader-active-icon.svg"); + animation-name: spin; + animation-duration: 1000ms; + animation-iteration-count: infinite; + animation-timing-function: linear; +} + +.alert-danger-icon { + background-image: url("../images/alert-danger-icon.svg"); +} + +.upload-icon { + background-image: url("../images/upload-icon.svg"); +} + +.export-icon { + background-image: url("../images/export-icon.svg"); +} diff --git a/packages/Webkul/UI/src/Resources/assets/sass/rtl.css b/packages/Webkul/UI/src/Resources/assets/sass/rtl.css new file mode 100644 index 0000000..240587a --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/rtl.css @@ -0,0 +1 @@ +.rtl .search-filter .control{padding-right:10px;border-left:0;border-right:2px solid #c7c7c7;border-top-right-radius:3px;border-bottom-right-radius:3px;border-top-left-radius:0;border-bottom-left-radius:0}.rtl .search-filter .icon-wrapper{float:left;border-top-right-radius:0px;border-bottom-right-radius:0px;border-top-left-radius:3px;border-bottom-left-radius:3px}.rtl .alert-wrapper .alert{left:unset;right:50%;margin-right:-324px}.rtl .table .table-header .table-action{text-align:left}.rtl .table .table-header .table-action .export-import{margin-right:0;margin-left:20px}.rtl .table .table-body .custom-design-container{right:1200px}.rtl .table .sidebar-filter{right:unset;left:-420px}.rtl .table .sidebar-filter header h1 .right{text-align:left}.rtl .table .sidebar-filter.show{right:unset;left:0}.rtl .table .sidebar-filter .field-container{padding-right:0;padding-left:25px}.rtl .table .sidebar-filter .field-container i.close-icon{right:unset;left:0}.rtl .table .datagrid-filters{display:inline-block}.rtl .table .datagrid-filters.per-page{margin-left:10px;margin-right:10px}.rtl .table .datagrid-filters .filter-right{text-align:left}.rtl .table table tbody tr td.action{text-align:left}.rtl .table table thead th.actions{text-align:left}.rtl .sidebar-filter header h1 .right{text-align:left}.rtl .filtered-tags .filter-tag .wrapper,.rtl .filtered-tags .filter-tag .cross-icon{margin-right:10px;margin-left:0}.rtl .float-left{float:right}.rtl .float-right{float:left}.rtl .form-group label.required::after,.rtl .field-container label.required::after{padding-left:0;padding-right:4px}.rtl .form-group.date .control,.rtl .form-group.datetime .control,.rtl .form-group.time .control,.rtl .field-container.date .control,.rtl .field-container.datetime .control,.rtl .field-container.time .control{padding-right:40px}.rtl .form-group.date .date-container input[type=text],.rtl .form-group.datetime .date-container input[type=text],.rtl .form-group.time .date-container input[type=text],.rtl .field-container.date .date-container input[type=text],.rtl .field-container.datetime .date-container input[type=text],.rtl .field-container.time .date-container input[type=text]{padding-left:22px}.rtl .form-group.date .datetime-container::after,.rtl .form-group.date .time-container::after,.rtl .form-group.datetime .datetime-container::after,.rtl .form-group.datetime .time-container::after,.rtl .form-group.time .datetime-container::after,.rtl .form-group.time .time-container::after,.rtl .field-container.date .datetime-container::after,.rtl .field-container.date .time-container::after,.rtl .field-container.datetime .datetime-container::after,.rtl .field-container.datetime .time-container::after,.rtl .field-container.time .datetime-container::after,.rtl .field-container.time .time-container::after{margin-right:-34px;margin-left:unset;right:unset;left:10px}.rtl .form-group .input-group .input-group-prepend .control,.rtl .form-group .input-group .input-group-prepend .btn,.rtl .field-container .input-group .input-group-prepend .control,.rtl .field-container .input-group .input-group-prepend .btn{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:3px;border-bottom-right-radius:3px}.rtl .form-group .input-group .input-group-append,.rtl .field-container .input-group .input-group-append{margin-right:-1px}.rtl .form-group .input-group .input-group-append .control,.rtl .form-group .input-group .input-group-append .btn,.rtl .field-container .input-group .input-group-append .control,.rtl .field-container .input-group .input-group-append .btn{border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:3px;border-bottom-left-radius:3px}.rtl .form-group .input-group .trash-icon,.rtl .field-container .input-group .trash-icon{margin-top:21px;margin-left:0;margin-right:7px;cursor:pointer}.rtl .settings-container .panel .setting-link-container .setting-link-item a .setting-info{margin-left:0;margin-right:25px}.rtl .tree-wrapper .tree-container .tree-item.active>.tree-item{padding-left:0;padding-right:30px} \ No newline at end of file diff --git a/packages/Webkul/UI/src/Resources/assets/sass/rtl.scss b/packages/Webkul/UI/src/Resources/assets/sass/rtl.scss new file mode 100644 index 0000000..e771868 --- /dev/null +++ b/packages/Webkul/UI/src/Resources/assets/sass/rtl.scss @@ -0,0 +1,228 @@ +.rtl { + .search-filter { + .control { + padding-right: 10px; + border-left: 0; + border-right: 2px solid #c7c7c7; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + } + + .icon-wrapper { + float: left; + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + } + + .alert-wrapper { + .alert { + left: unset; + right: 50%; + margin-right: -324px; + } + } + + .table { + .table-header { + .table-action { + text-align: left; + + .export-import { + margin-right: 0; + margin-left: 20px; + } + } + } + + .table-body { + .custom-design-container { + //right: unset; + right: 1200px; + } + } + + .sidebar-filter { + right: unset; + left: -420px; + + header { + h1 { + .right { + text-align: left; + } + } + } + + &.show { + right: unset; + left: 0; + } + + .field-container { + padding-right: 0; + padding-left: 25px; + + i.close-icon { + right: unset; + left: 0; + } + } + } + + .datagrid-filters { + display: inline-block; + + &.per-page { + margin-left: 10px; + margin-right: 10px; + } + + .filter-right { + text-align: left; + } + } + + table { + tbody { + tr { + td.action { + text-align: left; + } + } + } + + thead { + th.actions { + text-align: left; + } + } + } + } + + .sidebar-filter { + header { + h1 { + .right { + text-align: left; + } + } + } + } + + .filtered-tags { + .filter-tag { + .wrapper, + .cross-icon { + margin-right: 10px; + margin-left: 0; + } + } + } + + .float-left { + float: right; + } + + .float-right { + float: left; + } + + .form-group, + .field-container { + label { + &.required::after { + padding-left: 0; + padding-right: 4px; + } + } + + &.date, + &.datetime, + &.time { + .control { + padding-right: 40px; + } + + .date-container { + input[type="text"] { + padding-left: 22px; + } + } + + .datetime-container, + .time-container { + &::after { + margin-right: -34px; + margin-left: unset; + right: unset; + left: 10px; + } + } + } + } + + .form-group, + .field-container { + .input-group { + .input-group-prepend { + .control, + .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + } + } + + .input-group-append { + margin-right: -1px; + + .control, + .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + } + } + + .trash-icon { + margin-top: 21px; + margin-left: 0; + margin-right: 7px; + cursor: pointer; + } + } + } + + .settings-container { + .panel { + .setting-link-container { + .setting-link-item { + a { + .setting-info { + margin-left: 0; + margin-right: 25px; + } + } + } + } + } + } + + .tree-wrapper { + .tree-container { + .tree-item.active { + > .tree-item { + padding-left: 0; + padding-right: 30px; + } + } + } + } +} diff --git a/packages/Webkul/UI/src/Resources/lang/ar/app.php b/packages/Webkul/UI/src/Resources/lang/ar/app.php new file mode 100644 index 0000000..6f69c1e --- /dev/null +++ b/packages/Webkul/UI/src/Resources/lang/ar/app.php @@ -0,0 +1,88 @@ + [ + 'no-records' => 'لا توجد سجلات!', + 'something-went-wrong' => 'هناك خطأ ما! ', + ], + + 'datagrid' => [ + 'title' => 'شبكة بيانات', + 'actions' => 'أجراءات', + 'edit' => 'تعديل', + 'view' => 'رأي', + 'delete' => 'حذف', + 'id' => 'أعمدة الفهرس لها قيمة أكبر من الصفر فقط', + 'cancel' => 'يلغي', + 'download' => 'تحميل', + 'export' => 'يصدر', + 'select-format' => 'حدد التنسيق', + + 'massaction' => [ + 'select_action' => 'اختر فعلا', + 'mass-delete-confirm' => 'هل تريد حقًا حذف هذه المختارة:الموارد?', + 'mass-update-status' => 'هل تريد حقًا تحديث حالة هؤلاء المختارين:الموارد?', + 'delete' => 'هل تريد حقًا تنفيذ هذا الإجراء?', + 'edit' => 'هل تريد حقًا تعديل هذا:الموارد ?', + ], + + 'zero-index' => 'يمكن أن تحتوي أعمدة الفهرس على قيم أكبر من الصفر فقط', + 'no-records' => 'لا توجد سجلات', + 'filter-fields-missing' => 'بعض الحقول المطلوبة فارغة ، يرجى التحقق من العمود والحالة والقيمة بشكل صحيح', + 'click_on_action' => 'هل تريد حقًا تنفيذ هذا الإجراء?', + 'search' => 'ابحث هنا...', + 'column' => 'حدد العمود', + 'condition' => 'حدد الشرط', + 'contains' => 'يتضمن', + 'ncontains' => 'لا يحتوي على', + 'equals' => 'يساوي', + 'nequals' => 'لا يساوي', + 'greater' => 'أكثر من', + 'less' => 'أقل من', + 'greatere' => 'أكبر من يساوي', + 'lesse' => 'أقل من يساوي', + 'value' => 'اختار القيمة', + 'true' => 'صحيح / نشط', + 'update-status' => 'تحديث الحالة', + 'false' => 'خطأ / غير نشط', + 'between' => 'يتراوح ما بين', + 'apply' => 'يتقدم', + 'items-per-page' => 'مواد لكل صفحة', + 'value-here' => 'القيمة هنا', + 'numeric-value-here' => 'القيمة الرقمية هنا', + 'submit' => 'إرسال', + "mandatory_mass_action" => "الرجاء تحديد إجراء لأداء.", + 'multiple_sort_keys' => 'خطأ فادح! تم العثور على مفاتيح فرز متعددة ، يرجى حل عنوان URL يدويًا', + 'multiple_search_keys' => 'تم العثور على مفاتيح بحث متعددة ، يرجى حل عنوان URL يدويًا', + 'is-done' => 'تم', + 'filter' => [ + 'remove_all' => 'حذف الكل', + 'title' => 'منقي', + 'apply_title' => 'تطبيق عامل التصفية', + 'custom_filter' => 'تصفية مخصص', + 'done' => 'فعله', + 'to' => 'ل', + 'date_range' => 'نطاق الموعد', + 'start_date' => 'تاريخ البدء', + 'end_date' => 'تاريخ الانتهاء', + 'today' => 'اليوم', + 'yesterday' => 'في الامس', + 'tomorrow' => 'غدا', + 'this_month' => 'هذا الشهر', + 'this_year' => 'هذه السنة', + 'last_month' => 'الشهر الماضي', + 'apply' => 'يتقدم', + 'cancel' => 'إلغاء', + 'perPage' => 'لكل صفحة', + 'is_done' => 'تم', + 'created_by_id' => 'تم إنشاؤها بواسطة Id', + 'schedule_from' => 'جدولة من', + 'schedule_to' => 'جدولة إلى', + 'created_at' => 'أنشئت في', + 'scheduled' => 'المقرر', + 'duration' => 'مدة', + ], + ], + + 'add-attachment' => 'إضافة مرفق', +]; diff --git a/packages/Webkul/UI/src/Resources/lang/en/app.php b/packages/Webkul/UI/src/Resources/lang/en/app.php new file mode 100644 index 0000000..a76592a --- /dev/null +++ b/packages/Webkul/UI/src/Resources/lang/en/app.php @@ -0,0 +1,88 @@ + [ + 'no-records' => 'No records found!', + 'something-went-wrong' => 'Something went wrong!', + ], + + 'datagrid' => [ + 'title' => 'DataGrid', + 'actions' => 'Actions', + 'edit' => 'Edit', + 'view' => 'View', + 'delete' => 'Delete', + 'print' => 'Print', + 'id' => 'Index columns have value greater than zero only', + 'cancel' => 'Cancel', + 'download' => 'Download', + 'export' => 'Export', + 'select-format' => 'Select Format', + + 'massaction' => [ + 'select_action' => 'Select Action', + 'mass-delete-confirm' => 'Do you really want to delete these selected :resource?', + 'mass-update-status' => 'Do you really want to update status of these selected :resource?', + 'delete' => 'Do you really want to perform this action?', + 'edit' => 'Do you really want to edit this :resource?', + ], + + 'zero-index' => 'Index columns can have values greater than zero only', + 'no-records' => 'No Records Found', + 'filter-fields-missing' => 'Some of the required field is null, please check column, condition and value properly', + 'click_on_action' => 'Do you really want to perform this action?', + 'search' => 'Search Here...', + 'column' => 'Select Column', + 'condition' => 'Select Condition', + 'contains' => 'Contains', + 'ncontains' => 'Does not contains', + 'equals' => 'Is Equals to', + 'nequals' => 'Is Not equals to', + 'greater' => 'Greater than', + 'less' => 'Less than', + 'greatere' => 'Greater than equals to', + 'lesse' => 'Less than equals to', + 'value' => 'Select Value', + 'true' => 'True / Active', + 'update-status' => 'Update Status', + 'false' => 'False / Inactive', + 'between' => 'Is between', + 'apply' => 'Apply', + 'items-per-page' => 'Items Per Page', + 'value-here' => 'Value here', + 'numeric-value-here' => 'Numeric Value here', + 'submit' => 'Submit', + "mandatory_mass_action" => "Please select an action to perform.", + 'multiple_sort_keys' => 'Fatal Error! Multiple Sort keys Found, Please Resolve the URL Manually', + 'multiple_search_keys' => 'Multiple Search keys Found, Please Resolve the URL Manually', + 'is-done' => 'Is Done', + 'filter' => [ + 'remove_all' => 'Remove All', + 'title' => 'Filter', + 'apply_title' => 'Apply Filter', + 'custom_filter' => 'Custom Filter', + 'done' => 'Done', + 'to' => 'to', + 'date_range' => 'Date Range', + 'start_date' => 'Start Date', + 'end_date' => 'End Date', + 'today' => 'Today', + 'yesterday' => 'Yesterday', + 'this_month' => 'This Month', + 'this_year' => 'This Year', + 'last_month' => 'Last Month', + 'apply' => 'Apply', + 'cancel' => 'Cancel', + 'perPage' => 'Per Page', + 'is_done' => 'Is Done', + 'created_by_id' => 'Created By Id', + 'schedule_from' => 'Schedule From', + 'schedule_to' => 'Schedule To', + 'created_at' => 'Created At', + 'scheduled' => 'Scheduled', + 'duration' => 'Duration', + ], + ], + + 'add-attachment' => 'Add Attachment', +]; diff --git a/packages/Webkul/UI/src/Resources/lang/tr/app.php b/packages/Webkul/UI/src/Resources/lang/tr/app.php new file mode 100644 index 0000000..2b4291b --- /dev/null +++ b/packages/Webkul/UI/src/Resources/lang/tr/app.php @@ -0,0 +1,87 @@ + [ + 'no-records' => 'Kayıt bulunamadı!', + 'something-went-wrong' => 'Bir şeyler yanlış gitti!', + ], + + 'datagrid' => [ + 'title' => 'DataGrid', + 'actions' => 'Hareketler', + 'edit' => 'Düzenle', + 'view' => 'Görüntüle', + 'delete' => 'Kaldır', + 'id' => 'Dizin sütunları yalnızca sıfırdan büyük değere sahip', + 'cancel' => 'İptal', + 'download' => 'İndir', + 'export' => 'Dışa aktar', + 'select-format' => 'Biçim Seç', + + 'massaction' => [ + 'select_action' => 'Eylemi seç', + 'mass-delete-confirm' => 'Bu seçili :resource gerçekten silmek istiyor musunuz?', + 'mass-update-status' => 'Bu seçilen :resource durumunu gerçekten güncellemek istiyor musunuz?', + 'delete' => 'Bu eylemi gerçekten yapmak istiyor musunuz?', + 'edit' => 'Bunu gerçekten düzenlemek istiyor musunuz :resource?', + ], + + 'zero-index' => 'Dizin sütunları yalnızca sıfırdan büyük değerlere sahip olabilir', + 'no-records' => 'Kayıt bulunamadı', + 'filter-fields-missing' => 'Gerekli alanlardan bazıları boş, lütfen sütunu, durumu ve değeri doğru şekilde kontrol edin', + 'click_on_action' => 'Bu eylemi gerçekten yapmak istiyor musunuz?', + 'search' => 'Burada ara...', + 'column' => 'Sütun Seç', + 'condition' => 'Koşul Seç', + 'contains' => 'İçerir', + 'ncontains' => 'İçermez', + 'equals' => 'Şuna eşittir:', + 'nequals' => 'Eşit değil', + 'greater' => 'Daha büyük', + 'less' => 'Daha az', + 'greatere' => 'Daha büyük eşittir', + 'lesse' => 'Daha az eşittir', + 'value' => 'Değeri seç', + 'true' => 'Doğru / Aktif', + 'update-status' => 'Güncelleme durumu', + 'false' => 'Yanlış / Etkin Değil', + 'between' => 'Arasında', + 'apply' => 'Uygula', + 'items-per-page' => 'Sayfa Başına Öğe', + 'value-here' => 'Burada değer', + 'numeric-value-here' => 'Burada Sayısal Değer', + 'submit' => 'Gönder', + "mandatory_mass_action" => "Lütfen gerçekleştirilecek bir işlem seçin.", + 'multiple_sort_keys' => 'Ölümcül hata! Birden Fazla Sıralama Anahtarı Bulundu, Lütfen URL\'yi Manuel Olarak Çözün', + 'multiple_search_keys' => 'Birden Fazla Arama Anahtarı Bulundu, Lütfen URL\'yi Manuel Olarak Çözün', + 'is-done' => 'Tamamlandı', + 'filter' => [ + 'remove_all' => 'Hepsini Kaldır', + 'title' => 'Filtre', + 'apply_title' => 'Filtre Uygula', + 'custom_filter' => 'Özel Filtre', + 'done' => 'Tamamla', + 'to' => 'ile', + 'date_range' => 'Tarih aralığı', + 'start_date' => 'Başlangıç Tarihi', + 'end_date' => 'Bitiş Tarihi', + 'today' => 'Bugün', + 'yesterday' => 'Dün', + 'this_month' => 'Bu Ay', + 'this_year' => 'Bu yıl', + 'last_month' => 'Geçen ay', + 'apply' => 'Uygulamak', + 'cancel' => 'İptal', + 'perPage' => 'Sayfa başına', + 'is_done' => 'Yapıldı', + 'created_by_id' => 'Kimlik Tarafından Oluşturuldu', + 'schedule_from' => 'Başlangıç ​​Zamanı', + 'schedule_to' => 'Planla', + 'created_at' => 'Oluşturulma Tarihi', + 'scheduled' => 'zamanlanmış', + 'duration' => 'Süre', + ], + ], + + 'add-attachment' => 'Ek ekle', +]; diff --git a/packages/Webkul/UI/src/Resources/views/export/temp.blade.php b/packages/Webkul/UI/src/Resources/views/export/temp.blade.php new file mode 100644 index 0000000..9bc60ba --- /dev/null +++ b/packages/Webkul/UI/src/Resources/views/export/temp.blade.php @@ -0,0 +1,19 @@ + + + + @foreach ($columns as $column) + + @endforeach + + + + + @foreach ($records as $record) + + @foreach($record as $column => $value) + + @endforeach + + @endforeach + +
    {{ $column }}
    {{ strip_tags($value) }}
    diff --git a/packages/Webkul/UI/src/Routes/web.php b/packages/Webkul/UI/src/Routes/web.php new file mode 100644 index 0000000..8c2f057 --- /dev/null +++ b/packages/Webkul/UI/src/Routes/web.php @@ -0,0 +1,12 @@ + ['web', 'user']], function () { + + /** + * DataGrid export. + */ + Route::post('/export', [ExportController::class, 'export'])->name('ui.datagrid.export'); +}); diff --git a/packages/Webkul/UI/webpack.mix.js b/packages/Webkul/UI/webpack.mix.js new file mode 100644 index 0000000..e245739 --- /dev/null +++ b/packages/Webkul/UI/webpack.mix.js @@ -0,0 +1,48 @@ +const mix = require("laravel-mix"); + +if (mix == 'undefined') { + const {mix} = require("laravel-mix"); +} + +require("laravel-mix-merge-manifest"); + +if (mix.inProduction()) { + var publicPath = 'publishable/assets'; +} else { + var publicPath = "../../../public/vendor/webkul/ui/assets"; +} + +mix.setPublicPath(publicPath).mergeManifest(); +mix.disableNotifications(); + +mix.inProduction() + +mix.js( + [ + __dirname + "/src/Resources/assets/js/app.js", + __dirname + "/src/Resources/assets/js/dropdown.js" + ], + "js/ui.js" +) + .copy(__dirname + "/src/Resources/assets/images", publicPath + "/images") + .copy(__dirname + "/src/Resources/assets/fonts", publicPath + "/fonts") + .sass(__dirname + "/src/Resources/assets/sass/app.scss", "css/ui.css") + .options({ + processCssUrls: false + }).vue(); + +mix.webpackConfig({ + resolve: { + alias: { + 'vue$': 'vue/dist/vue.runtime.js' + } + } +}); + +if (!mix.inProduction()) { + mix.sourceMaps(); +} + +if (mix.inProduction()) { + mix.version(); +} diff --git a/packages/Webkul/User/.gitignore b/packages/Webkul/User/.gitignore new file mode 100644 index 0000000..30bc162 --- /dev/null +++ b/packages/Webkul/User/.gitignore @@ -0,0 +1 @@ +/node_modules \ No newline at end of file diff --git a/packages/Webkul/User/composer.json b/packages/Webkul/User/composer.json new file mode 100644 index 0000000..55a42d7 --- /dev/null +++ b/packages/Webkul/User/composer.json @@ -0,0 +1,27 @@ +{ + "name": "krayin/laravel-user", + "license": "MIT", + "authors": [ + { + "name": "Jitendra Singh", + "email": "jitendra@webkul.com" + } + ], + "require": { + "krayin/laravel-core": "^1.0" + }, + "autoload": { + "psr-4": { + "Webkul\\User\\": "src/" + } + }, + "extra": { + "laravel": { + "providers": [ + "Webkul\\User\\Providers\\UserServiceProvider" + ], + "aliases": {} + } + }, + "minimum-stability": "dev" +} \ No newline at end of file diff --git a/packages/Webkul/User/src/Contracts/Group.php b/packages/Webkul/User/src/Contracts/Group.php new file mode 100644 index 0000000..c0c488a --- /dev/null +++ b/packages/Webkul/User/src/Contracts/Group.php @@ -0,0 +1,7 @@ +increments('id'); + $table->string('name'); + $table->string('description')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('groups'); + } +} diff --git a/packages/Webkul/User/src/Database/Migrations/2021_03_12_074597_create_roles_table.php b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074597_create_roles_table.php new file mode 100644 index 0000000..d26a53f --- /dev/null +++ b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074597_create_roles_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('name'); + $table->string('description')->nullable(); + $table->string('permission_type'); + $table->json('permissions')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('roles'); + } +} diff --git a/packages/Webkul/User/src/Database/Migrations/2021_03_12_074857_create_users_table.php b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074857_create_users_table.php new file mode 100644 index 0000000..fd13707 --- /dev/null +++ b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074857_create_users_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password')->nullable(); + $table->boolean('status')->default(0); + $table->integer('role_id')->unsigned(); + $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('users'); + } +} diff --git a/packages/Webkul/User/src/Database/Migrations/2021_03_12_074867_create_user_groups_table.php b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074867_create_user_groups_table.php new file mode 100644 index 0000000..a5b1bdc --- /dev/null +++ b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074867_create_user_groups_table.php @@ -0,0 +1,34 @@ +integer('group_id')->unsigned(); + $table->foreign('group_id')->references('id')->on('groups')->onDelete('cascade'); + + $table->integer('user_id')->unsigned(); + $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_groups'); + } +} diff --git a/packages/Webkul/User/src/Database/Migrations/2021_03_12_074957_create_user_password_resets_table.php b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074957_create_user_password_resets_table.php new file mode 100644 index 0000000..396a54c --- /dev/null +++ b/packages/Webkul/User/src/Database/Migrations/2021_03_12_074957_create_user_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('user_password_resets'); + } +} diff --git a/packages/Webkul/User/src/Database/Migrations/2021_09_22_194622_add_unique_index_to_name_in_groups_table.php b/packages/Webkul/User/src/Database/Migrations/2021_09_22_194622_add_unique_index_to_name_in_groups_table.php new file mode 100644 index 0000000..3d75107 --- /dev/null +++ b/packages/Webkul/User/src/Database/Migrations/2021_09_22_194622_add_unique_index_to_name_in_groups_table.php @@ -0,0 +1,32 @@ +unique('name'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('groups', function (Blueprint $table) { + $table->dropUnique('groups_name_unique'); + }); + } +} diff --git a/packages/Webkul/User/src/Database/Migrations/2021_11_12_171510_add_image_column_in_users_table.php b/packages/Webkul/User/src/Database/Migrations/2021_11_12_171510_add_image_column_in_users_table.php new file mode 100644 index 0000000..a47db51 --- /dev/null +++ b/packages/Webkul/User/src/Database/Migrations/2021_11_12_171510_add_image_column_in_users_table.php @@ -0,0 +1,32 @@ +string('image')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('image'); + }); + } +} diff --git a/packages/Webkul/User/src/Database/Seeders/.gitkeep b/packages/Webkul/User/src/Database/Seeders/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/packages/Webkul/User/src/Database/Seeders/DatabaseSeeder.php b/packages/Webkul/User/src/Database/Seeders/DatabaseSeeder.php new file mode 100644 index 0000000..f3d73cc --- /dev/null +++ b/packages/Webkul/User/src/Database/Seeders/DatabaseSeeder.php @@ -0,0 +1,20 @@ +call(RolesSeeder::class); + + $this->call(UsersSeeder::class); + } +} diff --git a/packages/Webkul/User/src/Database/Seeders/RolesSeeder.php b/packages/Webkul/User/src/Database/Seeders/RolesSeeder.php new file mode 100644 index 0000000..bbce1a6 --- /dev/null +++ b/packages/Webkul/User/src/Database/Seeders/RolesSeeder.php @@ -0,0 +1,23 @@ +delete(); + + DB::table('roles')->delete(); + + DB::table('roles')->insert([ + 'id' => 1, + 'name' => 'Administrator', + 'description' => 'Administrator role', + 'permission_type' => 'all', + ]); + } +} diff --git a/packages/Webkul/User/src/Database/Seeders/UsersSeeder.php b/packages/Webkul/User/src/Database/Seeders/UsersSeeder.php new file mode 100644 index 0000000..53ab3d0 --- /dev/null +++ b/packages/Webkul/User/src/Database/Seeders/UsersSeeder.php @@ -0,0 +1,28 @@ +delete(); + + DB::table('users')->insert([ + 'id' => 1, + 'name' => 'Example Admin', + 'email' => 'admin@example.com', + 'password' => bcrypt('admin123'), + // 'api_token' => Str::random(80), + 'created_at' => date('Y-m-d H:i:s'), + 'updated_at' => date('Y-m-d H:i:s'), + 'status' => 1, + 'role_id' => 1, + 'view_permission' => 'global', + ]); + } +} diff --git a/packages/Webkul/User/src/Models/Group.php b/packages/Webkul/User/src/Models/Group.php new file mode 100644 index 0000000..c9238ed --- /dev/null +++ b/packages/Webkul/User/src/Models/Group.php @@ -0,0 +1,27 @@ +belongsToMany(UserProxy::modelClass(), 'user_groups'); + } +} diff --git a/packages/Webkul/User/src/Models/GroupProxy.php b/packages/Webkul/User/src/Models/GroupProxy.php new file mode 100644 index 0000000..4f1eba6 --- /dev/null +++ b/packages/Webkul/User/src/Models/GroupProxy.php @@ -0,0 +1,10 @@ + 'array', + ]; + + /** + * Get the users. + */ + public function users() + { + return $this->hasMany(UserProxy::modelClass()); + } +} diff --git a/packages/Webkul/User/src/Models/RoleProxy.php b/packages/Webkul/User/src/Models/RoleProxy.php new file mode 100644 index 0000000..e5e58dc --- /dev/null +++ b/packages/Webkul/User/src/Models/RoleProxy.php @@ -0,0 +1,10 @@ +image) { + return; + } + + return Storage::url($this->image); + } + + /** + * Get image url for the product image. + */ + public function getImageUrlAttribute() + { + return $this->image_url(); + } + + /** + * @return array + */ + public function toArray() + { + $array = parent::toArray(); + + $array['image_url'] = $this->image_url; + + return $array; + } + + /** + * Get the role that owns the user. + */ + public function role() + { + return $this->belongsTo(RoleProxy::modelClass()); + } + + /** + * The groups that belong to the user. + */ + public function groups() + { + return $this->belongsToMany(GroupProxy::modelClass(), 'user_groups'); + } + + /** + * Checks if user has permission to perform certain action. + * + * @param string $permission + * @return boolean + */ + public function hasPermission($permission) + { + if ($this->role->permission_type == 'custom' && !$this->role->permissions) { + return false; + } + + return in_array($permission, $this->role->permissions); + } +} diff --git a/packages/Webkul/User/src/Models/UserProxy.php b/packages/Webkul/User/src/Models/UserProxy.php new file mode 100644 index 0000000..2c13e36 --- /dev/null +++ b/packages/Webkul/User/src/Models/UserProxy.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + } +} diff --git a/packages/Webkul/User/src/Repositories/GroupRepository.php b/packages/Webkul/User/src/Repositories/GroupRepository.php new file mode 100644 index 0000000..a8d3d18 --- /dev/null +++ b/packages/Webkul/User/src/Repositories/GroupRepository.php @@ -0,0 +1,18 @@ +scopeQuery(function ($query) { + return $query->select('users.*') + ->leftJoin('user_groups', 'users.id', '=', 'user_groups.user_id') + ->leftJoin('groups', 'user_groups.group_id', 'groups.id') + ->whereIn('groups.id', auth()->guard('user')->user()->groups()->pluck('id')); + })->get()->pluck('id')->toArray(); + + return $userIds; + } +} diff --git a/packages/Webkul/WebForm/.gitignore b/packages/Webkul/WebForm/.gitignore new file mode 100644 index 0000000..6376db9 --- /dev/null +++ b/packages/Webkul/WebForm/.gitignore @@ -0,0 +1,3 @@ +/node_modules +/package-lock.json +npm-debug.log \ No newline at end of file diff --git a/packages/Webkul/WebForm/package.json b/packages/Webkul/WebForm/package.json new file mode 100644 index 0000000..927127a --- /dev/null +++ b/packages/Webkul/WebForm/package.json @@ -0,0 +1,28 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "prod": "npm run production", + "production": "mix --production" + }, + "devDependencies": { + "cross-env": "^7.0.3", + "jquery": "^3.6.0", + "laravel-mix": "^6.0.6", + "laravel-mix-merge-manifest": "^2.0.0", + "lodash": "^4.17.19", + "sass": "^1.32.8", + "sass-loader": "^11.0.1", + "vue": "^2.6.12", + "vue-loader": "^15.9.8", + "vue-template-compiler": "^2.6.14" + }, + "dependencies": { + "flatpickr": "^4.6.9", + "jquery-validation": "^1.19.3" + } +} diff --git a/packages/Webkul/WebForm/publishable/assets/css/admin.css b/packages/Webkul/WebForm/publishable/assets/css/admin.css new file mode 100644 index 0000000..8501ba5 --- /dev/null +++ b/packages/Webkul/WebForm/publishable/assets/css/admin.css @@ -0,0 +1,3 @@ +.web-form-icon { + background-image: url(../images/web-form-icon.svg) +} diff --git a/packages/Webkul/WebForm/publishable/assets/css/web-form.css b/packages/Webkul/WebForm/publishable/assets/css/web-form.css new file mode 100644 index 0000000..4cf0a49 --- /dev/null +++ b/packages/Webkul/WebForm/publishable/assets/css/web-form.css @@ -0,0 +1 @@ +@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:500;src:url(../fonts/Roboto-Medium.ttf)}@font-face{font-display:swap;font-family:Roboto;font-style:normal;font-weight:400;src:url(../fonts/Roboto-Regular.ttf)}.icon{background-size:cover;display:inline-block;height:20px;width:20px}.close-white-icon{background-image:url(../images/close-white-icon.svg)}.anonymous-layout-container{background:#f7f8f9;display:table;height:100%;position:absolute;text-align:center;width:100%;z-index:1}.anonymous-layout-container .center-box{display:table-cell;vertical-align:middle}.anonymous-layout-container .center-box .adjacent-center{display:inline-block;text-align:left;width:476px}.anonymous-layout-container .center-box .adjacent-center .title-box{margin-bottom:40px;text-align:center}.anonymous-layout-container .center-box .adjacent-center .title-box h1{color:#263238;font-size:24px;font-weight:500;margin-bottom:30px}.anonymous-layout-container .center-box .adjacent-center .title-box p{color:#546e7a;font-size:20px;margin:0}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body{background-color:#fff;border:none;border-radius:3px;box-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -1px rgba(0,0,0,.06);padding:16px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper{position:relative;width:100%}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper .alert{-webkit-animation:jelly .5s ease-in-out;animation:jelly .5s ease-in-out;border-radius:3px;box-shadow:0 4px 15.36px .64px rgba(0,0,0,.1),0 2px 6px 0 rgba(0,0,0,.12);display:block;margin-bottom:10px;padding:15px 44px;text-align:left;transform-origin:center top;z-index:500}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper .alert.success{background:#53c41a}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper .alert .icon{position:absolute}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper .alert .icon:first-child{left:10px;top:15px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper .alert .icon:last-child{cursor:pointer;right:10px;top:10px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .alert-wrapper .alert p{color:#fff;font-size:16px;margin:0}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group{color:#546e7a;display:block;font-size:18px;margin-bottom:20px;position:relative;width:100%}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group label{display:block;font-size:16px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group label.required:after{color:#ff4d50;content:"*";display:inline-block;font-weight:700;padding-left:4px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group textarea.control{height:100px;padding:10px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .control{background:#fff;border:1px solid #c1c2c3;border-radius:3px;color:#546e7a;display:inline-block;font-size:18px;margin-bottom:5px;margin-top:10px;padding:10px;transition:.2s cubic-bezier(.4,0,.2,1);vertical-align:middle;width:100%}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .control:focus{border-color:#0e90d9}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .control.error{border-color:#ff4d50}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .control[multiple]{height:100px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.date .control,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.datetime .control,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.time .control{padding-right:40px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.date .date-container,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.date .datetime-container,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.datetime .date-container,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.datetime .datetime-container,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.time .date-container,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.time .datetime-container{position:relative}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.date .date-container:after,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.date .datetime-container:after,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.datetime .date-container:after,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.datetime .datetime-container:after,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.time .date-container:after,.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group.time .datetime-container:after{background-image:url(../images/calendar-icon.svg);content:"";height:24px;margin-left:-34px;margin-top:-9px;pointer-events:none;position:absolute;right:10px;top:29px;width:24px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group label.error{color:#ff4d50;display:none;margin-top:5px}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .address-left{float:left;padding-right:5px;width:50%}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .address-left .control{height:204px;margin-bottom:0}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .address-right{display:inline-block;padding-left:5px;width:50%}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .form-group .address-right .control{margin-bottom:0}.anonymous-layout-container .center-box .adjacent-center .panel .panel-body .btn{background:#0e90d9;border:2px solid transparent;border-radius:4px;color:#fff;cursor:pointer;display:inline-block;font-size:24px;font:inherit;font-weight:500;padding:10px 14px;transition:.2s cubic-bezier(.4,0,.2,1);width:100%} diff --git a/packages/Webkul/WebForm/publishable/assets/images/calendar-icon.svg b/packages/Webkul/WebForm/publishable/assets/images/calendar-icon.svg new file mode 100644 index 0000000..db0a3f4 --- /dev/null +++ b/packages/Webkul/WebForm/publishable/assets/images/calendar-icon.svg @@ -0,0 +1,6 @@ + + + + diff --git a/packages/Webkul/WebForm/publishable/assets/images/close-white-icon.svg b/packages/Webkul/WebForm/publishable/assets/images/close-white-icon.svg new file mode 100644 index 0000000..113218b --- /dev/null +++ b/packages/Webkul/WebForm/publishable/assets/images/close-white-icon.svg @@ -0,0 +1,5 @@ + + + + diff --git a/packages/Webkul/WebForm/publishable/assets/images/web-form-icon.svg b/packages/Webkul/WebForm/publishable/assets/images/web-form-icon.svg new file mode 100644 index 0000000..8be07f6 --- /dev/null +++ b/packages/Webkul/WebForm/publishable/assets/images/web-form-icon.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/Webkul/WebForm/publishable/assets/js/web-form.js b/packages/Webkul/WebForm/publishable/assets/js/web-form.js new file mode 100644 index 0000000..38f18c7 --- /dev/null +++ b/packages/Webkul/WebForm/publishable/assets/js/web-form.js @@ -0,0 +1,2 @@ +/*! For license information please see web-form.js.LICENSE.txt */ +(()=>{var e,t={475:(e,t,n)=>{"use strict";const r=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],i={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:e=>"undefined"!=typeof console&&console.warn(e),getWeek:e=>{const t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var n=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-n.getTime())/864e5-3+(n.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},o={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:e=>{const t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1},a=o,s=(e,t=2)=>`000${e}`.slice(-1*t),l=e=>!0===e?1:0;function c(e,t){let n;return function(){clearTimeout(n),n=setTimeout((()=>e.apply(this,arguments)),t)}}const u=e=>e instanceof Array?e:[e];function d(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function f(e,t,n){const r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function p(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function h(e,t){return t(e)?e:e.parentNode?h(e.parentNode,t):void 0}function m(e,t){const n=f("div","numInputWrapper"),r=f("input","numInput "+e),i=f("span","arrowUp"),o=f("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(const e in t)r.setAttribute(e,t[e]);return n.appendChild(r),n.appendChild(i),n.appendChild(o),n}function g(e){try{if("function"==typeof e.composedPath){return e.composedPath()[0]}return e.target}catch(t){return e.target}}const v=()=>{},y=(e,t,n)=>n.months[t?"shorthand":"longhand"][e],b={D:v,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:(e,t)=>{e.setHours(parseFloat(t))},H:(e,t)=>{e.setHours(parseFloat(t))},J:(e,t)=>{e.setDate(parseFloat(t))},K:(e,t,n)=>{e.setHours(e.getHours()%12+12*l(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:(e,t)=>{e.setSeconds(parseFloat(t))},U:(e,t)=>new Date(1e3*parseFloat(t)),W:function(e,t,n){const r=parseInt(t),i=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+n.firstDayOfWeek),i},Y:(e,t)=>{e.setFullYear(parseFloat(t))},Z:(e,t)=>new Date(t),d:(e,t)=>{e.setDate(parseFloat(t))},h:(e,t)=>{e.setHours(parseFloat(t))},i:(e,t)=>{e.setMinutes(parseFloat(t))},j:(e,t)=>{e.setDate(parseFloat(t))},l:v,m:(e,t)=>{e.setMonth(parseFloat(t)-1)},n:(e,t)=>{e.setMonth(parseFloat(t)-1)},s:(e,t)=>{e.setSeconds(parseFloat(t))},u:(e,t)=>new Date(parseFloat(t)),w:v,y:(e,t)=>{e.setFullYear(2e3+parseFloat(t))}},x={D:"(\\w+)",F:"(\\w+)",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"(\\w+)",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"(\\w+)",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},w={Z:e=>e.toISOString(),D:function(e,t,n){return t.weekdays.shorthand[w.w(e,t,n)]},F:function(e,t,n){return y(w.n(e,t,n)-1,!1,t)},G:function(e,t,n){return s(w.h(e,t,n))},H:e=>s(e.getHours()),J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:(e,t)=>t.amPM[l(e.getHours()>11)],M:function(e,t){return y(e.getMonth(),!0,t)},S:e=>s(e.getSeconds()),U:e=>e.getTime()/1e3,W:function(e,t,n){return n.getWeek(e)},Y:e=>s(e.getFullYear(),4),d:e=>s(e.getDate()),h:e=>e.getHours()%12?e.getHours()%12:12,i:e=>s(e.getMinutes()),j:e=>e.getDate(),l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:e=>s(e.getMonth()+1),n:e=>e.getMonth()+1,s:e=>e.getSeconds(),u:e=>e.getTime(),w:e=>e.getDay(),y:e=>String(e.getFullYear()).substring(2)},k=({config:e=i,l10n:t=o,isMobile:n=!1})=>(r,i,o)=>{const a=o||t;return void 0===e.formatDate||n?i.split("").map(((t,n,i)=>w[t]&&"\\"!==i[n-1]?w[t](r,a,e):"\\"!==t?t:"")).join(""):e.formatDate(r,i,a)},C=({config:e=i,l10n:t=o})=>(n,r,o,a)=>{if(0!==n&&!n)return;const s=a||t;let l;const c=n;if(n instanceof Date)l=new Date(n.getTime());else if("string"!=typeof n&&void 0!==n.toFixed)l=new Date(n);else if("string"==typeof n){const t=r||(e||i).dateFormat,a=String(n).trim();if("today"===a)l=new Date,o=!0;else if(/Z$/.test(a)||/GMT$/.test(a))l=new Date(n);else if(e&&e.parseDate)l=e.parseDate(n,t);else{l=e&&e.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);let r,i=[];for(let e=0,o=0,a="";el=e(l,t,s)||l))}l=r?l:void 0}}if(l instanceof Date&&!isNaN(l.getTime()))return!0===o&&l.setHours(0,0,0,0),l;e.errorHandler(new Error(`Invalid date provided: ${c}`))};function D(e,t,n=!0){return!1!==n?new Date(e.getTime()).setHours(0,0,0,0)-new Date(t.getTime()).setHours(0,0,0,0):e.getTime()-t.getTime()}const T=864e5;function M(e){let t=e.defaultHour,n=e.defaultMinute,r=e.defaultSeconds;if(void 0!==e.minDate){const i=e.minDate.getHours(),o=e.minDate.getMinutes(),a=e.minDate.getSeconds();t=0?new Date:new Date(n.config.minDate.getTime()),t=M(n.config);e.setHours(t.hours,t.minutes,t.seconds,e.getMilliseconds()),n.selectedDates=[e],n.latestSelectedDateObj=e}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();const t="keydown"===e.type,r=g(e),i=r;void 0!==n.amPM&&r===n.amPM&&(n.amPM.textContent=n.l10n.amPM[l(n.amPM.textContent===n.l10n.amPM[0])]);const o=parseFloat(i.getAttribute("min")),a=parseFloat(i.getAttribute("max")),c=parseFloat(i.getAttribute("step")),u=parseInt(i.value,10),d=e.delta||(t?38===e.which?1:-1:0);let f=u+c*d;if(void 0!==i.value&&2===i.value.length){const e=i===n.hourElement,t=i===n.minuteElement;fa&&(f=i===n.hourElement?f-a-l(!n.amPM):o,t&&R(void 0,1,n.hourElement)),n.amPM&&e&&(1===c?f+u===23:Math.abs(f-u)>c)&&(n.amPM.textContent=n.l10n.amPM[l(n.amPM.textContent===n.l10n.amPM[0])]),i.value=s(f)}}(e);const t=n._input.value;w(),ye(),n._input.value!==t&&n._debouncedChange()}function w(){if(void 0===n.hourElement||void 0===n.minuteElement)return;let e=(parseInt(n.hourElement.value.slice(-2),10)||0)%24,t=(parseInt(n.minuteElement.value,10)||0)%60,r=void 0!==n.secondElement?(parseInt(n.secondElement.value,10)||0)%60:0;var i,o;void 0!==n.amPM&&(i=e,o=n.amPM.textContent,e=i%12+12*l(o===n.l10n.amPM[1]));const a=void 0!==n.config.minTime||n.config.minDate&&n.minDateHasTime&&n.latestSelectedDateObj&&0===D(n.latestSelectedDateObj,n.config.minDate,!0);if(void 0!==n.config.maxTime||n.config.maxDate&&n.maxDateHasTime&&n.latestSelectedDateObj&&0===D(n.latestSelectedDateObj,n.config.maxDate,!0)){const i=void 0!==n.config.maxTime?n.config.maxTime:n.config.maxDate;e=Math.min(e,i.getHours()),e===i.getHours()&&(t=Math.min(t,i.getMinutes())),t===i.getMinutes()&&(r=Math.min(r,i.getSeconds()))}if(a){const i=void 0!==n.config.minTime?n.config.minTime:n.config.minDate;e=Math.max(e,i.getHours()),e===i.getHours()&&t=12)]),void 0!==n.secondElement&&(n.secondElement.value=s(r)))}function N(e){const t=g(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&J(n)}function j(e,t,r,i){return t instanceof Array?t.forEach((t=>j(e,t,r,i))):e instanceof Array?e.forEach((e=>j(e,t,r,i))):(e.addEventListener(t,r,i),void n._handlers.push({remove:()=>e.removeEventListener(t,r)}))}function O(){pe("onChange")}function I(e,t){const r=void 0!==e?n.parseDate(e):n.latestSelectedDateObj||(n.config.minDate&&n.config.minDate>n.now?n.config.minDate:n.config.maxDate&&n.config.maxDate=0&&D(e,n.selectedDates[1])<=0)}(t)&&!me(t)&&a.classList.add("inRange"),n.weekNumbers&&1===n.config.showMonths&&"prevMonthDay"!==e&&r%7==1&&n.weekNumbers.insertAdjacentHTML("beforeend",""+n.config.getWeek(t)+""),pe("onDayCreate",a),a}function P(e){e.focus(),"range"===n.config.mode&&te(e)}function H(e){const t=e>0?0:n.config.showMonths-1,r=e>0?n.config.showMonths:-1;for(let i=t;i!=r;i+=e){const t=n.daysContainer.children[i],r=e>0?0:t.children.length-1,o=e>0?t.children.length:-1;for(let n=r;n!=o;n+=e){const e=t.children[n];if(-1===e.className.indexOf("hidden")&&K(e.dateObj))return e}}}function q(e,t){const r=G(document.activeElement||document.body),i=void 0!==e?e:r?document.activeElement:void 0!==n.selectedDateElem&&G(n.selectedDateElem)?n.selectedDateElem:void 0!==n.todayDateElem&&G(n.todayDateElem)?n.todayDateElem:H(t>0?1:-1);void 0===i?n._input.focus():r?function(e,t){const r=-1===e.className.indexOf("Month")?e.dateObj.getMonth():n.currentMonth,i=t>0?n.config.showMonths:-1,o=t>0?1:-1;for(let a=r-n.currentMonth;a!=i;a+=o){const i=n.daysContainer.children[a],s=r-n.currentMonth===a?e.$i+t:t<0?i.children.length-1:0,l=i.children.length;for(let n=s;n>=0&&n0?l:-1);n+=o){const r=i.children[n];if(-1===r.className.indexOf("hidden")&&K(r.dateObj)&&Math.abs(e.$i-n)>=Math.abs(t))return P(r)}}n.changeMonth(o),q(H(o),0)}(i,t):P(i)}function _(e,t){const r=(new Date(e,t,1).getDay()-n.l10n.firstDayOfWeek+7)%7,i=n.utils.getDaysInMonth((t-1+12)%12,e),o=n.utils.getDaysInMonth(t,e),a=window.document.createDocumentFragment(),s=n.config.showMonths>1,l=s?"prevMonthDay hidden":"prevMonthDay",c=s?"nextMonthDay hidden":"nextMonthDay";let u=i+1-r,d=0;for(;u<=i;u++,d++)a.appendChild(F(l,new Date(e,t-1,u),u,d));for(u=1;u<=o;u++,d++)a.appendChild(F("",new Date(e,t,u),u,d));for(let i=o+1;i<=42-r&&(1===n.config.showMonths||d%7!=0);i++,d++)a.appendChild(F(c,new Date(e,t+1,i%o),i,d));const p=f("div","dayContainer");return p.appendChild(a),p}function W(){if(void 0===n.daysContainer)return;p(n.daysContainer),n.weekNumbers&&p(n.weekNumbers);const e=document.createDocumentFragment();for(let t=0;t1||"dropdown"!==n.config.monthSelectorType)return;const e=function(e){return!(void 0!==n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&en.config.maxDate.getMonth())};n.monthsDropdownContainer.tabIndex=-1,n.monthsDropdownContainer.innerHTML="";for(let t=0;t<12;t++){if(!e(t))continue;const r=f("option","flatpickr-monthDropdown-month");r.value=new Date(n.currentYear,t).getMonth().toString(),r.textContent=y(t,n.config.shorthandCurrentMonth,n.l10n),r.tabIndex=-1,n.currentMonth===t&&(r.selected=!0),n.monthsDropdownContainer.appendChild(r)}}function z(){const e=f("div","flatpickr-month"),t=window.document.createDocumentFragment();let r;n.config.showMonths>1||"static"===n.config.monthSelectorType?r=f("span","cur-month"):(n.monthsDropdownContainer=f("select","flatpickr-monthDropdown-months"),n.monthsDropdownContainer.setAttribute("aria-label",n.l10n.monthAriaLabel),j(n.monthsDropdownContainer,"change",(e=>{const t=g(e),r=parseInt(t.value,10);n.changeMonth(r-n.currentMonth),pe("onMonthChange")})),Y(),r=n.monthsDropdownContainer);const i=m("cur-year",{tabindex:"-1"}),o=i.getElementsByTagName("input")[0];o.setAttribute("aria-label",n.l10n.yearAriaLabel),n.config.minDate&&o.setAttribute("min",n.config.minDate.getFullYear().toString()),n.config.maxDate&&(o.setAttribute("max",n.config.maxDate.getFullYear().toString()),o.disabled=!!n.config.minDate&&n.config.minDate.getFullYear()===n.config.maxDate.getFullYear());const a=f("div","flatpickr-current-month");return a.appendChild(r),a.appendChild(i),t.appendChild(a),e.appendChild(t),{container:e,yearElement:o,monthElement:r}}function $(){p(n.monthNav),n.monthNav.appendChild(n.prevMonthNav),n.config.showMonths&&(n.yearElements=[],n.monthElements=[]);for(let e=n.config.showMonths;e--;){const e=z();n.yearElements.push(e.yearElement),n.monthElements.push(e.monthElement),n.monthNav.appendChild(e.container)}n.monthNav.appendChild(n.nextMonthNav)}function B(){n.weekdayContainer?p(n.weekdayContainer):n.weekdayContainer=f("div","flatpickr-weekdays");for(let e=n.config.showMonths;e--;){const e=f("div","flatpickr-weekdaycontainer");n.weekdayContainer.appendChild(e)}return U(),n.weekdayContainer}function U(){if(!n.weekdayContainer)return;const e=n.l10n.firstDayOfWeek;let t=[...n.l10n.weekdays.shorthand];e>0&&e\n ${t.join("")}\n \n `}function V(e,t=!0){const r=t?e:e-n.currentMonth;r<0&&!0===n._hidePrevMonthArrow||r>0&&!0===n._hideNextMonthArrow||(n.currentMonth+=r,(n.currentMonth<0||n.currentMonth>11)&&(n.currentYear+=n.currentMonth>11?1:-1,n.currentMonth=(n.currentMonth+12)%12,pe("onYearChange"),Y()),W(),pe("onMonthChange"),ge())}function X(e){return!(!n.config.appendTo||!n.config.appendTo.contains(e))||n.calendarContainer.contains(e)}function Z(e){if(n.isOpen&&!n.config.inline){const t=g(e),r=X(t),i=t===n.input||t===n.altInput||n.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(n.input)||~e.path.indexOf(n.altInput)),o="blur"===e.type?i&&e.relatedTarget&&!X(e.relatedTarget):!i&&!r&&!X(e.relatedTarget),a=!n.config.ignoredFocusElements.some((e=>e.contains(t)));o&&a&&(void 0!==n.timeContainer&&void 0!==n.minuteElement&&void 0!==n.hourElement&&""!==n.input.value&&void 0!==n.input.value&&b(),n.close(),n.config&&"range"===n.config.mode&&1===n.selectedDates.length&&(n.clear(!1),n.redraw()))}}function J(e){if(!e||n.config.minDate&&en.config.maxDate.getFullYear())return;const t=e,r=n.currentYear!==t;n.currentYear=t||n.currentYear,n.config.maxDate&&n.currentYear===n.config.maxDate.getFullYear()?n.currentMonth=Math.min(n.config.maxDate.getMonth(),n.currentMonth):n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&(n.currentMonth=Math.max(n.config.minDate.getMonth(),n.currentMonth)),r&&(n.redraw(),pe("onYearChange"),Y())}function K(e,t=!0){var r;const i=n.parseDate(e,void 0,t);if(n.config.minDate&&i&&D(i,n.config.minDate,void 0!==t?t:!n.minDateHasTime)<0||n.config.maxDate&&i&&D(i,n.config.maxDate,void 0!==t?t:!n.maxDateHasTime)>0)return!1;if(!n.config.enable&&0===n.config.disable.length)return!0;if(void 0===i)return!1;const o=!!n.config.enable,a=null!==(r=n.config.enable)&&void 0!==r?r:n.config.disable;for(let e,t=0;t=e.from.getTime()&&i.getTime()<=e.to.getTime())return o}return!o}function G(e){return void 0!==n.daysContainer&&(-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&n.daysContainer.contains(e))}function Q(e){!(e.target===n._input)||!(n.selectedDates.length>0||n._input.value.length>0)||e.relatedTarget&&X(e.relatedTarget)||n.setDate(n._input.value,!0,e.target===n.altInput?n.config.altFormat:n.config.dateFormat)}function ee(t){const r=g(t),i=n.config.wrap?e.contains(r):r===n._input,o=n.config.allowInput,a=n.isOpen&&(!o||!i),s=n.config.inline&&i&&!o;if(13===t.keyCode&&i){if(o)return n.setDate(n._input.value,!0,r===n.altInput?n.config.altFormat:n.config.dateFormat),r.blur();n.open()}else if(X(r)||a||s){const e=!!n.timeContainer&&n.timeContainer.contains(r);switch(t.keyCode){case 13:e?(t.preventDefault(),b(),le()):ce(t);break;case 27:t.preventDefault(),le();break;case 8:case 46:i&&!n.config.allowInput&&(t.preventDefault(),n.clear());break;case 37:case 39:if(e||i)n.hourElement&&n.hourElement.focus();else if(t.preventDefault(),void 0!==n.daysContainer&&(!1===o||document.activeElement&&G(document.activeElement))){const e=39===t.keyCode?1:-1;t.ctrlKey?(t.stopPropagation(),V(e),q(H(1),0)):q(void 0,e)}break;case 38:case 40:t.preventDefault();const a=40===t.keyCode?1:-1;n.daysContainer&&void 0!==r.$i||r===n.input||r===n.altInput?t.ctrlKey?(t.stopPropagation(),J(n.currentYear-a),q(H(1),0)):e||q(void 0,7*a):r===n.currentYearElement?J(n.currentYear-a):n.config.enableTime&&(!e&&n.hourElement&&n.hourElement.focus(),b(t),n._debouncedChange());break;case 9:if(e){const e=[n.hourElement,n.minuteElement,n.secondElement,n.amPM].concat(n.pluginElements).filter((e=>e)),i=e.indexOf(r);if(-1!==i){const r=e[i+(t.shiftKey?-1:1)];t.preventDefault(),(r||n._input).focus()}}else!n.config.noCalendar&&n.daysContainer&&n.daysContainer.contains(r)&&t.shiftKey&&(t.preventDefault(),n._input.focus())}}if(void 0!==n.amPM&&r===n.amPM)switch(t.key){case n.l10n.amPM[0].charAt(0):case n.l10n.amPM[0].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[0],w(),ye();break;case n.l10n.amPM[1].charAt(0):case n.l10n.amPM[1].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[1],w(),ye()}(i||X(r))&&pe("onKeyDown",t)}function te(e){if(1!==n.selectedDates.length||e&&(!e.classList.contains("flatpickr-day")||e.classList.contains("flatpickr-disabled")))return;const t=e?e.dateObj.getTime():n.days.firstElementChild.dateObj.getTime(),r=n.parseDate(n.selectedDates[0],void 0,!0).getTime(),i=Math.min(t,n.selectedDates[0].getTime()),o=Math.max(t,n.selectedDates[0].getTime());let a=!1,s=0,l=0;for(let e=i;ei&&es)?s=e:e>r&&(!l||e0&&p0&&p>l;h?(f.classList.add("notAllowed"),["inRange","startRange","endRange"].forEach((e=>{f.classList.remove(e)}))):a&&!h||(["startRange","inRange","endRange","notAllowed"].forEach((e=>{f.classList.remove(e)})),void 0!==e&&(e.classList.add(t<=n.selectedDates[0].getTime()?"startRange":"endRange"),rt&&p===r&&f.classList.add("endRange"),p>=s&&(0===l||p<=l)&&(u=r,d=t,(c=p)>Math.min(u,d)&&c{const r=n.config[`_${e}Date`]=n.parseDate(t,n.config.dateFormat),i=n.config[`_${"min"===e?"max":"min"}Date`];void 0!==r&&(n["min"===e?"minDateHasTime":"maxDateHasTime"]=r.getHours()>0||r.getMinutes()>0||r.getSeconds()>0),n.selectedDates&&(n.selectedDates=n.selectedDates.filter((e=>K(e))),n.selectedDates.length||"min"!==e||E(r),ye()),n.daysContainer&&(se(),void 0!==r?n.currentYearElement[e]=r.getFullYear().toString():n.currentYearElement.removeAttribute(e),n.currentYearElement.disabled=!!i&&void 0!==r&&i.getFullYear()===r.getFullYear())}}function ie(){return n.config.wrap?e.querySelector("[data-input]"):e}function oe(){"object"!=typeof n.config.locale&&void 0===A.l10ns[n.config.locale]&&n.config.errorHandler(new Error(`flatpickr: invalid locale ${n.config.locale}`)),n.l10n=Object.assign(Object.assign({},A.l10ns.default),"object"==typeof n.config.locale?n.config.locale:"default"!==n.config.locale?A.l10ns[n.config.locale]:void 0),x.K=`(${n.l10n.amPM[0]}|${n.l10n.amPM[1]}|${n.l10n.amPM[0].toLowerCase()}|${n.l10n.amPM[1].toLowerCase()})`;void 0===Object.assign(Object.assign({},t),JSON.parse(JSON.stringify(e.dataset||{}))).time_24hr&&void 0===A.defaultConfig.time_24hr&&(n.config.time_24hr=n.l10n.time_24hr),n.formatDate=k(n),n.parseDate=C({config:n.config,l10n:n.l10n})}function ae(e){if("function"==typeof n.config.position)return void n.config.position(n,e);if(void 0===n.calendarContainer)return;pe("onPreCalendarPosition");const t=e||n._positionElement,r=Array.prototype.reduce.call(n.calendarContainer.children,((e,t)=>e+t.offsetHeight),0),i=n.calendarContainer.offsetWidth,o=n.config.position.split(" "),a=o[0],s=o.length>1?o[1]:null,l=t.getBoundingClientRect(),c=window.innerHeight-l.bottom,u="above"===a||"below"!==a&&cr,f=window.pageYOffset+l.top+(u?-r-2:t.offsetHeight+2);if(d(n.calendarContainer,"arrowTop",!u),d(n.calendarContainer,"arrowBottom",u),n.config.inline)return;let p=window.pageXOffset+l.left,h=!1,m=!1;"center"===s?(p-=(i-l.width)/2,h=!0):"right"===s&&(p-=i-l.width,m=!0),d(n.calendarContainer,"arrowLeft",!h&&!m),d(n.calendarContainer,"arrowCenter",h),d(n.calendarContainer,"arrowRight",m);const g=window.document.body.offsetWidth-(window.pageXOffset+l.right),v=p+i>window.document.body.offsetWidth,y=g+i>window.document.body.offsetWidth;if(d(n.calendarContainer,"rightMost",v),!n.config.static)if(n.calendarContainer.style.top=`${f}px`,v)if(y){const e=function(){let e=null;for(let t=0;te.classList&&e.classList.contains("flatpickr-day")&&!e.classList.contains("flatpickr-disabled")&&!e.classList.contains("notAllowed")));if(void 0===t)return;const r=t,i=n.latestSelectedDateObj=new Date(r.dateObj.getTime()),o=(i.getMonth()n.currentMonth+n.config.showMonths-1)&&"range"!==n.config.mode;if(n.selectedDateElem=r,"single"===n.config.mode)n.selectedDates=[i];else if("multiple"===n.config.mode){const e=me(i);e?n.selectedDates.splice(parseInt(e),1):n.selectedDates.push(i)}else"range"===n.config.mode&&(2===n.selectedDates.length&&n.clear(!1,!1),n.latestSelectedDateObj=i,n.selectedDates.push(i),0!==D(i,n.selectedDates[0],!0)&&n.selectedDates.sort(((e,t)=>e.getTime()-t.getTime())));if(w(),o){const e=n.currentYear!==i.getFullYear();n.currentYear=i.getFullYear(),n.currentMonth=i.getMonth(),e&&(pe("onYearChange"),Y()),pe("onMonthChange")}if(ge(),W(),ye(),o||"range"===n.config.mode||1!==n.config.showMonths?void 0!==n.selectedDateElem&&void 0===n.hourElement&&n.selectedDateElem&&n.selectedDateElem.focus():P(r),void 0!==n.hourElement&&void 0!==n.hourElement&&n.hourElement.focus(),n.config.closeOnSelect){const e="single"===n.config.mode&&!n.config.enableTime,t="range"===n.config.mode&&2===n.selectedDates.length&&!n.config.enableTime;(e||t)&&le()}O()}n.parseDate=C({config:n.config,l10n:n.l10n}),n._handlers=[],n.pluginElements=[],n.loadedPlugins=[],n._bind=j,n._setHoursFromDate=E,n._positionCalendar=ae,n.changeMonth=V,n.changeYear=J,n.clear=function(e=!0,t=!0){n.input.value="",void 0!==n.altInput&&(n.altInput.value="");void 0!==n.mobileInput&&(n.mobileInput.value="");n.selectedDates=[],n.latestSelectedDateObj=void 0,!0===t&&(n.currentYear=n._initialDate.getFullYear(),n.currentMonth=n._initialDate.getMonth());if(!0===n.config.enableTime){const{hours:e,minutes:t,seconds:r}=M(n.config);S(e,t,r)}n.redraw(),e&&pe("onChange")},n.close=function(){n.isOpen=!1,n.isMobile||(void 0!==n.calendarContainer&&n.calendarContainer.classList.remove("open"),void 0!==n._input&&n._input.classList.remove("active"));pe("onClose")},n._createElement=f,n.destroy=function(){void 0!==n.config&&pe("onDestroy");for(let e=n._handlers.length;e--;)n._handlers[e].remove();if(n._handlers=[],n.mobileInput)n.mobileInput.parentNode&&n.mobileInput.parentNode.removeChild(n.mobileInput),n.mobileInput=void 0;else if(n.calendarContainer&&n.calendarContainer.parentNode)if(n.config.static&&n.calendarContainer.parentNode){const e=n.calendarContainer.parentNode;if(e.lastChild&&e.removeChild(e.lastChild),e.parentNode){for(;e.firstChild;)e.parentNode.insertBefore(e.firstChild,e);e.parentNode.removeChild(e)}}else n.calendarContainer.parentNode.removeChild(n.calendarContainer);n.altInput&&(n.input.type="text",n.altInput.parentNode&&n.altInput.parentNode.removeChild(n.altInput),delete n.altInput);n.input&&(n.input.type=n.input._type,n.input.classList.remove("flatpickr-input"),n.input.removeAttribute("readonly"));["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((e=>{try{delete n[e]}catch(e){}}))},n.isEnabled=K,n.jumpToDate=I,n.open=function(e,t=n._positionElement){if(!0===n.isMobile){if(e){e.preventDefault();const t=g(e);t&&t.blur()}return void 0!==n.mobileInput&&(n.mobileInput.focus(),n.mobileInput.click()),void pe("onOpen")}if(n._input.disabled||n.config.inline)return;const r=n.isOpen;n.isOpen=!0,r||(n.calendarContainer.classList.add("open"),n._input.classList.add("active"),pe("onOpen"),ae(t));!0===n.config.enableTime&&!0===n.config.noCalendar&&(!1!==n.config.allowInput||void 0!==e&&n.timeContainer.contains(e.relatedTarget)||setTimeout((()=>n.hourElement.select()),50))},n.redraw=se,n.set=function(e,t){if(null!==e&&"object"==typeof e){Object.assign(n.config,e);for(const t in e)void 0!==ue[t]&&ue[t].forEach((e=>e()))}else n.config[e]=t,void 0!==ue[e]?ue[e].forEach((e=>e())):r.indexOf(e)>-1&&(n.config[e]=u(t));n.redraw(),ye(!0)},n.setDate=function(e,t=!1,r=n.config.dateFormat){if(0!==e&&!e||e instanceof Array&&0===e.length)return n.clear(t);de(e,r),n.latestSelectedDateObj=n.selectedDates[n.selectedDates.length-1],n.redraw(),I(void 0,t),E(),0===n.selectedDates.length&&n.clear(!1);ye(t),t&&pe("onChange")},n.toggle=function(e){if(!0===n.isOpen)return n.close();n.open(e)};const ue={locale:[oe,U],showMonths:[$,v,B],minDate:[I],maxDate:[I],clickOpens:[()=>{!0===n.config.clickOpens?(j(n._input,"focus",n.open),j(n._input,"click",n.open)):(n._input.removeEventListener("focus",n.open),n._input.removeEventListener("click",n.open))}]};function de(e,t){let r=[];if(e instanceof Array)r=e.map((e=>n.parseDate(e,t)));else if(e instanceof Date||"number"==typeof e)r=[n.parseDate(e,t)];else if("string"==typeof e)switch(n.config.mode){case"single":case"time":r=[n.parseDate(e,t)];break;case"multiple":r=e.split(n.config.conjunction).map((e=>n.parseDate(e,t)));break;case"range":r=e.split(n.l10n.rangeSeparator).map((e=>n.parseDate(e,t)))}else n.config.errorHandler(new Error(`Invalid date supplied: ${JSON.stringify(e)}`));n.selectedDates=n.config.allowInvalidPreload?r:r.filter((e=>e instanceof Date&&K(e,!1))),"range"===n.config.mode&&n.selectedDates.sort(((e,t)=>e.getTime()-t.getTime()))}function fe(e){return e.slice().map((e=>"string"==typeof e||"number"==typeof e||e instanceof Date?n.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:n.parseDate(e.from,void 0),to:n.parseDate(e.to,void 0)}:e)).filter((e=>e))}function pe(e,t){if(void 0===n.config)return;const r=n.config[e];if(void 0!==r&&r.length>0)for(let e=0;r[e]&&e{const r=new Date(n.currentYear,n.currentMonth,1);r.setMonth(n.currentMonth+t),n.config.showMonths>1||"static"===n.config.monthSelectorType?n.monthElements[t].textContent=y(r.getMonth(),n.config.shorthandCurrentMonth,n.l10n)+" ":n.monthsDropdownContainer.value=r.getMonth().toString(),e.value=r.getFullYear().toString()})),n._hidePrevMonthArrow=void 0!==n.config.minDate&&(n.currentYear===n.config.minDate.getFullYear()?n.currentMonth<=n.config.minDate.getMonth():n.currentYearn.config.maxDate.getMonth():n.currentYear>n.config.maxDate.getFullYear()))}function ve(e){return n.selectedDates.map((t=>n.formatDate(t,e))).filter(((e,t,r)=>"range"!==n.config.mode||n.config.enableTime||r.indexOf(e)===t)).join("range"!==n.config.mode?n.config.conjunction:n.l10n.rangeSeparator)}function ye(e=!0){void 0!==n.mobileInput&&n.mobileFormatStr&&(n.mobileInput.value=void 0!==n.latestSelectedDateObj?n.formatDate(n.latestSelectedDateObj,n.mobileFormatStr):""),n.input.value=ve(n.config.dateFormat),void 0!==n.altInput&&(n.altInput.value=ve(n.config.altFormat)),!1!==e&&pe("onValueUpdate")}function be(e){const t=g(e),r=n.prevMonthNav.contains(t),i=n.nextMonthNav.contains(t);r||i?V(r?-1:1):n.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?n.changeYear(n.currentYear+1):t.classList.contains("arrowDown")&&n.changeYear(n.currentYear-1)}return function(){n.element=n.input=e,n.isOpen=!1,function(){const a=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],s=Object.assign(Object.assign({},JSON.parse(JSON.stringify(e.dataset||{}))),t),l={};n.config.parseDate=s.parseDate,n.config.formatDate=s.formatDate,Object.defineProperty(n.config,"enable",{get:()=>n.config._enable,set:e=>{n.config._enable=fe(e)}}),Object.defineProperty(n.config,"disable",{get:()=>n.config._disable,set:e=>{n.config._disable=fe(e)}});const c="time"===s.mode;if(!s.dateFormat&&(s.enableTime||c)){const e=A.defaultConfig.dateFormat||i.dateFormat;l.dateFormat=s.noCalendar||c?"H:i"+(s.enableSeconds?":S":""):e+" H:i"+(s.enableSeconds?":S":"")}if(s.altInput&&(s.enableTime||c)&&!s.altFormat){const e=A.defaultConfig.altFormat||i.altFormat;l.altFormat=s.noCalendar||c?"h:i"+(s.enableSeconds?":S K":" K"):e+` h:i${s.enableSeconds?":S":""} K`}Object.defineProperty(n.config,"minDate",{get:()=>n.config._minDate,set:re("min")}),Object.defineProperty(n.config,"maxDate",{get:()=>n.config._maxDate,set:re("max")});const d=e=>t=>{n.config["min"===e?"_minTime":"_maxTime"]=n.parseDate(t,"H:i:S")};Object.defineProperty(n.config,"minTime",{get:()=>n.config._minTime,set:d("min")}),Object.defineProperty(n.config,"maxTime",{get:()=>n.config._maxTime,set:d("max")}),"time"===s.mode&&(n.config.noCalendar=!0,n.config.enableTime=!0);Object.assign(n.config,l,s);for(let e=0;evoid 0!==n.config[e])).forEach((e=>{n.config[e]=u(n.config[e]||[]).map(o)})),n.isMobile=!n.config.disableMobile&&!n.config.inline&&"single"===n.config.mode&&!n.config.disable.length&&!n.config.enable&&!n.config.weekNumbers&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);for(let e=0;e-1?n.config[e]=u(t[e]).map(o).concat(n.config[e]):void 0===s[e]&&(n.config[e]=t[e])}s.altInputClass||(n.config.altInputClass=ie().className+" "+n.config.altInputClass);pe("onParseConfig")}(),oe(),function(){if(n.input=ie(),!n.input)return void n.config.errorHandler(new Error("Invalid input element specified"));n.input._type=n.input.type,n.input.type="text",n.input.classList.add("flatpickr-input"),n._input=n.input,n.config.altInput&&(n.altInput=f(n.input.nodeName,n.config.altInputClass),n._input=n.altInput,n.altInput.placeholder=n.input.placeholder,n.altInput.disabled=n.input.disabled,n.altInput.required=n.input.required,n.altInput.tabIndex=n.input.tabIndex,n.altInput.type="text",n.input.setAttribute("type","hidden"),!n.config.static&&n.input.parentNode&&n.input.parentNode.insertBefore(n.altInput,n.input.nextSibling));n.config.allowInput||n._input.setAttribute("readonly","readonly");n._positionElement=n.config.positionElement||n._input}(),function(){n.selectedDates=[],n.now=n.parseDate(n.config.now)||new Date;const e=n.config.defaultDate||("INPUT"!==n.input.nodeName&&"TEXTAREA"!==n.input.nodeName||!n.input.placeholder||n.input.value!==n.input.placeholder?n.input.value:null);e&&de(e,n.config.dateFormat);n._initialDate=n.selectedDates.length>0?n.selectedDates[0]:n.config.minDate&&n.config.minDate.getTime()>n.now.getTime()?n.config.minDate:n.config.maxDate&&n.config.maxDate.getTime()0&&(n.latestSelectedDateObj=n.selectedDates[0]);void 0!==n.config.minTime&&(n.config.minTime=n.parseDate(n.config.minTime,"H:i"));void 0!==n.config.maxTime&&(n.config.maxTime=n.parseDate(n.config.maxTime,"H:i"));n.minDateHasTime=!!n.config.minDate&&(n.config.minDate.getHours()>0||n.config.minDate.getMinutes()>0||n.config.minDate.getSeconds()>0),n.maxDateHasTime=!!n.config.maxDate&&(n.config.maxDate.getHours()>0||n.config.maxDate.getMinutes()>0||n.config.maxDate.getSeconds()>0)}(),n.utils={getDaysInMonth:(e=n.currentMonth,t=n.currentYear)=>1===e&&(t%4==0&&t%100!=0||t%400==0)?29:n.l10n.daysInMonth[e]},n.isMobile||function(){const e=window.document.createDocumentFragment();if(n.calendarContainer=f("div","flatpickr-calendar"),n.calendarContainer.tabIndex=-1,!n.config.noCalendar){if(e.appendChild((n.monthNav=f("div","flatpickr-months"),n.yearElements=[],n.monthElements=[],n.prevMonthNav=f("span","flatpickr-prev-month"),n.prevMonthNav.innerHTML=n.config.prevArrow,n.nextMonthNav=f("span","flatpickr-next-month"),n.nextMonthNav.innerHTML=n.config.nextArrow,$(),Object.defineProperty(n,"_hidePrevMonthArrow",{get:()=>n.__hidePrevMonthArrow,set(e){n.__hidePrevMonthArrow!==e&&(d(n.prevMonthNav,"flatpickr-disabled",e),n.__hidePrevMonthArrow=e)}}),Object.defineProperty(n,"_hideNextMonthArrow",{get:()=>n.__hideNextMonthArrow,set(e){n.__hideNextMonthArrow!==e&&(d(n.nextMonthNav,"flatpickr-disabled",e),n.__hideNextMonthArrow=e)}}),n.currentYearElement=n.yearElements[0],ge(),n.monthNav)),n.innerContainer=f("div","flatpickr-innerContainer"),n.config.weekNumbers){const{weekWrapper:e,weekNumbers:t}=function(){n.calendarContainer.classList.add("hasWeeks");const e=f("div","flatpickr-weekwrapper");e.appendChild(f("span","flatpickr-weekday",n.l10n.weekAbbreviation));const t=f("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}();n.innerContainer.appendChild(e),n.weekNumbers=t,n.weekWrapper=e}n.rContainer=f("div","flatpickr-rContainer"),n.rContainer.appendChild(B()),n.daysContainer||(n.daysContainer=f("div","flatpickr-days"),n.daysContainer.tabIndex=-1),W(),n.rContainer.appendChild(n.daysContainer),n.innerContainer.appendChild(n.rContainer),e.appendChild(n.innerContainer)}n.config.enableTime&&e.appendChild(function(){n.calendarContainer.classList.add("hasTime"),n.config.noCalendar&&n.calendarContainer.classList.add("noCalendar");const e=M(n.config);n.timeContainer=f("div","flatpickr-time"),n.timeContainer.tabIndex=-1;const t=f("span","flatpickr-time-separator",":"),r=m("flatpickr-hour",{"aria-label":n.l10n.hourAriaLabel});n.hourElement=r.getElementsByTagName("input")[0];const i=m("flatpickr-minute",{"aria-label":n.l10n.minuteAriaLabel});n.minuteElement=i.getElementsByTagName("input")[0],n.hourElement.tabIndex=n.minuteElement.tabIndex=-1,n.hourElement.value=s(n.latestSelectedDateObj?n.latestSelectedDateObj.getHours():n.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),n.minuteElement.value=s(n.latestSelectedDateObj?n.latestSelectedDateObj.getMinutes():e.minutes),n.hourElement.setAttribute("step",n.config.hourIncrement.toString()),n.minuteElement.setAttribute("step",n.config.minuteIncrement.toString()),n.hourElement.setAttribute("min",n.config.time_24hr?"0":"1"),n.hourElement.setAttribute("max",n.config.time_24hr?"23":"12"),n.hourElement.setAttribute("maxlength","2"),n.minuteElement.setAttribute("min","0"),n.minuteElement.setAttribute("max","59"),n.minuteElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(r),n.timeContainer.appendChild(t),n.timeContainer.appendChild(i),n.config.time_24hr&&n.timeContainer.classList.add("time24hr");if(n.config.enableSeconds){n.timeContainer.classList.add("hasSeconds");const t=m("flatpickr-second");n.secondElement=t.getElementsByTagName("input")[0],n.secondElement.value=s(n.latestSelectedDateObj?n.latestSelectedDateObj.getSeconds():e.seconds),n.secondElement.setAttribute("step",n.minuteElement.getAttribute("step")),n.secondElement.setAttribute("min","0"),n.secondElement.setAttribute("max","59"),n.secondElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(f("span","flatpickr-time-separator",":")),n.timeContainer.appendChild(t)}n.config.time_24hr||(n.amPM=f("span","flatpickr-am-pm",n.l10n.amPM[l((n.latestSelectedDateObj?n.hourElement.value:n.config.defaultHour)>11)]),n.amPM.title=n.l10n.toggleTitle,n.amPM.tabIndex=-1,n.timeContainer.appendChild(n.amPM));return n.timeContainer}());d(n.calendarContainer,"rangeMode","range"===n.config.mode),d(n.calendarContainer,"animate",!0===n.config.animate),d(n.calendarContainer,"multiMonth",n.config.showMonths>1),n.calendarContainer.appendChild(e);const t=void 0!==n.config.appendTo&&void 0!==n.config.appendTo.nodeType;if((n.config.inline||n.config.static)&&(n.calendarContainer.classList.add(n.config.inline?"inline":"static"),n.config.inline&&(!t&&n.element.parentNode?n.element.parentNode.insertBefore(n.calendarContainer,n._input.nextSibling):void 0!==n.config.appendTo&&n.config.appendTo.appendChild(n.calendarContainer)),n.config.static)){const e=f("div","flatpickr-wrapper");n.element.parentNode&&n.element.parentNode.insertBefore(e,n.element),e.appendChild(n.element),n.altInput&&e.appendChild(n.altInput),e.appendChild(n.calendarContainer)}n.config.static||n.config.inline||(void 0!==n.config.appendTo?n.config.appendTo:window.document.body).appendChild(n.calendarContainer)}(),function(){n.config.wrap&&["open","close","toggle","clear"].forEach((e=>{Array.prototype.forEach.call(n.element.querySelectorAll(`[data-${e}]`),(t=>j(t,"click",n[e])))}));if(n.isMobile)return void function(){const e=n.config.enableTime?n.config.noCalendar?"time":"datetime-local":"date";n.mobileInput=f("input",n.input.className+" flatpickr-mobile"),n.mobileInput.tabIndex=1,n.mobileInput.type=e,n.mobileInput.disabled=n.input.disabled,n.mobileInput.required=n.input.required,n.mobileInput.placeholder=n.input.placeholder,n.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",n.selectedDates.length>0&&(n.mobileInput.defaultValue=n.mobileInput.value=n.formatDate(n.selectedDates[0],n.mobileFormatStr));n.config.minDate&&(n.mobileInput.min=n.formatDate(n.config.minDate,"Y-m-d"));n.config.maxDate&&(n.mobileInput.max=n.formatDate(n.config.maxDate,"Y-m-d"));n.input.getAttribute("step")&&(n.mobileInput.step=String(n.input.getAttribute("step")));n.input.type="hidden",void 0!==n.altInput&&(n.altInput.type="hidden");try{n.input.parentNode&&n.input.parentNode.insertBefore(n.mobileInput,n.input.nextSibling)}catch(e){}j(n.mobileInput,"change",(e=>{n.setDate(g(e).value,!1,n.mobileFormatStr),pe("onChange"),pe("onClose")}))}();const e=c(ne,50);n._debouncedChange=c(O,300),n.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&j(n.daysContainer,"mouseover",(e=>{"range"===n.config.mode&&te(g(e))}));j(window.document.body,"keydown",ee),n.config.inline||n.config.static||j(window,"resize",e);void 0!==window.ontouchstart?j(window.document,"touchstart",Z):j(window.document,"mousedown",Z);j(window.document,"focus",Z,{capture:!0}),!0===n.config.clickOpens&&(j(n._input,"focus",n.open),j(n._input,"click",n.open));void 0!==n.daysContainer&&(j(n.monthNav,"click",be),j(n.monthNav,["keyup","increment"],N),j(n.daysContainer,"click",ce));if(void 0!==n.timeContainer&&void 0!==n.minuteElement&&void 0!==n.hourElement){const e=e=>g(e).select();j(n.timeContainer,["increment"],b),j(n.timeContainer,"blur",b,{capture:!0}),j(n.timeContainer,"click",L),j([n.hourElement,n.minuteElement],["focus","click"],e),void 0!==n.secondElement&&j(n.secondElement,"focus",(()=>n.secondElement&&n.secondElement.select())),void 0!==n.amPM&&j(n.amPM,"click",(e=>{b(e),O()}))}n.config.allowInput&&j(n._input,"blur",Q)}(),(n.selectedDates.length||n.config.noCalendar)&&(n.config.enableTime&&E(n.config.noCalendar?n.latestSelectedDateObj:void 0),ye(!1)),v();const a=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!n.isMobile&&a&&ae(),pe("onReady")}(),n}function S(e,t){const n=Array.prototype.slice.call(e).filter((e=>e instanceof HTMLElement)),r=[];for(let e=0;e{A.l10ns.default=Object.assign(Object.assign({},A.l10ns.default),e)},A.setDefaults=e=>{A.defaultConfig=Object.assign(Object.assign({},A.defaultConfig),e)},A.parseDate=C({}),A.formatDate=k({}),A.compareDates=D,"undefined"!=typeof jQuery&&void 0!==jQuery.fn&&(jQuery.fn.flatpickr=function(e){return S(this,e)}),Date.prototype.fp_incr=function(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+("string"==typeof e?parseInt(e,10):e))},"undefined"!=typeof window&&(window.flatpickr=A);window.$=window.jQuery=n(755),n(587),n(202)},797:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r=n(645),i=n.n(r)()((function(e){return e[1]}));i.push([e.id,'.flatpickr-calendar{-webkit-animation:none;animation:none;background:transparent;background:#fff;border:0;border-radius:5px;-webkit-box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);box-shadow:1px 0 0 #e6e6e6,-1px 0 0 #e6e6e6,0 1px 0 #e6e6e6,0 -1px 0 #e6e6e6,0 3px 13px rgba(0,0,0,.08);-webkit-box-sizing:border-box;box-sizing:border-box;direction:ltr;display:none;font-size:14px;line-height:24px;opacity:0;padding:0;position:absolute;text-align:center;-ms-touch-action:manipulation;touch-action:manipulation;visibility:hidden;width:307.875px}.flatpickr-calendar.inline,.flatpickr-calendar.open{max-height:640px;opacity:1;visibility:visible}.flatpickr-calendar.open{display:inline-block;z-index:99999}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1);animation:fpFadeInDown .3s cubic-bezier(.23,1,.32,1)}.flatpickr-calendar.inline{display:block;position:relative;top:2px}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px)}.flatpickr-calendar.static.open{display:block;z-index:999}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none!important;box-shadow:none!important}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-calendar .hasTime .dayContainer,.flatpickr-calendar .hasWeeks .dayContainer{border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0}.flatpickr-calendar.hasTime .flatpickr-time{border-top:1px solid #e6e6e6;height:40px}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto}.flatpickr-calendar:after,.flatpickr-calendar:before{border:solid transparent;content:"";display:block;height:0;left:22px;pointer-events:none;position:absolute;width:0}.flatpickr-calendar.arrowRight:after,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.rightMost:before{left:auto;right:22px}.flatpickr-calendar.arrowCenter:after,.flatpickr-calendar.arrowCenter:before{left:50%;right:50%}.flatpickr-calendar:before{border-width:5px;margin:0 -5px}.flatpickr-calendar:after{border-width:4px;margin:0 -4px}.flatpickr-calendar.arrowTop:after,.flatpickr-calendar.arrowTop:before{bottom:100%}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff}.flatpickr-calendar.arrowBottom:after,.flatpickr-calendar.arrowBottom:before{top:100%}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff}.flatpickr-calendar:focus{outline:0}.flatpickr-wrapper{display:inline-block;position:relative}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-months .flatpickr-month{fill:rgba(0,0,0,.9);-webkit-box-flex:1;background:transparent;color:rgba(0,0,0,.9);-webkit-flex:1;-ms-flex:1;flex:1;height:34px;line-height:1;overflow:hidden;position:relative;text-align:center;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.flatpickr-months .flatpickr-next-month,.flatpickr-months .flatpickr-prev-month{fill:rgba(0,0,0,.9);color:rgba(0,0,0,.9);cursor:pointer;height:34px;padding:10px;position:absolute;text-decoration:none;top:0;z-index:3}.flatpickr-months .flatpickr-next-month.flatpickr-disabled,.flatpickr-months .flatpickr-prev-month.flatpickr-disabled{display:none}.flatpickr-months .flatpickr-next-month i,.flatpickr-months .flatpickr-prev-month i{position:relative}.flatpickr-months .flatpickr-next-month.flatpickr-prev-month,.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month{left:0}.flatpickr-months .flatpickr-next-month.flatpickr-next-month,.flatpickr-months .flatpickr-prev-month.flatpickr-next-month{right:0}.flatpickr-months .flatpickr-next-month:hover,.flatpickr-months .flatpickr-prev-month:hover{color:#959ea9}.flatpickr-months .flatpickr-next-month:hover svg,.flatpickr-months .flatpickr-prev-month:hover svg{fill:#f64747}.flatpickr-months .flatpickr-next-month svg,.flatpickr-months .flatpickr-prev-month svg{height:14px;width:14px}.flatpickr-months .flatpickr-next-month svg path,.flatpickr-months .flatpickr-prev-month svg path{fill:inherit;-webkit-transition:fill .1s;transition:fill .1s}.numInputWrapper{height:auto;position:relative}.numInputWrapper input,.numInputWrapper span{display:inline-block}.numInputWrapper input{width:100%}.numInputWrapper input::-ms-clear{display:none}.numInputWrapper input::-webkit-inner-spin-button,.numInputWrapper input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.numInputWrapper span{border:1px solid rgba(57,57,57,.15);-webkit-box-sizing:border-box;box-sizing:border-box;cursor:pointer;height:50%;line-height:50%;opacity:0;padding:0 4px 0 2px;position:absolute;right:0;width:14px}.numInputWrapper span:hover{background:rgba(0,0,0,.1)}.numInputWrapper span:active{background:rgba(0,0,0,.2)}.numInputWrapper span:after{content:"";display:block;position:absolute}.numInputWrapper span.arrowUp{border-bottom:0;top:0}.numInputWrapper span.arrowUp:after{border-bottom:4px solid rgba(57,57,57,.6);border-left:4px solid transparent;border-right:4px solid transparent;top:26%}.numInputWrapper span.arrowDown{top:50%}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57,57,57,.6);top:40%}.numInputWrapper span svg{height:auto;width:inherit}.numInputWrapper span svg path{fill:rgba(0,0,0,.5)}.numInputWrapper:hover{background:rgba(0,0,0,.05)}.numInputWrapper:hover span{opacity:1}.flatpickr-current-month{color:inherit;display:inline-block;font-size:135%;font-weight:300;height:34px;left:12.5%;line-height:inherit;line-height:1;padding:7.48px 0 0;position:absolute;text-align:center;-webkit-transform:translateZ(0);transform:translateZ(0);width:75%}.flatpickr-current-month span.cur-month{color:inherit;display:inline-block;font-family:inherit;font-weight:700;margin-left:.5ch;padding:0}.flatpickr-current-month span.cur-month:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .numInputWrapper{display:inline-block;width:6ch;width:7ch\\0}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0,0,0,.9)}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0,0,0,.9)}.flatpickr-current-month input.cur-year{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background:transparent;border:0;border-radius:0;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;display:inline-block;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:0;padding:0 0 0 .5ch;vertical-align:initial}.flatpickr-current-month input.cur-year:focus{outline:0}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{background:transparent;color:rgba(0,0,0,.5);font-size:100%;pointer-events:none}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;-webkit-appearance:menulist;-moz-appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;-webkit-box-sizing:border-box;color:inherit;cursor:pointer;font-family:inherit;font-size:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0;outline:none;padding:0 0 0 .5ch;position:relative;vertical-align:initial;width:auto}.flatpickr-current-month .flatpickr-monthDropdown-months:active,.flatpickr-current-month .flatpickr-monthDropdown-months:focus{outline:none}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0,0,0,.05)}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0}.flatpickr-weekdays{-webkit-box-align:center;-ms-flex-align:center;-webkit-align-items:center;align-items:center;background:transparent;height:28px;overflow:hidden;text-align:center;width:100%}.flatpickr-weekdays,.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}.flatpickr-weekdays .flatpickr-weekdaycontainer,span.flatpickr-weekday{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}span.flatpickr-weekday{background:transparent;color:rgba(0,0,0,.54);cursor:default;display:block;font-size:90%;font-weight:bolder;line-height:1;margin:0;text-align:center}.dayContainer,.flatpickr-weeks{padding:1px 0 0}.flatpickr-days{-webkit-box-align:start;-ms-flex-align:start;-webkit-align-items:flex-start;align-items:flex-start;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;position:relative;width:307.875px}.flatpickr-days:focus{outline:0}.dayContainer{-ms-flex-pack:justify;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-webkit-justify-content:space-around;justify-content:space-around;max-width:307.875px;min-width:307.875px;opacity:1;outline:0;padding:0;text-align:left;-webkit-transform:translateZ(0);transform:translateZ(0);width:307.875px}.dayContainer+.dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6}.flatpickr-day{-ms-flex-preferred-size:14.2857143%;-webkit-box-pack:center;-ms-flex-pack:center;background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;display:inline-block;-webkit-flex-basis:14.2857143%;flex-basis:14.2857143%;font-weight:400;height:39px;-webkit-justify-content:center;justify-content:center;line-height:39px;margin:0;max-width:39px;position:relative;text-align:center;width:14.2857143%}.flatpickr-day.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day.nextMonthDay:focus,.flatpickr-day.nextMonthDay:hover,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.today.inRange,.flatpickr-day:focus,.flatpickr-day:hover{background:#e6e6e6;border-color:#e6e6e6;cursor:pointer;outline:0}.flatpickr-day.today{border-color:#959ea9}.flatpickr-day.today:focus,.flatpickr-day.today:hover{background:#959ea9;border-color:#959ea9;color:#fff}.flatpickr-day.endRange,.flatpickr-day.endRange.inRange,.flatpickr-day.endRange.nextMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.endRange:focus,.flatpickr-day.endRange:hover,.flatpickr-day.selected,.flatpickr-day.selected.inRange,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.selected:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange,.flatpickr-day.startRange.inRange,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.startRange:focus,.flatpickr-day.startRange:hover{background:#569ff7;border-color:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff}.flatpickr-day.endRange.startRange,.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange{border-radius:50px 0 0 50px}.flatpickr-day.endRange.endRange,.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange{border-radius:0 50px 50px 0}.flatpickr-day.endRange.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.selected.startRange+.endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange+.endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7}.flatpickr-day.endRange.startRange.endRange,.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange{border-radius:50px}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6,5px 0 0 #e6e6e6}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.nextMonthDay,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.prevMonthDay{background:transparent;border-color:transparent;color:rgba(57,57,57,.3);cursor:default}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{color:rgba(57,57,57,.1);cursor:not-allowed}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7,5px 0 0 #569ff7}.flatpickr-day.hidden{visibility:hidden}.rangeMode .flatpickr-day{margin-top:1px}.flatpickr-weekwrapper{float:left}.flatpickr-weekwrapper .flatpickr-weeks{-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6;padding:0 12px}.flatpickr-weekwrapper .flatpickr-weekday{float:none;line-height:28px;width:100%}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{background:transparent;border:none;color:rgba(57,57,57,.3);cursor:default;display:block;max-width:none;width:100%}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden}.flatpickr-innerContainer,.flatpickr-rContainer{-webkit-box-sizing:border-box;box-sizing:border-box}.flatpickr-rContainer{display:inline-block;padding:0}.flatpickr-time{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:0;line-height:40px;max-height:40px;outline:0;overflow:hidden;text-align:center}.flatpickr-time:after{clear:both;content:"";display:table}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;float:left;height:40px;width:40%}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939}.flatpickr-time.hasSeconds .numInputWrapper{width:26%}.flatpickr-time.time24hr .numInputWrapper{width:49%}.flatpickr-time input{-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;background:transparent;border:0;border-radius:0;-webkit-box-shadow:none;box-shadow:none;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;font-size:14px;height:inherit;line-height:inherit;margin:0;padding:0;position:relative;text-align:center}.flatpickr-time input.flatpickr-hour{font-weight:700}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400}.flatpickr-time input:focus{border:0;outline:0}.flatpickr-time .flatpickr-am-pm,.flatpickr-time .flatpickr-time-separator{-ms-flex-item-align:center;-webkit-align-self:center;align-self:center;color:#393939;float:left;font-weight:700;height:inherit;line-height:inherit;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:2%}.flatpickr-time .flatpickr-am-pm{cursor:pointer;font-weight:400;outline:0;text-align:center;width:18%}.flatpickr-time .flatpickr-am-pm:focus,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time input:hover{background:#eee}.flatpickr-input[readonly]{cursor:pointer}@-webkit-keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fpFadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}',""]);const o=i},645:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n=e(t);return t[2]?"@media ".concat(t[2]," {").concat(n,"}"):n})).join("")},t.i=function(e,n,r){"string"==typeof e&&(e=[[null,e,""]]);var i={};if(r)for(var o=0;o{"use strict";"function"!=typeof Object.assign&&(Object.assign=function(e,...t){if(!e)throw TypeError("Cannot convert undefined or null to object");for(const n of t)n&&Object.keys(n).forEach((t=>e[t]=n[t]));return e})},587:(e,t,n)=>{var r,i,o;i=[n(755)],r=function(e){e.extend(e.fn,{validate:function(t){if(this.length){var n=e.data(this[0],"validator");return n||(this.attr("novalidate","novalidate"),n=new e.validator(t,this[0]),e.data(this[0],"validator",n),n.settings.onsubmit&&(this.on("click.validate",":submit",(function(t){n.submitButton=t.currentTarget,e(this).hasClass("cancel")&&(n.cancelSubmit=!0),void 0!==e(this).attr("formnovalidate")&&(n.cancelSubmit=!0)})),this.on("submit.validate",(function(t){function r(){var r,i;return n.submitButton&&(n.settings.submitHandler||n.formSubmitted)&&(r=e("").attr("name",n.submitButton.name).val(e(n.submitButton).val()).appendTo(n.currentForm)),!(n.settings.submitHandler&&!n.settings.debug)||(i=n.settings.submitHandler.call(n,n.currentForm,t),r&&r.remove(),void 0!==i&&i)}return n.settings.debug&&t.preventDefault(),n.cancelSubmit?(n.cancelSubmit=!1,r()):n.form()?n.pendingRequest?(n.formSubmitted=!0,!1):r():(n.focusInvalid(),!1)}))),n)}t&&t.debug&&window.console&&console.warn("Nothing selected, can't validate, returning nothing.")},valid:function(){var t,n,r;return e(this[0]).is("form")?t=this.validate().form():(r=[],t=!0,n=e(this[0].form).validate(),this.each((function(){(t=n.element(this)&&t)||(r=r.concat(n.errorList))})),n.errorList=r),t},rules:function(t,n){var r,i,o,a,s,l,c=this[0],u=void 0!==this.attr("contenteditable")&&"false"!==this.attr("contenteditable");if(null!=c&&(!c.form&&u&&(c.form=this.closest("form")[0],c.name=this.attr("name")),null!=c.form)){if(t)switch(i=(r=e.data(c.form,"validator").settings).rules,o=e.validator.staticRules(c),t){case"add":e.extend(o,e.validator.normalizeRule(n)),delete o.messages,i[c.name]=o,n.messages&&(r.messages[c.name]=e.extend(r.messages[c.name],n.messages));break;case"remove":return n?(l={},e.each(n.split(/\s/),(function(e,t){l[t]=o[t],delete o[t]})),l):(delete i[c.name],o)}return(a=e.validator.normalizeRules(e.extend({},e.validator.classRules(c),e.validator.attributeRules(c),e.validator.dataRules(c),e.validator.staticRules(c)),c)).required&&(s=a.required,delete a.required,a=e.extend({required:s},a)),a.remote&&(s=a.remote,delete a.remote,a=e.extend(a,{remote:s})),a}}});var t,n=function(e){return e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")};e.extend(e.expr.pseudos||e.expr[":"],{blank:function(t){return!n(""+e(t).val())},filled:function(t){var r=e(t).val();return null!==r&&!!n(""+r)},unchecked:function(t){return!e(t).prop("checked")}}),e.validator=function(t,n){this.settings=e.extend(!0,{},e.validator.defaults,t),this.currentForm=n,this.init()},e.validator.format=function(t,n){return 1===arguments.length?function(){var n=e.makeArray(arguments);return n.unshift(t),e.validator.format.apply(this,n)}:(void 0===n||(arguments.length>2&&n.constructor!==Array&&(n=e.makeArray(arguments).slice(1)),n.constructor!==Array&&(n=[n]),e.each(n,(function(e,n){t=t.replace(new RegExp("\\{"+e+"\\}","g"),(function(){return n}))}))),t)},e.extend(e.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",pendingClass:"pending",validClass:"valid",errorElement:"label",focusCleanup:!1,focusInvalid:!0,errorContainer:e([]),errorLabelContainer:e([]),onsubmit:!0,ignore:":hidden",ignoreTitle:!1,onfocusin:function(e){this.lastActive=e,this.settings.focusCleanup&&(this.settings.unhighlight&&this.settings.unhighlight.call(this,e,this.settings.errorClass,this.settings.validClass),this.hideThese(this.errorsFor(e)))},onfocusout:function(e){this.checkable(e)||!(e.name in this.submitted)&&this.optional(e)||this.element(e)},onkeyup:function(t,n){var r=[16,17,18,20,35,36,37,38,39,40,45,144,225];9===n.which&&""===this.elementValue(t)||-1!==e.inArray(n.keyCode,r)||(t.name in this.submitted||t.name in this.invalid)&&this.element(t)},onclick:function(e){e.name in this.submitted?this.element(e):e.parentNode.name in this.submitted&&this.element(e.parentNode)},highlight:function(t,n,r){"radio"===t.type?this.findByName(t.name).addClass(n).removeClass(r):e(t).addClass(n).removeClass(r)},unhighlight:function(t,n,r){"radio"===t.type?this.findByName(t.name).removeClass(n).addClass(r):e(t).removeClass(n).addClass(r)}},setDefaults:function(t){e.extend(e.validator.defaults,t)},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",equalTo:"Please enter the same value again.",maxlength:e.validator.format("Please enter no more than {0} characters."),minlength:e.validator.format("Please enter at least {0} characters."),rangelength:e.validator.format("Please enter a value between {0} and {1} characters long."),range:e.validator.format("Please enter a value between {0} and {1}."),max:e.validator.format("Please enter a value less than or equal to {0}."),min:e.validator.format("Please enter a value greater than or equal to {0}."),step:e.validator.format("Please enter a multiple of {0}.")},autoCreateRanges:!1,prototype:{init:function(){this.labelContainer=e(this.settings.errorLabelContainer),this.errorContext=this.labelContainer.length&&this.labelContainer||e(this.currentForm),this.containers=e(this.settings.errorContainer).add(this.settings.errorLabelContainer),this.submitted={},this.valueCache={},this.pendingRequest=0,this.pending={},this.invalid={},this.reset();var t,n=this.currentForm,r=this.groups={};function i(t){var r=void 0!==e(this).attr("contenteditable")&&"false"!==e(this).attr("contenteditable");if(!this.form&&r&&(this.form=e(this).closest("form")[0],this.name=e(this).attr("name")),n===this.form){var i=e.data(this.form,"validator"),o="on"+t.type.replace(/^validate/,""),a=i.settings;a[o]&&!e(this).is(a.ignore)&&a[o].call(i,this,t)}}e.each(this.settings.groups,(function(t,n){"string"==typeof n&&(n=n.split(/\s/)),e.each(n,(function(e,n){r[n]=t}))})),t=this.settings.rules,e.each(t,(function(n,r){t[n]=e.validator.normalizeRule(r)})),e(this.currentForm).on("focusin.validate focusout.validate keyup.validate",":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], [type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], [type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], [type='radio'], [type='checkbox'], [contenteditable], [type='button']",i).on("click.validate","select, option, [type='radio'], [type='checkbox']",i),this.settings.invalidHandler&&e(this.currentForm).on("invalid-form.validate",this.settings.invalidHandler)},form:function(){return this.checkForm(),e.extend(this.submitted,this.errorMap),this.invalid=e.extend({},this.errorMap),this.valid()||e(this.currentForm).triggerHandler("invalid-form",[this]),this.showErrors(),this.valid()},checkForm:function(){this.prepareForm();for(var e=0,t=this.currentElements=this.elements();t[e];e++)this.check(t[e]);return this.valid()},element:function(t){var n,r,i=this.clean(t),o=this.validationTargetFor(i),a=this,s=!0;return void 0===o?delete this.invalid[i.name]:(this.prepareElement(o),this.currentElements=e(o),(r=this.groups[o.name])&&e.each(this.groups,(function(e,t){t===r&&e!==o.name&&(i=a.validationTargetFor(a.clean(a.findByName(e))))&&i.name in a.invalid&&(a.currentElements.push(i),s=a.check(i)&&s)})),n=!1!==this.check(o),s=s&&n,this.invalid[o.name]=!n,this.numberOfInvalids()||(this.toHide=this.toHide.add(this.containers)),this.showErrors(),e(t).attr("aria-invalid",!n)),s},showErrors:function(t){if(t){var n=this;e.extend(this.errorMap,t),this.errorList=e.map(this.errorMap,(function(e,t){return{message:e,element:n.findByName(t)[0]}})),this.successList=e.grep(this.successList,(function(e){return!(e.name in t)}))}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors()},resetForm:function(){e.fn.resetForm&&e(this.currentForm).resetForm(),this.invalid={},this.submitted={},this.prepareForm(),this.hideErrors();var t=this.elements().removeData("previousValue").removeAttr("aria-invalid");this.resetElements(t)},resetElements:function(e){var t;if(this.settings.unhighlight)for(t=0;e[t];t++)this.settings.unhighlight.call(this,e[t],this.settings.errorClass,""),this.findByName(e[t].name).removeClass(this.settings.validClass);else e.removeClass(this.settings.errorClass).removeClass(this.settings.validClass)},numberOfInvalids:function(){return this.objectLength(this.invalid)},objectLength:function(e){var t,n=0;for(t in e)void 0!==e[t]&&null!==e[t]&&!1!==e[t]&&n++;return n},hideErrors:function(){this.hideThese(this.toHide)},hideThese:function(e){e.not(this.containers).text(""),this.addWrapper(e).hide()},valid:function(){return 0===this.size()},size:function(){return this.errorList.length},focusInvalid:function(){if(this.settings.focusInvalid)try{e(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").trigger("focus").trigger("focusin")}catch(e){}},findLastActive:function(){var t=this.lastActive;return t&&1===e.grep(this.errorList,(function(e){return e.element.name===t.name})).length&&t},elements:function(){var t=this,n={};return e(this.currentForm).find("input, select, textarea, [contenteditable]").not(":submit, :reset, :image, :disabled").not(this.settings.ignore).filter((function(){var r=this.name||e(this).attr("name"),i=void 0!==e(this).attr("contenteditable")&&"false"!==e(this).attr("contenteditable");return!r&&t.settings.debug&&window.console&&console.error("%o has no name assigned",this),i&&(this.form=e(this).closest("form")[0],this.name=r),!(this.form!==t.currentForm||r in n||!t.objectLength(e(this).rules())||(n[r]=!0,0))}))},clean:function(t){return e(t)[0]},errors:function(){var t=this.settings.errorClass.split(" ").join(".");return e(this.settings.errorElement+"."+t,this.errorContext)},resetInternals:function(){this.successList=[],this.errorList=[],this.errorMap={},this.toShow=e([]),this.toHide=e([])},reset:function(){this.resetInternals(),this.currentElements=e([])},prepareForm:function(){this.reset(),this.toHide=this.errors().add(this.containers)},prepareElement:function(e){this.reset(),this.toHide=this.errorsFor(e)},elementValue:function(t){var n,r,i=e(t),o=t.type,a=void 0!==i.attr("contenteditable")&&"false"!==i.attr("contenteditable");return"radio"===o||"checkbox"===o?this.findByName(t.name).filter(":checked").val():"number"===o&&void 0!==t.validity?t.validity.badInput?"NaN":i.val():(n=a?i.text():i.val(),"file"===o?"C:\\fakepath\\"===n.substr(0,12)?n.substr(12):(r=n.lastIndexOf("/"))>=0||(r=n.lastIndexOf("\\"))>=0?n.substr(r+1):n:"string"==typeof n?n.replace(/\r/g,""):n)},check:function(t){t=this.validationTargetFor(this.clean(t));var n,r,i,o,a=e(t).rules(),s=e.map(a,(function(e,t){return t})).length,l=!1,c=this.elementValue(t);for(r in"function"==typeof a.normalizer?o=a.normalizer:"function"==typeof this.settings.normalizer&&(o=this.settings.normalizer),o&&(c=o.call(t,c),delete a.normalizer),a){i={method:r,parameters:a[r]};try{if("dependency-mismatch"===(n=e.validator.methods[r].call(this,c,t,i.parameters))&&1===s){l=!0;continue}if(l=!1,"pending"===n)return void(this.toHide=this.toHide.not(this.errorsFor(t)));if(!n)return this.formatAndAdd(t,i),!1}catch(e){throw this.settings.debug&&window.console&&console.log("Exception occurred when checking element "+t.id+", check the '"+i.method+"' method.",e),e instanceof TypeError&&(e.message+=". Exception occurred when checking element "+t.id+", check the '"+i.method+"' method."),e}}if(!l)return this.objectLength(a)&&this.successList.push(t),!0},customDataMessage:function(t,n){return e(t).data("msg"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase())||e(t).data("msg")},customMessage:function(e,t){var n=this.settings.messages[e];return n&&(n.constructor===String?n:n[t])},findDefined:function(){for(var e=0;eWarning: No message defined for "+t.name+""),i=/\$?\{(\d+)\}/g;return"function"==typeof r?r=r.call(this,n.parameters,t):i.test(r)&&(r=e.validator.format(r.replace(i,"{$1}"),n.parameters)),r},formatAndAdd:function(e,t){var n=this.defaultMessage(e,t);this.errorList.push({message:n,element:e,method:t.method}),this.errorMap[e.name]=n,this.submitted[e.name]=n},addWrapper:function(e){return this.settings.wrapper&&(e=e.add(e.parent(this.settings.wrapper))),e},defaultShowErrors:function(){var e,t,n;for(e=0;this.errorList[e];e++)n=this.errorList[e],this.settings.highlight&&this.settings.highlight.call(this,n.element,this.settings.errorClass,this.settings.validClass),this.showLabel(n.element,n.message);if(this.errorList.length&&(this.toShow=this.toShow.add(this.containers)),this.settings.success)for(e=0;this.successList[e];e++)this.showLabel(this.successList[e]);if(this.settings.unhighlight)for(e=0,t=this.validElements();t[e];e++)this.settings.unhighlight.call(this,t[e],this.settings.errorClass,this.settings.validClass);this.toHide=this.toHide.not(this.toShow),this.hideErrors(),this.addWrapper(this.toShow).show()},validElements:function(){return this.currentElements.not(this.invalidElements())},invalidElements:function(){return e(this.errorList).map((function(){return this.element}))},showLabel:function(t,n){var r,i,o,a,s=this.errorsFor(t),l=this.idOrName(t),c=e(t).attr("aria-describedby");s.length?(s.removeClass(this.settings.validClass).addClass(this.settings.errorClass),s.html(n)):(r=s=e("<"+this.settings.errorElement+">").attr("id",l+"-error").addClass(this.settings.errorClass).html(n||""),this.settings.wrapper&&(r=s.hide().show().wrap("<"+this.settings.wrapper+"/>").parent()),this.labelContainer.length?this.labelContainer.append(r):this.settings.errorPlacement?this.settings.errorPlacement.call(this,r,e(t)):r.insertAfter(t),s.is("label")?s.attr("for",l):0===s.parents("label[for='"+this.escapeCssMeta(l)+"']").length&&(o=s.attr("id"),c?c.match(new RegExp("\\b"+this.escapeCssMeta(o)+"\\b"))||(c+=" "+o):c=o,e(t).attr("aria-describedby",c),(i=this.groups[t.name])&&(a=this,e.each(a.groups,(function(t,n){n===i&&e("[name='"+a.escapeCssMeta(t)+"']",a.currentForm).attr("aria-describedby",s.attr("id"))}))))),!n&&this.settings.success&&(s.text(""),"string"==typeof this.settings.success?s.addClass(this.settings.success):this.settings.success(s,t)),this.toShow=this.toShow.add(s)},errorsFor:function(t){var n=this.escapeCssMeta(this.idOrName(t)),r=e(t).attr("aria-describedby"),i="label[for='"+n+"'], label[for='"+n+"'] *";return r&&(i=i+", #"+this.escapeCssMeta(r).replace(/\s+/g,", #")),this.errors().filter(i)},escapeCssMeta:function(e){return e.replace(/([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g,"\\$1")},idOrName:function(e){return this.groups[e.name]||(this.checkable(e)?e.name:e.id||e.name)},validationTargetFor:function(t){return this.checkable(t)&&(t=this.findByName(t.name)),e(t).not(this.settings.ignore)[0]},checkable:function(e){return/radio|checkbox/i.test(e.type)},findByName:function(t){return e(this.currentForm).find("[name='"+this.escapeCssMeta(t)+"']")},getLength:function(t,n){switch(n.nodeName.toLowerCase()){case"select":return e("option:selected",n).length;case"input":if(this.checkable(n))return this.findByName(n.name).filter(":checked").length}return t.length},depend:function(e,t){return!this.dependTypes[typeof e]||this.dependTypes[typeof e](e,t)},dependTypes:{boolean:function(e){return e},string:function(t,n){return!!e(t,n.form).length},function:function(e,t){return e(t)}},optional:function(t){var n=this.elementValue(t);return!e.validator.methods.required.call(this,n,t)&&"dependency-mismatch"},startRequest:function(t){this.pending[t.name]||(this.pendingRequest++,e(t).addClass(this.settings.pendingClass),this.pending[t.name]=!0)},stopRequest:function(t,n){this.pendingRequest--,this.pendingRequest<0&&(this.pendingRequest=0),delete this.pending[t.name],e(t).removeClass(this.settings.pendingClass),n&&0===this.pendingRequest&&this.formSubmitted&&this.form()?(e(this.currentForm).submit(),this.submitButton&&e("input:hidden[name='"+this.submitButton.name+"']",this.currentForm).remove(),this.formSubmitted=!1):!n&&0===this.pendingRequest&&this.formSubmitted&&(e(this.currentForm).triggerHandler("invalid-form",[this]),this.formSubmitted=!1)},previousValue:function(t,n){return n="string"==typeof n&&n||"remote",e.data(t,"previousValue")||e.data(t,"previousValue",{old:null,valid:!0,message:this.defaultMessage(t,{method:n})})},destroy:function(){this.resetForm(),e(this.currentForm).off(".validate").removeData("validator").find(".validate-equalTo-blur").off(".validate-equalTo").removeClass("validate-equalTo-blur").find(".validate-lessThan-blur").off(".validate-lessThan").removeClass("validate-lessThan-blur").find(".validate-lessThanEqual-blur").off(".validate-lessThanEqual").removeClass("validate-lessThanEqual-blur").find(".validate-greaterThanEqual-blur").off(".validate-greaterThanEqual").removeClass("validate-greaterThanEqual-blur").find(".validate-greaterThan-blur").off(".validate-greaterThan").removeClass("validate-greaterThan-blur")}},classRuleSettings:{required:{required:!0},email:{email:!0},url:{url:!0},date:{date:!0},dateISO:{dateISO:!0},number:{number:!0},digits:{digits:!0},creditcard:{creditcard:!0}},addClassRules:function(t,n){t.constructor===String?this.classRuleSettings[t]=n:e.extend(this.classRuleSettings,t)},classRules:function(t){var n={},r=e(t).attr("class");return r&&e.each(r.split(" "),(function(){this in e.validator.classRuleSettings&&e.extend(n,e.validator.classRuleSettings[this])})),n},normalizeAttributeRule:function(e,t,n,r){/min|max|step/.test(n)&&(null===t||/number|range|text/.test(t))&&(r=Number(r),isNaN(r)&&(r=void 0)),r||0===r?e[n]=r:t===n&&"range"!==t&&(e[n]=!0)},attributeRules:function(t){var n,r,i={},o=e(t),a=t.getAttribute("type");for(n in e.validator.methods)"required"===n?(""===(r=t.getAttribute(n))&&(r=!0),r=!!r):r=o.attr(n),this.normalizeAttributeRule(i,a,n,r);return i.maxlength&&/-1|2147483647|524288/.test(i.maxlength)&&delete i.maxlength,i},dataRules:function(t){var n,r,i={},o=e(t),a=t.getAttribute("type");for(n in e.validator.methods)""===(r=o.data("rule"+n.charAt(0).toUpperCase()+n.substring(1).toLowerCase()))&&(r=!0),this.normalizeAttributeRule(i,a,n,r);return i},staticRules:function(t){var n={},r=e.data(t.form,"validator");return r.settings.rules&&(n=e.validator.normalizeRule(r.settings.rules[t.name])||{}),n},normalizeRules:function(t,n){return e.each(t,(function(r,i){if(!1!==i){if(i.param||i.depends){var o=!0;switch(typeof i.depends){case"string":o=!!e(i.depends,n.form).length;break;case"function":o=i.depends.call(n,n)}o?t[r]=void 0===i.param||i.param:(e.data(n.form,"validator").resetElements(e(n)),delete t[r])}}else delete t[r]})),e.each(t,(function(e,r){t[e]="function"==typeof r&&"normalizer"!==e?r(n):r})),e.each(["minlength","maxlength"],(function(){t[this]&&(t[this]=Number(t[this]))})),e.each(["rangelength","range"],(function(){var e;t[this]&&(Array.isArray(t[this])?t[this]=[Number(t[this][0]),Number(t[this][1])]:"string"==typeof t[this]&&(e=t[this].replace(/[\[\]]/g,"").split(/[\s,]+/),t[this]=[Number(e[0]),Number(e[1])]))})),e.validator.autoCreateRanges&&(null!=t.min&&null!=t.max&&(t.range=[t.min,t.max],delete t.min,delete t.max),null!=t.minlength&&null!=t.maxlength&&(t.rangelength=[t.minlength,t.maxlength],delete t.minlength,delete t.maxlength)),t},normalizeRule:function(t){if("string"==typeof t){var n={};e.each(t.split(/\s/),(function(){n[this]=!0})),t=n}return t},addMethod:function(t,n,r){e.validator.methods[t]=n,e.validator.messages[t]=void 0!==r?r:e.validator.messages[t],n.length<3&&e.validator.addClassRules(t,e.validator.normalizeRule(t))},methods:{required:function(t,n,r){if(!this.depend(r,n))return"dependency-mismatch";if("select"===n.nodeName.toLowerCase()){var i=e(n).val();return i&&i.length>0}return this.checkable(n)?this.getLength(t,n)>0:null!=t&&t.length>0},email:function(e,t){return this.optional(t)||/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test(e)},url:function(e,t){return this.optional(t)||/^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i.test(e)},date:(t=!1,function(e,n){return t||(t=!0,this.settings.debug&&window.console&&console.warn("The `date` method is deprecated and will be removed in version '2.0.0'.\nPlease don't use it, since it relies on the Date constructor, which\nbehaves very differently across browsers and locales. Use `dateISO`\ninstead or one of the locale specific methods in `localizations/`\nand `additional-methods.js`.")),this.optional(n)||!/Invalid|NaN/.test(new Date(e).toString())}),dateISO:function(e,t){return this.optional(t)||/^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(e)},number:function(e,t){return this.optional(t)||/^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test(e)},digits:function(e,t){return this.optional(t)||/^\d+$/.test(e)},minlength:function(e,t,n){var r=Array.isArray(e)?e.length:this.getLength(e,t);return this.optional(t)||r>=n},maxlength:function(e,t,n){var r=Array.isArray(e)?e.length:this.getLength(e,t);return this.optional(t)||r<=n},rangelength:function(e,t,n){var r=Array.isArray(e)?e.length:this.getLength(e,t);return this.optional(t)||r>=n[0]&&r<=n[1]},min:function(e,t,n){return this.optional(t)||e>=n},max:function(e,t,n){return this.optional(t)||e<=n},range:function(e,t,n){return this.optional(t)||e>=n[0]&&e<=n[1]},step:function(t,n,r){var i,o=e(n).attr("type"),a="Step attribute on input type "+o+" is not supported.",s=["text","number","range"],l=new RegExp("\\b"+o+"\\b"),c=function(e){var t=(""+e).match(/(?:\.(\d+))?$/);return t&&t[1]?t[1].length:0},u=function(e){return Math.round(e*Math.pow(10,i))},d=!0;if(o&&!l.test(s.join()))throw new Error(a);return i=c(r),(c(t)>i||u(t)%u(r)!=0)&&(d=!1),this.optional(n)||d},equalTo:function(t,n,r){var i=e(r);return this.settings.onfocusout&&i.not(".validate-equalTo-blur").length&&i.addClass("validate-equalTo-blur").on("blur.validate-equalTo",(function(){e(n).valid()})),t===i.val()},remote:function(t,n,r,i){if(this.optional(n))return"dependency-mismatch";i="string"==typeof i&&i||"remote";var o,a,s,l=this.previousValue(n,i);return this.settings.messages[n.name]||(this.settings.messages[n.name]={}),l.originalMessage=l.originalMessage||this.settings.messages[n.name][i],this.settings.messages[n.name][i]=l.message,r="string"==typeof r&&{url:r}||r,s=e.param(e.extend({data:t},r.data)),l.old===s?l.valid:(l.old=s,o=this,this.startRequest(n),(a={})[n.name]=t,e.ajax(e.extend(!0,{mode:"abort",port:"validate"+n.name,dataType:"json",data:a,context:o.currentForm,success:function(e){var r,a,s,c=!0===e||"true"===e;o.settings.messages[n.name][i]=l.originalMessage,c?(s=o.formSubmitted,o.resetInternals(),o.toHide=o.errorsFor(n),o.formSubmitted=s,o.successList.push(n),o.invalid[n.name]=!1,o.showErrors()):(r={},a=e||o.defaultMessage(n,{method:i,parameters:t}),r[n.name]=l.message=a,o.invalid[n.name]=!0,o.showErrors(r)),l.valid=c,o.stopRequest(n,c)}},r)),"pending")}}});var r,i={};return e.ajaxPrefilter?e.ajaxPrefilter((function(e,t,n){var r=e.port;"abort"===e.mode&&(i[r]&&i[r].abort(),i[r]=n)})):(r=e.ajax,e.ajax=function(t){var n=("mode"in t?t:e.ajaxSettings).mode,o=("port"in t?t:e.ajaxSettings).port;return"abort"===n?(i[o]&&i[o].abort(),i[o]=r.apply(this,arguments),i[o]):r.apply(this,arguments)}),e},void 0===(o="function"==typeof r?r.apply(t,i):r)||(e.exports=o)},755:function(e,t){var n;!function(t,n){"use strict";"object"==typeof e.exports?e.exports=t.document?n(t,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return n(e)}:n(t)}("undefined"!=typeof window?window:this,(function(r,i){"use strict";var o=[],a=Object.getPrototypeOf,s=o.slice,l=o.flat?function(e){return o.flat.call(e)}:function(e){return o.concat.apply([],e)},c=o.push,u=o.indexOf,d={},f=d.toString,p=d.hasOwnProperty,h=p.toString,m=h.call(Object),g={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},b=r.document,x={type:!0,src:!0,nonce:!0,noModule:!0};function w(e,t,n){var r,i,o=(n=n||b).createElement("script");if(o.text=e,t)for(r in x)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function k(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?d[f.call(e)]||"object":typeof e}var C="3.6.0",D=function(e,t){return new D.fn.init(e,t)};function T(e){var t=!!e&&"length"in e&&e.length,n=k(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e)}D.fn=D.prototype={jquery:C,constructor:D,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=D.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return D.each(this,e)},map:function(e){return this.pushStack(D.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(D.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(D.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),B=new RegExp(P+"|>"),U=new RegExp(_),V=new RegExp("^"+H+"$"),X={ID:new RegExp("^#("+H+")"),CLASS:new RegExp("^\\.("+H+")"),TAG:new RegExp("^("+H+"|[*])"),ATTR:new RegExp("^"+q),PSEUDO:new RegExp("^"+_),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+F+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},Z=/HTML$/i,J=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,G=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){f()},ae=xe((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{I.apply(N=L.call(w.childNodes),w.childNodes),N[w.childNodes.length].nodeType}catch(e){I={apply:N.length?function(e,t){O.apply(e,L.call(t))}:function(e,t){for(var n=e.length,r=0;e[n++]=t[r++];);e.length=n-1}}}function se(e,t,r,i){var o,s,c,u,d,h,v,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(r=r||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return r;if(!i&&(f(t),t=t||p,m)){if(11!==w&&(d=Q.exec(e)))if(o=d[1]){if(9===w){if(!(c=t.getElementById(o)))return r;if(c.id===o)return r.push(c),r}else if(y&&(c=y.getElementById(o))&&b(t,c)&&c.id===o)return r.push(c),r}else{if(d[2])return I.apply(r,t.getElementsByTagName(e)),r;if((o=d[3])&&n.getElementsByClassName&&t.getElementsByClassName)return I.apply(r,t.getElementsByClassName(o)),r}if(n.qsa&&!E[e+" "]&&(!g||!g.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===w&&(B.test(e)||$.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((u=t.getAttribute("id"))?u=u.replace(re,ie):t.setAttribute("id",u=x)),s=(h=a(e)).length;s--;)h[s]=(u?"#"+u:":scope")+" "+be(h[s]);v=h.join(",")}try{return I.apply(r,y.querySelectorAll(v)),r}catch(t){E(e,!0)}finally{u===x&&t.removeAttribute("id")}}}return l(e.replace(Y,"$1"),t,r,i)}function le(){var e=[];return function t(n,i){return e.push(n+" ")>r.cacheLength&&delete t[e.shift()],t[n+" "]=i}}function ce(e){return e[x]=!0,e}function ue(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function de(e,t){for(var n=e.split("|"),i=n.length;i--;)r.attrHandle[n[i]]=t}function fe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function he(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function me(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function ge(e){return ce((function(t){return t=+t,ce((function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},o=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Z.test(t||n&&n.nodeName||"HTML")},f=se.setDocument=function(e){var t,i,a=e?e.ownerDocument||e:w;return a!=p&&9===a.nodeType&&a.documentElement?(h=(p=a).documentElement,m=!o(p),w!=p&&(i=p.defaultView)&&i.top!==i&&(i.addEventListener?i.addEventListener("unload",oe,!1):i.attachEvent&&i.attachEvent("onunload",oe)),n.scope=ue((function(e){return h.appendChild(e).appendChild(p.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ue((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ue((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=G.test(p.getElementsByClassName),n.getById=ue((function(e){return h.appendChild(e).id=x,!p.getElementsByName||!p.getElementsByName(x).length})),n.getById?(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n=t.getElementById(e);return n?[n]:[]}}):(r.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},r.find.ID=function(e,t){if(void 0!==t.getElementById&&m){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(i=t.getElementsByName(e),r=0;o=i[r++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),r.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&m)return t.getElementsByClassName(e)},v=[],g=[],(n.qsa=G.test(p.querySelectorAll))&&(ue((function(e){var t;h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&g.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll("[selected]").length||g.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+F+")"),e.querySelectorAll("[id~="+x+"-]").length||g.push("~="),(t=p.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||g.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll(":checked").length||g.push(":checked"),e.querySelectorAll("a#"+x+"+*").length||g.push(".#.+[+~]"),e.querySelectorAll("\\\f"),g.push("[\\r\\n\\f]")})),ue((function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&g.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&g.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&g.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),g.push(",.*:")}))),(n.matchesSelector=G.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",_)})),g=g.length&&new RegExp(g.join("|")),v=v.length&&new RegExp(v.join("|")),t=G.test(h.compareDocumentPosition),b=t||G.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return d=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1&(r=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===r?e==p||e.ownerDocument==w&&b(w,e)?-1:t==p||t.ownerDocument==w&&b(w,t)?1:u?R(u,e)-R(u,t):0:4&r?-1:1)}:function(e,t){if(e===t)return d=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==p?-1:t==p?1:i?-1:o?1:u?R(u,e)-R(u,t):0;if(i===o)return fe(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[r]===s[r];)r++;return r?fe(a[r],s[r]):a[r]==w?-1:s[r]==w?1:0},p):p},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(f(e),n.matchesSelector&&m&&!E[t+" "]&&(!v||!v.test(t))&&(!g||!g.test(t)))try{var r=y.call(e,t);if(r||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return r}catch(e){E(t,!0)}return se(t,p,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=p&&f(e),b(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=p&&f(e);var i=r.attrHandle[t.toLowerCase()],o=i&&A.call(r.attrHandle,t.toLowerCase())?i(e,t,!m):void 0;return void 0!==o?o:n.attributes||!m?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,r=[],i=0,o=0;if(d=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(S),d){for(;t=e[o++];)t===e[o]&&(i=r.push(o));for(;i--;)e.splice(r[i],1)}return u=null,e},i=se.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r++];)n+=i(t);return n},r=se.selectors={cacheLength:50,createPseudo:ce,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return X.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&U.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=D[e+" "];return t||(t=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+e+"("+P+"|$)"))&&D(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(r){var i=se.attr(r,e);return null==i?"!="===t:!t||(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(i===n||i.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var c,u,d,f,p,h,m=o!==a?"nextSibling":"previousSibling",g=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!l&&!s,b=!1;if(g){if(o){for(;m;){for(f=t;f=f[m];)if(s?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;h=m="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(b=(p=(c=(u=(d=(f=g)[x]||(f[x]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===k&&c[1])&&c[2],f=p&&g.childNodes[p];f=++p&&f&&f[m]||(b=p=0)||h.pop();)if(1===f.nodeType&&++b&&f===t){u[e]=[k,p,b];break}}else if(y&&(b=p=(c=(u=(d=(f=t)[x]||(f[x]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]||[])[0]===k&&c[1]),!1===b)for(;(f=++p&&f&&f[m]||(b=p=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==v:1!==f.nodeType)||!++b||(y&&((u=(d=f[x]||(f[x]={}))[f.uniqueID]||(d[f.uniqueID]={}))[e]=[k,b]),f!==t)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return i[x]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?ce((function(e,n){for(var r,o=i(e,t),a=o.length;a--;)e[r=R(e,o[a])]=!(n[r]=o[a])})):function(e){return i(e,0,n)}):i}},pseudos:{not:ce((function(e){var t=[],n=[],r=s(e.replace(Y,"$1"));return r[x]?ce((function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,i,o){return t[0]=e,r(t,null,o,n),t[0]=null,!n.pop()}})),has:ce((function(e){return function(t){return se(e,t).length>0}})),contains:ce((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||i(t)).indexOf(e)>-1}})),lang:ce((function(e){return V.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=m?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:me(!1),disabled:me(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return K.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ge((function(){return[0]})),last:ge((function(e,t){return[t-1]})),eq:ge((function(e,t,n){return[n<0?n+t:n]})),even:ge((function(e,t){for(var n=0;nt?t:n;--r>=0;)e.push(r);return e})),gt:ge((function(e,t,n){for(var r=n<0?n+t:n;++r1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function ke(e,t,n,r,i){for(var o,a=[],s=0,l=e.length,c=null!=t;s-1&&(o[c]=!(a[c]=d))}}else v=ke(v===a?v.splice(h,v.length):v),i?i(null,a,v,l):I.apply(a,v)}))}function De(e){for(var t,n,i,o=e.length,a=r.relative[e[0].type],s=a||r.relative[" "],l=a?1:0,u=xe((function(e){return e===t}),s,!0),d=xe((function(e){return R(t,e)>-1}),s,!0),f=[function(e,n,r){var i=!a&&(r||n!==c)||((t=n).nodeType?u(e,n,r):d(e,n,r));return t=null,i}];l1&&we(f),l>1&&be(e.slice(0,l-1).concat({value:" "===e[l-2].type?"*":""})).replace(Y,"$1"),n,l0,i=e.length>0,o=function(o,a,s,l,u){var d,h,g,v=0,y="0",b=o&&[],x=[],w=c,C=o||i&&r.find.TAG("*",u),D=k+=null==w?1:Math.random()||.1,T=C.length;for(u&&(c=a==p||a||u);y!==T&&null!=(d=C[y]);y++){if(i&&d){for(h=0,a||d.ownerDocument==p||(f(d),s=!m);g=e[h++];)if(g(d,a||p,s)){l.push(d);break}u&&(k=D)}n&&((d=!g&&d)&&v--,o&&b.push(d))}if(v+=y,n&&y!==v){for(h=0;g=t[h++];)g(b,x,a,s);if(o){if(v>0)for(;y--;)b[y]||x[y]||(x[y]=j.call(l));x=ke(x)}I.apply(l,x),u&&!o&&x.length>0&&v+t.length>1&&se.uniqueSort(l)}return u&&(k=D,c=w),b};return n?ce(o):o}(o,i)),s.selector=e}return s},l=se.select=function(e,t,n,i){var o,l,c,u,d,f="function"==typeof e&&e,p=!i&&a(e=f.selector||e);if(n=n||[],1===p.length){if((l=p[0]=p[0].slice(0)).length>2&&"ID"===(c=l[0]).type&&9===t.nodeType&&m&&r.relative[l[1].type]){if(!(t=(r.find.ID(c.matches[0].replace(te,ne),t)||[])[0]))return n;f&&(t=t.parentNode),e=e.slice(l.shift().value.length)}for(o=X.needsContext.test(e)?0:l.length;o--&&(c=l[o],!r.relative[u=c.type]);)if((d=r.find[u])&&(i=d(c.matches[0].replace(te,ne),ee.test(l[0].type)&&ve(t.parentNode)||t))){if(l.splice(o,1),!(e=i.length&&be(l)))return I.apply(n,i),n;break}}return(f||s(e,p))(i,t,!m,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=x.split("").sort(S).join("")===x,n.detectDuplicates=!!d,f(),n.sortDetached=ue((function(e){return 1&e.compareDocumentPosition(p.createElement("fieldset"))})),ue((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||de("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ue((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||de("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ue((function(e){return null==e.getAttribute("disabled")}))||de(F,(function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null})),se}(r);D.find=M,D.expr=M.selectors,D.expr[":"]=D.expr.pseudos,D.uniqueSort=D.unique=M.uniqueSort,D.text=M.getText,D.isXMLDoc=M.isXML,D.contains=M.contains,D.escapeSelector=M.escape;var E=function(e,t,n){for(var r=[],i=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(i&&D(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},A=D.expr.match.needsContext;function N(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var j=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function O(e,t,n){return v(t)?D.grep(e,(function(e,r){return!!t.call(e,r,e)!==n})):t.nodeType?D.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?D.grep(e,(function(e){return u.call(t,e)>-1!==n})):D.filter(t,e,n)}D.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?D.find.matchesSelector(r,e)?[r]:[]:D.find.matches(e,D.grep(t,(function(e){return 1===e.nodeType})))},D.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(D(e).filter((function(){for(t=0;t1?D.uniqueSort(n):n},filter:function(e){return this.pushStack(O(this,e||[],!1))},not:function(e){return this.pushStack(O(this,e||[],!0))},is:function(e){return!!O(this,"string"==typeof e&&A.test(e)?D(e):e||[],!1).length}});var I,L=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(D.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||I,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof D?t[0]:t,D.merge(this,D.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:b,!0)),j.test(r[1])&&D.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=b.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(D):D.makeArray(e,this)}).prototype=D.fn,I=D(b);var R=/^(?:parents|prev(?:Until|All))/,F={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}D.fn.extend({has:function(e){var t=D(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&D.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?D.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?u.call(D(e),this[0]):u.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(D.uniqueSort(D.merge(this.get(),D(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),D.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return E(e,"parentNode")},parentsUntil:function(e,t,n){return E(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return E(e,"nextSibling")},prevAll:function(e){return E(e,"previousSibling")},nextUntil:function(e,t,n){return E(e,"nextSibling",n)},prevUntil:function(e,t,n){return E(e,"previousSibling",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return null!=e.contentDocument&&a(e.contentDocument)?e.contentDocument:(N(e,"template")&&(e=e.content||e),D.merge([],e.childNodes))}},(function(e,t){D.fn[e]=function(n,r){var i=D.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=D.filter(r,i)),this.length>1&&(F[e]||D.uniqueSort(i),R.test(e)&&i.reverse()),this.pushStack(i)}}));var H=/[^\x20\t\r\n\f]+/g;function q(e){return e}function _(e){throw e}function W(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}D.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return D.each(e.match(H)||[],(function(e,n){t[n]=!0})),t}(e):D.extend({},e);var t,n,r,i,o=[],a=[],s=-1,l=function(){for(i=i||e.once,r=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?D.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return i=a=[],n||t||(o=n=""),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||l()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},D.extend({Deferred:function(e){var t=[["notify","progress",D.Callbacks("memory"),D.Callbacks("memory"),2],["resolve","done",D.Callbacks("once memory"),D.Callbacks("once memory"),0,"resolved"],["reject","fail",D.Callbacks("once memory"),D.Callbacks("once memory"),1,"rejected"]],n="pending",i={state:function(){return n},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e=arguments;return D.Deferred((function(n){D.each(t,(function(t,r){var i=v(e[r[4]])&&e[r[4]];o[r[1]]((function(){var e=i&&i.apply(this,arguments);e&&v(e.promise)?e.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+"With"](this,i?[e]:arguments)}))})),e=null})).promise()},then:function(e,n,i){var o=0;function a(e,t,n,i){return function(){var s=this,l=arguments,c=function(){var r,c;if(!(e=o&&(n!==_&&(s=void 0,l=[r]),t.rejectWith(s,l))}};e?u():(D.Deferred.getStackHook&&(u.stackTrace=D.Deferred.getStackHook()),r.setTimeout(u))}}return D.Deferred((function(r){t[0][3].add(a(0,r,v(i)?i:q,r.notifyWith)),t[1][3].add(a(0,r,v(e)?e:q)),t[2][3].add(a(0,r,v(n)?n:_))})).promise()},promise:function(e){return null!=e?D.extend(e,i):i}},o={};return D.each(t,(function(e,r){var a=r[2],s=r[5];i[r[1]]=a.add,s&&a.add((function(){n=s}),t[3-e][2].disable,t[3-e][3].disable,t[0][2].lock,t[0][3].lock),a.add(r[3].fire),o[r[0]]=function(){return o[r[0]+"With"](this===o?void 0:this,arguments),this},o[r[0]+"With"]=a.fireWith})),i.promise(o),e&&e.call(o,o),o},when:function(e){var t=arguments.length,n=t,r=Array(n),i=s.call(arguments),o=D.Deferred(),a=function(e){return function(n){r[e]=this,i[e]=arguments.length>1?s.call(arguments):n,--t||o.resolveWith(r,i)}};if(t<=1&&(W(e,o.done(a(n)).resolve,o.reject,!t),"pending"===o.state()||v(i[n]&&i[n].then)))return o.then();for(;n--;)W(i[n],a(n),o.reject);return o.promise()}});var Y=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;D.Deferred.exceptionHook=function(e,t){r.console&&r.console.warn&&e&&Y.test(e.name)&&r.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},D.readyException=function(e){r.setTimeout((function(){throw e}))};var z=D.Deferred();function $(){b.removeEventListener("DOMContentLoaded",$),r.removeEventListener("load",$),D.ready()}D.fn.ready=function(e){return z.then(e).catch((function(e){D.readyException(e)})),this},D.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--D.readyWait:D.isReady)||(D.isReady=!0,!0!==e&&--D.readyWait>0||z.resolveWith(b,[D]))}}),D.ready.then=z.then,"complete"===b.readyState||"loading"!==b.readyState&&!b.documentElement.doScroll?r.setTimeout(D.ready):(b.addEventListener("DOMContentLoaded",$),r.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,l=e.length,c=null==n;if("object"===k(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),c&&(a?(t.call(e,r),t=null):(c=t,t=function(e,t,n){return c.call(D(e),n)})),t))for(;s1,null,!0)},removeData:function(e){return this.each((function(){Q.remove(this,e)}))}}),D.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=G.get(e,t),n&&(!r||Array.isArray(n)?r=G.access(e,t,D.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=D.queue(e,t),r=n.length,i=n.shift(),o=D._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,(function(){D.dequeue(e,t)}),o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return G.get(e,n)||G.access(e,n,{empty:D.Callbacks("once memory").add((function(){G.remove(e,[t+"queue",n])}))})}}),D.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,ye=/^$|^module$|\/(?:java|ecma)script/i;he=b.createDocumentFragment().appendChild(b.createElement("div")),(me=b.createElement("input")).setAttribute("type","radio"),me.setAttribute("checked","checked"),me.setAttribute("name","t"),he.appendChild(me),g.checkClone=he.cloneNode(!0).cloneNode(!0).lastChild.checked,he.innerHTML="",g.noCloneChecked=!!he.cloneNode(!0).lastChild.defaultValue,he.innerHTML="",g.option=!!he.lastChild;var be={thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};function xe(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?D.merge([e],n):n}function we(e,t){for(var n=0,r=e.length;n",""]);var ke=/<|&#?\w+;/;function Ce(e,t,n,r,i){for(var o,a,s,l,c,u,d=t.createDocumentFragment(),f=[],p=0,h=e.length;p-1)i&&i.push(o);else if(c=se(o),a=xe(d.appendChild(o),"script"),c&&we(a),n)for(u=0;o=a[u++];)ye.test(o.type||"")&&n.push(o);return d}var De=/^([^.]*)(?:\.(.+)|)/;function Te(){return!0}function Me(){return!1}function Ee(e,t){return e===function(){try{return b.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Me;else if(!i)return e;return 1===o&&(a=i,i=function(e){return D().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=D.guid++)),e.each((function(){D.event.add(this,t,i,r,n)}))}function Ae(e,t,n){n?(G.set(e,t,!1),D.event.add(e,t,{namespace:!1,handler:function(e){var r,i,o=G.get(this,t);if(1&e.isTrigger&&this[t]){if(o.length)(D.event.special[t]||{}).delegateType&&e.stopPropagation();else if(o=s.call(arguments),G.set(this,t,o),r=n(this,t),this[t](),o!==(i=G.get(this,t))||r?G.set(this,t,!1):i={},o!==i)return e.stopImmediatePropagation(),e.preventDefault(),i&&i.value}else o.length&&(G.set(this,t,{value:D.event.trigger(D.extend(o[0],D.Event.prototype),o.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===G.get(e,t)&&D.event.add(e,t,Te)}D.event={global:{},add:function(e,t,n,r,i){var o,a,s,l,c,u,d,f,p,h,m,g=G.get(e);if(J(e))for(n.handler&&(n=(o=n).handler,i=o.selector),i&&D.find.matchesSelector(ae,i),n.guid||(n.guid=D.guid++),(l=g.events)||(l=g.events=Object.create(null)),(a=g.handle)||(a=g.handle=function(t){return void 0!==D&&D.event.triggered!==t.type?D.event.dispatch.apply(e,arguments):void 0}),c=(t=(t||"").match(H)||[""]).length;c--;)p=m=(s=De.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p&&(d=D.event.special[p]||{},p=(i?d.delegateType:d.bindType)||p,d=D.event.special[p]||{},u=D.extend({type:p,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&D.expr.match.needsContext.test(i),namespace:h.join(".")},o),(f=l[p])||((f=l[p]=[]).delegateCount=0,d.setup&&!1!==d.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(p,a)),d.add&&(d.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),i?f.splice(f.delegateCount++,0,u):f.push(u),D.event.global[p]=!0)},remove:function(e,t,n,r,i){var o,a,s,l,c,u,d,f,p,h,m,g=G.hasData(e)&&G.get(e);if(g&&(l=g.events)){for(c=(t=(t||"").match(H)||[""]).length;c--;)if(p=m=(s=De.exec(t[c])||[])[1],h=(s[2]||"").split(".").sort(),p){for(d=D.event.special[p]||{},f=l[p=(r?d.delegateType:d.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=f.length;o--;)u=f[o],!i&&m!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||r&&r!==u.selector&&("**"!==r||!u.selector)||(f.splice(o,1),u.selector&&f.delegateCount--,d.remove&&d.remove.call(e,u));a&&!f.length&&(d.teardown&&!1!==d.teardown.call(e,h,g.handle)||D.removeEvent(e,p,g.handle),delete l[p])}else for(p in l)D.event.remove(e,p+t[c],n,r,!0);D.isEmptyObject(l)&&G.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),l=D.event.fix(e),c=(G.get(this,"events")||Object.create(null))[l.type]||[],u=D.event.special[l.type]||{};for(s[0]=l,t=1;t=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&("click"!==e.type||!0!==c.disabled)){for(o=[],a={},n=0;n-1:D.find(i,this,null,[c]).length),a[i]&&o.push(r);o.length&&s.push({elem:c,handlers:o})}return c=this,l\s*$/g;function Ie(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")&&D(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Re(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(G.hasData(e)&&(s=G.get(e).events))for(i in G.remove(t,"handle events"),s)for(n=0,r=s[i].length;n1&&"string"==typeof h&&!g.checkClone&&je.test(h))return e.each((function(i){var o=e.eq(i);m&&(t[0]=h.call(this,i,o.html())),He(o,t,n,r)}));if(f&&(o=(i=Ce(t,e[0].ownerDocument,!1,e,r)).firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=(a=D.map(xe(i,"script"),Le)).length;d0&&we(a,!l&&xe(e,"script")),s},cleanData:function(e){for(var t,n,r,i=D.event.special,o=0;void 0!==(n=e[o]);o++)if(J(n)){if(t=n[G.expando]){if(t.events)for(r in t.events)i[r]?D.event.remove(n,r):D.removeEvent(n,r,t.handle);n[G.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),D.fn.extend({detach:function(e){return qe(this,e,!0)},remove:function(e){return qe(this,e)},text:function(e){return B(this,(function(e){return void 0===e?D.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return He(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Ie(this,e).appendChild(e)}))},prepend:function(){return He(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Ie(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return He(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return He(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(D.cleanData(xe(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return D.clone(this,e,t)}))},html:function(e){return B(this,(function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!be[(ve.exec(e)||["",""])[1].toLowerCase()]){e=D.htmlPrefilter(e);try{for(;n=0&&(l+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-l-s-.5))||0),l}function nt(e,t,n){var r=We(e),i=(!g.boxSizingReliable()||n)&&"border-box"===D.css(e,"boxSizing",!1,r),o=i,a=$e(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!g.boxSizingReliable()&&i||!g.reliableTrDimensions()&&N(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===D.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===D.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+tt(e,t,n||(i?"border":"content"),o,r,a)+"px"}function rt(e,t,n,r,i){return new rt.prototype.init(e,t,n,r,i)}D.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=$e(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=Z(t),l=Ke.test(t),c=e.style;if(l||(t=Ze(s)),a=D.cssHooks[t]||D.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:c[t];"string"===(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||l||(n+=i&&i[3]||(D.cssNumber[s]?"":"px")),g.clearCloneStyle||""!==n||0!==t.indexOf("background")||(c[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(l?c.setProperty(t,n):c[t]=n))}},css:function(e,t,n,r){var i,o,a,s=Z(t);return Ke.test(t)||(t=Ze(s)),(a=D.cssHooks[t]||D.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=$e(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),D.each(["height","width"],(function(e,t){D.cssHooks[t]={get:function(e,n,r){if(n)return!Je.test(D.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?nt(e,t,r):Ye(e,Ge,(function(){return nt(e,t,r)}))},set:function(e,n,r){var i,o=We(e),a=!g.scrollboxSize()&&"absolute"===o.position,s=(a||r)&&"border-box"===D.css(e,"boxSizing",!1,o),l=r?tt(e,t,r,s,o):0;return s&&a&&(l-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-tt(e,t,"border",!1,o)-.5)),l&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=D.css(e,t)),et(0,n,l)}}})),D.cssHooks.marginLeft=Be(g.reliableMarginLeft,(function(e,t){if(t)return(parseFloat($e(e,"marginLeft"))||e.getBoundingClientRect().left-Ye(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),D.each({margin:"",padding:"",border:"Width"},(function(e,t){D.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(D.cssHooks[e+t].set=et)})),D.fn.extend({css:function(e,t){return B(this,(function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=We(e),i=t.length;a1)}}),D.Tween=rt,rt.prototype={constructor:rt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||D.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(D.cssNumber[n]?"":"px")},cur:function(){var e=rt.propHooks[this.prop];return e&&e.get?e.get(this):rt.propHooks._default.get(this)},run:function(e){var t,n=rt.propHooks[this.prop];return this.options.duration?this.pos=t=D.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rt.propHooks._default.set(this),this}},rt.prototype.init.prototype=rt.prototype,rt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=D.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){D.fx.step[e.prop]?D.fx.step[e.prop](e):1!==e.elem.nodeType||!D.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:D.style(e.elem,e.prop,e.now+e.unit)}}},rt.propHooks.scrollTop=rt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},D.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},D.fx=rt.prototype.init,D.fx.step={};var it,ot,at=/^(?:toggle|show|hide)$/,st=/queueHooks$/;function lt(){ot&&(!1===b.hidden&&r.requestAnimationFrame?r.requestAnimationFrame(lt):r.setTimeout(lt,D.fx.interval),D.fx.tick())}function ct(){return r.setTimeout((function(){it=void 0})),it=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function dt(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each((function(){D.removeAttr(this,e)}))}}),D.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?D.prop(e,t,n):(1===o&&D.isXMLDoc(e)||(i=D.attrHooks[t.toLowerCase()]||(D.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void D.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=D.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!g.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(H);if(i&&1===e.nodeType)for(;n=i[r++];)e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?D.removeAttr(e,n):e.setAttribute(n,n),n}},D.each(D.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ht[t]||D.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}}));var mt=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(H)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function bt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(H)||[]}D.fn.extend({prop:function(e,t){return B(this,D.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[D.propFix[e]||e]}))}}),D.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&D.isXMLDoc(e)||(t=D.propFix[t]||t,i=D.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=D.find.attr(e,"tabindex");return t?parseInt(t,10):mt.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),g.optSelected||(D.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),D.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){D.propFix[this.toLowerCase()]=this})),D.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,l=0;if(v(e))return this.each((function(t){D(this).addClass(e.call(this,t,yt(this)))}));if((t=bt(e)).length)for(;n=this[l++];)if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){for(a=0;o=t[a++];)r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,l=0;if(v(e))return this.each((function(t){D(this).removeClass(e.call(this,t,yt(this)))}));if(!arguments.length)return this.attr("class","");if((t=bt(e)).length)for(;n=this[l++];)if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){for(a=0;o=t[a++];)for(;r.indexOf(" "+o+" ")>-1;)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):v(e)?this.each((function(n){D(this).toggleClass(e.call(this,n,yt(this),t),t)})):this.each((function(){var t,i,o,a;if(r)for(i=0,o=D(this),a=bt(e);t=a[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=yt(this))&&G.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":G.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&(" "+vt(yt(n))+" ").indexOf(t)>-1)return!0;return!1}});var xt=/\r/g;D.fn.extend({val:function(e){var t,n,r,i=this[0];return arguments.length?(r=v(e),this.each((function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,D(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=D.map(i,(function(e){return null==e?"":e+""}))),(t=D.valHooks[this.type]||D.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))}))):i?(t=D.valHooks[i.type]||D.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(xt,""):null==n?"":n:void 0}}),D.extend({valHooks:{option:{get:function(e){var t=D.find.attr(e,"value");return null!=t?t:vt(D.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],l=a?o+1:i.length;for(r=o<0?l:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),D.each(["radio","checkbox"],(function(){D.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=D.inArray(D(e).val(),t)>-1}},g.checkOn||(D.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),g.focusin="onfocusin"in r;var wt=/^(?:focusinfocus|focusoutblur)$/,kt=function(e){e.stopPropagation()};D.extend(D.event,{trigger:function(e,t,n,i){var o,a,s,l,c,u,d,f,h=[n||b],m=p.call(e,"type")?e.type:e,g=p.call(e,"namespace")?e.namespace.split("."):[];if(a=f=s=n=n||b,3!==n.nodeType&&8!==n.nodeType&&!wt.test(m+D.event.triggered)&&(m.indexOf(".")>-1&&(g=m.split("."),m=g.shift(),g.sort()),c=m.indexOf(":")<0&&"on"+m,(e=e[D.expando]?e:new D.Event(m,"object"==typeof e&&e)).isTrigger=i?2:3,e.namespace=g.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:D.makeArray(t,[e]),d=D.event.special[m]||{},i||!d.trigger||!1!==d.trigger.apply(n,t))){if(!i&&!d.noBubble&&!y(n)){for(l=d.delegateType||m,wt.test(l+m)||(a=a.parentNode);a;a=a.parentNode)h.push(a),s=a;s===(n.ownerDocument||b)&&h.push(s.defaultView||s.parentWindow||r)}for(o=0;(a=h[o++])&&!e.isPropagationStopped();)f=a,e.type=o>1?l:d.bindType||m,(u=(G.get(a,"events")||Object.create(null))[e.type]&&G.get(a,"handle"))&&u.apply(a,t),(u=c&&a[c])&&u.apply&&J(a)&&(e.result=u.apply(a,t),!1===e.result&&e.preventDefault());return e.type=m,i||e.isDefaultPrevented()||d._default&&!1!==d._default.apply(h.pop(),t)||!J(n)||c&&v(n[m])&&!y(n)&&((s=n[c])&&(n[c]=null),D.event.triggered=m,e.isPropagationStopped()&&f.addEventListener(m,kt),n[m](),e.isPropagationStopped()&&f.removeEventListener(m,kt),D.event.triggered=void 0,s&&(n[c]=s)),e.result}},simulate:function(e,t,n){var r=D.extend(new D.Event,n,{type:e,isSimulated:!0});D.event.trigger(r,null,t)}}),D.fn.extend({trigger:function(e,t){return this.each((function(){D.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return D.event.trigger(e,t,n,!0)}}),g.focusin||D.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){D.event.simulate(t,e.target,D.event.fix(e))};D.event.special[t]={setup:function(){var r=this.ownerDocument||this.document||this,i=G.access(r,t);i||r.addEventListener(e,n,!0),G.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this.document||this,i=G.access(r,t)-1;i?G.access(r,t,i):(r.removeEventListener(e,n,!0),G.remove(r,t))}}}));var Ct=r.location,Dt={guid:Date.now()},Tt=/\?/;D.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new r.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||D.error("Invalid XML: "+(n?D.map(n.childNodes,(function(e){return e.textContent})).join("\n"):e)),t};var Mt=/\[\]$/,Et=/\r?\n/g,St=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function Nt(e,t,n,r){var i;if(Array.isArray(t))D.each(t,(function(t,i){n||Mt.test(e)?r(e,i):Nt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)}));else if(n||"object"!==k(t))r(e,t);else for(i in t)Nt(e+"["+i+"]",t[i],n,r)}D.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!D.isPlainObject(e))D.each(e,(function(){i(this.name,this.value)}));else for(n in e)Nt(n,e[n],t,i);return r.join("&")},D.fn.extend({serialize:function(){return D.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=D.prop(this,"elements");return e?D.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!D(this).is(":disabled")&&At.test(this.nodeName)&&!St.test(e)&&(this.checked||!ge.test(e))})).map((function(e,t){var n=D(this).val();return null==n?null:Array.isArray(n)?D.map(n,(function(e){return{name:t.name,value:e.replace(Et,"\r\n")}})):{name:t.name,value:n.replace(Et,"\r\n")}})).get()}});var jt=/%20/g,Ot=/#.*$/,It=/([?&])_=[^&]*/,Lt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Ft=/^\/\//,Pt={},Ht={},qt="*/".concat("*"),_t=b.createElement("a");function Wt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(H)||[];if(v(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function Yt(e,t,n,r){var i={},o=e===Ht;function a(s){var l;return i[s]=!0,D.each(e[s]||[],(function(e,s){var c=s(t,n,r);return"string"!=typeof c||o||i[c]?o?!(l=c):void 0:(t.dataTypes.unshift(c),a(c),!1)})),l}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=D.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&D.extend(!0,e,r),e}_t.href=Ct.href,D.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":qt,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":D.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,D.ajaxSettings),t):zt(D.ajaxSettings,e)},ajaxPrefilter:Wt(Pt),ajaxTransport:Wt(Ht),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var n,i,o,a,s,l,c,u,d,f,p=D.ajaxSetup({},t),h=p.context||p,m=p.context&&(h.nodeType||h.jquery)?D(h):D.event,g=D.Deferred(),v=D.Callbacks("once memory"),y=p.statusCode||{},x={},w={},k="canceled",C={readyState:0,getResponseHeader:function(e){var t;if(c){if(!a)for(a={};t=Lt.exec(o);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return c?o:null},setRequestHeader:function(e,t){return null==c&&(e=w[e.toLowerCase()]=w[e.toLowerCase()]||e,x[e]=t),this},overrideMimeType:function(e){return null==c&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)C.always(e[C.status]);else for(t in e)y[t]=[y[t],e[t]];return this},abort:function(e){var t=e||k;return n&&n.abort(t),T(0,t),this}};if(g.promise(C),p.url=((e||p.url||Ct.href)+"").replace(Ft,Ct.protocol+"//"),p.type=t.method||t.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(H)||[""],null==p.crossDomain){l=b.createElement("a");try{l.href=p.url,l.href=l.href,p.crossDomain=_t.protocol+"//"+_t.host!=l.protocol+"//"+l.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=D.param(p.data,p.traditional)),Yt(Pt,p,t,C),c)return C;for(d in(u=D.event&&p.global)&&0==D.active++&&D.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Rt.test(p.type),i=p.url.replace(Ot,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(jt,"+")):(f=p.url.slice(i.length),p.data&&(p.processData||"string"==typeof p.data)&&(i+=(Tt.test(i)?"&":"?")+p.data,delete p.data),!1===p.cache&&(i=i.replace(It,"$1"),f=(Tt.test(i)?"&":"?")+"_="+Dt.guid+++f),p.url=i+f),p.ifModified&&(D.lastModified[i]&&C.setRequestHeader("If-Modified-Since",D.lastModified[i]),D.etag[i]&&C.setRequestHeader("If-None-Match",D.etag[i])),(p.data&&p.hasContent&&!1!==p.contentType||t.contentType)&&C.setRequestHeader("Content-Type",p.contentType),C.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+qt+"; q=0.01":""):p.accepts["*"]),p.headers)C.setRequestHeader(d,p.headers[d]);if(p.beforeSend&&(!1===p.beforeSend.call(h,C,p)||c))return C.abort();if(k="abort",v.add(p.complete),C.done(p.success),C.fail(p.error),n=Yt(Ht,p,t,C)){if(C.readyState=1,u&&m.trigger("ajaxSend",[C,p]),c)return C;p.async&&p.timeout>0&&(s=r.setTimeout((function(){C.abort("timeout")}),p.timeout));try{c=!1,n.send(x,T)}catch(e){if(c)throw e;T(-1,e)}}else T(-1,"No Transport");function T(e,t,a,l){var d,f,b,x,w,k=t;c||(c=!0,s&&r.clearTimeout(s),n=void 0,o=l||"",C.readyState=e>0?4:0,d=e>=200&&e<300||304===e,a&&(x=function(e,t,n){for(var r,i,o,a,s=e.contents,l=e.dataTypes;"*"===l[0];)l.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){l.unshift(i);break}if(l[0]in n)o=l[0];else{for(i in n){if(!l[0]||e.converters[i+" "+l[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==l[0]&&l.unshift(o),n[o]}(p,C,a)),!d&&D.inArray("script",p.dataTypes)>-1&&D.inArray("json",p.dataTypes)<0&&(p.converters["text script"]=function(){}),x=function(e,t,n,r){var i,o,a,s,l,c={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)c[a.toLowerCase()]=e.converters[a];for(o=u.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=u.shift())if("*"===o)o=l;else if("*"!==l&&l!==o){if(!(a=c[l+" "+o]||c["* "+o]))for(i in c)if((s=i.split(" "))[1]===o&&(a=c[l+" "+s[0]]||c["* "+s[0]])){!0===a?a=c[i]:!0!==c[i]&&(o=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+l+" to "+o}}}return{state:"success",data:t}}(p,x,C,d),d?(p.ifModified&&((w=C.getResponseHeader("Last-Modified"))&&(D.lastModified[i]=w),(w=C.getResponseHeader("etag"))&&(D.etag[i]=w)),204===e||"HEAD"===p.type?k="nocontent":304===e?k="notmodified":(k=x.state,f=x.data,d=!(b=x.error))):(b=k,!e&&k||(k="error",e<0&&(e=0))),C.status=e,C.statusText=(t||k)+"",d?g.resolveWith(h,[f,k,C]):g.rejectWith(h,[C,k,b]),C.statusCode(y),y=void 0,u&&m.trigger(d?"ajaxSuccess":"ajaxError",[C,p,d?f:b]),v.fireWith(h,[C,k]),u&&(m.trigger("ajaxComplete",[C,p]),--D.active||D.event.trigger("ajaxStop")))}return C},getJSON:function(e,t,n){return D.get(e,t,n,"json")},getScript:function(e,t){return D.get(e,void 0,t,"script")}}),D.each(["get","post"],(function(e,t){D[t]=function(e,n,r,i){return v(n)&&(i=i||r,r=n,n=void 0),D.ajax(D.extend({url:e,type:t,dataType:i,data:n,success:r},D.isPlainObject(e)&&e))}})),D.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),D._evalUrl=function(e,t,n){return D.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){D.globalEval(e,t,n)}})},D.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=D(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return v(e)?this.each((function(t){D(this).wrapInner(e.call(this,t))})):this.each((function(){var t=D(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=v(e);return this.each((function(n){D(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){D(this).replaceWith(this.childNodes)})),this}}),D.expr.pseudos.hidden=function(e){return!D.expr.pseudos.visible(e)},D.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},D.ajaxSettings.xhr=function(){try{return new r.XMLHttpRequest}catch(e){}};var $t={0:200,1223:204},Bt=D.ajaxSettings.xhr();g.cors=!!Bt&&"withCredentials"in Bt,g.ajax=Bt=!!Bt,D.ajaxTransport((function(e){var t,n;if(g.cors||Bt&&!e.crossDomain)return{send:function(i,o){var a,s=e.xhr();if(s.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(a in e.xhrFields)s[a]=e.xhrFields[a];for(a in e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),e.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest"),i)s.setRequestHeader(a,i[a]);t=function(e){return function(){t&&(t=n=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o($t[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=t(),n=s.onerror=s.ontimeout=t("error"),void 0!==s.onabort?s.onabort=n:s.onreadystatechange=function(){4===s.readyState&&r.setTimeout((function(){t&&n()}))},t=t("abort");try{s.send(e.hasContent&&e.data||null)}catch(e){if(t)throw e}},abort:function(){t&&t()}}})),D.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),D.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return D.globalEval(e),e}}}),D.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),D.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,i){t=D(" + + + + +@endpush diff --git a/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/edit.blade.php b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/edit.blade.php new file mode 100644 index 0000000..2f867b3 --- /dev/null +++ b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/edit.blade.php @@ -0,0 +1,560 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('web_form::app.edit-title') }} +@stop + +@push('css') + +@endpush + +@section('content-wrapper') + +
    + {!! view_render_event('admin.settings.web_forms.edit.header.before', ['webForm' => $webForm]) !!} + + + + {!! view_render_event('admin.settings.web_forms.edit.header.after', ['webForm' => $webForm]) !!} + +
    +
    +
    +
    +
    + {!! view_render_event('admin.settings.web_forms.edit.form_buttons.before', ['webForm' => $webForm]) !!} + + + + + {{ __('web_form::app.embed') }} + + + + {{ __('web_form::app.preview') }} + + + + {{ __('admin::app.layouts.back') }} + + + {!! view_render_event('admin.settings.web_forms.edit.form_buttons.after', ['webForm' => $webForm]) !!} +
    + +
    + {!! view_render_event('admin.settings.web_forms.edit.form_controls.before', ['webForm' => $webForm]) !!} + + @csrf() + + + + + + {!! view_render_event('admin.settings.web_forms.create.form_controls.after', ['webForm' => $webForm]) !!} +
    +
    +
    +
    +
    +
    + + +

    {{ __('web_form::app.code-snippet') }}

    + +
    + +
    + +
    + +
    + + +
    + + +
    + +
    +
    +
    + +
    + + +
    + + form_id) . " crossorigin=\"anonymous\">" }}' + /> + +
    + +
    +
    +
    + +
    +
    +@stop + +@push('scripts') + + + + + + +@endpush diff --git a/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js.blade.php b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js.blade.php new file mode 100644 index 0000000..e94d603 --- /dev/null +++ b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js.blade.php @@ -0,0 +1,119 @@ +(function() { +var version = parseInt(Math.random() * 10000); + +var webFormId = "{{ $webForm->id }}"; + +var content = document.createElement('div'); + +var scriptTag = document.currentScript || document.getElementById('krayin_' + webFormId); + +scriptTag.parentElement.appendChild(content); + +var formHTML = `{!! view('web_form::settings.web-forms.form-js.form', compact('webForm'))->render() !!}`; + +content.innerHTML = ' +
    ' + + formHTML + ' +
    '; + +var script = document.createElement('script'); + +script.src = '{{ asset('vendor/webkul/web-form/assets/js/web-form.js') }}'; + +script.onload = function() { +flatpickr(".form-group.date input", { +allowInput: true, +altFormat: "Y-m-d", +dateFormat: "Y-m-d", +weekNumbers: true, +}); + +flatpickr(".form-group.datetime input", { +allowInput: true, +altFormat: "Y-m-d H:i:S", +dateFormat: "Y-m-d H:i:S", +enableTime: true, +time_24hr: true, +weekNumbers: true, +}); + +var data = null; + +$('.button-group button').on('click', function() { +data = $("#krayinWebForm").serializeArray(); + +$("#krayinWebForm").validate({ +submitHandler: function(form) { + +document.querySelector('#loaderDiv').classList.add('loaderDiv'); + +document.querySelector('#imgSpinner').classList.add('imgSpinner'); + +$.ajax({ +url: "{{ route('admin.settings.web_forms.form_store', $webForm->id) }}", +type: 'post', +data: data, +headers: { +'X-CSRF-TOKEN': "{{ csrf_token() }}" +}, +dataType: 'json', +success: function (data) { + +document.querySelector('#loaderDiv').classList.remove('loaderDiv'); + +document.querySelector('#imgSpinner').classList.remove('imgSpinner'); + +var validator = $("#krayinWebForm").validate(); + +if (data.message) { +$('.alert-wrapper .alert p').text(data.message); + +$('.alert-wrapper').show(); +} else { +window.location.href = data.redirect; +} + +$("#krayinWebForm").trigger("reset"); +}, + +error: function (data) { + +document.querySelector('#loaderDiv').classList.remove('loaderDiv'); + +document.querySelector('#imgSpinner').classList.remove('imgSpinner'); + +var validator = $("#krayinWebForm").validate(); + +for (var key in data.responseJSON.errors) { +var inputNames = []; + +key.split('.').forEach(function(chunk, index) { +if(index) { +inputNames.push('[' + chunk + ']') +} else { +inputNames.push(chunk) +} +}) + +var inputName = inputNames.join(''); + +var error = {}; + +error[inputName] = data.responseJSON.errors[key][0]; + +validator.showErrors(error); +} +} +}); +} +}); +}); + +$('.alert-wrapper .icon').on('click', function() { +$('.alert-wrapper').hide(); + +}); +}; + +content.appendChild(script); +})() diff --git a/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js/form.blade.php b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js/form.blade.php new file mode 100644 index 0000000..3aac5b2 --- /dev/null +++ b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/form-js/form.blade.php @@ -0,0 +1,250 @@ + + + + + +
    +
    +
    +
    +
    +
    +
    + krayin +

    {{ $webForm->title }}

    +

    {{ $webForm->description }}

    +
    + +
    +
    + + +
    + @foreach ($webForm->attributes as $attribute) + @php + $parentAttribute = $attribute->attribute; + + $fieldName = $parentAttribute->entity_type . '[' . $parentAttribute->code . ']'; + @endphp + +
    + + + @switch($parentAttribute->type) + @case('text') + is_required ? 'required' : '' }} + /> + + @break; + + @case('date') + @case('datetime') + is_required ? 'required' : '' }} + /> + + @break; + + @case('textarea') + + + @break; + + @case('email') + is_required ? 'required' : '' }} + /> + + + + @break; + + @case('phone') + is_required ? 'required' : '' }} + /> + + + + @break; + + @case('select') + @case('lookup') + + + @break; + + @case('multiselect') + + + @break; + + @case('file') + @case('image') + + + @break; + + @case('boolean') + + + @break; + + @case('address') + + @break; + @endswitch +
    + @endforeach + +
    + +
    + +
    +
    +
    +
    +
    +
    diff --git a/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/index.blade.php b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/index.blade.php new file mode 100644 index 0000000..d385523 --- /dev/null +++ b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/index.blade.php @@ -0,0 +1,30 @@ +@extends('admin::layouts.master') + +@section('page_title') + {{ __('web_form::app.title') }} +@stop + +@section('content-wrapper') +
    + + + + @if (bouncer()->hasPermission('settings.automation.web_forms.create')) + + @endif + +
    +@stop diff --git a/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/preview.blade.php b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/preview.blade.php new file mode 100644 index 0000000..2b41e28 --- /dev/null +++ b/packages/Webkul/WebForm/src/Resources/views/settings/web-forms/preview.blade.php @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/Webkul/WebForm/webpack.mix.js b/packages/Webkul/WebForm/webpack.mix.js new file mode 100644 index 0000000..105f7ad --- /dev/null +++ b/packages/Webkul/WebForm/webpack.mix.js @@ -0,0 +1,40 @@ +const mix = require("laravel-mix"); + +if (mix == 'undefined') { + const {mix} = require("laravel-mix"); +} + +require("laravel-mix-merge-manifest"); + +if (mix.inProduction()) { + var publicPath = 'publishable/assets'; +} else { + var publicPath = "../../../public/vendor/webkul/web-form/assets"; +} + +mix.setPublicPath(publicPath).mergeManifest(); +mix.disableNotifications(); + +mix.js(__dirname + "/src/Resources/assets/js/web-form.js", "js/web-form.js") + .copy(__dirname + "/src/Resources/assets/images", publicPath + "/images") + .sass(__dirname + "/src/Resources/assets/sass/web-form.scss", "css/web-form.css") + .sass(__dirname + "/src/Resources/assets/sass/app.scss", "css/admin.css") + .options({ + processCssUrls: false + }).vue(); + +mix.webpackConfig({ + resolve: { + alias: { + 'vue$': 'vue/dist/vue.runtime.js' + } + } +}); + +if (!mix.inProduction()) { + mix.sourceMaps(); +} + +if (mix.inProduction()) { + mix.version(); +} diff --git a/packages/Webkul/Workflow/src/Config/workflows.php b/packages/Webkul/Workflow/src/Config/workflows.php new file mode 100644 index 0000000..b7c213c --- /dev/null +++ b/packages/Webkul/Workflow/src/Config/workflows.php @@ -0,0 +1,74 @@ + [ + + 'leads' => [ + 'name' => 'Leads', + 'class' => 'Webkul\Workflow\Helpers\Entity\Lead', + 'events' => [ + [ + 'event' => 'lead.create.after', + 'name' => 'Created', + ], [ + 'event' => 'lead.update.after', + 'name' => 'Updated', + ], [ + 'event' => 'lead.delete.before', + 'name' => 'Deleted', + ], + ] + ], + + 'activities' => [ + 'name' => 'Activities', + 'class' => 'Webkul\Workflow\Helpers\Entity\Activity', + 'events' => [ + [ + 'event' => 'activity.create.after', + 'name' => 'Created', + ], [ + 'event' => 'activity.update.after', + 'name' => 'Updated', + ], [ + 'event' => 'activity.delete.before', + 'name' => 'Deleted', + ], + ] + ], + + 'persons' => [ + 'name' => 'Persons', + 'class' => 'Webkul\Workflow\Helpers\Entity\Person', + 'events' => [ + [ + 'event' => 'contacts.person.create.after', + 'name' => 'Created', + ], [ + 'event' => 'contacts.person.update.after', + 'name' => 'Updated', + ], [ + 'event' => 'contacts.person.delete.before', + 'name' => 'Deleted', + ], + ] + ], + + 'quotes' => [ + 'name' => 'Quotes', + 'class' => 'Webkul\Workflow\Helpers\Entity\Quote', + 'events' => [ + [ + 'event' => 'quote.create.after', + 'name' => 'Created', + ], [ + 'event' => 'quote.update.after', + 'name' => 'Updated', + ], [ + 'event' => 'quote.delete.before', + 'name' => 'Deleted', + ], + ] + ] + ] +]; diff --git a/packages/Webkul/Workflow/src/Contracts/Workflow.php b/packages/Webkul/Workflow/src/Contracts/Workflow.php new file mode 100644 index 0000000..aae232d --- /dev/null +++ b/packages/Webkul/Workflow/src/Contracts/Workflow.php @@ -0,0 +1,7 @@ +increments('id'); + $table->string('name'); + $table->string('description')->nullable(); + $table->string('entity_type'); + $table->string('event'); + $table->string('condition_type')->default('and'); + $table->json('conditions')->nullable(); + $table->json('actions')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('workflows'); + } +} diff --git a/packages/Webkul/Workflow/src/Helpers/Entity.php b/packages/Webkul/Workflow/src/Helpers/Entity.php new file mode 100644 index 0000000..233cbee --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Entity.php @@ -0,0 +1,125 @@ +attributeRepository = $attributeRepository; + + $this->emailTemplateRepository = $emailTemplateRepository; + } + + /** + * Returns events to match for the entity + * + * @return array + */ + public function getEvents() + { + $entities = config('workflows.trigger_entities'); + + $events = []; + + foreach ($entities as $key => $entity) { + $object = app($entity['class']); + + $events[$key] = [ + 'id' => $key, + 'name' => $entity['name'], + 'events' => $entity['events'], + ]; + } + + return $events; + } + + /** + * Returns conditions to match for the entity + * + * @return array + */ + public function getConditions() + { + $entities = config('workflows.trigger_entities'); + + $conditions = []; + + foreach ($entities as $key => $entity) { + $object = app($entity['class']); + + $conditions[$key] = $object->getConditions(); + } + + return $conditions; + } + + /** + * Returns workflow actions + * + * @return array + */ + public function getActions() + { + $entities = config('workflows.trigger_entities'); + + $conditions = []; + + foreach ($entities as $key => $entity) { + $object = app($entity['class']); + + $conditions[$key] = $object->getActions(); + } + + return $conditions; + } + + /** + * Returns placeholders for email templates + * + * @return array + */ + public function getEmailTemplatePlaceholders() + { + $entities = config('workflows.trigger_entities'); + + $placeholders = []; + + foreach ($entities as $key => $entity) { + $object = app($entity['class']); + + $placeholders[] = $object->getEmailTemplatePlaceholders($entity); + } + + return $placeholders; + } +} diff --git a/packages/Webkul/Workflow/src/Helpers/Entity/AbstractEntity.php b/packages/Webkul/Workflow/src/Helpers/Entity/AbstractEntity.php new file mode 100644 index 0000000..d10469c --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Entity/AbstractEntity.php @@ -0,0 +1,204 @@ +getAttributes($this->entityType); + } + + /** + * Returns attributes + * + * @param string $entityType + * @param array $skipAttributes + * @return array + */ + public function getAttributes($entityType, $skipAttributes = ['textarea', 'image', 'file', 'address']) + { + $attributes = []; + + foreach ($this->attributeRepository->findByField('entity_type', $entityType) as $attribute) { + if (in_array($attribute->type, $skipAttributes)) { + continue; + } + + $attributeType = $attribute->type; + + if ($attribute->validation == 'decimal') { + $attributeType = 'decimal'; + } + + if ($attribute->validation == 'numeric') { + $attributeType = 'integer'; + } + + if ($attribute->lookup_type) { + $options = [];//$this->attributeRepository->getLookUpOptions($attribute->lookup_type); + } else { + $options = $attribute->options; + } + + $attributes[] = [ + 'id' => $attribute->code, + 'type' => $attribute->type, + 'name' => $attribute->name, + 'lookup_type' => $attribute->lookup_type, + 'options' => $options, + ]; + } + + return $attributes; + } + + /** + * Returns placeholders for email templates + * + * @param array $entity + * @return array + */ + public function getEmailTemplatePlaceholders($entity) + { + $menuItems = []; + + foreach ($this->getAttributes($this->entityType) as $attribute) { + $menuItems[] = [ + 'text' => $attribute['name'], + 'value' => '{%' . $this->entityType . '.' . $attribute['id'] . '%}', + ]; + } + + return [ + 'text' => $entity['name'], + 'menu' => $menuItems, + ]; + } + + /** + * Replace placeholders with values + * + * @param array $entity + * @param array $values + * @return string + */ + public function replacePlaceholders($entity, $content) + { + foreach ($this->getAttributes($this->entityType, []) as $attribute) { + $value = ''; + + switch ($attribute['type']) { + case 'price': + $value = core()->formatBasePrice($entity->{$attribute['id']}); + + break; + + case 'boolean': + $value = $entity->{$attribute['id']} ? __('admin::app.common.yes') : __('admin::app.common.no'); + + break; + + case 'select': + case 'radio': + case 'lookup': + if ($attribute['lookup_type']) { + $option = $this->attributeRepository->getLookUpEntity($attribute['lookup_type'], $entity->{$attribute['id']}); + } else { + $option = $attribute['options']->where('id', $entity->{$attribute['id']})->first(); + } + + $value = $option ? $option->name : __('admin::app.common.not-available'); + + break; + + case 'multiselect': + case 'checkbox': + if ($attribute['lookup_type']) { + $options = $this->attributeRepository->getLookUpEntity($attribute['lookup_type'], explode(',', $entity->{$attribute['id']})); + } else { + $options = $attribute['options']->whereIn('id', explode(',', $entity->{$attribute['id']})); + } + + $optionsLabels = []; + + foreach ($options as $key => $option) { + $optionsLabels[] = $option->name; + } + + $value = implode(', ', $optionsLabels); + + break; + + case 'email': + case 'phone': + if (!is_array($entity->{$attribute['id']})) { + break; + } + + $optionsLabels = []; + + foreach ($entity->{$attribute['id']} as $item) { + $optionsLabels[] = $item['value'] . ' (' . $item['label'] . ')'; + } + + $value = implode(', ', $optionsLabels); + + break; + + case 'address': + if (!$entity->{$attribute['id']} || !count(array_filter($entity->{$attribute['id']}))) { + break; + } + + $value = $entity->{$attribute['id']}['address'] . "
    " + . $entity->{$attribute['id']}['postcode'] . ' ' . $entity->{$attribute['id']}['city'] . "
    " + . core()->state_name($entity->{$attribute['id']}['state']) . "
    " + . core()->country_name($entity->{$attribute['id']}['country']) . "
    "; + + break; + + case 'date': + if ($entity->{$attribute['id']}) { + $value = $entity->{$attribute['id']}->format("D M d, Y"); + } else { + $value = 'N/A'; + } + + break; + + case 'datetime': + if ($entity->{$attribute['id']}) { + $value = $entity->{$attribute['id']}->format("D M d, Y H:i A"); + } else { + $value = 'N/A'; + } + + break; + + default: + $value = $entity->{$attribute['id']}; + + break; + } + + $content = strtr($content, [ + '{%' . $this->entityType . '.' . $attribute['id'] . '%}' => $value, + '{% ' . $this->entityType . '.' . $attribute['id'] . ' %}' => $value, + ]); + } + + return $content; + } + + abstract public function getEntity($entity); + + abstract public function getActions(); + + abstract public function executeActions($workflow, $entity); +} diff --git a/packages/Webkul/Workflow/src/Helpers/Entity/Activity.php b/packages/Webkul/Workflow/src/Helpers/Entity/Activity.php new file mode 100644 index 0000000..df66f10 --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Entity/Activity.php @@ -0,0 +1,377 @@ +attributeRepository = $attributeRepository; + + $this->emailTemplateRepository = $emailTemplateRepository; + + $this->leadRepository = $leadRepository; + + $this->personRepository = $personRepository; + + $this->activityRepository = $activityRepository; + } + + /** + * Returns attributes + * + * @param string $entityType + * @param array $skipAttributes + * @return array + */ + public function getAttributes($entityType, $skipAttributes = []) + { + $attributes = [ + [ + 'id' => 'title', + 'type' => 'text', + 'name' => 'Title', + 'lookup_type' => null, + 'options' => collect([]), + ], [ + 'id' => 'type', + 'type' => 'multiselect', + 'name' => 'Type', + 'lookup_type' => null, + 'options' => collect([ + (object)[ + 'id' => 'note', + 'name' => 'Note', + ], (object)[ + 'id' => 'call', + 'name' => 'Call', + ], (object)[ + 'id' => 'meeting', + 'name' => 'Meeting', + ], (object)[ + 'id' => 'lunch', + 'name' => 'Lunch', + ], (object)[ + 'id' => 'file', + 'name' => 'File', + ], + ]), + ], [ + 'id' => 'location', + 'type' => 'text', + 'name' => 'Location', + 'lookup_type' => null, + 'options' => collect([]), + ], [ + 'id' => 'comment', + 'type' => 'textarea', + 'name' => 'Comment', + 'lookup_type' => null, + 'options' => collect([]), + ], [ + 'id' => 'schedule_from', + 'type' => 'datetime', + 'name' => 'Schedule From', + 'lookup_type' => null, + 'options' => collect([]), + ], [ + 'id' => 'schedule_to', + 'type' => 'datetime', + 'name' => 'Schedule To', + 'lookup_type' => null, + 'options' => collect([]), + ], [ + 'id' => 'user_id', + 'type' => 'select', + 'name' => 'User', + 'lookup_type' => 'users', + 'options' => $this->attributeRepository->getLookUpOptions('users'), + ] + ]; + + return $attributes; + } + + /** + * Returns placeholders for email templates + * + * @param array $entity + * @return array + */ + public function getEmailTemplatePlaceholders($entity) + { + $emailTemplates = parent::getEmailTemplatePlaceholders($entity); + + $emailTemplates['menu'][] = [ + 'text' => 'Participants', + 'value' => '{%activities.participants%}' + ]; + + return $emailTemplates; + } + + /** + * Replace placeholders with values + * + * @param array $entity + * @param array $values + * @return string + */ + public function replacePlaceholders($entity, $content) + { + $content = parent::replacePlaceholders($entity, $content); + + $value = '
      '; + + foreach ($entity->participants as $participant) { + $value .= '
    • ' . ($participant->user ? $participant->user->name : $participant->person->name) . '
    • '; + } + + $value .= '
    '; + + $content = strtr($content, [ + '{%' . $this->entityType . '.participants%}' => $value, + '{% ' . $this->entityType . '.participants %}' => $value, + ]); + + return $content; + } + + /** + * Returns entity + * + * @param \Webkul\Activity\Contracts\Activity|integer $entity + * @return \Webkul\Activity\Contracts\Activity + */ + public function getEntity($entity) + { + if (!$entity instanceof \Webkul\Activity\Contracts\Activity) { + $entity = $this->activityRepository->find($entity); + } + + return $entity; + } + + /** + * Returns workflow actions + * + * @return array + */ + public function getActions() + { + $emailTemplates = $this->emailTemplateRepository->all(['id', 'name']); + + return [ + [ + 'id' => 'update_related_leads', + 'name' => __('admin::app.settings.workflows.update-related-leads'), + 'attributes' => $this->getAttributes('leads'), + ], [ + 'id' => 'send_email_to_sales_owner', + 'name' => __('admin::app.settings.workflows.send-email-to-sales-owner'), + 'options' => $emailTemplates, + ], [ + 'id' => 'send_email_to_participants', + 'name' => __('admin::app.settings.workflows.send-email-to-participants'), + 'options' => $emailTemplates, + ], + ]; + } + + /** + * Execute workflow actions + * + * @param \Webkul\Workflow\Contracts\Workflow $workflow + * @param \Webkul\Activity\Contracts\Activity $activity + * @return array + */ + public function executeActions($workflow, $activity) + { + foreach ($workflow->actions as $action) { + switch ($action['id']) { + case 'update_related_leads': + $leadIds = $this->activityRepository->getModel() + ->leftJoin('lead_activities', 'activities.id', 'lead_activities.activity_id') + ->leftJoin('leads', 'lead_activities.lead_id', 'leads.id') + ->addSelect('leads.id') + ->where('activities.id', $activity->id) + ->pluck('id'); + + foreach ($leadIds as $leadId) { + $this->leadRepository->update([ + 'entity_type' => 'leads', + $action['attribute'] => $action['value'], + ], $leadId); + } + + break; + + case 'send_email_to_sales_owner': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + Mail::queue(new Common([ + 'to' => $activity->user->email, + 'subject' => $this->replacePlaceholders($activity, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($activity, $emailTemplate->content), + 'attachments' => [ + [ + 'name' => 'invite.ics', + 'mime' => 'text/calendar', + 'content' => $this->getICSContent($activity), + ], + ], + ])); + } catch (\Exception $e) { + } + + break; + + case 'send_email_to_participants': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + foreach ($activity->participants as $participant) { + Mail::queue(new Common([ + 'to' => $participant->user + ? $participant->user->email + : data_get($participant->person->emails, '*.value'), + 'subject' => $this->replacePlaceholders($activity, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($activity, $emailTemplate->content), + 'attachments' => [ + [ + 'name' => 'invite.ics', + 'mime' => 'text/calendar', + 'content' => $this->getICSContent($activity), + ], + ], + ])); + } + } catch (\Exception $e) { + } + + break; + } + } + } + + /** + * Returns .ics file for attachments + * + * @param \Webkul\Activity\Contracts\Activity $activity + * @return string + */ + public function getICSContent($activity) + { + $content = [ + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//Krayincrm//Krayincrm//EN', + 'BEGIN:VEVENT', + 'UID:' . time() . '-' . $activity->id, + 'DTSTAMP:' . Carbon::now()->format('YmdTHis'), + 'CREATED:' . $activity->created_at->format('YmdTHis'), + 'SEQUENCE:1', + 'ORGANIZER;CN=' . $activity->user->name . ':MAILTO:' . $activity->user->email, + ]; + + foreach ($activity->participants as $participant) { + $emails = $participant->user + ? [$participant->user->email] + : data_get($participant->person->emails, '*.value'); + + if ($participant->user) { + $content[] = 'ATTENDEE;ROLE=REQ-PARTICIPANT;CN=' . $participant->user->name . ';PARTSTAT=NEEDS-ACTION:MAILTO:' . $participant->user->email; + } else { + foreach (data_get($participant->person->emails, '*.value') as $email) { + $content[] = 'ATTENDEE;ROLE=REQ-PARTICIPANT;CN=' . $participant->person->name . ';PARTSTAT=NEEDS-ACTION:MAILTO:' . $email; + } + } + } + + $content = array_merge($content, [ + 'DTSTART:' . $activity->schedule_from->format('YmdTHis'), + 'DTEND:' . $activity->schedule_to->format('YmdTHis'), + 'SUMMARY:' . $activity->title, + 'LOCATION:' . $activity->location, + 'DESCRIPTION:' . $activity->comment, + 'END:VEVENT', + 'END:VCALENDAR', + ]); + + return implode("\r\n", $content); + } +} diff --git a/packages/Webkul/Workflow/src/Helpers/Entity/Lead.php b/packages/Webkul/Workflow/src/Helpers/Entity/Lead.php new file mode 100644 index 0000000..28fc150 --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Entity/Lead.php @@ -0,0 +1,271 @@ +attributeRepository = $attributeRepository; + + $this->emailTemplateRepository = $emailTemplateRepository; + + $this->leadRepository = $leadRepository; + + $this->activityRepository = $activityRepository; + + $this->personRepository = $personRepository; + + $this->tagRepository = $tagRepository; + } + + /** + * Returns entity + * + * @param \Webkul\Lead\Contracts\Lead|integer $entity + * @return \Webkul\Lead\Contracts\Lead + */ + public function getEntity($entity) + { + if (!$entity instanceof \Webkul\Lead\Contracts\Lead) { + $entity = $this->leadRepository->find($entity); + } + + return $entity; + } + + /** + * Returns attributes + * + * @param string $entityType + * @param array $skipAttributes + * @return array + */ + public function getAttributes($entityType, $skipAttributes = ['textarea', 'image', 'file', 'address']) + { + $attributes[] = [ + 'id' => 'lead_pipeline_stage_id', + 'type' => 'select', + 'name' => 'Stage', + 'lookup_type' => 'lead_pipeline_stages', + 'options' => collect([]), + ]; + + return array_merge( + parent::getAttributes($entityType, $skipAttributes), + $attributes + ); + } + + /** + * Returns workflow actions + * + * @return array + */ + public function getActions() + { + $emailTemplates = $this->emailTemplateRepository->all(['id', 'name']); + + return [ + [ + 'id' => 'update_lead', + 'name' => __('admin::app.settings.workflows.update-lead'), + 'attributes' => $this->getAttributes('leads'), + ], [ + 'id' => 'update_person', + 'name' => __('admin::app.settings.workflows.update-person'), + 'attributes' => $this->getAttributes('persons'), + ], [ + 'id' => 'send_email_to_person', + 'name' => __('admin::app.settings.workflows.send-email-to-person'), + 'options' => $emailTemplates, + ], [ + 'id' => 'send_email_to_sales_owner', + 'name' => __('admin::app.settings.workflows.send-email-to-sales-owner'), + 'options' => $emailTemplates, + ], [ + 'id' => 'add_tag', + 'name' => __('admin::app.settings.workflows.add-tag'), + ], [ + 'id' => 'add_note_as_activity', + 'name' => __('admin::app.settings.workflows.add-note-as-activity'), + ], + ]; + } + + /** + * Execute workflow actions + * + * @param \Webkul\Workflow\Contracts\Workflow $workflow + * @param \Webkul\Lead\Contracts\Lead $lead + * @return array + */ + public function executeActions($workflow, $lead) + { + foreach ($workflow->actions as $action) { + switch ($action['id']) { + case 'update_lead': + $this->leadRepository->update([ + 'entity_type' => 'leads', + $action['attribute'] => $action['value'], + ], $lead->id); + + break; + + case 'update_person': + $this->personRepository->update([ + 'entity_type' => 'persons', + $action['attribute'] => $action['value'], + ], $lead->person_id); + + break; + + case 'send_email_to_person': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + Mail::queue(new Common([ + 'to' => data_get($lead->person->emails, '*.value'), + 'subject' => $this->replacePlaceholders($lead, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($lead, $emailTemplate->content), + ])); + } catch (\Exception $e) { + } + + break; + + case 'send_email_to_sales_owner': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + Mail::queue(new Common([ + 'to' => $lead->user->email, + 'subject' => $this->replacePlaceholders($lead, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($lead, $emailTemplate->content), + ])); + } catch (\Exception $e) { + } + + break; + + case 'add_tag': + $colors = [ + '#337CFF', + '#FEBF00', + '#E5549F', + '#27B6BB', + '#FB8A3F', + '#43AF52' + ]; + + if (!$tag = $this->tagRepository->findOneByField('name', $action['value'])) { + $tag = $this->tagRepository->create([ + 'name' => $action['value'], + 'color' => $colors[rand(0, 5)], + 'user_id' => auth()->guard('user')->user()->id, + ]); + } + + if (!$lead->tags->contains($tag->id)) { + $lead->tags()->attach($tag->id); + } + + break; + + case 'add_note_as_activity': + $activity = $this->activityRepository->create([ + 'type' => 'note', + 'comment' => $action['value'], + 'is_done' => 1, + 'user_id' => $userId = auth()->guard('user')->user()->id, + ]); + + $lead->activities()->attach($activity->id); + + break; + } + } + } +} diff --git a/packages/Webkul/Workflow/src/Helpers/Entity/Person.php b/packages/Webkul/Workflow/src/Helpers/Entity/Person.php new file mode 100644 index 0000000..13799ca --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Entity/Person.php @@ -0,0 +1,164 @@ +attributeRepository = $attributeRepository; + + $this->emailTemplateRepository = $emailTemplateRepository; + + $this->leadRepository = $leadRepository; + + $this->personRepository = $personRepository; + } + + /** + * Returns entity + * + * @param \Webkul\Contact\Contracts\Person|integer $entity + * @return \Webkul\Contact\Contracts\Person + */ + public function getEntity($entity) + { + if (!$entity instanceof \Webkul\Contact\Contracts\Person) { + $entity = $this->personRepository->find($entity); + } + + return $entity; + } + + /** + * Returns workflow actions + * + * @return array + */ + public function getActions() + { + $emailTemplates = $this->emailTemplateRepository->all(['id', 'name']); + + return [ + [ + 'id' => 'update_person', + 'name' => __('admin::app.settings.workflows.update-person'), + 'attributes' => $this->getAttributes('persons'), + ], [ + 'id' => 'update_related_leads', + 'name' => __('admin::app.settings.workflows.update-related-leads'), + 'attributes' => $this->getAttributes('leads'), + ], [ + 'id' => 'send_email_to_person', + 'name' => __('admin::app.settings.workflows.send-email-to-person'), + 'options' => $emailTemplates, + ], + ]; + } + + /** + * Execute workflow actions + * + * @param \Webkul\Workflow\Contracts\Workflow $workflow + * @param \Webkul\Contact\Contracts\Person $person + * @return array + */ + public function executeActions($workflow, $person) + { + foreach ($workflow->actions as $action) { + switch ($action['id']) { + case 'update_person': + $this->personRepository->update([ + 'entity_type' => 'persons', + $action['attribute'] => $action['value'], + ], $person->id); + + break; + + case 'update_related_leads': + $leads = $this->leadRepository->findByField('person_id', $person->id); + + foreach ($leads as $lead) { + $this->leadRepository->update([ + 'entity_type' => 'leads', + $action['attribute'] => $action['value'], + ], $lead->id); + } + + break; + + case 'send_email_to_person': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + Mail::queue(new Common([ + 'to' => data_get($person->emails, '*.value'), + 'subject' => $this->replacePlaceholders($person, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($person, $emailTemplate->content), + ])); + } catch (\Exception $e) { + } + + break; + } + } + } +} diff --git a/packages/Webkul/Workflow/src/Helpers/Entity/Quote.php b/packages/Webkul/Workflow/src/Helpers/Entity/Quote.php new file mode 100644 index 0000000..f8be02a --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Entity/Quote.php @@ -0,0 +1,208 @@ +attributeRepository = $attributeRepository; + + $this->emailTemplateRepository = $emailTemplateRepository; + + $this->quoteRepository = $quoteRepository; + + $this->leadRepository = $leadRepository; + + $this->personRepository = $personRepository; + } + + /** + * Returns entity + * + * @param \Webkul\Quote\Contracts\Quote|integer $entity + * @return \Webkul\Quote\Contracts\Quote + */ + public function getEntity($entity) + { + if (!$entity instanceof \Webkul\Quote\Contracts\Quote) { + $entity = $this->quoteRepository->find($entity); + } + + return $entity; + } + + /** + * Returns workflow actions + * + * @return array + */ + public function getActions() + { + $emailTemplates = $this->emailTemplateRepository->all(['id', 'name']); + + return [ + [ + 'id' => 'update_quote', + 'name' => __('admin::app.settings.workflows.update-quote'), + 'attributes' => $this->getAttributes('quotes'), + ], [ + 'id' => 'update_person', + 'name' => __('admin::app.settings.workflows.update-person'), + 'attributes' => $this->getAttributes('persons'), + ], [ + 'id' => 'update_related_leads', + 'name' => __('admin::app.settings.workflows.update-related-leads'), + 'attributes' => $this->getAttributes('leads'), + ], [ + 'id' => 'send_email_to_person', + 'name' => __('admin::app.settings.workflows.send-email-to-person'), + 'options' => $emailTemplates, + ], [ + 'id' => 'send_email_to_sales_owner', + 'name' => __('admin::app.settings.workflows.send-email-to-sales-owner'), + 'options' => $emailTemplates, + ], + ]; + } + + /** + * Execute workflow actions + * + * @param \Webkul\Workflow\Contracts\Workflow $workflow + * @param \Webkul\Quote\Contracts\Quote $quote + * @return array + */ + public function executeActions($workflow, $quote) + { + foreach ($workflow->actions as $action) { + switch ($action['id']) { + case 'update_quote': + $this->quoteRepository->update([ + 'entity_type' => 'quotes', + $action['attribute'] => $action['value'], + ], $quote->id); + + break; + + case 'update_person': + $this->personRepository->update([ + 'entity_type' => 'persons', + $action['attribute'] => $action['value'], + ], $quote->person_id); + + break; + + case 'update_related_leads': + foreach ($quote->leads as $lead) { + $this->leadRepository->update([ + 'entity_type' => 'leads', + $action['attribute'] => $action['value'], + ], $lead->id); + } + + break; + + case 'send_email_to_person': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + Mail::queue(new Common([ + 'to' => data_get($quote->person->emails, '*.value'), + 'subject' => $this->replacePlaceholders($quote, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($quote, $emailTemplate->content), + ])); + } catch (\Exception $e) { + } + + break; + + case 'send_email_to_sales_owner': + $emailTemplate = $this->emailTemplateRepository->find($action['value']); + + if (!$emailTemplate) { + break; + } + + try { + Mail::queue(new Common([ + 'to' => $quote->user->email, + 'subject' => $this->replacePlaceholders($quote, $emailTemplate->subject), + 'body' => $this->replacePlaceholders($quote, $emailTemplate->content), + ])); + } catch (\Exception $e) { + } + + break; + } + } + } +} diff --git a/packages/Webkul/Workflow/src/Helpers/Validator.php b/packages/Webkul/Workflow/src/Helpers/Validator.php new file mode 100644 index 0000000..5db0306 --- /dev/null +++ b/packages/Webkul/Workflow/src/Helpers/Validator.php @@ -0,0 +1,189 @@ +conditions) { + return true; + } + + $validConditionCount = $totalConditionCount = 0; + + foreach ($workflow->conditions as $condition) { + if (!$condition['attribute'] + || !isset($condition['value']) + || is_null($condition['value']) + || $condition['value'] == '' + ) { + continue; + } + + $totalConditionCount++; + + if ($workflow->condition_type == 'and') { + if (!$this->validateEntity($condition, $entity)) { + return false; + } else { + $validConditionCount++; + } + } else { + if ($this->validateEntity($condition, $entity)) { + return true; + } + } + } + + return $validConditionCount == $totalConditionCount ? true : false; + } + + /** + * Validate object + * + * @param array $condition + * @param mixed $entity + * @return bool + */ + private function validateEntity($condition, $entity) + { + return $this->validateAttribute( + $condition, + $this->getAttributeValue($condition, $entity) + ); + } + + /** + * Return value for the attribute + * + * @param array $condition + * @param mixed $entity + * @return boolean + */ + public function getAttributeValue($condition, $entity) + { + $value = $entity->{$condition['attribute']}; + + if (!in_array($condition['attribute_type'], ['multiselect', 'checkbox'])) { + return $value; + } + + return $value ? explode(',', $value) : []; + } + + /** + * Validate attribute value for condition + * + * @param array $condition + * @param mixed $attributeValue + * @return bool + */ + public function validateAttribute($condition, $attributeValue) + { + switch ($condition['operator']) { + case '==': + case '!=': + if (is_array($condition['value'])) { + if (!is_array($attributeValue)) { + return false; + } + + $result = !empty(array_intersect($condition['value'], $attributeValue)); + } else { + if (is_array($attributeValue)) { + $result = count($attributeValue) == 1 && array_shift($attributeValue) == $condition['value']; + } else { + $result = $attributeValue == $condition['value']; + } + } + + break; + + case '<=': + case '>': + if (!is_scalar($attributeValue)) { + return false; + } + + $result = $attributeValue <= $condition['value']; + + break; + + case '>=': + case '<': + if (!is_scalar($attributeValue)) { + return false; + } + + $result = $attributeValue >= $condition['value']; + + break; + + case '{}': + case '!{}': + if (is_scalar($attributeValue) && is_array($condition['value'])) { + foreach ($condition['value'] as $item) { + if (stripos($attributeValue, $item) !== false) { + $result = true; + + break; + } + } + } elseif (is_array($condition['value'])) { + if (!is_array($attributeValue)) { + return false; + } + + $result = !empty(array_intersect($condition['value'], $attributeValue)); + } else { + if (is_array($attributeValue)) { + $result = self::validateArrayValues($attributeValue, $condition['value']); + } else { + $result = strpos($attributeValue, $condition['value']) !== false; + } + } + + break; + } + + if (in_array($condition['operator'], ['!=', '>', '<', '!{}'])) { + $result = !$result; + } + + return $result; + } + + /** + * Validate the condition value against a multi dimensional array recursively + * + * @param array $attributeValue + * @param string $conditionValue + * @return bool + */ + private static function validateArrayValues(array $attributeValue, string $conditionValue): bool + { + if (in_array($conditionValue, $attributeValue, true) === true) { + return true; + } + + foreach ($attributeValue as $subValue) { + if (!is_array($subValue)) { + continue; + } + + if (self::validateArrayValues($subValue, $conditionValue) === true) { + return true; + } + } + + return false; + } +} diff --git a/packages/Webkul/Workflow/src/Listeners/Entity.php b/packages/Webkul/Workflow/src/Listeners/Entity.php new file mode 100644 index 0000000..5d31279 --- /dev/null +++ b/packages/Webkul/Workflow/src/Listeners/Entity.php @@ -0,0 +1,66 @@ +workflowRepository = $workflowRepository; + + $this->validator = $validator; + } + + /** + * @param string $eventName + * @param mixed $entity + * @return void + */ + public function process($eventName, $entity) + { + $workflows = $this->workflowRepository->findByField('event', $eventName); + + foreach ($workflows as $workflow) { + $workflowEntity = app(config('workflows.trigger_entities.' . $workflow->entity_type . '.class')); + + $entity = $workflowEntity->getEntity($entity); + + if (!$this->validator->validate($workflow, $entity)) { + continue; + } + + try { + $workflowEntity->executeActions($workflow, $entity); + } catch (\Exception $e) { + // Skip exception for now + } + } + } +} diff --git a/packages/Webkul/Workflow/src/Models/Workflow.php b/packages/Webkul/Workflow/src/Models/Workflow.php new file mode 100644 index 0000000..f53c886 --- /dev/null +++ b/packages/Webkul/Workflow/src/Models/Workflow.php @@ -0,0 +1,24 @@ + 'array', + 'actions' => 'array', + ]; + + protected $fillable = [ + 'name', + 'description', + 'entity_type', + 'event', + 'condition_type', + 'conditions', + 'actions', + ]; +} diff --git a/packages/Webkul/Workflow/src/Models/WorkflowProxy.php b/packages/Webkul/Workflow/src/Models/WorkflowProxy.php new file mode 100644 index 0000000..97e0783 --- /dev/null +++ b/packages/Webkul/Workflow/src/Models/WorkflowProxy.php @@ -0,0 +1,10 @@ +loadMigrationsFrom(__DIR__ . '/../Database/Migrations'); + + Event::listen('*', function ($eventName, array $data) { + if (!in_array($eventName, data_get(config('workflows.trigger_entities'), '*.events.*.event'))) { + return; + } + + app(\Webkul\Workflow\Listeners\Entity::class)->process($eventName, current($data)); + }); + } + + /** + * Register services. + * + * @return void + */ + public function register() + { + $this->registerConfig(); + } + + /** + * Register package config. + * + * @return void + */ + protected function registerConfig() + { + $this->mergeConfigFrom(dirname(__DIR__) . '/Config/workflows.php', 'workflows'); + } +} diff --git a/packages/Webkul/Workflow/src/Repositories/WorkflowRepository.php b/packages/Webkul/Workflow/src/Repositories/WorkflowRepository.php new file mode 100644 index 0000000..1d4a23a --- /dev/null +++ b/packages/Webkul/Workflow/src/Repositories/WorkflowRepository.php @@ -0,0 +1,18 @@ + + + + + ./tests/RestAPI + + + ./tests/Unit + + + ./tests/Feature + + + + + ./app + + + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 0000000..3aec5e2 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews -Indexes + + + RewriteEngine On + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Send Requests To Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..0fbc0c4 --- /dev/null +++ b/public/index.php @@ -0,0 +1,55 @@ +make(Kernel::class); + +$response = tap($kernel->handle( + $request = Request::capture() +))->send(); + +$kernel->terminate($request, $response); diff --git a/public/phpinfo.php b/public/phpinfo.php new file mode 100644 index 0000000..554a22c --- /dev/null +++ b/public/phpinfo.php @@ -0,0 +1,5 @@ + diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 0000000..eb05362 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/web.config b/public/web.config new file mode 100644 index 0000000..323482f --- /dev/null +++ b/public/web.config @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/css/app.css b/resources/css/app.css new file mode 100644 index 0000000..e69de29 diff --git a/resources/js/app.js b/resources/js/app.js new file mode 100644 index 0000000..40c55f6 --- /dev/null +++ b/resources/js/app.js @@ -0,0 +1 @@ +require('./bootstrap'); diff --git a/resources/js/bootstrap.js b/resources/js/bootstrap.js new file mode 100644 index 0000000..6922577 --- /dev/null +++ b/resources/js/bootstrap.js @@ -0,0 +1,28 @@ +window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +/** + * Echo exposes an expressive API for subscribing to channels and listening + * for events that are broadcast by Laravel. Echo and event broadcasting + * allows your team to easily build robust real-time web applications. + */ + +// import Echo from 'laravel-echo'; + +// window.Pusher = require('pusher-js'); + +// window.Echo = new Echo({ +// broadcaster: 'pusher', +// key: process.env.MIX_PUSHER_APP_KEY, +// cluster: process.env.MIX_PUSHER_APP_CLUSTER, +// forceTLS: true +// }); diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php new file mode 100644 index 0000000..5c586db --- /dev/null +++ b/resources/views/errors/401.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Unauthorized')) +@section('code', '401') +@section('message', __('Unauthorized')) diff --git a/resources/views/errors/402.blade.php b/resources/views/errors/402.blade.php new file mode 100644 index 0000000..3bc23ef --- /dev/null +++ b/resources/views/errors/402.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Payment Required')) +@section('code', '402') +@section('message', __('Payment Required')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php new file mode 100644 index 0000000..a5506f0 --- /dev/null +++ b/resources/views/errors/403.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Forbidden')) +@section('code', '403') +@section('message', __($exception->getMessage() ?: 'Forbidden')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php new file mode 100644 index 0000000..7549540 --- /dev/null +++ b/resources/views/errors/404.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Not Found')) +@section('code', '404') +@section('message', __('Not Found')) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php new file mode 100644 index 0000000..c09216e --- /dev/null +++ b/resources/views/errors/419.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Page Expired')) +@section('code', '419') +@section('message', __('Page Expired')) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php new file mode 100644 index 0000000..f01b07b --- /dev/null +++ b/resources/views/errors/429.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Too Many Requests')) +@section('code', '429') +@section('message', __('Too Many Requests')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php new file mode 100644 index 0000000..d9e95d9 --- /dev/null +++ b/resources/views/errors/500.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Server Error')) +@section('code', '500') +@section('message', __('Server Error')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php new file mode 100644 index 0000000..c5a9dde --- /dev/null +++ b/resources/views/errors/503.blade.php @@ -0,0 +1,5 @@ +@extends('errors::minimal') + +@section('title', __('Service Unavailable')) +@section('code', '503') +@section('message', __('Service Unavailable')) diff --git a/resources/views/errors/illustrated-layout.blade.php b/resources/views/errors/illustrated-layout.blade.php new file mode 100644 index 0000000..3832721 --- /dev/null +++ b/resources/views/errors/illustrated-layout.blade.php @@ -0,0 +1,487 @@ + + + + + + + @yield('title') + + + + + + + + + +
    +
    +
    +
    + @yield('code', __('Oh no')) +
    + +
    + +

    + @yield('message') +

    + + + + +
    +
    + +
    + @yield('image') +
    +
    + + diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 0000000..d6c1ce0 --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,53 @@ + + + + + + + @yield('title') + + + + + +
    +
    +
    + @yield('message') +
    +
    +
    + + diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php new file mode 100644 index 0000000..70fc05d --- /dev/null +++ b/resources/views/errors/minimal.blade.php @@ -0,0 +1,527 @@ + + + + + + + @yield('title') + + + + + + +
    +
    +
    +
    + @yield('code') +
    + +
    + @yield('message') +
    +
    +
    +
    + + diff --git a/resources/views/vendor/breadcrumbs/bootstrap4.blade.php b/resources/views/vendor/breadcrumbs/bootstrap4.blade.php new file mode 100644 index 0000000..59a820d --- /dev/null +++ b/resources/views/vendor/breadcrumbs/bootstrap4.blade.php @@ -0,0 +1,15 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/breadcrumbs/bootstrap5.blade.php b/resources/views/vendor/breadcrumbs/bootstrap5.blade.php new file mode 100644 index 0000000..13fb1b1 --- /dev/null +++ b/resources/views/vendor/breadcrumbs/bootstrap5.blade.php @@ -0,0 +1,15 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/breadcrumbs/bulma.blade.php b/resources/views/vendor/breadcrumbs/bulma.blade.php new file mode 100644 index 0000000..7ae46a5 --- /dev/null +++ b/resources/views/vendor/breadcrumbs/bulma.blade.php @@ -0,0 +1,24 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/breadcrumbs/foundation6.blade.php b/resources/views/vendor/breadcrumbs/foundation6.blade.php new file mode 100644 index 0000000..0629466 --- /dev/null +++ b/resources/views/vendor/breadcrumbs/foundation6.blade.php @@ -0,0 +1,17 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/breadcrumbs/json-ld.php b/resources/views/vendor/breadcrumbs/json-ld.php new file mode 100644 index 0000000..fd2d019 --- /dev/null +++ b/resources/views/vendor/breadcrumbs/json-ld.php @@ -0,0 +1,23 @@ + 'https://schema.org', + '@type' => 'BreadcrumbList', + 'itemListElement' => [], +]; + +foreach ($breadcrumbs as $i => $breadcrumb) { + $json['itemListElement'][] = [ + '@type' => 'ListItem', + 'position' => $i + 1, + 'item' => [ + '@id' => $breadcrumb->url ?: Request::fullUrl(), + 'name' => $breadcrumb->title, + 'image' => $breadcrumb->image ?? null, + ], + ]; +} +?> + diff --git a/resources/views/vendor/breadcrumbs/materialize.blade.php b/resources/views/vendor/breadcrumbs/materialize.blade.php new file mode 100644 index 0000000..7d89a9f --- /dev/null +++ b/resources/views/vendor/breadcrumbs/materialize.blade.php @@ -0,0 +1,17 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/breadcrumbs/tailwind.blade.php b/resources/views/vendor/breadcrumbs/tailwind.blade.php new file mode 100644 index 0000000..dda1179 --- /dev/null +++ b/resources/views/vendor/breadcrumbs/tailwind.blade.php @@ -0,0 +1,28 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/breadcrumbs/uikit.blade.php b/resources/views/vendor/breadcrumbs/uikit.blade.php new file mode 100644 index 0000000..920183d --- /dev/null +++ b/resources/views/vendor/breadcrumbs/uikit.blade.php @@ -0,0 +1,13 @@ +@unless ($breadcrumbs->isEmpty()) + +@endunless diff --git a/resources/views/vendor/mail/html/button.blade.php b/resources/views/vendor/mail/html/button.blade.php new file mode 100644 index 0000000..2f9d59a --- /dev/null +++ b/resources/views/vendor/mail/html/button.blade.php @@ -0,0 +1,20 @@ + + + + + diff --git a/resources/views/vendor/mail/html/footer.blade.php b/resources/views/vendor/mail/html/footer.blade.php new file mode 100644 index 0000000..33f7dad --- /dev/null +++ b/resources/views/vendor/mail/html/footer.blade.php @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php new file mode 100644 index 0000000..34d32af --- /dev/null +++ b/resources/views/vendor/mail/html/header.blade.php @@ -0,0 +1,11 @@ + + + + @if (trim($slot) === 'Laravel') + + @else + {{ $slot }} + @endif + + + diff --git a/resources/views/vendor/mail/html/layout.blade.php b/resources/views/vendor/mail/html/layout.blade.php new file mode 100644 index 0000000..c3d9bbd --- /dev/null +++ b/resources/views/vendor/mail/html/layout.blade.php @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + diff --git a/resources/views/vendor/mail/html/message.blade.php b/resources/views/vendor/mail/html/message.blade.php new file mode 100644 index 0000000..1ae9ed8 --- /dev/null +++ b/resources/views/vendor/mail/html/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ config('app.name') }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/html/panel.blade.php b/resources/views/vendor/mail/html/panel.blade.php new file mode 100644 index 0000000..ae97c13 --- /dev/null +++ b/resources/views/vendor/mail/html/panel.blade.php @@ -0,0 +1,14 @@ + + + + + + diff --git a/resources/views/vendor/mail/html/subcopy.blade.php b/resources/views/vendor/mail/html/subcopy.blade.php new file mode 100644 index 0000000..f559e8f --- /dev/null +++ b/resources/views/vendor/mail/html/subcopy.blade.php @@ -0,0 +1,7 @@ + + + + + diff --git a/resources/views/vendor/mail/html/table.blade.php b/resources/views/vendor/mail/html/table.blade.php new file mode 100644 index 0000000..b3bb3c8 --- /dev/null +++ b/resources/views/vendor/mail/html/table.blade.php @@ -0,0 +1,3 @@ +
    + {{ Illuminate\Mail\Markdown::parse($slot) }} +
    diff --git a/resources/views/vendor/mail/html/themes/default.css b/resources/views/vendor/mail/html/themes/default.css new file mode 100644 index 0000000..03d8116 --- /dev/null +++ b/resources/views/vendor/mail/html/themes/default.css @@ -0,0 +1,290 @@ +/* Base */ + +body, +body *:not(html):not(style):not(br):not(tr):not(code) { + box-sizing: border-box; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; + position: relative; +} + +body { + -webkit-text-size-adjust: none; + background-color: #ffffff; + color: #718096; + height: 100%; + line-height: 1.4; + margin: 0; + padding: 0; + width: 100% !important; +} + +p, +ul, +ol, +blockquote { + line-height: 1.4; + text-align: left; +} + +a { + color: #3869d4; +} + +a img { + border: none; +} + +/* Typography */ + +h1 { + color: #3d4852; + font-size: 18px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h2 { + font-size: 16px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +h3 { + font-size: 14px; + font-weight: bold; + margin-top: 0; + text-align: left; +} + +p { + font-size: 16px; + line-height: 1.5em; + margin-top: 0; + text-align: left; +} + +p.sub { + font-size: 12px; +} + +img { + max-width: 100%; +} + +/* Layout */ + +.wrapper { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.content { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 0; + padding: 0; + width: 100%; +} + +/* Header */ + +.header { + padding: 25px 0; + text-align: center; +} + +.header a { + color: #3d4852; + font-size: 19px; + font-weight: bold; + text-decoration: none; +} + +/* Logo */ + +.logo { + height: 75px; + max-height: 75px; + width: 75px; +} + +/* Body */ + +.body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + background-color: #edf2f7; + border-bottom: 1px solid #edf2f7; + border-top: 1px solid #edf2f7; + margin: 0; + padding: 0; + width: 100%; +} + +.inner-body { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + background-color: #ffffff; + border-color: #e8e5ef; + border-radius: 2px; + border-width: 1px; + box-shadow: 0 2px 0 rgba(0, 0, 150, 0.025), 2px 4px 0 rgba(0, 0, 150, 0.015); + margin: 0 auto; + padding: 0; + width: 570px; +} + +/* Subcopy */ + +.subcopy { + border-top: 1px solid #e8e5ef; + margin-top: 25px; + padding-top: 25px; +} + +.subcopy p { + font-size: 14px; +} + +/* Footer */ + +.footer { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 570px; + margin: 0 auto; + padding: 0; + text-align: center; + width: 570px; +} + +.footer p { + color: #b0adc5; + font-size: 12px; + text-align: center; +} + +.footer a { + color: #b0adc5; + text-decoration: underline; +} + +/* Tables */ + +.table table { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + width: 100%; +} + +.table th { + border-bottom: 1px solid #edeff2; + margin: 0; + padding-bottom: 8px; +} + +.table td { + color: #74787e; + font-size: 15px; + line-height: 18px; + margin: 0; + padding: 10px 0; +} + +.content-cell { + max-width: 100vw; + padding: 32px; +} + +/* Buttons */ + +.action { + -premailer-cellpadding: 0; + -premailer-cellspacing: 0; + -premailer-width: 100%; + margin: 30px auto; + padding: 0; + text-align: center; + width: 100%; +} + +.button { + -webkit-text-size-adjust: none; + border-radius: 4px; + color: #fff; + display: inline-block; + overflow: hidden; + text-decoration: none; +} + +.button-blue, +.button-primary { + background-color: #2d3748; + border-bottom: 8px solid #2d3748; + border-left: 18px solid #2d3748; + border-right: 18px solid #2d3748; + border-top: 8px solid #2d3748; +} + +.button-green, +.button-success { + background-color: #48bb78; + border-bottom: 8px solid #48bb78; + border-left: 18px solid #48bb78; + border-right: 18px solid #48bb78; + border-top: 8px solid #48bb78; +} + +.button-red, +.button-error { + background-color: #e53e3e; + border-bottom: 8px solid #e53e3e; + border-left: 18px solid #e53e3e; + border-right: 18px solid #e53e3e; + border-top: 8px solid #e53e3e; +} + +/* Panels */ + +.panel { + border-left: #2d3748 solid 4px; + margin: 21px 0; +} + +.panel-content { + background-color: #edf2f7; + color: #718096; + padding: 16px; +} + +.panel-content p { + color: #718096; +} + +.panel-item { + padding: 0; +} + +.panel-item p:last-of-type { + margin-bottom: 0; + padding-bottom: 0; +} + +/* Utilities */ + +.break-all { + word-break: break-all; +} diff --git a/resources/views/vendor/mail/text/button.blade.php b/resources/views/vendor/mail/text/button.blade.php new file mode 100644 index 0000000..97444eb --- /dev/null +++ b/resources/views/vendor/mail/text/button.blade.php @@ -0,0 +1 @@ +{{ $slot }}: {{ $url }} diff --git a/resources/views/vendor/mail/text/footer.blade.php b/resources/views/vendor/mail/text/footer.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/footer.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/header.blade.php b/resources/views/vendor/mail/text/header.blade.php new file mode 100644 index 0000000..aaa3e57 --- /dev/null +++ b/resources/views/vendor/mail/text/header.blade.php @@ -0,0 +1 @@ +[{{ $slot }}]({{ $url }}) diff --git a/resources/views/vendor/mail/text/layout.blade.php b/resources/views/vendor/mail/text/layout.blade.php new file mode 100644 index 0000000..c59d2d8 --- /dev/null +++ b/resources/views/vendor/mail/text/layout.blade.php @@ -0,0 +1,9 @@ +{!! strip_tags($header) !!} + +{!! strip_tags($slot) !!} +@isset($subcopy) + + {!! strip_tags($subcopy) !!} +@endisset + +{!! strip_tags($footer) !!} diff --git a/resources/views/vendor/mail/text/message.blade.php b/resources/views/vendor/mail/text/message.blade.php new file mode 100644 index 0000000..1ae9ed8 --- /dev/null +++ b/resources/views/vendor/mail/text/message.blade.php @@ -0,0 +1,27 @@ +@component('mail::layout') + {{-- Header --}} + @slot('header') + @component('mail::header', ['url' => config('app.url')]) + {{ config('app.name') }} + @endcomponent + @endslot + + {{-- Body --}} + {{ $slot }} + + {{-- Subcopy --}} + @isset($subcopy) + @slot('subcopy') + @component('mail::subcopy') + {{ $subcopy }} + @endcomponent + @endslot + @endisset + + {{-- Footer --}} + @slot('footer') + @component('mail::footer') + © {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.') + @endcomponent + @endslot +@endcomponent diff --git a/resources/views/vendor/mail/text/panel.blade.php b/resources/views/vendor/mail/text/panel.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/panel.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/subcopy.blade.php b/resources/views/vendor/mail/text/subcopy.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/subcopy.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/mail/text/table.blade.php b/resources/views/vendor/mail/text/table.blade.php new file mode 100644 index 0000000..3338f62 --- /dev/null +++ b/resources/views/vendor/mail/text/table.blade.php @@ -0,0 +1 @@ +{{ $slot }} diff --git a/resources/views/vendor/notifications/email.blade.php b/resources/views/vendor/notifications/email.blade.php new file mode 100644 index 0000000..ff4f83f --- /dev/null +++ b/resources/views/vendor/notifications/email.blade.php @@ -0,0 +1,58 @@ +@component('mail::message') + {{-- 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', + }; + ?> + @component('mail::button', ['url' => $actionUrl, 'color' => $color]) + {{ $actionText }} + @endcomponent + @endisset + + {{-- Outro Lines --}} + @foreach ($outroLines as $line) + {{ $line }} + + @endforeach + + {{-- Salutation --}} + @if (! empty($salutation)) + {{ $salutation }} + @else + @lang('Regards'),
    + {{ config('app.name') }} + @endif + + {{-- Subcopy --}} + @isset($actionText) + @slot('subcopy') + @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 }}) + @endslot + @endisset +@endcomponent diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..3be5b8a --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,50 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/bootstrap-5.blade.php b/resources/views/vendor/pagination/bootstrap-5.blade.php new file mode 100644 index 0000000..7eaa6d1 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-5.blade.php @@ -0,0 +1,94 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..03e862f --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,47 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..200bb2d --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,40 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..7334a3a --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,28 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-5.blade.php b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php new file mode 100644 index 0000000..bace3e0 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php @@ -0,0 +1,30 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..f6c09ba --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,29 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..c021ff4 --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,130 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/welcome.blade.php b/resources/views/welcome.blade.php new file mode 100644 index 0000000..c450ba5 --- /dev/null +++ b/resources/views/welcome.blade.php @@ -0,0 +1,552 @@ + + + + + + + Laravel + + + + + + + + + + +
    + @if (Route::has('login')) + + @endif + +
    +
    + + + + + +
    + +
    +
    +
    +
    + + + + +
    + +
    +
    + Laravel has wonderful, thorough documentation covering every aspect of the framework. + Whether you are new to the framework or have previous experience with Laravel, we recommend + reading all of the documentation from beginning to end. +
    +
    +
    + +
    +
    + + + + + +
    + +
    +
    + Laracasts offers thousands of video tutorials on Laravel, PHP, and JavaScript development. + Check them out, see for yourself, and massively level up your development skills in the + process. +
    +
    +
    + +
    +
    + + + + +
    + +
    +
    + Laravel News is a community driven portal and newsletter aggregating all of the latest and + most important news in the Laravel ecosystem, including new package releases and tutorials. +
    +
    +
    + +
    +
    + + + +
    Vibrant + Ecosystem +
    +
    + +
    +
    + Laravel's robust library of first-party tools and libraries, such as Forge, Vapor, Nova, and Envoyer help you take your projects to + the next level. Pair them with powerful open source libraries like Cashier, Dusk, Echo, Horizon, Sanctum, Telescope, and more. +
    +
    +
    +
    +
    + +
    +
    +
    + + + + + + Shop + + + + + + + + Sponsor + +
    +
    + +
    + Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }}) +
    +
    +
    +
    + + diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 0000000..bcb8b18 --- /dev/null +++ b/routes/api.php @@ -0,0 +1,19 @@ +get('/user', function (Request $request) { + return $request->user(); +}); diff --git a/routes/breadcrumbs.php b/routes/breadcrumbs.php new file mode 100644 index 0000000..16c3bb4 --- /dev/null +++ b/routes/breadcrumbs.php @@ -0,0 +1,352 @@ +push(trans('admin::app.layouts.dashboard'), route('admin.dashboard.index')); +}); + + +// Dashboard > Leads +Breadcrumbs::for('leads', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.leads'), route('admin.leads.index')); +}); + +// Dashboard > Leads > Create +Breadcrumbs::for('leads.create', function (BreadcrumbTrail $trail) { + $trail->parent('leads'); + $trail->push(trans('admin::app.leads.create-title'), route('admin.leads.create')); +}); + +// Dashboard > Leads > Title +Breadcrumbs::for('leads.view', function (BreadcrumbTrail $trail, $lead) { + $trail->parent('leads'); + $trail->push($lead->title, route('admin.leads.view', $lead->id)); +}); + + +// Dashboard > Quotes +Breadcrumbs::for('quotes', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.quotes'), route('admin.quotes.index')); +}); + +// Dashboard > Quotes > Add Quote +Breadcrumbs::for('quotes.create', function (BreadcrumbTrail $trail) { + $trail->parent('quotes'); + $trail->push(trans('admin::app.quotes.create-title'), route('admin.quotes.create')); +}); + +// Dashboard > Quotes > Edit Quote +Breadcrumbs::for('quotes.edit', function (BreadcrumbTrail $trail, $quote) { + $trail->parent('quotes'); + $trail->push(trans('admin::app.quotes.edit-title'), route('admin.quotes.edit', $quote->id)); +}); + + +// Mail +Breadcrumbs::for('mail', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.mail.title'), route('admin.mail.index', ['route' => 'inbox'])); +}); + +// Mail > [Compose | Inbox | Outbox | Draft | Sent | Trash] +Breadcrumbs::for('mail.route', function (BreadcrumbTrail $trail, $route) { + $trail->parent('mail'); + $trail->push(trans('admin::app.mail.' . $route), route('admin.mail.index', ['route' => $route])); +}); + +// Mail > [Inbox | Outbox | Draft | Sent | Trash] > Title +Breadcrumbs::for('mail.route.view', function (BreadcrumbTrail $trail, $route, $email) { + $trail->parent('mail.route', $route); + $trail->push($email->subject ?? '', route('admin.mail.view', ['route' => $route, 'id' => $email->id])); +}); + + +// Dashboard > Activities +Breadcrumbs::for('activities', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.activities'), route('admin.activities.index')); +}); + +// Dashboard > activities > Edit Activity +Breadcrumbs::for('activities.edit', function (BreadcrumbTrail $trail, $activity) { + $trail->parent('activities'); + $trail->push(trans('admin::app.activities.edit-title'), route('admin.activities.edit', $activity->id)); +}); + + +// Dashboard > Contacts +Breadcrumbs::for('contacts', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.contacts'), route('admin.contacts.persons.index')); +}); + +// Dashboard > Contacts > Persons +Breadcrumbs::for('contacts.persons', function (BreadcrumbTrail $trail) { + $trail->parent('contacts'); + $trail->push(trans('admin::app.layouts.persons'), route('admin.contacts.persons.index')); +}); + +// Dashboard > Contacts > Persons > Create +Breadcrumbs::for('contacts.persons.create', function (BreadcrumbTrail $trail) { + $trail->parent('contacts.persons'); + $trail->push(trans('admin::app.contacts.persons.create-title'), route('admin.contacts.persons.create')); +}); + +// Dashboard > Contacts > Persons > Edit +Breadcrumbs::for('contacts.persons.edit', function (BreadcrumbTrail $trail, $person) { + $trail->parent('contacts.persons'); + $trail->push(trans('admin::app.contacts.persons.edit-title'), route('admin.contacts.persons.edit', $person->id)); +}); + + +// Dashboard > Contacts > Organizations +Breadcrumbs::for('contacts.organizations', function (BreadcrumbTrail $trail) { + $trail->parent('contacts'); + $trail->push(trans('admin::app.layouts.organizations'), route('admin.contacts.organizations.index')); +}); + +// Dashboard > Contacts > Organizations > Create +Breadcrumbs::for('contacts.organizations.create', function (BreadcrumbTrail $trail) { + $trail->parent('contacts.organizations'); + $trail->push(trans('admin::app.contacts.organizations.create-title'), route('admin.contacts.organizations.create')); +}); + +// Dashboard > Contacts > Organizations > Edit +Breadcrumbs::for('contacts.organizations.edit', function (BreadcrumbTrail $trail, $organization) { + $trail->parent('contacts.organizations'); + $trail->push(trans('admin::app.contacts.organizations.edit-title'), route('admin.contacts.organizations.edit', $organization->id)); +}); + + +// Products +Breadcrumbs::for('products', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.products'), route('admin.products.index')); +}); + +// Dashboard > Products > Create Product +Breadcrumbs::for('products.create', function (BreadcrumbTrail $trail) { + $trail->parent('products'); + $trail->push(trans('admin::app.products.create-title'), route('admin.products.create')); +}); + +// Dashboard > Products > Edit Product +Breadcrumbs::for('products.edit', function (BreadcrumbTrail $trail, $product) { + $trail->parent('products'); + $trail->push(trans('admin::app.products.edit-title'), route('admin.products.edit', $product->id)); +}); + + +// Settings +Breadcrumbs::for('settings', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.settings'), route('admin.settings.index')); +}); + +// Settings > Groups +Breadcrumbs::for('settings.groups', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.groups'), route('admin.settings.groups.index')); +}); + +// Dashboard > Groups > Create Group +Breadcrumbs::for('settings.groups.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.groups'); + $trail->push(trans('admin::app.settings.groups.create-title'), route('admin.settings.groups.create')); +}); + +// Dashboard > Groups > Edit Group +Breadcrumbs::for('settings.groups.edit', function (BreadcrumbTrail $trail, $role) { + $trail->parent('settings.groups'); + $trail->push(trans('admin::app.settings.groups.edit-title'), route('admin.settings.groups.edit', $role->id)); +}); + + +// Settings > Roles +Breadcrumbs::for('settings.roles', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.roles'), route('admin.settings.roles.index')); +}); + +// Dashboard > Roles > Create Role +Breadcrumbs::for('settings.roles.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.roles'); + $trail->push(trans('admin::app.settings.roles.create-title'), route('admin.settings.roles.create')); +}); + +// Dashboard > Roles > Edit Role +Breadcrumbs::for('settings.roles.edit', function (BreadcrumbTrail $trail, $role) { + $trail->parent('settings.roles'); + $trail->push(trans('admin::app.settings.roles.edit-title'), route('admin.settings.roles.edit', $role->id)); +}); + + +// Settings > Users +Breadcrumbs::for('settings.users', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.users'), route('admin.settings.users.index')); +}); + +// Dashboard > Users > Create Role +Breadcrumbs::for('settings.users.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.users'); + $trail->push(trans('admin::app.settings.users.create-title'), route('admin.settings.users.create')); +}); + +// Dashboard > Users > Edit Role +Breadcrumbs::for('settings.users.edit', function (BreadcrumbTrail $trail, $user) { + $trail->parent('settings.users'); + $trail->push(trans('admin::app.settings.users.edit-title'), route('admin.settings.users.edit', $user->id)); +}); + + +// Settings > Attributes +Breadcrumbs::for('settings.attributes', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.attributes'), route('admin.settings.attributes.index')); +}); + +// Dashboard > Attributes > Create Attribute +Breadcrumbs::for('settings.attributes.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.attributes'); + $trail->push(trans('admin::app.settings.attributes.create-title'), route('admin.settings.attributes.create')); +}); + +// Dashboard > Attributes > Edit Attribute +Breadcrumbs::for('settings.attributes.edit', function (BreadcrumbTrail $trail, $attribute) { + $trail->parent('settings.attributes'); + $trail->push(trans('admin::app.settings.attributes.edit-title'), route('admin.settings.attributes.edit', $attribute->id)); +}); + + +// Settings > Pipelines +Breadcrumbs::for('settings.pipelines', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.pipelines'), route('admin.settings.pipelines.index')); +}); + +// Dashboard > Pipelines > Create Pipeline +Breadcrumbs::for('settings.pipelines.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.pipelines'); + $trail->push(trans('admin::app.settings.pipelines.create-title'), route('admin.settings.pipelines.create')); +}); + +// Dashboard > Pipelines > Edit Pipeline +Breadcrumbs::for('settings.pipelines.edit', function (BreadcrumbTrail $trail, $pipeline) { + $trail->parent('settings.pipelines'); + $trail->push(trans('admin::app.settings.pipelines.edit-title'), route('admin.settings.pipelines.edit', $pipeline->id)); +}); + + +// Settings > Sources +Breadcrumbs::for('settings.sources', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.sources'), route('admin.settings.sources.index')); +}); + +// Dashboard > Sources > Edit Source +Breadcrumbs::for('settings.sources.edit', function (BreadcrumbTrail $trail, $source) { + $trail->parent('settings.sources'); + $trail->push(trans('admin::app.settings.sources.edit-title'), route('admin.settings.sources.edit', $source->id)); +}); + + +// Settings > Types +Breadcrumbs::for('settings.types', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.types'), route('admin.settings.types.index')); +}); + +// Dashboard > Types > Edit Type +Breadcrumbs::for('settings.types.edit', function (BreadcrumbTrail $trail, $type) { + $trail->parent('settings.types'); + $trail->push(trans('admin::app.settings.types.edit-title'), route('admin.settings.types.edit', $type->id)); +}); + + +// Settings > Email Templates +Breadcrumbs::for('settings.email_templates', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.email-templates'), route('admin.settings.email_templates.index')); +}); + +// Dashboard > Email Templates > Create Email Template +Breadcrumbs::for('settings.email_templates.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.email_templates'); + $trail->push(trans('admin::app.settings.email-templates.create-title'), route('admin.settings.email_templates.create')); +}); + +// Dashboard > Email Templates > Edit Email Template +Breadcrumbs::for('settings.email_templates.edit', function (BreadcrumbTrail $trail, $emailTemplate) { + $trail->parent('settings.email_templates'); + $trail->push(trans('admin::app.settings.email-templates.edit-title'), route('admin.settings.email_templates.edit', $emailTemplate->id)); +}); + + +// Settings > Workflows +Breadcrumbs::for('settings.workflows', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.workflows'), route('admin.settings.workflows.index')); +}); + +// Dashboard > Workflows > Create Workflow +Breadcrumbs::for('settings.workflows.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.workflows'); + $trail->push(trans('admin::app.settings.workflows.create-title'), route('admin.settings.workflows.create')); +}); + +// Dashboard > Workflows > Edit Workflow +Breadcrumbs::for('settings.workflows.edit', function (BreadcrumbTrail $trail, $workflow) { + $trail->parent('settings.workflows'); + $trail->push(trans('admin::app.settings.workflows.edit-title'), route('admin.settings.workflows.edit', $workflow->id)); +}); + + +// Settings > Tags +Breadcrumbs::for('settings.tags', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('admin::app.layouts.tags'), route('admin.settings.tags.index')); +}); + +// Dashboard > Tags > Edit Tag +Breadcrumbs::for('settings.tags.edit', function (BreadcrumbTrail $trail, $tag) { + $trail->parent('settings.tags'); + $trail->push(trans('admin::app.settings.tags.edit-title'), route('admin.settings.tags.edit', $tag->id)); +}); + + +// Settings > Web Form +Breadcrumbs::for('settings.web_forms', function (BreadcrumbTrail $trail) { + $trail->parent('settings'); + $trail->push(trans('web_form::app.title'), route('admin.settings.web_forms.index')); +}); + +// Dashboard > Web Form > Create Web Form +Breadcrumbs::for('settings.web_forms.create', function (BreadcrumbTrail $trail) { + $trail->parent('settings.web_forms'); + $trail->push(trans('web_form::app.create-title'), route('admin.settings.web_forms.create')); +}); + +// Dashboard > Web Form > Edit Web Form +Breadcrumbs::for('settings.web_forms.edit', function (BreadcrumbTrail $trail, $webForm) { + $trail->parent('settings.web_forms'); + $trail->push(trans('web_form::app.edit-title'), route('admin.settings.web_forms.edit', $webForm->id)); +}); + + +// Configuration +Breadcrumbs::for('configuration', function (BreadcrumbTrail $trail) { + $trail->parent('dashboard'); + $trail->push(trans('admin::app.layouts.configuration'), route('admin.configuration.index')); +}); + +// Configuration > Config +Breadcrumbs::for('configuration.slug', function (BreadcrumbTrail $trail, $slug) { + $trail->parent('configuration'); + $trail->push('', route('admin.configuration.index', ['slug' => $slug])); +}); \ No newline at end of file diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 0000000..28b4539 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,18 @@ +id === (int)$id; +}); diff --git a/routes/console.php b/routes/console.php new file mode 100644 index 0000000..e05f4c9 --- /dev/null +++ b/routes/console.php @@ -0,0 +1,19 @@ +comment(Inspiring::quote()); +})->purpose('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 0000000..b130397 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,18 @@ +&2 + + exit 1 +fi + +# Determine if stdout is a terminal... +if test -t 1; then + # Determine if colors are supported... + ncolors=$(tput colors) + + if test -n "$ncolors" && test "$ncolors" -ge 8; then + BOLD="$(tput bold)" + YELLOW="$(tput setaf 3)" + GREEN="$(tput setaf 2)" + NC="$(tput sgr0)" + fi +fi + +# Function that prints the available commands... +function display_help { + echo "Laravel Sail" + echo + echo "${YELLOW}Usage:${NC}" >&2 + echo " sail COMMAND [options] [arguments]" + echo + echo "Unknown commands are passed to the docker-compose binary." + echo + echo "${YELLOW}docker-compose Commands:${NC}" + echo " ${GREEN}sail up${NC} Start the application" + echo " ${GREEN}sail up -d${NC} Start the application in the background" + echo " ${GREEN}sail stop${NC} Stop the application" + echo " ${GREEN}sail restart${NC} Restart the application" + echo " ${GREEN}sail ps${NC} Display the status of all containers" + echo + echo "${YELLOW}Artisan Commands:${NC}" + echo " ${GREEN}sail artisan ...${NC} Run an Artisan command" + echo " ${GREEN}sail artisan queue:work${NC}" + echo + echo "${YELLOW}PHP Commands:${NC}" + echo " ${GREEN}sail php ...${NC} Run a snippet of PHP code" + echo " ${GREEN}sail php -v${NC}" + echo + echo "${YELLOW}Composer Commands:${NC}" + echo " ${GREEN}sail composer ...${NC} Run a Composer command" + echo " ${GREEN}sail composer require laravel/sanctum${NC}" + echo + echo "${YELLOW}Node Commands:${NC}" + echo " ${GREEN}sail node ...${NC} Run a Node command" + echo " ${GREEN}sail node --version${NC}" + echo + echo "${YELLOW}NPM Commands:${NC}" + echo " ${GREEN}sail npm ...${NC} Run a npm command" + echo " ${GREEN}sail npx${NC} Run a npx command" + echo " ${GREEN}sail npm run prod${NC}" + echo + echo "${YELLOW}Yarn Commands:${NC}" + echo " ${GREEN}sail yarn ...${NC} Run a Yarn command" + echo " ${GREEN}sail yarn run prod${NC}" + echo + echo "${YELLOW}Database Commands:${NC}" + echo " ${GREEN}sail mysql${NC} Start a MySQL CLI session within the 'mysql' container" + echo " ${GREEN}sail mariadb${NC} Start a MySQL CLI session within the 'mariadb' container" + echo " ${GREEN}sail psql${NC} Start a PostgreSQL CLI session within the 'pgsql' container" + echo " ${GREEN}sail redis${NC} Start a Redis CLI session within the 'redis' container" + echo + echo "${YELLOW}Debugging:${NC}" + echo " ${GREEN}sail debug ...${NC} Run an Artisan command in debug mode" + echo " ${GREEN}sail debug queue:work${NC}" + echo + echo "${YELLOW}Running Tests:${NC}" + echo " ${GREEN}sail test${NC} Run the PHPUnit tests via the Artisan test command" + echo " ${GREEN}sail phpunit ...${NC} Run PHPUnit" + echo " ${GREEN}sail pint ...${NC} Run Pint" + echo " ${GREEN}sail dusk${NC} Run the Dusk tests (Requires the laravel/dusk package)" + echo " ${GREEN}sail dusk:fails${NC} Re-run previously failed Dusk tests (Requires the laravel/dusk package)" + echo + echo "${YELLOW}Container CLI:${NC}" + echo " ${GREEN}sail shell${NC} Start a shell session within the application container" + echo " ${GREEN}sail bash${NC} Alias for 'sail shell'" + echo " ${GREEN}sail root-shell${NC} Start a root shell session within the application container" + echo " ${GREEN}sail root-bash${NC} Alias for 'sail root-shell'" + echo " ${GREEN}sail tinker${NC} Start a new Laravel Tinker session" + echo + echo "${YELLOW}Sharing:${NC}" + echo " ${GREEN}sail share${NC} Share the application publicly via a temporary URL" + echo + echo "${YELLOW}Binaries:${NC}" + echo " ${GREEN}sail bin ...${NC} Run Composer binary scripts from the vendor/bin directory" + echo + echo "${YELLOW}Customization:${NC}" + echo " ${GREEN}sail artisan sail:publish${NC} Publish the Sail configuration files" + echo " ${GREEN}sail build --no-cache${NC} Rebuild all of the Sail containers" + + exit 1 +} + +# Proxy the "help" command... +if [ $# -gt 0 ]; then + if [ "$1" == "help" ] || [ "$1" == "-h" ] || [ "$1" == "-help" ] || [ "$1" == "--help" ]; then + display_help + fi +else + display_help +fi + +# Source the ".env" file so Laravel's environment variables are available... +if [ -f ./.env ]; then + source ./.env +fi + +# Define environment variables... +export APP_PORT=${APP_PORT:-80} +export APP_SERVICE=${APP_SERVICE:-"laravel.test"} +export DB_PORT=${DB_PORT:-3306} +export WWWUSER=${WWWUSER:-$UID} +export WWWGROUP=${WWWGROUP:-$(id -g)} + +export SAIL_FILES=${SAIL_FILES:-""} +export SAIL_SHARE_DASHBOARD=${SAIL_SHARE_DASHBOARD:-4040} +export SAIL_SHARE_SERVER_HOST=${SAIL_SHARE_SERVER_HOST:-"laravel-sail.site"} +export SAIL_SHARE_SERVER_PORT=${SAIL_SHARE_SERVER_PORT:-8080} +export SAIL_SHARE_SUBDOMAIN=${SAIL_SHARE_SUBDOMAIN:-""} + +# Function that outputs Sail is not running... +function sail_is_not_running { + echo "${BOLD}Sail is not running.${NC}" >&2 + echo "" >&2 + echo "${BOLD}You may Sail using the following commands:${NC} './vendor/bin/sail up' or './vendor/bin/sail up -d'" >&2 + + exit 1 +} + +# Define Docker Compose command prefix... +docker compose &> /dev/null +if [ $? == 0 ]; then + DOCKER_COMPOSE=(docker compose) +else + DOCKER_COMPOSE=(docker-compose) +fi + +if [ -n "$SAIL_FILES" ]; then + # Convert SAIL_FILES to an array... + IFS=':' read -ra SAIL_FILES <<< "$SAIL_FILES" + + for FILE in "${SAIL_FILES[@]}"; do + if [ -f "$FILE" ]; then + DOCKER_COMPOSE+=(-f "$FILE") + else + echo "${BOLD}Unable to find Docker Compose file: '${FILE}'${NC}" >&2 + + exit 1 + fi + done +fi + +EXEC="yes" + +if [ -z "$SAIL_SKIP_CHECKS" ]; then + # Ensure that Docker is running... + if ! docker info > /dev/null 2>&1; then + echo "${BOLD}Docker is not running.${NC}" >&2 + + exit 1 + fi + + # Determine if Sail is currently up... + if "${DOCKER_COMPOSE[@]}" ps "$APP_SERVICE" 2>&1 | grep 'Exit\|exited'; then + echo "${BOLD}Shutting down old Sail processes...${NC}" >&2 + + "${DOCKER_COMPOSE[@]}" down > /dev/null 2>&1 + + EXEC="no" + elif [ -z "$("${DOCKER_COMPOSE[@]}" ps -q)" ]; then + EXEC="no" + fi +fi + +ARGS=() + +# Proxy PHP commands to the "php" binary on the application container... +if [ "$1" == "php" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "php" "$@") + else + sail_is_not_running + fi + +# Proxy vendor binary commands on the application container... +elif [ "$1" == "bin" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" ./vendor/bin/"$@") + else + sail_is_not_running + fi + +# Proxy docker-compose commands to the docker-compose binary on the application container... +elif [ "$1" == "docker-compose" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "${DOCKER_COMPOSE[@]}") + else + sail_is_not_running + fi + +# Proxy Composer commands to the "composer" binary on the application container... +elif [ "$1" == "composer" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" "composer" "$@") + else + sail_is_not_running + fi + +# Proxy Artisan commands to the "artisan" binary on the application container... +elif [ "$1" == "artisan" ] || [ "$1" == "art" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan "$@") + else + sail_is_not_running + fi + +# Proxy the "debug" command to the "php artisan" binary on the application container with xdebug enabled... +elif [ "$1" == "debug" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail -e XDEBUG_SESSION=1) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan "$@") + else + sail_is_not_running + fi + +# Proxy the "test" command to the "php artisan test" Artisan command... +elif [ "$1" == "test" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan test "$@") + else + sail_is_not_running + fi + +# Proxy the "phpunit" command to "php vendor/bin/phpunit"... +elif [ "$1" == "phpunit" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/phpunit "$@") + else + sail_is_not_running + fi + +# Proxy the "pint" command to "php vendor/bin/pint"... +elif [ "$1" == "pint" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php vendor/bin/pint "$@") + else + sail_is_not_running + fi + +# Proxy the "dusk" command to the "php artisan dusk" Artisan command... +elif [ "$1" == "dusk" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(-e "APP_URL=http://${APP_SERVICE}") + ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub") + ARGS+=("$APP_SERVICE" php artisan dusk "$@") + else + sail_is_not_running + fi + +# Proxy the "dusk:fails" command to the "php artisan dusk:fails" Artisan command... +elif [ "$1" == "dusk:fails" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(-e "APP_URL=http://${APP_SERVICE}") + ARGS+=(-e "DUSK_DRIVER_URL=http://selenium:4444/wd/hub") + ARGS+=("$APP_SERVICE" php artisan dusk:fails "$@") + else + sail_is_not_running + fi + +# Initiate a Laravel Tinker session within the application container... +elif [ "$1" == "tinker" ] ; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" php artisan tinker) + else + sail_is_not_running + fi + +# Proxy Node commands to the "node" binary on the application container... +elif [ "$1" == "node" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" node "$@") + else + sail_is_not_running + fi + +# Proxy NPM commands to the "npm" binary on the application container... +elif [ "$1" == "npm" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" npm "$@") + else + sail_is_not_running + fi + +# Proxy NPX commands to the "npx" binary on the application container... +elif [ "$1" == "npx" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" npx "$@") + else + sail_is_not_running + fi + +# Proxy YARN commands to the "yarn" binary on the application container... +elif [ "$1" == "yarn" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" yarn "$@") + else + sail_is_not_running + fi + +# Initiate a MySQL CLI terminal session within the "mysql" container... +elif [ "$1" == "mysql" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mysql bash -c) + ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}") + else + sail_is_not_running + fi + +# Initiate a MySQL CLI terminal session within the "mariadb" container... +elif [ "$1" == "mariadb" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(mariadb bash -c) + ARGS+=("MYSQL_PWD=\${MYSQL_PASSWORD} mysql -u \${MYSQL_USER} \${MYSQL_DATABASE}") + else + sail_is_not_running + fi + +# Initiate a PostgreSQL CLI terminal session within the "pgsql" container... +elif [ "$1" == "psql" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(pgsql bash -c) + ARGS+=("PGPASSWORD=\${PGPASSWORD} psql -U \${POSTGRES_USER} \${POSTGRES_DB}") + else + sail_is_not_running + fi + +# Initiate a Bash shell within the application container... +elif [ "$1" == "shell" ] || [ "$1" == "bash" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec -u sail) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bash "$@") + else + sail_is_not_running + fi + +# Initiate a root user Bash shell within the application container... +elif [ "$1" == "root-shell" ] || [ "$1" == "root-bash" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=("$APP_SERVICE" bash "$@") + else + sail_is_not_running + fi + +# Initiate a Redis CLI terminal session within the "redis" container... +elif [ "$1" == "redis" ] ; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + ARGS+=(exec) + [ ! -t 0 ] && ARGS+=(-T) + ARGS+=(redis redis-cli) + else + sail_is_not_running + fi + +# Share the site... +elif [ "$1" == "share" ]; then + shift 1 + + if [ "$EXEC" == "yes" ]; then + docker run --init --rm -p "$SAIL_SHARE_DASHBOARD":4040 -t beyondcodegmbh/expose-server:latest share http://host.docker.internal:"$APP_PORT" \ + --server-host="$SAIL_SHARE_SERVER_HOST" \ + --server-port="$SAIL_SHARE_SERVER_PORT" \ + --auth="$SAIL_SHARE_TOKEN" \ + --subdomain="$SAIL_SHARE_SUBDOMAIN" \ + "$@" + + exit + else + sail_is_not_running + fi + +# Pass unknown commands to the "docker-compose" binary... +else + ARGS+=("$@") +fi + +# Run Docker Compose with the defined arguments... +"${DOCKER_COMPOSE[@]}" "${ARGS[@]}" diff --git a/server.php b/server.php new file mode 100644 index 0000000..7f109d9 --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__ . '/public' . $uri)) { + return false; +} + +require_once __DIR__ . '/public/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100644 index 0000000..8f4803c --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/debugbar/.gitignore b/storage/debugbar/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/debugbar/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100644 index 0000000..3770f49 --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,10 @@ +compiled.php +config.php +down +events.scanned.php +/laravel-excel +maintenance.php +routes.php +routes.scanned.php +schedule-* +services.json diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100644 index 0000000..01e4a6c --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,3 @@ +* +!data/ +!.gitignore diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 0000000..ab92402 --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,22 @@ +make(Kernel::class)->bootstrap(); + + return $app; + } +} diff --git a/tests/Feature/AuthenticationTest.php b/tests/Feature/AuthenticationTest.php new file mode 100644 index 0000000..52b08e9 --- /dev/null +++ b/tests/Feature/AuthenticationTest.php @@ -0,0 +1,29 @@ +get(route('admin.session.create')) + ->assertOK(); +}); + +test('check dashboard page after login', function () { + $admin = getDefaultAdmin(); + + test()->actingAs($admin) + ->get(route('admin.dashboard.index')) + ->assertSee(__('admin::app.dashboard.title')) + ->assertSee(getFirstName($admin->name)); + + expect(auth()->guard('user')->user()->name)->toBe($admin->name); +}); + +test('check for admin logout', function () { + $admin = getDefaultAdmin(); + + test()->actingAs($admin) + ->delete(route('admin.session.destroy'), [ + '_token' => csrf_token() + ]) + ->assertStatus(302); + + expect(auth()->guard('user')->user())->toBeNull(); +}); diff --git a/tests/Pest.php b/tests/Pest.php new file mode 100644 index 0000000..2c31757 --- /dev/null +++ b/tests/Pest.php @@ -0,0 +1,78 @@ +in('Feature'); + +uses(\Tests\RestAPI\RestAPITestCase::class)->in('RestAPI'); + +/* +|-------------------------------------------------------------------------- +| Expectations +|-------------------------------------------------------------------------- +| +| When you're writing tests, you often need to check that values meet certain conditions. The +| "expect()" function gives you access to a set of "expectations" methods that you can use +| to assert different things. Of course, you may extend the Expectation API at any time. +| + */ + +expect()->extend('toBeOne', function () { + return $this->toBe(1); +}); + +/* +|-------------------------------------------------------------------------- +| Functions +|-------------------------------------------------------------------------- +| +| While Pest is very powerful out-of-the-box, you may have some testing code specific to your +| project that you don't want to repeat in every file. Here you can also expose helpers as +| global functions to help you to reduce the number of lines of code in your test files. +| + */ + +/** + * Get default admin which is created on fresh instance. + * + * @return \Webkul\User\Models\User + */ +function getDefaultAdmin() +{ + $admin = \Webkul\User\Models\User::find(1); + + return $admin; +} + +/** + * Sanctum authenticated admin. + * + * @return \Webkul\User\Models\User + */ +function actingAsSanctumAuthenticatedAdmin() +{ + return \Laravel\Sanctum\Sanctum::actingAs( + getDefaultAdmin(), + ['*'] + ); +} + +/** + * Get first name. + * + * @param string $fullName + * @return string + */ +function getFirstName($fullName) +{ + return explode(' ', $fullName)[0]; +} diff --git a/tests/RestAPI/ActivityTest.php b/tests/RestAPI/ActivityTest.php new file mode 100644 index 0000000..155edae --- /dev/null +++ b/tests/RestAPI/ActivityTest.php @@ -0,0 +1,13 @@ +getJson(test()->versionRoute('activities')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); diff --git a/tests/RestAPI/AuthenticationTest.php b/tests/RestAPI/AuthenticationTest.php new file mode 100644 index 0000000..2b1466d --- /dev/null +++ b/tests/RestAPI/AuthenticationTest.php @@ -0,0 +1,48 @@ +postJson(test()->versionRoute('login'), [ + 'email' => 'admin@example.com', + 'password' => 'admin123', + 'device_name' => 'Samsung A70s', + ]); + + $response + ->assertOK() + ->assertJson([ + 'data' => [ + 'name' => $admin->name, + 'email' => $admin->email, + ], + 'message' => __('rest-api::app.common-response.success.login'), + ]); +}); + +test('check current logged in user details', function () { + $admin = actingAsSanctumAuthenticatedAdmin(); + + $response = test()->getJson(test()->versionRoute('get')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [ + 'name' => $admin->name, + 'email' => $admin->email, + ], + ]); +}); + +test('check for admin logout and destroy token', function () { + $admin = actingAsSanctumAuthenticatedAdmin(); + + $response = test()->deleteJson(test()->versionRoute('logout')); + + $response + ->assertOK() + ->assertJson([ + 'message' => __('rest-api::app.common-response.success.logout'), + ]); +}); diff --git a/tests/RestAPI/LeadTest.php b/tests/RestAPI/LeadTest.php new file mode 100644 index 0000000..9ed4037 --- /dev/null +++ b/tests/RestAPI/LeadTest.php @@ -0,0 +1,13 @@ +getJson(test()->versionRoute('leads')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); diff --git a/tests/RestAPI/MailTest.php b/tests/RestAPI/MailTest.php new file mode 100644 index 0000000..2f5c02c --- /dev/null +++ b/tests/RestAPI/MailTest.php @@ -0,0 +1,13 @@ +getJson(test()->versionRoute('mails')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); diff --git a/tests/RestAPI/OrganizationTest.php b/tests/RestAPI/OrganizationTest.php new file mode 100644 index 0000000..c13b885 --- /dev/null +++ b/tests/RestAPI/OrganizationTest.php @@ -0,0 +1,13 @@ +getJson(test()->versionRoute('contacts/organizations')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); diff --git a/tests/RestAPI/PersonTest.php b/tests/RestAPI/PersonTest.php new file mode 100644 index 0000000..11ed495 --- /dev/null +++ b/tests/RestAPI/PersonTest.php @@ -0,0 +1,32 @@ +getJson(test()->versionRoute('contacts/persons')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); + +test('check person with specific id', function () { + $admin = actingAsSanctumAuthenticatedAdmin(); + + $person = Person::factory()->create(); + + $response = test()->getJson(test()->versionRoute('contacts/persons/' . $person->id)); + + $response + ->assertOK() + ->assertJson([ + 'data' => [ + 'id' => $person->id, + 'name' => $person->name, + ], + ]); +}); diff --git a/tests/RestAPI/ProductTest.php b/tests/RestAPI/ProductTest.php new file mode 100644 index 0000000..ad9ba6f --- /dev/null +++ b/tests/RestAPI/ProductTest.php @@ -0,0 +1,13 @@ +getJson(test()->versionRoute('products')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); diff --git a/tests/RestAPI/QuoteTest.php b/tests/RestAPI/QuoteTest.php new file mode 100644 index 0000000..02c38a1 --- /dev/null +++ b/tests/RestAPI/QuoteTest.php @@ -0,0 +1,13 @@ +getJson(test()->versionRoute('quotes')); + + $response + ->assertOK() + ->assertJson([ + 'data' => [], + ]); +}); diff --git a/tests/RestAPI/RestAPITestCase.php b/tests/RestAPI/RestAPITestCase.php new file mode 100644 index 0000000..2078414 --- /dev/null +++ b/tests/RestAPI/RestAPITestCase.php @@ -0,0 +1,24 @@ +assertTrue(true); + + expect(true)->toBeTrue(); +}); diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..2a22dc1 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,17 @@ +const mix = require('laravel-mix'); + +/* + |-------------------------------------------------------------------------- + | Mix Asset Management + |-------------------------------------------------------------------------- + | + | Mix provides a clean, fluent API for defining some Webpack build steps + | for your Laravel applications. By default, we are compiling the CSS + | file for the application as well as bundling up all the JS files. + | + */ + +mix.js('resources/js/app.js', 'public/js') + .postCss('resources/css/app.css', 'public/css', [ + // + ]);