From 166dc35ee85e80a0993f3cc997ab92fd9d0cc5a5 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Fri, 24 Apr 2026 16:53:58 +0200 Subject: [PATCH] feat: :sparkles: init uwil cms (common/backend/i18n/activity-logs) --- .browserslistrc | 5 - .dockerignore | 12 +- .editorconfig | 5 +- .env.example | 74 +- .eslintignore | 4 + .eslintrc.cjs | 74 + .eslintrc.json | 55 - .gitignore | 24 +- .gitlab-ci.yml | 41 +- .husky/commit-msg | 3 + .npmrc | 5 + .stylelintrc.json | 33 +- .vscode/extensions.json | 19 + .vscode/launch.json | 48 + .vscode/settings.json | 43 +- CHANGELOG.md | 103 +- Dockerfile | 50 +- IDEAS.md | 34 - README.md | 36 +- app/Casts/HtmlColor.php | 56 - app/Console/Commands/AutoCloseOldTickets.php | 38 - app/Console/Commands/CreateUser.php | 168 - app/Console/Commands/ExportTicketsState.php | 38 - app/Console/Commands/TestMail.php | 36 - app/Console/Commands/UpdateGitlabDatas.php | 307 - .../Commands/WarnBeforeAutoCloseTicket.php | 38 - app/Console/Kernel.php | 44 - app/Enums/Credit/AccountTypeEnum.php | 21 - app/Enums/Credit/BalanceOperationEnum.php | 21 - app/Enums/Credit/EstimationStatusEnum.php | 23 - app/Enums/Credit/EstimationTimeEnum.php | 49 - app/Enums/Informations/InfoColorsEnum.php | 53 - app/Enums/Invoices/InvoiceStatusEnum.php | 29 - app/Enums/Invoices/TaskTypeEnum.php | 57 - app/Enums/ItemsPerPaginationEnum.php | 16 - app/Enums/MessageTypeEnum.php | 21 - app/Enums/Tickets/TicketFileTypeEnum.php | 70 - app/Enums/Tickets/TicketStatusEnum.php | 73 - app/Enums/Tickets/TicketTypeEnum.php | 67 - app/Enums/Users/RoleEnum.php | 23 - app/Events/NotifyAdmin.php | 34 - app/Events/NotifySubscriptions.php | 40 - app/Events/NotifyTicketCreator.php | 34 - app/Events/TicketStatusChanged.php | 62 - app/Exceptions/Handler.php | 47 - .../Bo/Auth/ConfirmPasswordController.php | 29 - .../Bo/Auth/ForgotPasswordController.php | 21 - .../Controllers/Bo/Auth/LoginController.php | 29 - .../Bo/Auth/ResetPasswordController.php | 41 - app/Http/Controllers/Bo/BrandController.php | 186 - app/Http/Controllers/Bo/BrevoController.php | 77 - app/Http/Controllers/Bo/CompanyController.php | 166 - .../Bo/Credit/AccountController.php | 107 - .../Bo/Credit/CreditLogController.php | 108 - .../Bo/Credit/EstimationController.php | 122 - .../Controllers/Bo/InformationController.php | 158 - app/Http/Controllers/Bo/InvoiceController.php | 227 - app/Http/Controllers/Bo/LabelController.php | 157 - app/Http/Controllers/Bo/PackageController.php | 177 - app/Http/Controllers/Bo/SiteController.php | 204 - app/Http/Controllers/Bo/TicketController.php | 923 - .../Controllers/Bo/TicketTypeController.php | 81 - app/Http/Controllers/Bo/UserController.php | 231 - app/Http/Controllers/Controller.php | 247 - app/Http/Controllers/Front/HomeController.php | 19 + app/Http/Kernel.php | 70 - app/Http/Middleware/Authenticate.php | 40 - app/Http/Middleware/EncryptCookies.php | 15 - app/Http/Middleware/HtmlSanitizer.php | 61 - app/Http/Middleware/IsAdmin.php | 26 - .../PreventRequestsDuringMaintenance.php | 15 - .../Middleware/RedirectIfAuthenticated.php | 42 - app/Http/Middleware/SecureHeaders.php | 103 - app/Http/Middleware/TrimStrings.php | 19 - app/Http/Middleware/TrustHosts.php | 20 - app/Http/Middleware/TrustProxies.php | 28 - app/Http/Middleware/ValidateSignature.php | 15 - app/Http/Middleware/VerifyCsrfToken.php | 18 - .../Middlewares/HandleInertiaRequests.php | 30 + .../Requests/Bo/AssignTicketToUserRequest.php | 42 - .../Requests/Bo/Brands/StoreBrandRequest.php | 47 - .../Requests/Bo/Brands/UpdateBrandRequest.php | 7 - app/Http/Requests/Bo/BrevoWehbookRequest.php | 31 - app/Http/Requests/Bo/ChangeTicketStatus.php | 43 - .../Bo/Companies/StoreCompanyRequest.php | 31 - .../Bo/Companies/UpdateCompanyRequest.php | 7 - app/Http/Requests/Bo/CreateMessage.php | 78 - .../Bo/Credit/AnswerEstimateRequest.php | 48 - .../Bo/Credit/CreateEstimateRequest.php | 71 - .../StoreCreditAccountRequest.php | 52 - .../Bo/CreditLogs/StoreCreditLogRequest.php | 50 - .../Informations/StoreInformationRequest.php | 52 - .../Informations/UpdateInformationRequest.php | 7 - .../Bo/Invoices/StoreInvoiceRequest.php | 97 - .../Bo/Invoices/UpdateInvoiceRequest.php | 49 - .../Requests/Bo/Labels/StoreLabelRequest.php | 49 - .../Requests/Bo/Labels/UpdateLabelRequest.php | 18 - app/Http/Requests/Bo/LinkTicket.php | 39 - .../Bo/Packages/StorePackageRequest.php | 59 - .../Bo/Packages/UpdatePackageRequest.php | 7 - .../Requests/Bo/Sites/StoreSiteRequest.php | 55 - .../Requests/Bo/Sites/UpdateSiteRequest.php | 7 - app/Http/Requests/Bo/SortTickets.php | 44 - app/Http/Requests/Bo/StoreTicket.php | 130 - .../TicketTypes/UpdateTicketTypeRequest.php | 44 - .../Requests/Bo/UpdateChangeOrderRequest.php | 42 - app/Http/Requests/Bo/UpdateMessage.php | 35 - app/Http/Requests/Bo/UpdateTicket.php | 22 - .../Bo/UpdateTicketPriorityRequest.php | 57 - .../Bo/Users/FavouriteSiteRequest.php | 39 - .../Requests/Bo/Users/StoreUserRequest.php | 70 - .../Requests/Bo/Users/UpdateUserRequest.php | 19 - app/Http/Resources/UserLabeledResource.php | 30 - app/Interfaces/SpsConfigInterface.php | 42 - app/Jobs/AutoCloseOldTickets.php | 39 - app/Jobs/ExportTicketsState.php | 117 - app/Jobs/SendTicketMentionMail.php | 47 - app/Jobs/SendUserCreatedEmail.php | 45 - app/Jobs/UpdateIssueLabels.php | 85 - app/Jobs/WarnBeforeAutoCloseTicket.php | 44 - app/Lib/Helpers/CollectionHelper.php | 64 - app/Lib/Helpers/ExceptionsHelper.php | 190 - app/Lib/Helpers/FileStorageHelper.php | 452 - app/Lib/Helpers/ToolboxHelper.php | 564 - app/Listeners/AddStatusMessages.php | 103 - app/Listeners/SendNotificationMailToAdmin.php | 23 - .../SendNotificationMailToTicketCreator.php | 23 - .../SendSubscriptionsNotificationsMail.php | 37 - app/Mail/NewTicket.php | 40 - app/Mail/TicketMention.php | 47 - app/Mail/TicketUpdate.php | 47 - app/Mail/UserCreatedMail.php | 38 - app/Models/Brand.php | 80 - app/Models/Company.php | 55 - app/Models/Credit/Account.php | 78 - app/Models/Credit/CreditLog.php | 88 - app/Models/Credit/Estimation.php | 105 - app/Models/Credit/EstimationLog.php | 15 - app/Models/GitlabIssues.php | 40 - app/Models/GitlabLabels.php | 29 - app/Models/GitlabMilestones.php | 26 - app/Models/GitlabProjects.php | 20 - app/Models/Information.php | 71 - app/Models/Invoice.php | 261 - app/Models/Label.php | 76 - app/Models/Message.php | 137 - app/Models/Package.php | 43 - app/Models/Site.php | 150 - app/Models/SiteUser.php | 15 - app/Models/Ticket.php | 349 - app/Models/Ticket/TicketType.php | 67 - app/Models/User.php | 199 - .../ExportTicketsStateNotification.php | 60 - app/Notifications/ResetPassword.php | 34 - app/Policies/AccountPolicy.php | 73 - app/Policies/CreditLogPolicy.php | 22 - app/Policies/EstimationPolicy.php | 27 - app/Policies/SitePolicy.php | 20 - app/Policies/TicketPolicy.php | 306 - app/Providers/AppServiceProvider.php | 38 - app/Providers/AuthServiceProvider.php | 41 - app/Providers/BroadcastServiceProvider.php | 21 - app/Providers/EventServiceProvider.php | 41 - app/Providers/RouteServiceProvider.php | 179 - app/Providers/TranslationServiceProvider.php | 78 - app/Providers/ViewServiceProvider.php | 37 - app/Rules/Hex.php | 76 - app/Traits/Controllers/ChangesModelOrder.php | 64 - app/Traits/Controllers/HasGitlabIssue.php | 59 - app/Traits/Enums/BaseEnum.php | 256 - app/Traits/Enums/SpsConfigTrait.php | 52 - app/Traits/Models/IsCachedAsCollection.php | 103 - app/Traits/Models/MiniCrudModel.php | 180 - artisan | 49 +- bootstrap/app.php | 141 +- bootstrap/providers.php | 7 + commitlint.config.cjs | 1 + components.json | 21 + composer.json | 102 +- composer.lock | 7064 +- config/app.php | 283 +- config/auth.php | 155 +- config/breadcrumbs.php | 102 +- config/broadcasting.php | 70 - config/cache.php | 93 +- config/cors.php | 34 - config/database.php | 158 +- config/filesystems.php | 82 +- config/gitlab.php | 74 - config/hashing.php | 52 - config/inertia.php | 64 + config/laravellocalization.php | 354 + config/logging.php | 79 +- config/macroschedule.php | 8 - config/mail.php | 130 +- config/pagination.php | 18 - config/purifier.php | 132 - config/queue.php | 118 +- config/saml2.php | 397 + config/samlidp.php | 80 - config/schedules.php | 6 - config/sentry.php | 61 - config/services.php | 40 +- config/session.php | 300 +- config/telescope.php | 184 + config/tickets.php | 9 - config/trustedproxy.php | 52 - config/view.php | 38 - database/.gitignore | 2 - .../ts/libs => database/factories}/.gitkeep | 0 database/factories/CompanyFactory.php | 28 - database/factories/InvoiceFactory.php | 141 - database/factories/PackageFactory.php | 29 - database/factories/UserFactory.php | 34 - database/migrations/.gitkeep | 0 ...22_05_24_104346_assign_user_to_tickets.php | 38 - ...22_05_24_122728_move_images_to_storage.php | 59 - .../2022_05_25_120339_create_labels_table.php | 44 - ...05_25_121407_create_label_ticket_table.php | 35 - .../2022_05_30_091333_create_brands_table.php | 34 - ...022_05_30_091340_add_brand_id_to_sites.php | 38 - ...30_091401_create_credit_accounts_table.php | 41 - ..._05_30_091412_create_credit_logs_table.php | 39 - ...091438_create_credit_estimations_table.php | 53 - ...453_create_credit_estimation_log_table.php | 40 - ...t_floating_point_on_credit_estimations.php | 33 - ...022_08_22_154457_create_packages_table.php | 33 - ...22_08_23_085321_create_companies_table.php | 34 - ...022_08_23_085833_create_invoices_table.php | 73 - ...6_112109_change_sites_projets_relation.php | 44 - ...023_04_06_101917_change_tickets_status.php | 49 - .../2023_04_06_122125_add_message_type.php | 42 - ...23_04_18_123853_create_dutyhours_table.php | 34 - ...04_18_150623_create_informations_table.php | 34 - ...04_19_160127_create_ticket_types_table.php | 44 - ..._01_125540_drop_macro_activities_table.php | 39 - ..._08_01_130046_drop_macro_markers_table.php | 37 - ...escription_and_todo_fields_in_projects.php | 34 - ...023_08_08_122708_drop_data_sites_table.php | 36 - .../2023_08_11_093937_drop_files_table.php | 37 - .../2023_08_11_094518_drop_logs_table.php | 34 - ...08_14_100506_add_status_invoices_table.php | 36 - ...14_134026_add_gitlab_id_to_sites_table.php | 36 - ...142748_add_last_activity_tickets_table.php | 43 - ...1531_add_gitlab_issue_to_tickets_table.php | 35 - ...3_08_14_171640_add_urls_to_sites_table.php | 33 - ...4511_remove_status_from_projects_table.php | 32 - ...2023_08_18_091917_drop_schedules_table.php | 40 - ...1_13_144755_add_title_to_tickets_table.php | 44 - ...7_19_150414_add_files_to_tickets_table.php | 36 - ..._19_151553_add_files_to_messages_table.php | 34 - .../2025_02_14_122301_rebase_tickets_type.php | 42 - ...025_02_19_154440_rebase_tickets_status.php | 33 - ...5_03_12_102925_change_order_to_tickets.php | 40 - ...5_03_13_094420_add_mep_date_on_tickets.php | 32 - .../2025_03_13_151503_tickets_linking.php | 35 - ...25_04_11_183728_delete_dutyhours_table.php | 30 - ...2713_add_users_relation_on_sites_table.php | 38 - ...17_162711_add_gitlab_id_to_users_table.php | 36 - ...45213_add_deleted_at_to_invoices_table.php | 32 - ...150855_add_deleted_at_to_tickets_table.php | 32 - ...7_10_103249_add_favourite_site_to_user.php | 37 - ...025_08_21_120157_delete_projects_table.php | 23 - ...unique_gitlab_project_id_on_site_table.php | 34 - .../2025_11_19_142520_reorder_all_tickets.php | 36 - ...02_101346_create_gitlab_projects_table.php | 31 - ...1_02_111055_create_gitlab_issues_table.php | 42 - ...1_02_121235_create_gitlab_labels_table.php | 29 - ..._124727_create_gitlab_milestones_table.php | 37 - ...2743_create_pivot_gitlab_issues_labels.php | 30 - ...2026_02_25_171152_alter_packages_table.php | 28 - database/schema/mysql-schema.dump | 266 - database/seeders/Classic/.gitkeep | 0 database/seeders/DatabaseSeeder.php | 5 +- database/seeders/InvoicingSeeder.php | 54 - database/seeders/Mandatory/.gitkeep | 0 database/seeders/MandatorySeeder.php | 20 + jsconfig.json | 3 - k8s-queues.sh | 30 + lang/de/back.php | 7 + lang/de/enums.php | 11 + lang/de/errors.php | 56 + lang/de/front.php | 6 + lang/de/models.php | 9 + lang/de/validation.php | 9 + lang/en/back.php | 7 + lang/en/enums.php | 11 + lang/en/errors.php | 56 + lang/en/front.php | 6 + lang/en/models.php | 9 + lang/en/validation.php | 9 + lang/es/back.php | 7 + lang/es/enums.php | 11 + lang/es/errors.php | 56 + lang/es/front.php | 6 + lang/es/models.php | 9 + lang/es/validation.php | 9 + lang/fr/back.php | 7 + lang/fr/enums.php | 11 + lang/fr/errors.php | 56 + lang/fr/front.php | 6 + lang/fr/models.php | 9 + lang/fr/validation.php | 9 + lang/nl/back.php | 7 + lang/nl/enums.php | 11 + lang/nl/errors.php | 56 + lang/nl/front.php | 6 + lang/nl/models.php | 9 + lang/nl/validation.php | 9 + lang/pl/back.php | 7 + lang/pl/enums.php | 11 + lang/pl/errors.php | 56 + lang/pl/front.php | 6 + lang/pl/models.php | 9 + lang/pl/validation.php | 9 + manifest.yaml | 107 +- package-lock.json | 16810 ++- package.json | 168 +- phpcs.xml | 10 +- phpstan.neon | 8 + phpunit.xml | 23 +- postcss.config.js | 6 + production-resources.yaml | 48 +- public/.htaccess | 69 + public/android-chrome-192x192.png | Bin 13667 -> 0 bytes public/android-chrome-512x512.png | Bin 49918 -> 0 bytes public/android-icon-144x144.png | Bin 0 -> 10752 bytes public/android-icon-192x192.png | Bin 0 -> 14197 bytes public/android-icon-36x36.png | Bin 0 -> 2533 bytes public/android-icon-48x48.png | Bin 0 -> 3367 bytes public/android-icon-72x72.png | Bin 0 -> 4808 bytes public/android-icon-96x96.png | Bin 0 -> 6559 bytes public/apple-icon-114x114.png | Bin 0 -> 7614 bytes public/apple-icon-120x120.png | Bin 0 -> 8157 bytes public/apple-icon-144x144.png | Bin 0 -> 10752 bytes public/apple-icon-152x152.png | Bin 0 -> 11508 bytes public/apple-icon-180x180.png | Bin 0 -> 14509 bytes public/apple-icon-57x57.png | Bin 0 -> 3888 bytes public/apple-icon-60x60.png | Bin 0 -> 4033 bytes public/apple-icon-72x72.png | Bin 0 -> 4808 bytes public/apple-icon-76x76.png | Bin 0 -> 5040 bytes public/apple-touch-icon-120x120.png | Bin 6640 -> 0 bytes public/apple-touch-icon-152x152.png | Bin 8707 -> 0 bytes public/apple-touch-icon-180x180.png | Bin 10856 -> 0 bytes public/apple-touch-icon-60x60.png | Bin 3319 -> 0 bytes public/apple-touch-icon-76x76.png | Bin 4103 -> 0 bytes public/apple-touch-icon.png | Bin 10856 -> 0 bytes public/favicon-16x16.png | Bin 767 -> 1466 bytes public/favicon-32x32.png | Bin 1512 -> 2310 bytes public/favicon-back/android-icon-144x144.png | Bin 0 -> 10752 bytes public/favicon-back/android-icon-192x192.png | Bin 0 -> 14197 bytes public/favicon-back/android-icon-36x36.png | Bin 0 -> 2533 bytes public/favicon-back/android-icon-48x48.png | Bin 0 -> 3367 bytes public/favicon-back/android-icon-72x72.png | Bin 0 -> 4808 bytes public/favicon-back/android-icon-96x96.png | Bin 0 -> 6559 bytes public/favicon-back/apple-icon-114x114.png | Bin 0 -> 7614 bytes public/favicon-back/apple-icon-120x120.png | Bin 0 -> 8157 bytes public/favicon-back/apple-icon-144x144.png | Bin 0 -> 10752 bytes public/favicon-back/apple-icon-152x152.png | Bin 0 -> 11508 bytes public/favicon-back/apple-icon-180x180.png | Bin 0 -> 14509 bytes public/favicon-back/apple-icon-57x57.png | Bin 0 -> 3888 bytes public/favicon-back/apple-icon-60x60.png | Bin 0 -> 4033 bytes public/favicon-back/apple-icon-72x72.png | Bin 0 -> 4808 bytes public/favicon-back/apple-icon-76x76.png | Bin 0 -> 5040 bytes public/favicon-back/favicon-16x16.png | Bin 0 -> 1466 bytes public/favicon-back/favicon-32x32.png | Bin 0 -> 2310 bytes public/favicon-back/favicon.ico | Bin 0 -> 1150 bytes public/favicon-back/manifest.json | 41 + public/favicon-back/ms-icon-144x144.png | Bin 0 -> 10752 bytes public/favicon-back/ms-icon-150x150.png | Bin 0 -> 11255 bytes public/favicon-back/ms-icon-310x310.png | Bin 0 -> 33000 bytes public/favicon-back/ms-icon-70x70.png | Bin 0 -> 4672 bytes public/favicon.ico | Bin 15342 -> 1150 bytes public/index.php | 51 +- public/manifest.json | 41 + public/ms-icon-144x144.png | Bin 0 -> 10752 bytes public/ms-icon-150x150.png | Bin 0 -> 11255 bytes public/ms-icon-310x310.png | Bin 0 -> 33000 bytes public/ms-icon-70x70.png | Bin 0 -> 4672 bytes public/mstile-144x144.png | Bin 9300 -> 0 bytes public/mstile-150x150.png | Bin 7949 -> 0 bytes public/robots.txt | 11 +- public/safari-pinned-tab.svg | 18 - public/site.webmanifest | 19 - public/web.config | 28 - .../assets/documents/invoice/logo_ldc.jpg | Bin 16611 -> 0 bytes .../assets/documents/invoice/logo_ldc.png | Bin 99978 -> 0 bytes .../assets/documents/invoice/separator.png | Bin 1297 -> 0 bytes .../assets/fonts/Figtree/Figtree-Black.ttf | Bin 0 -> 40276 bytes .../fonts/Figtree/Figtree-BlackItalic.ttf | Bin 0 -> 40872 bytes .../assets/fonts/Figtree/Figtree-Bold.ttf | Bin 0 -> 40324 bytes .../fonts/Figtree/Figtree-BoldItalic.ttf | Bin 0 -> 40928 bytes .../fonts/Figtree/Figtree-ExtraBold.ttf | Bin 0 -> 40344 bytes .../fonts/Figtree/Figtree-ExtraBoldItalic.ttf | Bin 0 -> 40980 bytes .../assets/fonts/Figtree/Figtree-Italic.ttf | Bin 0 -> 40636 bytes .../assets/fonts/Figtree/Figtree-Light.ttf | Bin 0 -> 39988 bytes .../fonts/Figtree/Figtree-LightItalic.ttf | Bin 0 -> 40552 bytes .../assets/fonts/Figtree/Figtree-Medium.ttf | Bin 0 -> 40148 bytes .../fonts/Figtree/Figtree-MediumItalic.ttf | Bin 0 -> 40720 bytes .../assets/fonts/Figtree/Figtree-Regular.ttf | Bin 0 -> 40140 bytes .../assets/fonts/Figtree/Figtree-SemiBold.ttf | Bin 0 -> 40360 bytes .../fonts/Figtree/Figtree-SemiBoldItalic.ttf | Bin 0 -> 40984 bytes .../images/logos/uwil-cms-dark-icon.svg | 1 + .../assets/images/logos/uwil-cms-dark.svg | 1 + .../images/logos/uwil-cms-light-icon.svg | 40 + .../assets/images/logos/uwil-cms-light.svg | 1 + .../assets/images/logos/uwil-report-dark.svg | 1 + .../assets/images/logos/uwil-report-light.svg | 1 + .../assets/images/logos/uwil-support-dark.svg | 1 + .../images/logos/uwil-support-light.svg | 1 + resources/assets/images/supportweb_128.png | Bin 22080 -> 0 bytes .../favicons/back/android-icon-144x144.png | Bin 0 -> 10752 bytes .../favicons/back/android-icon-192x192.png | Bin 0 -> 14197 bytes .../favicons/back/android-icon-36x36.png | Bin 0 -> 2533 bytes .../favicons/back/android-icon-48x48.png | Bin 0 -> 3367 bytes .../favicons/back/android-icon-72x72.png | Bin 0 -> 4808 bytes .../favicons/back/android-icon-96x96.png | Bin 0 -> 6559 bytes .../favicons/back/apple-icon-114x114.png | Bin 0 -> 7614 bytes .../favicons/back/apple-icon-120x120.png | Bin 0 -> 8157 bytes .../favicons/back/apple-icon-144x144.png | Bin 0 -> 10752 bytes .../favicons/back/apple-icon-152x152.png | Bin 0 -> 11508 bytes .../favicons/back/apple-icon-180x180.png | Bin 0 -> 14509 bytes resources/favicons/back/apple-icon-57x57.png | Bin 0 -> 3888 bytes resources/favicons/back/apple-icon-60x60.png | Bin 0 -> 4033 bytes resources/favicons/back/apple-icon-72x72.png | Bin 0 -> 4808 bytes resources/favicons/back/apple-icon-76x76.png | Bin 0 -> 5040 bytes resources/favicons/back/favicon-16x16.png | Bin 0 -> 1466 bytes resources/favicons/back/favicon-32x32.png | Bin 0 -> 2310 bytes resources/favicons/back/favicon.ico | Bin 0 -> 1150 bytes resources/favicons/back/manifest.json | 41 + resources/favicons/back/ms-icon-144x144.png | Bin 0 -> 10752 bytes resources/favicons/back/ms-icon-150x150.png | Bin 0 -> 11255 bytes resources/favicons/back/ms-icon-310x310.png | Bin 0 -> 33000 bytes resources/favicons/back/ms-icon-70x70.png | Bin 0 -> 4672 bytes .../favicons/front/android-icon-144x144.png | Bin 0 -> 10752 bytes .../favicons/front/android-icon-192x192.png | Bin 0 -> 14197 bytes .../favicons/front/android-icon-36x36.png | Bin 0 -> 2533 bytes .../favicons/front/android-icon-48x48.png | Bin 0 -> 3367 bytes .../favicons/front/android-icon-72x72.png | Bin 0 -> 4808 bytes .../favicons/front/android-icon-96x96.png | Bin 0 -> 6559 bytes .../favicons/front/apple-icon-114x114.png | Bin 0 -> 7614 bytes .../favicons/front/apple-icon-120x120.png | Bin 0 -> 8157 bytes .../favicons/front/apple-icon-144x144.png | Bin 0 -> 10752 bytes .../favicons/front/apple-icon-152x152.png | Bin 0 -> 11508 bytes .../favicons/front/apple-icon-180x180.png | Bin 0 -> 14509 bytes resources/favicons/front/apple-icon-57x57.png | Bin 0 -> 3888 bytes resources/favicons/front/apple-icon-60x60.png | Bin 0 -> 4033 bytes resources/favicons/front/apple-icon-72x72.png | Bin 0 -> 4808 bytes resources/favicons/front/apple-icon-76x76.png | Bin 0 -> 5040 bytes resources/favicons/front/favicon-16x16.png | Bin 0 -> 1466 bytes resources/favicons/front/favicon-32x32.png | Bin 0 -> 2310 bytes resources/favicons/front/favicon.ico | Bin 0 -> 1150 bytes resources/favicons/front/manifest.json | 41 + resources/favicons/front/ms-icon-144x144.png | Bin 0 -> 10752 bytes resources/favicons/front/ms-icon-150x150.png | Bin 0 -> 11255 bytes resources/favicons/front/ms-icon-310x310.png | Bin 0 -> 33000 bytes resources/favicons/front/ms-icon-70x70.png | Bin 0 -> 4672 bytes resources/imageSources/supportweb.png | Bin 141362 -> 0 bytes resources/imageSources/supportweb.xcf | Bin 537351 -> 0 bytes resources/imageSources/supportweb_favico.png | Bin 122662 -> 0 bytes resources/js/vendor/ckeditor/.gitignore | 1 - resources/js/vendor/ckeditor/LICENSE.md | 49 - resources/js/vendor/ckeditor/README.md | 68 - .../js/vendor/ckeditor/build/ckeditor.js | 86516 ---------------- .../ckeditor/build/ckeditor.js.LICENSE.txt | 23 - resources/js/vendor/ckeditor/build/styles.css | 5188 - .../vendor/ckeditor/build/translations/af.js | 1 - .../vendor/ckeditor/build/translations/ar.js | 1 - .../vendor/ckeditor/build/translations/ast.js | 1 - .../vendor/ckeditor/build/translations/az.js | 1 - .../vendor/ckeditor/build/translations/bg.js | 1 - .../vendor/ckeditor/build/translations/bn.js | 1 - .../vendor/ckeditor/build/translations/bs.js | 1 - .../vendor/ckeditor/build/translations/ca.js | 1 - .../vendor/ckeditor/build/translations/cs.js | 1 - .../vendor/ckeditor/build/translations/da.js | 1 - .../ckeditor/build/translations/de-ch.js | 1 - .../vendor/ckeditor/build/translations/de.js | 1 - .../vendor/ckeditor/build/translations/el.js | 1 - .../ckeditor/build/translations/en-au.js | 1 - .../ckeditor/build/translations/en-gb.js | 1 - .../vendor/ckeditor/build/translations/en.js | 1 - .../vendor/ckeditor/build/translations/eo.js | 1 - .../ckeditor/build/translations/es-co.js | 1 - .../vendor/ckeditor/build/translations/es.js | 1 - .../vendor/ckeditor/build/translations/et.js | 1 - .../vendor/ckeditor/build/translations/eu.js | 1 - .../vendor/ckeditor/build/translations/fa.js | 1 - .../vendor/ckeditor/build/translations/fi.js | 1 - .../vendor/ckeditor/build/translations/gl.js | 1 - .../vendor/ckeditor/build/translations/gu.js | 1 - .../vendor/ckeditor/build/translations/he.js | 1 - .../vendor/ckeditor/build/translations/hi.js | 1 - .../vendor/ckeditor/build/translations/hr.js | 1 - .../vendor/ckeditor/build/translations/hu.js | 1 - .../vendor/ckeditor/build/translations/id.js | 1 - .../vendor/ckeditor/build/translations/it.js | 1 - .../vendor/ckeditor/build/translations/ja.js | 1 - .../vendor/ckeditor/build/translations/jv.js | 1 - .../vendor/ckeditor/build/translations/kk.js | 1 - .../vendor/ckeditor/build/translations/km.js | 1 - .../vendor/ckeditor/build/translations/kn.js | 1 - .../vendor/ckeditor/build/translations/ko.js | 1 - .../vendor/ckeditor/build/translations/ku.js | 1 - .../vendor/ckeditor/build/translations/lt.js | 1 - .../vendor/ckeditor/build/translations/lv.js | 1 - .../vendor/ckeditor/build/translations/ms.js | 1 - .../vendor/ckeditor/build/translations/nb.js | 1 - .../vendor/ckeditor/build/translations/ne.js | 1 - .../vendor/ckeditor/build/translations/nl.js | 1 - .../vendor/ckeditor/build/translations/no.js | 1 - .../vendor/ckeditor/build/translations/oc.js | 1 - .../vendor/ckeditor/build/translations/pl.js | 1 - .../ckeditor/build/translations/pt-br.js | 1 - .../vendor/ckeditor/build/translations/pt.js | 1 - .../vendor/ckeditor/build/translations/ro.js | 1 - .../vendor/ckeditor/build/translations/ru.js | 1 - .../vendor/ckeditor/build/translations/si.js | 1 - .../vendor/ckeditor/build/translations/sk.js | 1 - .../vendor/ckeditor/build/translations/sl.js | 1 - .../vendor/ckeditor/build/translations/sq.js | 1 - .../ckeditor/build/translations/sr-latn.js | 1 - .../vendor/ckeditor/build/translations/sr.js | 1 - .../vendor/ckeditor/build/translations/sv.js | 1 - .../vendor/ckeditor/build/translations/th.js | 1 - .../vendor/ckeditor/build/translations/tk.js | 1 - .../vendor/ckeditor/build/translations/tr.js | 1 - .../vendor/ckeditor/build/translations/tt.js | 1 - .../vendor/ckeditor/build/translations/ug.js | 1 - .../vendor/ckeditor/build/translations/uk.js | 1 - .../vendor/ckeditor/build/translations/ur.js | 1 - .../vendor/ckeditor/build/translations/uz.js | 1 - .../vendor/ckeditor/build/translations/vi.js | 1 - .../ckeditor/build/translations/zh-cn.js | 1 - .../vendor/ckeditor/build/translations/zh.js | 1 - .../js/vendor/ckeditor/package-lock.json | 8538 -- resources/js/vendor/ckeditor/package.json | 54 - .../js/vendor/ckeditor/sample/index.html | 171 - .../js/vendor/ckeditor/sample/styles.css | 500 - resources/js/vendor/ckeditor/src/ckeditor.js | 101 - .../js/vendor/ckeditor/webpack.config.js | 99 - resources/lang/en.json | 55 - resources/lang/en/auth.php | 9 - resources/lang/en/crud.php | 57 - resources/lang/en/http-statuses.php | 84 - resources/lang/en/models.php | 19 - resources/lang/en/pagination.php | 8 - resources/lang/en/passwords.php | 11 - resources/lang/en/validation.php | 229 - resources/lang/fr.json | 61 - resources/lang/fr/auth.php | 9 - resources/lang/fr/crud.php | 96 - resources/lang/fr/enums.php | 19 - resources/lang/fr/http-statuses.php | 84 - resources/lang/fr/models.php | 18 - resources/lang/fr/pagination.php | 8 - resources/lang/fr/passwords.php | 11 - resources/lang/fr/validation.php | 265 - resources/sass/back/_fonts.scss | 125 + resources/sass/back/app.scss | 133 + resources/sass/back/inputs/_color.scss | 101 + resources/sass/back/inputs/_wysiwyg.scss | 26 + resources/sass/bo/base/_common.scss | 40 - resources/sass/bo/bo.scss | 14 - .../sass/bo/utilities/_bootstrap-custom.scss | 44 - resources/sass/bo/utilities/_mixins.scss | 54 - resources/sass/bo/utilities/_variables.scss | 106 - resources/sass/bo/vendor/_bootstrap.scss | 43 - resources/sass/bo/vendor/_bootswatch.scss | 321 - .../sass/bo/vendor/_ckEditorContent.scss | 417 - resources/sass/bo/vendor/_complement.scss | 244 - resources/sass/bo/vendor/_glightbox.scss | 1 - resources/sass/common.scss | 3 + resources/sass/front/app.scss | 20 + resources/ts/app.tsx | 29 + .../ts/back/Components/ApplicationLogo.tsx | 49 + .../BtnOptionnalLinkWithTooltip.tsx | 87 + .../back/Components/CustomSidebarTrigger.tsx | 43 + .../ts/back/Components/FieldsetWrapper.tsx | 54 + .../ts/back/Components/Filters/EnumFilter.tsx | 44 + .../Filters/MultiSelectRelationFilter.tsx | 58 + .../back/Components/Filters/SwitchFilter.tsx | 33 + .../ts/back/Components/FiltersWrapper.tsx | 58 + .../ts/back/Components/GoToFrontView.tsx | 106 + resources/ts/back/Components/InputError.tsx | 41 + .../Components/Inputs/CompleteInputFile.tsx | 423 + .../ts/back/Components/Inputs/EnumSelect.tsx | 243 + .../back/Components/Inputs/ImageCropper.tsx | 1005 + .../ts/back/Components/Inputs/ModelSelect.tsx | 1676 + .../ts/back/Components/Inputs/MultiSelect.tsx | 1487 + .../Components/Inputs/SimpleColorPicker.tsx | 285 + .../Components/Inputs/SimpleDatePicker.tsx | 219 + .../back/Components/Inputs/SimpleNumber.tsx | 92 + .../back/Components/Inputs/SimpleString.tsx | 111 + .../back/Components/Inputs/SimpleSwitch.tsx | 66 + .../back/Components/Inputs/SimpleTextarea.tsx | 74 + .../back/Components/Inputs/SimpleVimeoId.tsx | 26 + .../Components/Inputs/SimpleYoutubeId.tsx | 26 + .../back/Components/Inputs/Slugifycator.tsx | 58 + .../Components/Inputs/StaticRouteSelect.tsx | 58 + .../Inputs/Wysiwyg/Extensions/Image/Image.tsx | 95 + .../Wysiwyg/Extensions/Image/ImageButton.tsx | 473 + .../Wysiwyg/Extensions/Image/ImageInputs.tsx | 101 + .../Extensions/Image/ImageNodeView.tsx | 583 + .../Wysiwyg/Extensions/Image/ImageUtils.tsx | 62 + .../Wysiwyg/Extensions/Image/image.d.ts | 20 + .../Inputs/Wysiwyg/Extensions/Link/Link.tsx | 178 + .../Wysiwyg/Extensions/Link/LinkButton.tsx | 735 + .../Inputs/Wysiwyg/Extensions/Link/link.d.ts | 17 + .../Extensions/Link/tiptap-events.d.ts | 13 + .../Extensions/Replace/FindReplaceButton.tsx | 160 + .../Extensions/ShortCuts/ShortcutBoundary.tsx | 26 + .../Wysiwyg/Extensions/Table/TableButton.tsx | 320 + .../Inputs/Wysiwyg/SimpleWysiwyg.tsx | 184 + .../Components/Inputs/Wysiwyg/Toolbar.tsx | 520 + .../Components/Inputs/Wysiwyg/tiptap.d.ts | 10 + .../back/Components/Layout/AppBreadcrumbs.tsx | 47 + .../ts/back/Components/Layout/AppFooter.tsx | 20 + .../ts/back/Components/Layout/AppHeader.tsx | 70 + .../Layout/Settings/AppSettings.tsx | 45 + .../Layout/Settings/Sections/Languages.tsx | 95 + .../Layout/Settings/Sections/Themes.tsx | 57 + .../Layout/Settings/SettingRegistry.tsx | 37 + .../Components/Layout/Sidebar/AppSidebar.tsx | 305 + .../Layout/Sidebar/Links/ActivityLogs.tsx | 27 + .../Components/Layout/Sidebar/Links/Users.tsx | 31 + .../Layout/Sidebar/SidebarRegistry.tsx | 48 + resources/ts/back/Components/ModelActions.tsx | 417 + .../Pagination/PaginationCustom.tsx | 82 + .../Pagination/PaginationPerPage.tsx | 62 + .../Pagination/PaginationWrapper.tsx | 32 + .../ts/back/Components/SoftdeleteWarning.tsx | 22 + resources/ts/back/Components/SubmitButton.tsx | 29 + .../ts/back/Components/Table/DataTable.tsx | 122 + .../Table/DataTableFilterButton.tsx | 89 + .../back/Components/Table/DataTableSearch.tsx | 87 + .../ts/back/Components/Table/DetailsTable.tsx | 89 + .../Table/RenderTranslationCell.tsx | 69 + resources/ts/back/Components/WordCounter.tsx | 19 + .../ts/back/Layouts/AuthenticatedLayout.tsx | 111 + resources/ts/back/Layouts/GuestLayout.tsx | 22 + .../ts/back/Pages/ActivityLogs/Index.tsx | 227 + resources/ts/back/Pages/ActivityLogs/Show.tsx | 231 + resources/ts/back/Pages/Auth/Login.tsx | 52 + resources/ts/back/Pages/Dashboard/Index.tsx | 123 + resources/ts/back/Pages/Errors/Default.tsx | 43 + resources/ts/back/Pages/Users/Create.tsx | 58 + resources/ts/back/Pages/Users/Edit.tsx | 64 + resources/ts/back/Pages/Users/Form.tsx | 187 + resources/ts/back/Pages/Users/Index.tsx | 208 + resources/ts/back/Pages/Users/Show.tsx | 180 + resources/ts/back/app.tsx | 30 + resources/ts/back/hooks/use-crud-messages.tsx | 60 + resources/ts/back/hooks/use-crud-submit.tsx | 87 + resources/ts/back/lib/actions.tsx | 67 + resources/ts/back/lib/enums.tsx | 21 + resources/ts/back/lib/filters.tsx | 27 + resources/ts/back/providers/ThemeProvider.tsx | 74 + resources/ts/back/types/activity-logs.d.ts | 15 + resources/ts/back/types/global.d.ts | 114 + resources/ts/back/types/i18n.d.ts | 2 + resources/ts/bo/base/common.ts | 50 - resources/ts/bo/bo.ts | 25 - .../BelongsToManyDropdownComponent.vue | 255 - .../ts/bo/components/CkEditorComponent.vue | 354 - .../ts/bo/components/ImageInputComponent.vue | 961 - .../bo/components/InputTextAutoComponent.vue | 108 - .../bo/components/InvoiceTasksComponent.vue | 314 - .../ts/bo/components/LabelSelectComponent.vue | 78 - .../components/MarkerLabelSelectComponent.vue | 78 - .../ts/bo/components/PasswordVisibility.vue | 124 - .../SearchBelongsToDropdownComponent.vue | 260 - .../ts/bo/components/WordCounterComponent.vue | 122 - resources/ts/bo/pages/label_colorize.ts | 29 - resources/ts/bo/utilities/bootstrap.ts | 21 - resources/ts/bo/utilities/fontawesome.ts | 148 - resources/ts/bo/utilities/glightbox.ts | 5 - resources/ts/bo/utilities/jscolor.ts | 1 - resources/ts/bo/utilities/metaCsrfToken.ts | 5 - resources/ts/bo/utilities/vue-bo.ts | 56 - resources/ts/components/ui/accordion.tsx | 66 + resources/ts/components/ui/alert.tsx | 59 + resources/ts/components/ui/avatar.tsx | 48 + resources/ts/components/ui/badge.tsx | 36 + resources/ts/components/ui/breadcrumb.tsx | 115 + resources/ts/components/ui/button.tsx | 57 + resources/ts/components/ui/calendar.tsx | 211 + resources/ts/components/ui/card.tsx | 79 + resources/ts/components/ui/checkbox.tsx | 28 + resources/ts/components/ui/collapsible.tsx | 9 + resources/ts/components/ui/command.tsx | 182 + resources/ts/components/ui/dialog.tsx | 120 + resources/ts/components/ui/dropdown-menu.tsx | 201 + resources/ts/components/ui/form.tsx | 176 + resources/ts/components/ui/input.tsx | 22 + resources/ts/components/ui/label.tsx | 24 + resources/ts/components/ui/pagination.tsx | 117 + resources/ts/components/ui/popover.tsx | 46 + resources/ts/components/ui/scroll-area.tsx | 56 + resources/ts/components/ui/select.tsx | 158 + resources/ts/components/ui/separator.tsx | 31 + resources/ts/components/ui/sheet.tsx | 138 + resources/ts/components/ui/sidebar.tsx | 786 + resources/ts/components/ui/skeleton.tsx | 15 + resources/ts/components/ui/slider.tsx | 63 + resources/ts/components/ui/switch.tsx | 27 + resources/ts/components/ui/table.tsx | 120 + resources/ts/components/ui/textarea.tsx | 22 + resources/ts/components/ui/toast.tsx | 127 + resources/ts/components/ui/toaster.tsx | 41 + resources/ts/components/ui/tooltip.tsx | 28 + resources/ts/declarations.d.ts | 14 + resources/ts/env.d.ts | 8 - resources/ts/front/Layouts/AppLayout.tsx | 39 + resources/ts/front/Pages/Errors/Default.tsx | 24 + resources/ts/front/Pages/Home.tsx | 16 + resources/ts/hooks/use-device-type.tsx | 41 + resources/ts/hooks/use-formated-value.tsx | 129 + resources/ts/hooks/use-in-view.tsx | 48 + resources/ts/hooks/use-inline-style.tsx | 53 + resources/ts/hooks/use-laravel-validation.tsx | 108 + resources/ts/hooks/use-mobile.tsx | 20 + resources/ts/hooks/use-recaptcha.tsx | 127 + resources/ts/hooks/use-string.tsx | 350 + resources/ts/hooks/use-toast.tsx | 197 + resources/ts/hooks/use-translations.tsx | 105 + resources/ts/index.d.ts | 101 - resources/ts/lib/mapEnumOptions.tsx | 20 + resources/ts/lib/mapPivotOptions.tsx | 39 + resources/ts/lib/utils.tsx | 41 + resources/ts/modules/asset.ts | 7 - resources/ts/modules/bsTooltips.ts | 26 - resources/ts/modules/colors.ts | 59 - .../ts/modules/parseLaravelErrorMessages.ts | 53 - resources/ts/modules/route.ts | 97 - resources/ts/modules/sweetalert.ts | 110 - resources/ts/modules/sweetalertConfirm.ts | 114 - resources/ts/modules/toast.ts | 34 - resources/ts/modules/trans.ts | 49 - resources/ts/store/store-config.tsx | 21 + resources/ts/store/use-locale-store.tsx | 40 + .../types/@sipec/vue3-tags-input/index.d.ts | 49 - resources/ts/types/glightbox/index.d.ts | 5 - resources/ts/types/global.d.ts | 13 + resources/views/app.blade.php | 2 + resources/views/auth/login.blade.php | 70 - .../views/auth/passwords/email.blade.php | 47 - .../views/auth/passwords/reset.blade.php | 74 - resources/views/back/app.blade.php | 29 + .../change-model-order-select.blade.php | 23 - .../bo/modules/change-model-order.blade.php | 40 - .../modules/change-published-status.blade.php | 14 - .../views/bo/modules/pagination.blade.php | 140 - .../views/bo/modules/search-bar.blade.php | 46 - .../modules/table-col-sorter-cell.blade.php | 54 - .../bo/modules/table-col-sorter.blade.php | 31 - .../views/bo/pages/brands/create.blade.php | 46 - .../views/bo/pages/brands/edit.blade.php | 76 - .../bo/pages/brands/form-inputs.blade.php | 72 - .../views/bo/pages/brands/index.blade.php | 81 - .../views/bo/pages/brands/show.blade.php | 75 - .../views/bo/pages/companies/create.blade.php | 46 - .../views/bo/pages/companies/edit.blade.php | 62 - .../bo/pages/companies/form-inputs.blade.php | 49 - .../views/bo/pages/companies/index.blade.php | 64 - .../bo/pages/credit_accounts/create.blade.php | 46 - .../bo/pages/credit_accounts/edit.blade.php | 51 - .../credit_accounts/form-inputs.blade.php | 102 - .../bo/pages/credit_accounts/index.blade.php | 112 - .../bo/pages/credit_logs/create.blade.php | 67 - .../pages/credit_logs/form-inputs.blade.php | 47 - .../bo/pages/credit_logs/index.blade.php | 112 - .../bo/pages/documents/invoice.blade.php | 237 - .../bo/pages/informations/create.blade.php | 46 - .../bo/pages/informations/edit.blade.php | 62 - .../pages/informations/form-inputs.blade.php | 105 - .../bo/pages/informations/index.blade.php | 68 - .../views/bo/pages/invoices/create.blade.php | 46 - .../views/bo/pages/invoices/edit.blade.php | 62 - .../bo/pages/invoices/form-inputs.blade.php | 355 - .../views/bo/pages/invoices/index.blade.php | 88 - .../views/bo/pages/invoices/show.blade.php | 118 - .../views/bo/pages/labels/create.blade.php | 46 - .../views/bo/pages/labels/edit.blade.php | 62 - .../bo/pages/labels/form-inputs.blade.php | 76 - .../views/bo/pages/labels/index.blade.php | 108 - .../views/bo/pages/packages/create.blade.php | 46 - .../views/bo/pages/packages/edit.blade.php | 62 - .../bo/pages/packages/form-inputs.blade.php | 100 - .../views/bo/pages/packages/index.blade.php | 84 - .../views/bo/pages/sites/create.blade.php | 46 - resources/views/bo/pages/sites/edit.blade.php | 69 - .../bo/pages/sites/form-inputs.blade.php | 176 - .../views/bo/pages/sites/index.blade.php | 101 - resources/views/bo/pages/sites/show.blade.php | 104 - .../bo/pages/ticket_types/edit.blade.php | 47 - .../pages/ticket_types/form-inputs.blade.php | 69 - .../bo/pages/ticket_types/index.blade.php | 45 - .../views/bo/pages/tickets/create.blade.php | 25 - .../views/bo/pages/tickets/edit.blade.php | 35 - .../bo/pages/tickets/form-inputs.blade.php | 135 - .../views/bo/pages/tickets/index.blade.php | 445 - .../views/bo/pages/tickets/show.blade.php | 355 - .../views/bo/pages/users/create.blade.php | 46 - resources/views/bo/pages/users/edit.blade.php | 62 - .../bo/pages/users/form-inputs.blade.php | 154 - .../views/bo/pages/users/index.blade.php | 70 - .../views/bo/pages/users/settings.blade.php | 66 - .../inputs/bigint-foreign-id.blade.php | 15 - .../views/bo/partials/inputs/date.blade.php | 15 - .../bo/partials/inputs/int-color.blade.php | 71 - .../bo/partials/inputs/int-number.blade.php | 42 - .../inputs/pivot-belongsToMany.blade.php | 21 - .../partials/inputs/publish-dates.blade.php | 16 - .../search-belongs-to-dropdown.blade.php | 28 - .../inputs/select-multiple-enum.blade.php | 16 - .../bo/partials/inputs/text-html.blade.php | 20 - .../partials/inputs/text-list-items.blade.php | 31 - .../inputs/timestamp-datetime.blade.php | 15 - .../partials/inputs/tinyint-boolean.blade.php | 14 - .../bo/partials/inputs/tinyint-enum.blade.php | 15 - .../inputs/varchar-multiline.blade.php | 27 - .../partials/inputs/varchar-picture.blade.php | 15 - .../bo/partials/inputs/varchar.blade.php | 26 - .../breadcrumbs/breadcrumb-body.blade.php | 12 - .../breadcrumbs/breadcrumb-head.blade.php | 9 - .../breadcrumbs/breadcrumb-layout.blade.php | 17 - .../views/emails/mail-created-plain.blade.php | 8 - resources/views/emails/mail-created.blade.php | 15 - resources/views/emails/new-ticket.blade.php | 13 - .../views/emails/ticket-mention.blade.php | 10 - .../views/emails/ticket-update.blade.php | 10 - resources/views/errors/401.blade.php | 5 - resources/views/errors/403.blade.php | 5 - resources/views/errors/404.blade.php | 6 - resources/views/errors/419.blade.php | 6 - 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 | 486 - resources/views/errors/layout.blade.php | 168 - resources/views/errors/minimal.blade.php | 38 - resources/views/estimations/create.blade.php | 26 - .../views/estimations/form-inputs.blade.php | 21 - .../views/estimations/pendingCard.blade.php | 58 - resources/views/front/app.blade.php | 29 + resources/views/layout/app.blade.php | 62 - resources/views/layout/footer.blade.php | 8 - resources/views/layout/nav.blade.php | 125 - .../views/modules/flash-messages.blade.php | 40 - resources/views/modules/input-error.blade.php | 8 - .../views/modules/script-constants.blade.php | 27 - .../views/vendor/mail/html/header.blade.php | 8 - routes/api.php | 1 - routes/back/web-back.php | 4 + routes/breadcrumbs-bo.php | 169 - routes/breadcrumbs/front.php | 13 + routes/console.php | 1 - routes/web-bo.php | 188 - routes/web-front.php | 6 + storage/app/.gitignore | 1 + storage/app/private/.gitignore | 2 + storage/samlidp/config.php | 25 - tailwind.config.js | 135 + tests/CreatesApplication.php | 22 - tests/Feature/ExampleTest.php | 20 - tests/TestCase.php | 10 - tests/Unit/ExampleTest.php | 18 - tsconfig.json | 29 +- vite.config.ts | 123 +- 870 files changed, 37209 insertions(+), 141592 deletions(-) delete mode 100644 .browserslistrc create mode 100644 .eslintignore create mode 100644 .eslintrc.cjs delete mode 100644 .eslintrc.json create mode 100644 .husky/commit-msg create mode 100644 .npmrc create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json delete mode 100644 IDEAS.md delete mode 100644 app/Casts/HtmlColor.php delete mode 100644 app/Console/Commands/AutoCloseOldTickets.php delete mode 100644 app/Console/Commands/CreateUser.php delete mode 100644 app/Console/Commands/ExportTicketsState.php delete mode 100644 app/Console/Commands/TestMail.php delete mode 100644 app/Console/Commands/UpdateGitlabDatas.php delete mode 100644 app/Console/Commands/WarnBeforeAutoCloseTicket.php delete mode 100644 app/Console/Kernel.php delete mode 100644 app/Enums/Credit/AccountTypeEnum.php delete mode 100644 app/Enums/Credit/BalanceOperationEnum.php delete mode 100644 app/Enums/Credit/EstimationStatusEnum.php delete mode 100644 app/Enums/Credit/EstimationTimeEnum.php delete mode 100644 app/Enums/Informations/InfoColorsEnum.php delete mode 100644 app/Enums/Invoices/InvoiceStatusEnum.php delete mode 100644 app/Enums/Invoices/TaskTypeEnum.php delete mode 100644 app/Enums/ItemsPerPaginationEnum.php delete mode 100644 app/Enums/MessageTypeEnum.php delete mode 100644 app/Enums/Tickets/TicketFileTypeEnum.php delete mode 100644 app/Enums/Tickets/TicketStatusEnum.php delete mode 100644 app/Enums/Tickets/TicketTypeEnum.php delete mode 100644 app/Enums/Users/RoleEnum.php delete mode 100644 app/Events/NotifyAdmin.php delete mode 100644 app/Events/NotifySubscriptions.php delete mode 100644 app/Events/NotifyTicketCreator.php delete mode 100644 app/Events/TicketStatusChanged.php delete mode 100644 app/Exceptions/Handler.php delete mode 100644 app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php delete mode 100644 app/Http/Controllers/Bo/Auth/ForgotPasswordController.php delete mode 100644 app/Http/Controllers/Bo/Auth/LoginController.php delete mode 100644 app/Http/Controllers/Bo/Auth/ResetPasswordController.php delete mode 100644 app/Http/Controllers/Bo/BrandController.php delete mode 100644 app/Http/Controllers/Bo/BrevoController.php delete mode 100644 app/Http/Controllers/Bo/CompanyController.php delete mode 100644 app/Http/Controllers/Bo/Credit/AccountController.php delete mode 100644 app/Http/Controllers/Bo/Credit/CreditLogController.php delete mode 100644 app/Http/Controllers/Bo/Credit/EstimationController.php delete mode 100644 app/Http/Controllers/Bo/InformationController.php delete mode 100644 app/Http/Controllers/Bo/InvoiceController.php delete mode 100644 app/Http/Controllers/Bo/LabelController.php delete mode 100644 app/Http/Controllers/Bo/PackageController.php delete mode 100644 app/Http/Controllers/Bo/SiteController.php delete mode 100644 app/Http/Controllers/Bo/TicketController.php delete mode 100644 app/Http/Controllers/Bo/TicketTypeController.php delete mode 100644 app/Http/Controllers/Bo/UserController.php delete mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/Front/HomeController.php delete mode 100644 app/Http/Kernel.php delete mode 100644 app/Http/Middleware/Authenticate.php delete mode 100644 app/Http/Middleware/EncryptCookies.php delete mode 100644 app/Http/Middleware/HtmlSanitizer.php delete mode 100644 app/Http/Middleware/IsAdmin.php delete mode 100644 app/Http/Middleware/PreventRequestsDuringMaintenance.php delete mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php delete mode 100644 app/Http/Middleware/SecureHeaders.php delete mode 100644 app/Http/Middleware/TrimStrings.php delete mode 100644 app/Http/Middleware/TrustHosts.php delete mode 100644 app/Http/Middleware/TrustProxies.php delete mode 100644 app/Http/Middleware/ValidateSignature.php delete mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Http/Middlewares/HandleInertiaRequests.php delete mode 100644 app/Http/Requests/Bo/AssignTicketToUserRequest.php delete mode 100644 app/Http/Requests/Bo/Brands/StoreBrandRequest.php delete mode 100644 app/Http/Requests/Bo/Brands/UpdateBrandRequest.php delete mode 100644 app/Http/Requests/Bo/BrevoWehbookRequest.php delete mode 100644 app/Http/Requests/Bo/ChangeTicketStatus.php delete mode 100644 app/Http/Requests/Bo/Companies/StoreCompanyRequest.php delete mode 100644 app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php delete mode 100644 app/Http/Requests/Bo/CreateMessage.php delete mode 100644 app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php delete mode 100644 app/Http/Requests/Bo/Credit/CreateEstimateRequest.php delete mode 100644 app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php delete mode 100644 app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php delete mode 100644 app/Http/Requests/Bo/Informations/StoreInformationRequest.php delete mode 100644 app/Http/Requests/Bo/Informations/UpdateInformationRequest.php delete mode 100644 app/Http/Requests/Bo/Invoices/StoreInvoiceRequest.php delete mode 100644 app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php delete mode 100644 app/Http/Requests/Bo/Labels/StoreLabelRequest.php delete mode 100644 app/Http/Requests/Bo/Labels/UpdateLabelRequest.php delete mode 100644 app/Http/Requests/Bo/LinkTicket.php delete mode 100644 app/Http/Requests/Bo/Packages/StorePackageRequest.php delete mode 100644 app/Http/Requests/Bo/Packages/UpdatePackageRequest.php delete mode 100644 app/Http/Requests/Bo/Sites/StoreSiteRequest.php delete mode 100644 app/Http/Requests/Bo/Sites/UpdateSiteRequest.php delete mode 100644 app/Http/Requests/Bo/SortTickets.php delete mode 100644 app/Http/Requests/Bo/StoreTicket.php delete mode 100644 app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php delete mode 100644 app/Http/Requests/Bo/UpdateChangeOrderRequest.php delete mode 100644 app/Http/Requests/Bo/UpdateMessage.php delete mode 100644 app/Http/Requests/Bo/UpdateTicket.php delete mode 100644 app/Http/Requests/Bo/UpdateTicketPriorityRequest.php delete mode 100644 app/Http/Requests/Bo/Users/FavouriteSiteRequest.php delete mode 100644 app/Http/Requests/Bo/Users/StoreUserRequest.php delete mode 100644 app/Http/Requests/Bo/Users/UpdateUserRequest.php delete mode 100644 app/Http/Resources/UserLabeledResource.php delete mode 100644 app/Interfaces/SpsConfigInterface.php delete mode 100644 app/Jobs/AutoCloseOldTickets.php delete mode 100644 app/Jobs/ExportTicketsState.php delete mode 100644 app/Jobs/SendTicketMentionMail.php delete mode 100644 app/Jobs/SendUserCreatedEmail.php delete mode 100644 app/Jobs/UpdateIssueLabels.php delete mode 100644 app/Jobs/WarnBeforeAutoCloseTicket.php delete mode 100644 app/Lib/Helpers/CollectionHelper.php delete mode 100644 app/Lib/Helpers/ExceptionsHelper.php delete mode 100644 app/Lib/Helpers/FileStorageHelper.php delete mode 100644 app/Lib/Helpers/ToolboxHelper.php delete mode 100644 app/Listeners/AddStatusMessages.php delete mode 100644 app/Listeners/SendNotificationMailToAdmin.php delete mode 100644 app/Listeners/SendNotificationMailToTicketCreator.php delete mode 100644 app/Listeners/SendSubscriptionsNotificationsMail.php delete mode 100644 app/Mail/NewTicket.php delete mode 100644 app/Mail/TicketMention.php delete mode 100644 app/Mail/TicketUpdate.php delete mode 100644 app/Mail/UserCreatedMail.php delete mode 100644 app/Models/Brand.php delete mode 100644 app/Models/Company.php delete mode 100644 app/Models/Credit/Account.php delete mode 100644 app/Models/Credit/CreditLog.php delete mode 100644 app/Models/Credit/Estimation.php delete mode 100644 app/Models/Credit/EstimationLog.php delete mode 100644 app/Models/GitlabIssues.php delete mode 100644 app/Models/GitlabLabels.php delete mode 100644 app/Models/GitlabMilestones.php delete mode 100644 app/Models/GitlabProjects.php delete mode 100644 app/Models/Information.php delete mode 100644 app/Models/Invoice.php delete mode 100644 app/Models/Label.php delete mode 100644 app/Models/Message.php delete mode 100644 app/Models/Package.php delete mode 100644 app/Models/Site.php delete mode 100644 app/Models/SiteUser.php delete mode 100644 app/Models/Ticket.php delete mode 100644 app/Models/Ticket/TicketType.php delete mode 100644 app/Models/User.php delete mode 100644 app/Notifications/ExportTicketsStateNotification.php delete mode 100644 app/Notifications/ResetPassword.php delete mode 100644 app/Policies/AccountPolicy.php delete mode 100644 app/Policies/CreditLogPolicy.php delete mode 100644 app/Policies/EstimationPolicy.php delete mode 100644 app/Policies/SitePolicy.php delete mode 100644 app/Policies/TicketPolicy.php delete mode 100644 app/Providers/AppServiceProvider.php delete mode 100644 app/Providers/AuthServiceProvider.php delete mode 100644 app/Providers/BroadcastServiceProvider.php delete mode 100644 app/Providers/EventServiceProvider.php delete mode 100644 app/Providers/RouteServiceProvider.php delete mode 100644 app/Providers/TranslationServiceProvider.php delete mode 100644 app/Providers/ViewServiceProvider.php delete mode 100644 app/Rules/Hex.php delete mode 100644 app/Traits/Controllers/ChangesModelOrder.php delete mode 100644 app/Traits/Controllers/HasGitlabIssue.php delete mode 100644 app/Traits/Enums/BaseEnum.php delete mode 100644 app/Traits/Enums/SpsConfigTrait.php delete mode 100644 app/Traits/Models/IsCachedAsCollection.php delete mode 100644 app/Traits/Models/MiniCrudModel.php create mode 100644 bootstrap/providers.php create mode 100644 commitlint.config.cjs create mode 100644 components.json delete mode 100644 config/broadcasting.php delete mode 100644 config/cors.php delete mode 100644 config/gitlab.php delete mode 100644 config/hashing.php create mode 100644 config/inertia.php create mode 100644 config/laravellocalization.php delete mode 100644 config/macroschedule.php delete mode 100644 config/pagination.php delete mode 100644 config/purifier.php create mode 100644 config/saml2.php delete mode 100644 config/samlidp.php delete mode 100644 config/schedules.php delete mode 100644 config/sentry.php create mode 100644 config/telescope.php delete mode 100644 config/tickets.php delete mode 100644 config/trustedproxy.php delete mode 100644 config/view.php delete mode 100644 database/.gitignore rename {resources/ts/libs => database/factories}/.gitkeep (100%) delete mode 100644 database/factories/CompanyFactory.php delete mode 100644 database/factories/InvoiceFactory.php delete mode 100644 database/factories/PackageFactory.php delete mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/.gitkeep delete mode 100644 database/migrations/2022_05_24_104346_assign_user_to_tickets.php delete mode 100644 database/migrations/2022_05_24_122728_move_images_to_storage.php delete mode 100644 database/migrations/2022_05_25_120339_create_labels_table.php delete mode 100644 database/migrations/2022_05_25_121407_create_label_ticket_table.php delete mode 100644 database/migrations/2022_05_30_091333_create_brands_table.php delete mode 100644 database/migrations/2022_05_30_091340_add_brand_id_to_sites.php delete mode 100644 database/migrations/2022_05_30_091401_create_credit_accounts_table.php delete mode 100644 database/migrations/2022_05_30_091412_create_credit_logs_table.php delete mode 100644 database/migrations/2022_05_30_091438_create_credit_estimations_table.php delete mode 100644 database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php delete mode 100644 database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php delete mode 100644 database/migrations/2022_08_22_154457_create_packages_table.php delete mode 100644 database/migrations/2022_08_23_085321_create_companies_table.php delete mode 100644 database/migrations/2022_08_23_085833_create_invoices_table.php delete mode 100644 database/migrations/2022_08_26_112109_change_sites_projets_relation.php delete mode 100644 database/migrations/2023_04_06_101917_change_tickets_status.php delete mode 100644 database/migrations/2023_04_06_122125_add_message_type.php delete mode 100644 database/migrations/2023_04_18_123853_create_dutyhours_table.php delete mode 100644 database/migrations/2023_04_18_150623_create_informations_table.php delete mode 100644 database/migrations/2023_04_19_160127_create_ticket_types_table.php delete mode 100644 database/migrations/2023_08_01_125540_drop_macro_activities_table.php delete mode 100644 database/migrations/2023_08_01_130046_drop_macro_markers_table.php delete mode 100644 database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php delete mode 100644 database/migrations/2023_08_08_122708_drop_data_sites_table.php delete mode 100644 database/migrations/2023_08_11_093937_drop_files_table.php delete mode 100644 database/migrations/2023_08_11_094518_drop_logs_table.php delete mode 100644 database/migrations/2023_08_14_100506_add_status_invoices_table.php delete mode 100644 database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php delete mode 100644 database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php delete mode 100644 database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php delete mode 100644 database/migrations/2023_08_14_171640_add_urls_to_sites_table.php delete mode 100644 database/migrations/2023_08_17_164511_remove_status_from_projects_table.php delete mode 100644 database/migrations/2023_08_18_091917_drop_schedules_table.php delete mode 100644 database/migrations/2023_11_13_144755_add_title_to_tickets_table.php delete mode 100644 database/migrations/2024_07_19_150414_add_files_to_tickets_table.php delete mode 100644 database/migrations/2024_07_19_151553_add_files_to_messages_table.php delete mode 100644 database/migrations/2025_02_14_122301_rebase_tickets_type.php delete mode 100644 database/migrations/2025_02_19_154440_rebase_tickets_status.php delete mode 100644 database/migrations/2025_03_12_102925_change_order_to_tickets.php delete mode 100644 database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php delete mode 100644 database/migrations/2025_03_13_151503_tickets_linking.php delete mode 100644 database/migrations/2025_04_11_183728_delete_dutyhours_table.php delete mode 100644 database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php delete mode 100644 database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php delete mode 100644 database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php delete mode 100644 database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php delete mode 100644 database/migrations/2025_07_10_103249_add_favourite_site_to_user.php delete mode 100644 database/migrations/2025_08_21_120157_delete_projects_table.php delete mode 100644 database/migrations/2025_08_21_123718_delete_unique_gitlab_project_id_on_site_table.php delete mode 100644 database/migrations/2025_11_19_142520_reorder_all_tickets.php delete mode 100644 database/migrations/2026_01_02_101346_create_gitlab_projects_table.php delete mode 100644 database/migrations/2026_01_02_111055_create_gitlab_issues_table.php delete mode 100644 database/migrations/2026_01_02_121235_create_gitlab_labels_table.php delete mode 100644 database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php delete mode 100644 database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php delete mode 100644 database/migrations/2026_02_25_171152_alter_packages_table.php delete mode 100644 database/schema/mysql-schema.dump create mode 100644 database/seeders/Classic/.gitkeep delete mode 100644 database/seeders/InvoicingSeeder.php create mode 100644 database/seeders/Mandatory/.gitkeep create mode 100644 database/seeders/MandatorySeeder.php delete mode 100644 jsconfig.json create mode 100644 k8s-queues.sh create mode 100644 lang/de/back.php create mode 100644 lang/de/enums.php create mode 100644 lang/de/errors.php create mode 100644 lang/de/front.php create mode 100644 lang/de/models.php create mode 100644 lang/de/validation.php create mode 100644 lang/en/back.php create mode 100644 lang/en/enums.php create mode 100644 lang/en/errors.php create mode 100644 lang/en/front.php create mode 100644 lang/en/models.php create mode 100644 lang/en/validation.php create mode 100644 lang/es/back.php create mode 100644 lang/es/enums.php create mode 100644 lang/es/errors.php create mode 100644 lang/es/front.php create mode 100644 lang/es/models.php create mode 100644 lang/es/validation.php create mode 100644 lang/fr/back.php create mode 100644 lang/fr/enums.php create mode 100644 lang/fr/errors.php create mode 100644 lang/fr/front.php create mode 100644 lang/fr/models.php create mode 100644 lang/fr/validation.php create mode 100644 lang/nl/back.php create mode 100644 lang/nl/enums.php create mode 100644 lang/nl/errors.php create mode 100644 lang/nl/front.php create mode 100644 lang/nl/models.php create mode 100644 lang/nl/validation.php create mode 100644 lang/pl/back.php create mode 100644 lang/pl/enums.php create mode 100644 lang/pl/errors.php create mode 100644 lang/pl/front.php create mode 100644 lang/pl/models.php create mode 100644 lang/pl/validation.php create mode 100644 phpstan.neon create mode 100644 postcss.config.js delete mode 100644 public/android-chrome-192x192.png delete mode 100644 public/android-chrome-512x512.png create mode 100644 public/android-icon-144x144.png create mode 100644 public/android-icon-192x192.png create mode 100644 public/android-icon-36x36.png create mode 100644 public/android-icon-48x48.png create mode 100644 public/android-icon-72x72.png create mode 100644 public/android-icon-96x96.png create mode 100644 public/apple-icon-114x114.png create mode 100644 public/apple-icon-120x120.png create mode 100644 public/apple-icon-144x144.png create mode 100644 public/apple-icon-152x152.png create mode 100644 public/apple-icon-180x180.png create mode 100644 public/apple-icon-57x57.png create mode 100644 public/apple-icon-60x60.png create mode 100644 public/apple-icon-72x72.png create mode 100644 public/apple-icon-76x76.png delete mode 100644 public/apple-touch-icon-120x120.png delete mode 100644 public/apple-touch-icon-152x152.png delete mode 100644 public/apple-touch-icon-180x180.png delete mode 100644 public/apple-touch-icon-60x60.png delete mode 100644 public/apple-touch-icon-76x76.png delete mode 100644 public/apple-touch-icon.png create mode 100644 public/favicon-back/android-icon-144x144.png create mode 100644 public/favicon-back/android-icon-192x192.png create mode 100644 public/favicon-back/android-icon-36x36.png create mode 100644 public/favicon-back/android-icon-48x48.png create mode 100644 public/favicon-back/android-icon-72x72.png create mode 100644 public/favicon-back/android-icon-96x96.png create mode 100644 public/favicon-back/apple-icon-114x114.png create mode 100644 public/favicon-back/apple-icon-120x120.png create mode 100644 public/favicon-back/apple-icon-144x144.png create mode 100644 public/favicon-back/apple-icon-152x152.png create mode 100644 public/favicon-back/apple-icon-180x180.png create mode 100644 public/favicon-back/apple-icon-57x57.png create mode 100644 public/favicon-back/apple-icon-60x60.png create mode 100644 public/favicon-back/apple-icon-72x72.png create mode 100644 public/favicon-back/apple-icon-76x76.png create mode 100644 public/favicon-back/favicon-16x16.png create mode 100644 public/favicon-back/favicon-32x32.png create mode 100644 public/favicon-back/favicon.ico create mode 100644 public/favicon-back/manifest.json create mode 100644 public/favicon-back/ms-icon-144x144.png create mode 100644 public/favicon-back/ms-icon-150x150.png create mode 100644 public/favicon-back/ms-icon-310x310.png create mode 100644 public/favicon-back/ms-icon-70x70.png create mode 100644 public/manifest.json create mode 100644 public/ms-icon-144x144.png create mode 100644 public/ms-icon-150x150.png create mode 100644 public/ms-icon-310x310.png create mode 100644 public/ms-icon-70x70.png delete mode 100644 public/mstile-144x144.png delete mode 100644 public/mstile-150x150.png delete mode 100644 public/safari-pinned-tab.svg delete mode 100644 public/site.webmanifest delete mode 100644 public/web.config delete mode 100644 resources/assets/documents/invoice/logo_ldc.jpg delete mode 100644 resources/assets/documents/invoice/logo_ldc.png delete mode 100644 resources/assets/documents/invoice/separator.png create mode 100644 resources/assets/fonts/Figtree/Figtree-Black.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-BlackItalic.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-Bold.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-BoldItalic.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-ExtraBold.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-ExtraBoldItalic.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-Italic.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-Light.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-LightItalic.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-Medium.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-MediumItalic.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-Regular.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-SemiBold.ttf create mode 100644 resources/assets/fonts/Figtree/Figtree-SemiBoldItalic.ttf create mode 100644 resources/assets/images/logos/uwil-cms-dark-icon.svg create mode 100644 resources/assets/images/logos/uwil-cms-dark.svg create mode 100644 resources/assets/images/logos/uwil-cms-light-icon.svg create mode 100644 resources/assets/images/logos/uwil-cms-light.svg create mode 100644 resources/assets/images/logos/uwil-report-dark.svg create mode 100644 resources/assets/images/logos/uwil-report-light.svg create mode 100644 resources/assets/images/logos/uwil-support-dark.svg create mode 100644 resources/assets/images/logos/uwil-support-light.svg delete mode 100644 resources/assets/images/supportweb_128.png create mode 100644 resources/favicons/back/android-icon-144x144.png create mode 100644 resources/favicons/back/android-icon-192x192.png create mode 100644 resources/favicons/back/android-icon-36x36.png create mode 100644 resources/favicons/back/android-icon-48x48.png create mode 100644 resources/favicons/back/android-icon-72x72.png create mode 100644 resources/favicons/back/android-icon-96x96.png create mode 100644 resources/favicons/back/apple-icon-114x114.png create mode 100644 resources/favicons/back/apple-icon-120x120.png create mode 100644 resources/favicons/back/apple-icon-144x144.png create mode 100644 resources/favicons/back/apple-icon-152x152.png create mode 100644 resources/favicons/back/apple-icon-180x180.png create mode 100644 resources/favicons/back/apple-icon-57x57.png create mode 100644 resources/favicons/back/apple-icon-60x60.png create mode 100644 resources/favicons/back/apple-icon-72x72.png create mode 100644 resources/favicons/back/apple-icon-76x76.png create mode 100644 resources/favicons/back/favicon-16x16.png create mode 100644 resources/favicons/back/favicon-32x32.png create mode 100644 resources/favicons/back/favicon.ico create mode 100644 resources/favicons/back/manifest.json create mode 100644 resources/favicons/back/ms-icon-144x144.png create mode 100644 resources/favicons/back/ms-icon-150x150.png create mode 100644 resources/favicons/back/ms-icon-310x310.png create mode 100644 resources/favicons/back/ms-icon-70x70.png create mode 100644 resources/favicons/front/android-icon-144x144.png create mode 100644 resources/favicons/front/android-icon-192x192.png create mode 100644 resources/favicons/front/android-icon-36x36.png create mode 100644 resources/favicons/front/android-icon-48x48.png create mode 100644 resources/favicons/front/android-icon-72x72.png create mode 100644 resources/favicons/front/android-icon-96x96.png create mode 100644 resources/favicons/front/apple-icon-114x114.png create mode 100644 resources/favicons/front/apple-icon-120x120.png create mode 100644 resources/favicons/front/apple-icon-144x144.png create mode 100644 resources/favicons/front/apple-icon-152x152.png create mode 100644 resources/favicons/front/apple-icon-180x180.png create mode 100644 resources/favicons/front/apple-icon-57x57.png create mode 100644 resources/favicons/front/apple-icon-60x60.png create mode 100644 resources/favicons/front/apple-icon-72x72.png create mode 100644 resources/favicons/front/apple-icon-76x76.png create mode 100644 resources/favicons/front/favicon-16x16.png create mode 100644 resources/favicons/front/favicon-32x32.png create mode 100644 resources/favicons/front/favicon.ico create mode 100644 resources/favicons/front/manifest.json create mode 100644 resources/favicons/front/ms-icon-144x144.png create mode 100644 resources/favicons/front/ms-icon-150x150.png create mode 100644 resources/favicons/front/ms-icon-310x310.png create mode 100644 resources/favicons/front/ms-icon-70x70.png delete mode 100644 resources/imageSources/supportweb.png delete mode 100644 resources/imageSources/supportweb.xcf delete mode 100644 resources/imageSources/supportweb_favico.png delete mode 100644 resources/js/vendor/ckeditor/.gitignore delete mode 100644 resources/js/vendor/ckeditor/LICENSE.md delete mode 100644 resources/js/vendor/ckeditor/README.md delete mode 100644 resources/js/vendor/ckeditor/build/ckeditor.js delete mode 100644 resources/js/vendor/ckeditor/build/ckeditor.js.LICENSE.txt delete mode 100644 resources/js/vendor/ckeditor/build/styles.css delete mode 100644 resources/js/vendor/ckeditor/build/translations/af.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ar.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ast.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/az.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/bg.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/bn.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/bs.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ca.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/cs.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/da.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/de-ch.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/de.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/el.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/en-au.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/en-gb.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/en.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/eo.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/es-co.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/es.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/et.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/eu.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/fa.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/fi.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/gl.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/gu.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/he.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/hi.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/hr.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/hu.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/id.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/it.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ja.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/jv.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/kk.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/km.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/kn.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ko.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ku.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/lt.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/lv.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ms.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/nb.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ne.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/nl.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/no.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/oc.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/pl.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/pt-br.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/pt.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ro.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ru.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/si.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/sk.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/sl.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/sq.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/sr-latn.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/sr.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/sv.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/th.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/tk.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/tr.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/tt.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ug.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/uk.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/ur.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/uz.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/vi.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/zh-cn.js delete mode 100644 resources/js/vendor/ckeditor/build/translations/zh.js delete mode 100644 resources/js/vendor/ckeditor/package-lock.json delete mode 100644 resources/js/vendor/ckeditor/package.json delete mode 100644 resources/js/vendor/ckeditor/sample/index.html delete mode 100644 resources/js/vendor/ckeditor/sample/styles.css delete mode 100644 resources/js/vendor/ckeditor/src/ckeditor.js delete mode 100644 resources/js/vendor/ckeditor/webpack.config.js delete mode 100644 resources/lang/en.json delete mode 100644 resources/lang/en/auth.php delete mode 100644 resources/lang/en/crud.php delete mode 100644 resources/lang/en/http-statuses.php delete mode 100644 resources/lang/en/models.php delete mode 100644 resources/lang/en/pagination.php delete mode 100644 resources/lang/en/passwords.php delete mode 100644 resources/lang/en/validation.php delete mode 100644 resources/lang/fr.json delete mode 100644 resources/lang/fr/auth.php delete mode 100644 resources/lang/fr/crud.php delete mode 100644 resources/lang/fr/enums.php delete mode 100644 resources/lang/fr/http-statuses.php delete mode 100644 resources/lang/fr/models.php delete mode 100644 resources/lang/fr/pagination.php delete mode 100644 resources/lang/fr/passwords.php delete mode 100644 resources/lang/fr/validation.php create mode 100644 resources/sass/back/_fonts.scss create mode 100644 resources/sass/back/app.scss create mode 100644 resources/sass/back/inputs/_color.scss create mode 100644 resources/sass/back/inputs/_wysiwyg.scss delete mode 100644 resources/sass/bo/base/_common.scss delete mode 100644 resources/sass/bo/bo.scss delete mode 100644 resources/sass/bo/utilities/_bootstrap-custom.scss delete mode 100644 resources/sass/bo/utilities/_mixins.scss delete mode 100644 resources/sass/bo/utilities/_variables.scss delete mode 100644 resources/sass/bo/vendor/_bootstrap.scss delete mode 100644 resources/sass/bo/vendor/_bootswatch.scss delete mode 100644 resources/sass/bo/vendor/_ckEditorContent.scss delete mode 100644 resources/sass/bo/vendor/_complement.scss delete mode 100644 resources/sass/bo/vendor/_glightbox.scss create mode 100644 resources/sass/common.scss create mode 100644 resources/sass/front/app.scss create mode 100644 resources/ts/app.tsx create mode 100644 resources/ts/back/Components/ApplicationLogo.tsx create mode 100644 resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx create mode 100644 resources/ts/back/Components/CustomSidebarTrigger.tsx create mode 100644 resources/ts/back/Components/FieldsetWrapper.tsx create mode 100644 resources/ts/back/Components/Filters/EnumFilter.tsx create mode 100644 resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx create mode 100644 resources/ts/back/Components/Filters/SwitchFilter.tsx create mode 100644 resources/ts/back/Components/FiltersWrapper.tsx create mode 100644 resources/ts/back/Components/GoToFrontView.tsx create mode 100644 resources/ts/back/Components/InputError.tsx create mode 100644 resources/ts/back/Components/Inputs/CompleteInputFile.tsx create mode 100644 resources/ts/back/Components/Inputs/EnumSelect.tsx create mode 100644 resources/ts/back/Components/Inputs/ImageCropper.tsx create mode 100644 resources/ts/back/Components/Inputs/ModelSelect.tsx create mode 100644 resources/ts/back/Components/Inputs/MultiSelect.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleColorPicker.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleDatePicker.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleNumber.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleString.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleSwitch.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleTextarea.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleVimeoId.tsx create mode 100644 resources/ts/back/Components/Inputs/SimpleYoutubeId.tsx create mode 100644 resources/ts/back/Components/Inputs/Slugifycator.tsx create mode 100644 resources/ts/back/Components/Inputs/StaticRouteSelect.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Image/Image.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Image/ImageButton.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Image/ImageInputs.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Image/ImageNodeView.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Image/ImageUtils.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Image/image.d.ts create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Link/Link.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Link/LinkButton.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Link/link.d.ts create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Link/tiptap-events.d.ts create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Replace/FindReplaceButton.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/ShortCuts/ShortcutBoundary.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Extensions/Table/TableButton.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/SimpleWysiwyg.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/Toolbar.tsx create mode 100644 resources/ts/back/Components/Inputs/Wysiwyg/tiptap.d.ts create mode 100644 resources/ts/back/Components/Layout/AppBreadcrumbs.tsx create mode 100644 resources/ts/back/Components/Layout/AppFooter.tsx create mode 100644 resources/ts/back/Components/Layout/AppHeader.tsx create mode 100644 resources/ts/back/Components/Layout/Settings/AppSettings.tsx create mode 100644 resources/ts/back/Components/Layout/Settings/Sections/Languages.tsx create mode 100644 resources/ts/back/Components/Layout/Settings/Sections/Themes.tsx create mode 100644 resources/ts/back/Components/Layout/Settings/SettingRegistry.tsx create mode 100644 resources/ts/back/Components/Layout/Sidebar/AppSidebar.tsx create mode 100644 resources/ts/back/Components/Layout/Sidebar/Links/ActivityLogs.tsx create mode 100644 resources/ts/back/Components/Layout/Sidebar/Links/Users.tsx create mode 100644 resources/ts/back/Components/Layout/Sidebar/SidebarRegistry.tsx create mode 100644 resources/ts/back/Components/ModelActions.tsx create mode 100644 resources/ts/back/Components/Pagination/PaginationCustom.tsx create mode 100644 resources/ts/back/Components/Pagination/PaginationPerPage.tsx create mode 100644 resources/ts/back/Components/Pagination/PaginationWrapper.tsx create mode 100644 resources/ts/back/Components/SoftdeleteWarning.tsx create mode 100644 resources/ts/back/Components/SubmitButton.tsx create mode 100644 resources/ts/back/Components/Table/DataTable.tsx create mode 100644 resources/ts/back/Components/Table/DataTableFilterButton.tsx create mode 100644 resources/ts/back/Components/Table/DataTableSearch.tsx create mode 100644 resources/ts/back/Components/Table/DetailsTable.tsx create mode 100644 resources/ts/back/Components/Table/RenderTranslationCell.tsx create mode 100644 resources/ts/back/Components/WordCounter.tsx create mode 100644 resources/ts/back/Layouts/AuthenticatedLayout.tsx create mode 100644 resources/ts/back/Layouts/GuestLayout.tsx create mode 100644 resources/ts/back/Pages/ActivityLogs/Index.tsx create mode 100644 resources/ts/back/Pages/ActivityLogs/Show.tsx create mode 100644 resources/ts/back/Pages/Auth/Login.tsx create mode 100644 resources/ts/back/Pages/Dashboard/Index.tsx create mode 100644 resources/ts/back/Pages/Errors/Default.tsx create mode 100644 resources/ts/back/Pages/Users/Create.tsx create mode 100644 resources/ts/back/Pages/Users/Edit.tsx create mode 100644 resources/ts/back/Pages/Users/Form.tsx create mode 100644 resources/ts/back/Pages/Users/Index.tsx create mode 100644 resources/ts/back/Pages/Users/Show.tsx create mode 100644 resources/ts/back/app.tsx create mode 100644 resources/ts/back/hooks/use-crud-messages.tsx create mode 100644 resources/ts/back/hooks/use-crud-submit.tsx create mode 100644 resources/ts/back/lib/actions.tsx create mode 100644 resources/ts/back/lib/enums.tsx create mode 100644 resources/ts/back/lib/filters.tsx create mode 100644 resources/ts/back/providers/ThemeProvider.tsx create mode 100644 resources/ts/back/types/activity-logs.d.ts create mode 100644 resources/ts/back/types/global.d.ts create mode 100644 resources/ts/back/types/i18n.d.ts delete mode 100644 resources/ts/bo/base/common.ts delete mode 100644 resources/ts/bo/bo.ts delete mode 100644 resources/ts/bo/components/BelongsToManyDropdownComponent.vue delete mode 100644 resources/ts/bo/components/CkEditorComponent.vue delete mode 100644 resources/ts/bo/components/ImageInputComponent.vue delete mode 100644 resources/ts/bo/components/InputTextAutoComponent.vue delete mode 100644 resources/ts/bo/components/InvoiceTasksComponent.vue delete mode 100644 resources/ts/bo/components/LabelSelectComponent.vue delete mode 100644 resources/ts/bo/components/MarkerLabelSelectComponent.vue delete mode 100644 resources/ts/bo/components/PasswordVisibility.vue delete mode 100644 resources/ts/bo/components/SearchBelongsToDropdownComponent.vue delete mode 100644 resources/ts/bo/components/WordCounterComponent.vue delete mode 100644 resources/ts/bo/pages/label_colorize.ts delete mode 100644 resources/ts/bo/utilities/bootstrap.ts delete mode 100644 resources/ts/bo/utilities/fontawesome.ts delete mode 100644 resources/ts/bo/utilities/glightbox.ts delete mode 100644 resources/ts/bo/utilities/jscolor.ts delete mode 100644 resources/ts/bo/utilities/metaCsrfToken.ts delete mode 100644 resources/ts/bo/utilities/vue-bo.ts create mode 100644 resources/ts/components/ui/accordion.tsx create mode 100644 resources/ts/components/ui/alert.tsx create mode 100644 resources/ts/components/ui/avatar.tsx create mode 100644 resources/ts/components/ui/badge.tsx create mode 100644 resources/ts/components/ui/breadcrumb.tsx create mode 100644 resources/ts/components/ui/button.tsx create mode 100644 resources/ts/components/ui/calendar.tsx create mode 100644 resources/ts/components/ui/card.tsx create mode 100644 resources/ts/components/ui/checkbox.tsx create mode 100644 resources/ts/components/ui/collapsible.tsx create mode 100644 resources/ts/components/ui/command.tsx create mode 100644 resources/ts/components/ui/dialog.tsx create mode 100644 resources/ts/components/ui/dropdown-menu.tsx create mode 100644 resources/ts/components/ui/form.tsx create mode 100644 resources/ts/components/ui/input.tsx create mode 100644 resources/ts/components/ui/label.tsx create mode 100644 resources/ts/components/ui/pagination.tsx create mode 100644 resources/ts/components/ui/popover.tsx create mode 100644 resources/ts/components/ui/scroll-area.tsx create mode 100644 resources/ts/components/ui/select.tsx create mode 100644 resources/ts/components/ui/separator.tsx create mode 100644 resources/ts/components/ui/sheet.tsx create mode 100644 resources/ts/components/ui/sidebar.tsx create mode 100644 resources/ts/components/ui/skeleton.tsx create mode 100644 resources/ts/components/ui/slider.tsx create mode 100644 resources/ts/components/ui/switch.tsx create mode 100644 resources/ts/components/ui/table.tsx create mode 100644 resources/ts/components/ui/textarea.tsx create mode 100644 resources/ts/components/ui/toast.tsx create mode 100644 resources/ts/components/ui/toaster.tsx create mode 100644 resources/ts/components/ui/tooltip.tsx create mode 100644 resources/ts/declarations.d.ts delete mode 100644 resources/ts/env.d.ts create mode 100644 resources/ts/front/Layouts/AppLayout.tsx create mode 100644 resources/ts/front/Pages/Errors/Default.tsx create mode 100644 resources/ts/front/Pages/Home.tsx create mode 100644 resources/ts/hooks/use-device-type.tsx create mode 100644 resources/ts/hooks/use-formated-value.tsx create mode 100644 resources/ts/hooks/use-in-view.tsx create mode 100644 resources/ts/hooks/use-inline-style.tsx create mode 100644 resources/ts/hooks/use-laravel-validation.tsx create mode 100644 resources/ts/hooks/use-mobile.tsx create mode 100644 resources/ts/hooks/use-recaptcha.tsx create mode 100644 resources/ts/hooks/use-string.tsx create mode 100644 resources/ts/hooks/use-toast.tsx create mode 100644 resources/ts/hooks/use-translations.tsx delete mode 100644 resources/ts/index.d.ts create mode 100644 resources/ts/lib/mapEnumOptions.tsx create mode 100644 resources/ts/lib/mapPivotOptions.tsx create mode 100644 resources/ts/lib/utils.tsx delete mode 100644 resources/ts/modules/asset.ts delete mode 100644 resources/ts/modules/bsTooltips.ts delete mode 100644 resources/ts/modules/colors.ts delete mode 100644 resources/ts/modules/parseLaravelErrorMessages.ts delete mode 100644 resources/ts/modules/route.ts delete mode 100644 resources/ts/modules/sweetalert.ts delete mode 100644 resources/ts/modules/sweetalertConfirm.ts delete mode 100644 resources/ts/modules/toast.ts delete mode 100644 resources/ts/modules/trans.ts create mode 100644 resources/ts/store/store-config.tsx create mode 100644 resources/ts/store/use-locale-store.tsx delete mode 100644 resources/ts/types/@sipec/vue3-tags-input/index.d.ts delete mode 100644 resources/ts/types/glightbox/index.d.ts create mode 100644 resources/ts/types/global.d.ts create mode 100644 resources/views/app.blade.php delete mode 100644 resources/views/auth/login.blade.php delete mode 100644 resources/views/auth/passwords/email.blade.php delete mode 100644 resources/views/auth/passwords/reset.blade.php create mode 100644 resources/views/back/app.blade.php delete mode 100644 resources/views/bo/modules/change-model-order-select.blade.php delete mode 100644 resources/views/bo/modules/change-model-order.blade.php delete mode 100644 resources/views/bo/modules/change-published-status.blade.php delete mode 100644 resources/views/bo/modules/pagination.blade.php delete mode 100644 resources/views/bo/modules/search-bar.blade.php delete mode 100644 resources/views/bo/modules/table-col-sorter-cell.blade.php delete mode 100644 resources/views/bo/modules/table-col-sorter.blade.php delete mode 100644 resources/views/bo/pages/brands/create.blade.php delete mode 100644 resources/views/bo/pages/brands/edit.blade.php delete mode 100644 resources/views/bo/pages/brands/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/brands/index.blade.php delete mode 100644 resources/views/bo/pages/brands/show.blade.php delete mode 100644 resources/views/bo/pages/companies/create.blade.php delete mode 100644 resources/views/bo/pages/companies/edit.blade.php delete mode 100644 resources/views/bo/pages/companies/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/companies/index.blade.php delete mode 100644 resources/views/bo/pages/credit_accounts/create.blade.php delete mode 100644 resources/views/bo/pages/credit_accounts/edit.blade.php delete mode 100644 resources/views/bo/pages/credit_accounts/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/credit_accounts/index.blade.php delete mode 100644 resources/views/bo/pages/credit_logs/create.blade.php delete mode 100644 resources/views/bo/pages/credit_logs/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/credit_logs/index.blade.php delete mode 100644 resources/views/bo/pages/documents/invoice.blade.php delete mode 100644 resources/views/bo/pages/informations/create.blade.php delete mode 100644 resources/views/bo/pages/informations/edit.blade.php delete mode 100644 resources/views/bo/pages/informations/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/informations/index.blade.php delete mode 100644 resources/views/bo/pages/invoices/create.blade.php delete mode 100644 resources/views/bo/pages/invoices/edit.blade.php delete mode 100644 resources/views/bo/pages/invoices/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/invoices/index.blade.php delete mode 100644 resources/views/bo/pages/invoices/show.blade.php delete mode 100644 resources/views/bo/pages/labels/create.blade.php delete mode 100644 resources/views/bo/pages/labels/edit.blade.php delete mode 100644 resources/views/bo/pages/labels/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/labels/index.blade.php delete mode 100644 resources/views/bo/pages/packages/create.blade.php delete mode 100644 resources/views/bo/pages/packages/edit.blade.php delete mode 100644 resources/views/bo/pages/packages/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/packages/index.blade.php delete mode 100644 resources/views/bo/pages/sites/create.blade.php delete mode 100644 resources/views/bo/pages/sites/edit.blade.php delete mode 100644 resources/views/bo/pages/sites/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/sites/index.blade.php delete mode 100644 resources/views/bo/pages/sites/show.blade.php delete mode 100644 resources/views/bo/pages/ticket_types/edit.blade.php delete mode 100644 resources/views/bo/pages/ticket_types/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/ticket_types/index.blade.php delete mode 100644 resources/views/bo/pages/tickets/create.blade.php delete mode 100644 resources/views/bo/pages/tickets/edit.blade.php delete mode 100644 resources/views/bo/pages/tickets/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/tickets/index.blade.php delete mode 100644 resources/views/bo/pages/tickets/show.blade.php delete mode 100644 resources/views/bo/pages/users/create.blade.php delete mode 100644 resources/views/bo/pages/users/edit.blade.php delete mode 100644 resources/views/bo/pages/users/form-inputs.blade.php delete mode 100644 resources/views/bo/pages/users/index.blade.php delete mode 100644 resources/views/bo/pages/users/settings.blade.php delete mode 100644 resources/views/bo/partials/inputs/bigint-foreign-id.blade.php delete mode 100644 resources/views/bo/partials/inputs/date.blade.php delete mode 100644 resources/views/bo/partials/inputs/int-color.blade.php delete mode 100644 resources/views/bo/partials/inputs/int-number.blade.php delete mode 100644 resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php delete mode 100644 resources/views/bo/partials/inputs/publish-dates.blade.php delete mode 100644 resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php delete mode 100644 resources/views/bo/partials/inputs/select-multiple-enum.blade.php delete mode 100644 resources/views/bo/partials/inputs/text-html.blade.php delete mode 100644 resources/views/bo/partials/inputs/text-list-items.blade.php delete mode 100644 resources/views/bo/partials/inputs/timestamp-datetime.blade.php delete mode 100644 resources/views/bo/partials/inputs/tinyint-boolean.blade.php delete mode 100644 resources/views/bo/partials/inputs/tinyint-enum.blade.php delete mode 100644 resources/views/bo/partials/inputs/varchar-multiline.blade.php delete mode 100644 resources/views/bo/partials/inputs/varchar-picture.blade.php delete mode 100644 resources/views/bo/partials/inputs/varchar.blade.php delete mode 100644 resources/views/breadcrumbs/breadcrumb-body.blade.php delete mode 100644 resources/views/breadcrumbs/breadcrumb-head.blade.php delete mode 100644 resources/views/breadcrumbs/breadcrumb-layout.blade.php delete mode 100644 resources/views/emails/mail-created-plain.blade.php delete mode 100644 resources/views/emails/mail-created.blade.php delete mode 100644 resources/views/emails/new-ticket.blade.php delete mode 100644 resources/views/emails/ticket-mention.blade.php delete mode 100644 resources/views/emails/ticket-update.blade.php delete mode 100644 resources/views/errors/401.blade.php delete mode 100644 resources/views/errors/403.blade.php delete mode 100644 resources/views/errors/404.blade.php delete mode 100644 resources/views/errors/419.blade.php delete mode 100644 resources/views/errors/429.blade.php delete mode 100644 resources/views/errors/500.blade.php delete mode 100644 resources/views/errors/503.blade.php delete mode 100644 resources/views/errors/illustrated-layout.blade.php delete mode 100644 resources/views/errors/layout.blade.php delete mode 100644 resources/views/errors/minimal.blade.php delete mode 100644 resources/views/estimations/create.blade.php delete mode 100644 resources/views/estimations/form-inputs.blade.php delete mode 100644 resources/views/estimations/pendingCard.blade.php create mode 100644 resources/views/front/app.blade.php delete mode 100644 resources/views/layout/app.blade.php delete mode 100644 resources/views/layout/footer.blade.php delete mode 100644 resources/views/layout/nav.blade.php delete mode 100644 resources/views/modules/flash-messages.blade.php delete mode 100644 resources/views/modules/input-error.blade.php delete mode 100644 resources/views/modules/script-constants.blade.php delete mode 100644 resources/views/vendor/mail/html/header.blade.php delete mode 100644 routes/api.php create mode 100644 routes/back/web-back.php delete mode 100644 routes/breadcrumbs-bo.php create mode 100644 routes/breadcrumbs/front.php delete mode 100644 routes/console.php delete mode 100644 routes/web-bo.php create mode 100644 routes/web-front.php create mode 100644 storage/app/private/.gitignore delete mode 100644 storage/samlidp/config.php create mode 100644 tailwind.config.js delete mode 100644 tests/CreatesApplication.php delete mode 100644 tests/Feature/ExampleTest.php delete mode 100644 tests/TestCase.php delete mode 100644 tests/Unit/ExampleTest.php diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index f42fae3..0000000 --- a/.browserslistrc +++ /dev/null @@ -1,5 +0,0 @@ -# Browsers that we support - -last 3 version -> 0.3% -not dead # no browsers without security updates diff --git a/.dockerignore b/.dockerignore index 7476aa0..c0e2501 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,10 @@ -.git -*.md \ No newline at end of file +.git/ +.gitlab/ +.gitlab-ci.yml +*.md +.vscode/ +auth.json +Dockerfile +manifest.yaml +node_modules/ +production-resources.yaml diff --git a/.editorconfig b/.editorconfig index 2e1b261..1de8afb 100644 --- a/.editorconfig +++ b/.editorconfig @@ -17,5 +17,8 @@ indent_size = 2 [docker-compose.yml] indent_size = 4 -[*.vue] +[*.scss] +indent_size = 2 + +[*.{tsx,ts,cjs}] indent_size = 2 diff --git a/.env.example b/.env.example index 4d94ae9..c0660ea 100644 --- a/.env.example +++ b/.env.example @@ -4,44 +4,62 @@ APP_KEY= APP_DEBUG=true APP_URL=http://localhost +APP_LOCALE=en +APP_FALLBACK_LOCALE=en +APP_FAKER_LOCALE=en_US + +APP_MAINTENANCE_DRIVER=file +# APP_MAINTENANCE_STORE=database + +# PHP_CLI_SERVER_WORKERS=4 + +BCRYPT_ROUNDS=12 + LOG_CHANNEL=stack +LOG_STACK=single LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug -DB_CONNECTION=mysql -DB_HOST=127.0.0.1 -DB_PORT=3306 -DB_DATABASE=laravel -DB_USERNAME=root -DB_PASSWORD= +DB_CONNECTION=sqlite +# DB_HOST=127.0.0.1 +# DB_PORT=3306 +# DB_DATABASE=laravel +# DB_USERNAME=root +# DB_PASSWORD= -BROADCAST_DRIVER=log -CACHE_DRIVER=file -FILESYSTEM_DISK=local -QUEUE_CONNECTION=sync -SESSION_DRIVER=file +SESSION_DRIVER=database SESSION_LIFETIME=120 +SESSION_ENCRYPT=false +SESSION_PATH=/ +SESSION_DOMAIN=null -MAIL_MAILER=smtp -MAIL_HOST=smtp.mailtrap.io +BROADCAST_CONNECTION=log +FILESYSTEM_DISK=local +QUEUE_CONNECTION=database + +CACHE_STORE=database +# CACHE_PREFIX= + +MEMCACHED_HOST=127.0.0.1 + +REDIS_CLIENT=phpredis +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=log +MAIL_SCHEME=null +MAIL_HOST=127.0.0.1 MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null -MAIL_ENCRYPTION=null -MAIL_FROM_ADDRESS=noreply-sw@ldc.fr +MAIL_FROM_ADDRESS="hello@example.com" MAIL_FROM_NAME="${APP_NAME}" -MAIL_LIST_SERVICEWEB=digital@ldc.fr -MAIL_ADMIN=digital@ldc.fr -# Sentry -SENTRY_LARAVEL_DSN= +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false -# UWIL ADMIN SECURE -# - LIST SEPARATED WITH ',' (Required) -UWIL_ADMIN_SECURE_CIDR_LIST="" -# - LIST SEPARATED WITH ',' (Optional) -UWIL_ADMIN_SECURE_CIDR_PROJECT_ALLOWED_LIST= - -# GITLAB API -GITLAB_URL= -GITLAB_TOKEN= +VITE_APP_NAME="${APP_NAME}" diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..98483d6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,4 @@ +node_modules +public +vendor +resources/ts/components/ui/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..91e2e45 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,74 @@ +module.exports = { + parser: "@typescript-eslint/parser", + parserOptions: { + ecmaVersion: 2020, + sourceType: "module", + ecmaFeatures: { + jsx: true, + }, + project: "./tsconfig.json", + }, + settings: { + react: { + version: "detect", + }, + "import/resolver": { + typescript: { + project: "./tsconfig.json", + }, + alias: { + map: [ + ["@", "./resources/ts"], + ["&", "./resources/assets"], + ], + extensions: [".ts", ".tsx", ".js", ".jsx"], + }, + }, + }, + env: { + browser: true, + es2021: true, + node: true, + }, + extends: [ + "eslint:recommended", + "plugin:react/recommended", + "plugin:jsx-a11y/recommended", + "plugin:react-hooks/recommended", + "plugin:@typescript-eslint/recommended", + "airbnb", + "airbnb/hooks", + "plugin:prettier/recommended", + ], + plugins: [ + "react", + "react-hooks", + "jsx-a11y", + "@typescript-eslint", + "prettier", + ], + rules: { + "react/jsx-filename-extension": ["error", { extensions: [".tsx", ".jsx"] }], + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + "react/require-default-props": "off", + "import/extensions": [ + "error", + "ignorePackages", + { + ts: "never", + tsx: "never", + js: "never", + jsx: "never", + }, + ], + "import/order": "off", + "prettier/prettier": "error", + "no-console": [ + "warn", + { + allow: ["warn", "error"], + }, + ], + }, +}; diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 53398ab..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "env": { - "browser": true, - "es2021": true - }, - "extends": [ - "eslint:recommended", - "plugin:vue/vue3-strongly-recommended", - "@vue/eslint-config-typescript" - ], - "overrides": [ - { - "files": ["*.ts", "*.vue"], - "rules": { - "no-undef": "off" - } - }, - { - "files": ["*.vue"], - "rules": { - "indent": "off" - } - } - ], - "parser": "vue-eslint-parser", - "parserOptions": { - "parser": "@typescript-eslint/parser", - "ecmaVersion": "latest", - "sourceType": "module" - }, - "plugins": ["vue", "@typescript-eslint"], - "ignorePatterns": ["webpack.mix.js", "**/vendor/*.js", "**/vendor/**/*.js"], - "rules": { - "indent": ["error", 4, { "SwitchCase": 1 }], - "linebreak-style": ["error", "unix"], - "quotes": ["error", "double"], - "semi": ["error", "always"], - "vue/script-indent": ["error", 2, { "baseIndent": 0, "switchCase": 1 }], - "vue/one-component-per-file": "off" - }, - "settings": { - "import/resolver": { - "node": { - "extensions": [".js", ".vue", ".ts", ".d.ts"] - }, - "alias": { - "extensions": [".vue", ".js", ".ts", ".scss", ".d.ts"], - "map": [ - ["~", "./resources/assets"], - ["@", "./node_modules"] - ] - } - } - } -} diff --git a/.gitignore b/.gitignore index 59bbdd9..d75f734 100644 --- a/.gitignore +++ b/.gitignore @@ -1,28 +1,12 @@ +*.log .env .env.backup .env.production -.phpunit.result.cache -.stylelintcache -/.fleet -/.idea -/.phpunit.cache -/.vscode +/auth.json +/.npmrc /node_modules /public/build -/public/cache -/public/hot -/public/sitemap.xml /public/storage /storage/*.key +/storage/pail /vendor -auth.json -docker-compose.override.yml -Homestead.json -Homestead.yaml -npm-debug.log -yarn-error.log -storage/samlidp/* -.npmrc -.zshrc -.npm/ -.composer/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 219a6c1..1b009f4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,24 +1,23 @@ include: - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'lint/lint.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'security/security.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'build/build.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'test/test.yml' - - project: 'ldc-web/shared-ci' - ref: 'main' - file: 'deploy/deploy.yml' - + - project: "ldc-web/shared-ci" + ref: "main" + file: "lint/lint.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "security/security.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "build/docker-multistage.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "test/test.yml" + - project: "ldc-web/shared-ci" + ref: "main" + file: "deploy/deploy.yml" stages: - - lint - - security - - build - - test - - deploy + - lint + - security + - build + - test + - deploy diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..8c332e2 --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,3 @@ +#!/bin/sh + +npx --no -- commitlint --config node_modules/@uwil/husky-config/commitlint.config.cjs --edit $1 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..2df9ba5 --- /dev/null +++ b/.npmrc @@ -0,0 +1,5 @@ +@ldc-web:registry=https://lab.s-web.fr/api/v4/packages/npm/ +//lab.s-web.fr/api/v4/packages/npm/:_authToken=glpat-Td7iwL19ZszGUMosPyNQ + +@uwil:registry=https://lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/ +//lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/:_authToken=glpat-Td7iwL19ZszGUMosPyNQ \ No newline at end of file diff --git a/.stylelintrc.json b/.stylelintrc.json index dc30b0b..f23ce68 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -4,13 +4,8 @@ "stylelint-config-sass-guidelines", "stylelint-config-idiomatic-order" ], - "plugins": [ - "stylelint-scss" - ], - "files": [ - "**/*.css", - "**/*.scss" - ], + "plugins": ["stylelint-scss"], + "files": ["**/*.css", "**/*.scss"], "ignoreFiles": [ "**/vendor/*.css", "**/vendor/**/*.css", @@ -18,8 +13,12 @@ "**/vendor/**/*.scss", "**/vendor/*.sass", "**/vendor/**/*.sass", - "**/vendor/*.less", - "**/vendor/**/*.less" + "**/packages/*.css", + "**/packages/**/*.css", + "**/packages/*.scss", + "**/packages/**/*.scss", + "**/packages/*.sass", + "**/packages/**/*.sass" ], "customSyntax": "postcss-scss", "rules": { @@ -29,8 +28,6 @@ "order/properties-alphabetical-order": null, "max-nesting-depth": 5, "selector-max-compound-selectors": 5, - "declaration-colon-newline-after": null, - "value-list-comma-newline-after": null, "scss/double-slash-comment-empty-line-before": [ "always", { @@ -40,6 +37,20 @@ "inside-block" ] } + ], + "at-rule-no-unknown": null, + "scss/at-rule-no-unknown": [ + true, + { + "ignoreAtRules": [ + "tailwind", + "apply", + "variants", + "responsive", + "screen", + "layer" + ] + } ] } } diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..f8e8acd --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,19 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "rvest.vs-code-prettier-eslint", + "onecentlin.laravel-extension-pack", + "johnpapa.vscode-peacock", + "xdebug.php-debug", + "neilbrayfield.php-docblocker", + "bmewburn.vscode-intelephense-client", + "valeryanm.vscode-phpsab", + "syler.sass-indented", + "sibiraj-s.vscode-scss-formatter", + "mrmlnc.vscode-scss", + "stylelint.vscode-stylelint", + "vue.vscode-typescript-vue-plugin", + "wscats.vue", + "misterj.vue-volar-extention-pack" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..51de9ef --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,48 @@ +{ + // Utilisez IntelliSense pour en savoir plus sur les attributs possibles. + // Pointez pour afficher la description des attributs existants. + // Pour plus d'informations, visitez : https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "Listen for Xdebug", + "type": "php", + "request": "launch", + "port": 9003 + }, + { + "name": "Launch currently open script", + "type": "php", + "request": "launch", + "program": "${file}", + "cwd": "${fileDirname}", + "port": 0, + "runtimeArgs": [ + "-dxdebug.start_with_request=yes" + ], + "env": { + "XDEBUG_MODE": "debug,develop", + "XDEBUG_CONFIG": "client_port=${port}" + } + }, + { + "name": "Launch Built-in web server", + "type": "php", + "request": "launch", + "runtimeArgs": [ + "-dxdebug.mode=debug", + "-dxdebug.start_with_request=yes", + "-S", + "localhost:0" + ], + "program": "", + "cwd": "${workspaceRoot}", + "port": 9003, + "serverReadyAction": { + "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started", + "uriFormat": "http://localhost:%s", + "action": "openExternally" + } + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 32e834d..03ebc78 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,23 +1,26 @@ { "workbench.colorCustomizations": { - "activityBar.activeBorder": "#621e41", - "activityBar.activeBackground": "#3371a9", - "activityBar.background": "#3371a9", - "activityBar.foreground": "#e7e7e7", - "activityBar.inactiveForeground": "#e7e7e799", - "activityBarBadge.background": "#621e41", - "activityBarBadge.foreground": "#e7e7e7", - "commandCenter.border": "#e7e7e799", - "sash.hoverBorder": "#3371a9", - "statusBar.background": "#275782", - "statusBar.foreground": "#e7e7e7", - "statusBarItem.hoverBackground": "#3371a9", - "statusBarItem.remoteBackground": "#275782", - "statusBarItem.remoteForeground": "#e7e7e7", - "titleBar.activeBackground": "#275782", - "titleBar.activeForeground": "#e7e7e7", - "titleBar.inactiveBackground": "#27578299", - "titleBar.inactiveForeground": "#e7e7e799" + "activityBar.activeBackground": "#e6f0f8", + "activityBar.activeBorder": "#1a1d02", + "activityBar.background": "#e6f0f8", + "activityBar.foreground": "#15202b", + "activityBar.inactiveForeground": "#15202b99", + "activityBarBadge.background": "#dc82b4", + "activityBarBadge.foreground": "#15202b", + "sash.hoverBorder": "#e6f0f8", + "statusBar.background": "#bdd7ee", + "statusBar.foreground": "#15202b", + "statusBarItem.hoverBackground": "#94bee4", + "statusBarItem.remoteBackground": "#bdd7ee", + "statusBarItem.remoteForeground": "#15202b", + "titleBar.activeBackground": "#bdd7ee", + "titleBar.activeForeground": "#15202b", + "titleBar.inactiveBackground": "#bdd7ee99", + "titleBar.inactiveForeground": "#15202b99", + "commandCenter.border": "#15202b99" }, - "peacock.remoteColor": "#275782", -} + "peacock.remoteColor": "#BDD7EE", + "intelephense.environment.phpVersion": "8.3.0", + "intelephense.completion.fullyQualifyGlobalConstantsAndFunctions": true, + "intelephense.phpdoc.useFullyQualifiedNames": true +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 6aedbcc..cac280b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,99 +1,12 @@ -### 25.04.2023 -> 1.4.0 -- Add ticket types management -- Fix AutoClose Jobs -- Fix Email notifications on private messages -### 04.2023 -> 1.3.0 -- Update Status Enum -- Update TicketStatusChanged event -- Update TicketStatus Changed messages -- Add DutyHours -- Add Informations -### 15.12.2022 -- Add Sentry -### 12.10.2022 -> 1.2.3 -- Hotfixed regular users could not create tickets anymore +# Changelog -### 01.07.2022 -> 1.2.2 -- Fixed CSP directives -- Fixed multiples bugs -- Fixed View sur crédits -- Fixed file create -- Changed estimation can be 0.125 days -- Fixed files view -- Added ticket link on credit log +All notable changes to `laravel-project` will be documented in this file. -### 09.06.2022 -> 1.2.1 -- CSP rules enforce -- Bug fixes CSP issues -### 31.05.2022 -> 1.2.0 -- Ajout de la fonctionnalitée d'estimations +- The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), +- This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), +- Commits respect [Conventionnal commits](https://www.conventionalcommits.org/en/v1.0.0/) & use [Gitmoji](https://gitmoji.dev/). -### 26.05.2022 -> 1.1.0 -- Correction de regression sur macro planning -- Correction de regression sur droits planning -- Ajout de fonctionnalité Label -- Ajout de fonctionalité assigner un ticket -- Rafactorisation du code ticket -- Refonte de tickets.index -- Ajout CSP report URI -- Remove external JS and CSS dependencies -- Use Vuejs runtime -- Add xss sanitizer -- Normalize Laravel mix + add cleaner -- Update npm deps -- Upgrade bootswatch theme -- ADD Secure HEADERS +## **[v1.0.0] - 01/01/2026** -### 23.05.2022 -> 1.0.9 -- Correction d'erreurs multiples -- Fonctionnalité macro planning -- Mises à jour des dépendances - -### 15.03.2022 -- le presse-papier du planning n'est plus vidé après un collage - -### 08.03.2022 -> 1.0.8 -- passage à 8 slots dans le planning - -### 03.01.2022 -> 1.0.7 -- nouveau stockage pour le planning - -### 01.12 -> 1.0.6 -- Ajout d'un nouveau type de Ticket : Demande relative aux Newsletters - -### 25.10 -> 1.0.5 -- Ajout d'un nouveau type de Ticket : Demande relative aux BR, ceci afin de faire une demande - qui concernerait les bons de réduction -- Correction Plannings -- Correction Crud -- Correction de mails relatifs au ticket pour y inclure le bon type de ticket - - -### 30.09 -> 1.0.4 -- Correction lors de l'apperçu des messages -- Correction lors de message sur affichage (auteur message) -- Modification de la couleur BG sur label statut du ticket -- Modification de l'url précédent sur ticket.show (garde en mémoire le filtre multi projet) -- Modification Tri par défaut sur ticket id DESC - -### 29.09 -> 1.0.3 -- Correction des avertissements avant cloture des tickets -- Ajout d'un bouton pour les utilisateurs afin de réouvrir un ticket clos -- Ajout de messages de confirmation sur les actions de tickets - -### 29.09 -> 1.0.2 -- Modification Un ticket qui est marqué comme traité ou en production depuis plus de 15 jours et sans activité sera automatiquement clos et archivé -- Modification Il n'est désomrais plus possible de répondre à un ticket archivé dans touts les cas -- Nettoyage -- Correction des noms qui ne s'affichaient pas correctement sur les tickets - -### 01.08 -> 0.0.1 -- Ajout d'un algo de charge -- Ajout changement de mot de passe -- Ajout messages http explicites -- Correction couleurs - -#### 30.07 -- Ajout changelog -- Ajout footer infos -- Correction couleurs +### Added +- feat: 🎉 working project diff --git a/Dockerfile b/Dockerfile index a056fdb..8c03f76 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,49 @@ -FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/ldcweb-production-8.3:170625-101047 -COPY --chown=www-data:www-data . /app/srcs +FROM composer:2.8 AS vendor + +ARG GITLAB_USER +ARG GITLAB_PASSWORD + +COPY database/ database/ + +COPY composer.json composer.json +COPY composer.lock composer.lock + +RUN composer config gitlab-token.lab.s-web.fr ${GITLAB_USER} ${GITLAB_PASSWORD} +RUN composer install \ + --ignore-platform-reqs \ + --no-interaction \ + --no-plugins \ + --no-scripts \ + --no-dev \ + --prefer-dist + +FROM node:20.18 AS frontend + +ARG GITLAB_PASSWORD + +RUN mkdir -p /app/public/build + +COPY package*.json postcss.config.js tailwind.config.js tsconfig.json vite.config.ts .eslintrc.json .stylelintrc.json /app/ +COPY resources/ /app/resources/ +COPY --from=vendor /app/vendor/ /app/vendor/ +WORKDIR /app +RUN npm config set @ldc-web:registry https://lab.s-web.fr/api/v4/packages/npm/ +RUN npm config set -- '//lab.s-web.fr/api/v4/packages/npm/:_authToken' "${GITLAB_PASSWORD}" +RUN npm config set @uwil:registry https://lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/ +RUN npm config set -- '//lab.s-web.fr/api/v4/groups/ldc-web/-/packages/npm/:_authToken' "${GITLAB_PASSWORD}" +RUN npm ci --no-audit --no-fund --loglevel=error && npm run prod + + +FROM registry.s-web.fr/ldc-web/projets/ldc-web-images-docker/uwil-production-8.5:${PHP_8_5_TAG} + +ARG USER=www-data + +COPY --chown=${USER}:${USER} . /app/srcs +COPY --chown=${USER}:${USER} ./resources/favicons/front/ /app/srcs/public/ +COPY --chown=${USER}:${USER} ./resources/favicons/back/ /app/srcs/public/favicon-back/ +COPY --from=vendor --chown=${USER}:${USER} /app/vendor/ /app/srcs/vendor/ +COPY --from=frontend --chown=${USER}:${USER} /app/public/build/ /app/srcs/public/build/ + USER root RUN chmod -R 755 /app/srcs/storage -USER www-data +USER ${USER} diff --git a/IDEAS.md b/IDEAS.md deleted file mode 100644 index f2b8d87..0000000 --- a/IDEAS.md +++ /dev/null @@ -1,34 +0,0 @@ -Algorithme charge de travail ticket - - -delais 7 jours 168h -travaillé 5 jours 37h -temps tickets 1 jours 7.4h - -personnes 4 (TpP) 3.7h / semaine * prs - -délais moyen ticket (Dmt) 0.75h - -délais max attente pour 1 ticket (Dam) 7jours - -niveaux de charge 4: - faible - - stable - - élevée - - saturation - -états tickets(Et) : - nouveaux (non traités) - - en attente (charge pendante) - - traités - -Algo : linéaire - -TpP : 3.7h -P : 4 - -Et(nvx) * Dam - -Nv Charge = (P * TpP) / (Et(nvx) * Dam) - (P * TpP) / (Et(nvx) * DmT) - (Et(att) * DmT) - - -Si nv Charge < 0 => saturation - diff --git a/README.md b/README.md index a64521d..1a49dcd 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,33 @@ -# UWIL Support +# Table of contents -PROD : support.uwil.fr +- [Table of contents](#table-of-contents) +- [Frameworks, Platforms and Libraries](#frameworks-platforms-and-libraries) +- [Documentation](#documentation) +- [Changelog](#changelog) +- [Copyright and License](#copyright-and-license) -RE7 : support-web.re7-s-web.fr +# Frameworks, Platforms and Libraries -## Gitlab Intégration -Le token de groupe pour l'intégration est valable 11 mois + -Il faut le renouveler ici : https://lab.s-web.fr/groups/ldc-web/projets/-/settings/access_tokens et le nommer SW Intégration +[![SASS](https://img.shields.io/badge/SASS-hotpink.svg?style=for-the-badge&logo=SASS&logoColor=white)](https://sass-lang.com/) +[![TailwindCSS](https://img.shields.io/badge/tailwindcss-%2338B2AC.svg?style=for-the-badge&logo=tailwind-css&logoColor=white)](https://tailwindcss.com/) +[![Vite](https://img.shields.io/badge/vite-%23646CFF.svg?style=for-the-badge&logo=vite&logoColor=white)](https://vite.dev/) +[![PHP](https://img.shields.io/badge/php-%23777BB4.svg?style=for-the-badge&logo=php&logoColor=white)](https://www.php.net/) +[![Laravel](https://img.shields.io/badge/laravel-%23FF2D20.svg?style=for-the-badge&logo=laravel&logoColor=white)](https://laravel.com/docs/master) -Role : Guest -Scope : api +# Documentation -## TODO +```php +composer i/npm i +``` -- App\Models\Message:booted(): investigate why this make errors on prod, +# Changelog + +Latest version v1.0.0. + +See the [CHANGELOG.md](CHANGELOG.md) file for details. + +# Copyright and License + +Copyright (c) 2025 and beyond UWIL. diff --git a/app/Casts/HtmlColor.php b/app/Casts/HtmlColor.php deleted file mode 100644 index de6e071..0000000 --- a/app/Casts/HtmlColor.php +++ /dev/null @@ -1,56 +0,0 @@ -zeropad(dechex($value), 6)}"; - } - - /** - * Prepare the given value for storage. - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $key - * @param mixed $value - * @param array $attributes - * @return integer - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceAfterLastUsed - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed - */ - public function set($model, $key, $value, $attributes) - { - return \intval(hexdec(ltrim($value, '#'))); - } - - /** - * Pad with zeros a numeric string - * - * @param string $num - * @param integer $lim - * @return string - */ - private function zeropad(string $num, int $lim): string - { - return (strlen($num) >= $lim) ? $num : $this->zeropad("0" . $num, $lim); - } -} diff --git a/app/Console/Commands/AutoCloseOldTickets.php b/app/Console/Commands/AutoCloseOldTickets.php deleted file mode 100644 index ab5686f..0000000 --- a/app/Console/Commands/AutoCloseOldTickets.php +++ /dev/null @@ -1,38 +0,0 @@ -info('Running the Job, this could take some time.'); - $job = new JobsAutoCloseOldTickets(); - $job->handle(); - $this->info('Job completed'); - - return 0; - } -} diff --git a/app/Console/Commands/CreateUser.php b/app/Console/Commands/CreateUser.php deleted file mode 100644 index e2fa154..0000000 --- a/app/Console/Commands/CreateUser.php +++ /dev/null @@ -1,168 +0,0 @@ -name = null; - $this->addName(); - - $this->email = null; - $this->addEmail(); - - $this->password = null; - $this->addPassword(); - - $this->role = null; - $this->addRole(); - - $user = new User([ - 'name' => $this->name, - 'email' => $this->email, - 'password' => $this->password, - 'role' => $this->role - ]); - $user->saveOrFail(); - - $this->info('User created.'); - return 0; - } - - /** - * Add a firstname to the user. - * - * @return void - */ - private function addName(): void - { - while (is_null($this->name)) { - try { - $tmp = $this->ask('Type the wanted user name', 'Admin'); - $validator = Validator::make(['name' => $tmp], [ - 'name' => 'required|min:3|max:255' - ]); - $validator->validate(); - $this->name = $tmp; - } catch (ValidationException $e) { - $this->error(sprintf( - 'Please provide a valid name %s', - \implode(',', collect($e->errors())->flatten()->all()) - )); - continue; - } //end try - }; //end while - } - - /** - * Add an email to the user. - * - * @return void - */ - private function addEmail(): void - { - while (is_null($this->email)) { - try { - $tmp = $this->ask('Type the wanted user email', 'digital@ldc.fr'); - $validator = Validator::make(['email' => $tmp], [ - 'email' => 'required|unique:users,email|email:rfc,dns' - ]); - $validator->validate(); - $this->email = $tmp; - } catch (ValidationException $e) { - $this->error(sprintf( - 'Please provide a valid email %s', - \implode(',', collect($e->errors())->flatten()->all()) - )); - continue; - } //end try - }; //end while - } - - /** - * Add a password to the user. - * - * @return void - */ - private function addPassword(): void - { - while ( - ($this->password = $this->secret( - (!\is_null($this->password) ? 'Failed to confirm, ' : '') . 'Type the wanted user password' - )) !== $this->secret('Confirm the password') - ) { - continue; - }; //end while - } - - /** - * Add a password to the user. - * - * @return void - */ - private function addRole(): void - { - while (is_null($this->role)) { - $tmp = $this->confirm('Is the user an admin?'); - $validator = Validator::make(['role' => $tmp], [ - 'role' => 'required|boolean' - ]); - $validator->validate(); - $this->role = $tmp ? RoleEnum::admin : RoleEnum::client; - }; - } -} diff --git a/app/Console/Commands/ExportTicketsState.php b/app/Console/Commands/ExportTicketsState.php deleted file mode 100644 index f2cecdd..0000000 --- a/app/Console/Commands/ExportTicketsState.php +++ /dev/null @@ -1,38 +0,0 @@ -info('Running the Job, this could take some time.'); - $job = new JobsExportTicketsState(); - $job->handle(); - $this->info('Job completed'); - - return 0; - } -} diff --git a/app/Console/Commands/TestMail.php b/app/Console/Commands/TestMail.php deleted file mode 100644 index 0bcbec8..0000000 --- a/app/Console/Commands/TestMail.php +++ /dev/null @@ -1,36 +0,0 @@ -to('digital@ldc.fr')->subject('Test Email'); - }); - return 0; - } -} diff --git a/app/Console/Commands/UpdateGitlabDatas.php b/app/Console/Commands/UpdateGitlabDatas.php deleted file mode 100644 index 27da89a..0000000 --- a/app/Console/Commands/UpdateGitlabDatas.php +++ /dev/null @@ -1,307 +0,0 @@ -option('is-cron'); - - $groupId = 23; - - $this->updateProjectsByGroup($groupId); - - $this->updateLabelsByGroup($groupId); - - $projects = GitlabProjects::all(); - - foreach ($projects as $project) { - $this->updateMilestonesByProject($project); - $this->updateIssuesByProject($project, $isCron); - } - - $this->syncTicketStatus(); - } - - /** - * updateProjectsByGroup function - * - * @param integer $groupId - * @return void - */ - private function updateProjectsByGroup(int $groupId): void - { - $allProjects = []; - $page = 1; - do { - $projects = GitLab::groups()->projects($groupId, [ - 'order_by' => 'created_at', - 'sort' => 'asc', - 'per_page' => 100, - 'page' => $page, - 'include_subgroups' => true - ]); - $allProjects = array_merge($allProjects, $projects); - $page++; - } while (!empty($projects)); - - $this->info(sprintf( - "Fetched %d projects in group %d.", - count($allProjects), - $groupId - )); - - foreach ($allProjects as $project) { - GitlabProjects::upsert( - [ - 'name' => $project['name'], - 'url' => $project['web_url'], - 'is_archived' => $project['archived'], - 'gitlab_id' => $project['id'] - ], - ['gitlab_id'] - ); - } - - $this->info("Gitlab Projects upsert complete."); - } - - /** - * updateLabelsByGroup function - * - * @param integer $groupId - * @return void - */ - private function updateLabelsByGroup(int $groupId): void - { - $allLabels = []; - $page = 1; - do { - $labels = GitLab::groups()->labels($groupId, [ - 'per_page' => 100, - 'page' => $page, - ]); - $allLabels = array_merge($allLabels, $labels); - $page++; - } while (!empty($labels)); - - $this->info(sprintf( - "Fetched %d labels in group %d.", - count($allLabels), - $groupId - )); - - foreach ($allLabels as $project) { - GitlabLabels::upsert( - [ - 'name' => $project['name'], - 'gitlab_id' => $project['id'] - ], - ['gitlab_id'] - ); - } - - $this->info("Gitlab labels upsert complete."); - } - - /** - * updateIssuesByProject function - * - * @param GitlabProjects $project - * @param boolean $isCron - * @return void - */ - private function updateIssuesByProject(GitlabProjects $project, bool $isCron = false): void - { - $projectId = $project->gitlab_id; - $allIssues = []; - $page = 1; - - do { - $params = [ - 'order_by' => 'created_at', - 'sort' => 'asc', - 'per_page' => 100, - 'page' => $page, - 'state' => 'all', - ]; - if ($isCron) { - $params = array_merge($params, ['updated_after' => now()->subDay()]); - } - $issues = GitLab::projects()->issues($projectId, $params); - $allIssues = array_merge($allIssues, $issues); - $page++; - } while (!empty($issues)); - - $this->info(sprintf( - "Fetched %d issues in project %d.", - count($allIssues), - $projectId - )); - - foreach ($allIssues as $issue) { - GitlabIssues::upsert( - [ - 'title' => $issue['title'], - 'url' => $issue['web_url'], - 'estimate_time' => $issue['time_stats']['time_estimate'] ?? 0, - 'spent_time' => $issue['time_stats']['total_time_spent'] ?? 0, - 'is_closed' => $issue['state'] === 'closed', - 'gitlab_id' => $issue['id'], - 'gitlab_iid' => $issue['iid'], - 'milestone_iid' => $issue['milestone']['iid'] ?? null, - 'gitlab_project_id' => $projectId, - 'g_created_at' => Carbon::parse($issue['created_at'])->format('Y-m-d'), - 'g_updated_at' => Carbon::parse($issue['updated_at'])->format('Y-m-d'), - 'g_closed_at' => !is_null($issue['closed_at']) - ? Carbon::parse($issue['closed_at'])->format('Y-m-d') - : null, - 'g_due_date' => !is_null($issue['due_date']) - ? Carbon::parse($issue['due_date'])->format('Y-m-d') - : null - ], - ['gitlab_id'] - ); - - $issueModel = GitlabIssues::where('gitlab_id', $issue['id'])->firstOrFail(); - $labelIds = []; - - foreach ($issue['labels'] as $labelName) { - $label = Cache::remember("gitlab_label_{$labelName}", 300, function () use ($labelName) { - return GitlabLabels::where('name', $labelName)->first(); - }); - - if ($label) { - $labelIds[] = $label; - } - } - - $issueModel->gitlabLabels()->sync($labelIds); - }//end foreach - - $this->info("Gitlab issues upsert complete."); - } - - /** - * updateMilestonesByProject function - * - * @param GitlabProjects $project - * @return void - */ - private function updateMilestonesByProject(GitlabProjects $project): void - { - $projectId = $project->gitlab_id; - $allMilestones = []; - $page = 1; - - do { - $milestones = GitLab::milestones()->all($projectId, [ - 'per_page' => 100, - 'page' => $page - ]); - $allMilestones = array_merge($allMilestones, $milestones); - $page++; - } while (!empty($milestones)); - - $this->info(sprintf( - "Fetched %d milestones in project %d.", - count($allMilestones), - $projectId - )); - - foreach ($allMilestones as $milestone) { - GitlabMilestones::upsert( - [ - 'title' => $milestone['title'], - 'url' => $milestone['web_url'], - 'is_closed' => $milestone['state'] === 'closed', - 'gitlab_id' => $milestone['id'], - 'gitlab_iid' => $milestone['iid'], - 'gitlab_project_id' => $projectId, - 'g_created_at' => Carbon::parse($milestone['created_at'])->format('Y-m-d'), - 'g_updated_at' => Carbon::parse($milestone['updated_at'])->format('Y-m-d'), - 'g_start_date' => !is_null($milestone['start_date']) - ? Carbon::parse($milestone['start_date'])->format('Y-m-d') - : null, - 'g_due_date' => !is_null($milestone['due_date']) - ? Carbon::parse($milestone['due_date'])->format('Y-m-d') - : null - ], - ['gitlab_id'] - ); - }//end foreach - - $this->info("Gitlab milestones upsert complete."); - } - - /** - * Synchronizes ticket statuses based on GitLab issue labels. - * - * @return void - */ - private function syncTicketStatus(): void - { - $tickets = Ticket::whereNotNull('gitlab_issue')->whereNot('status', TicketStatusEnum::archived)->get(); - - foreach ($tickets as $ticket) { - $gitlabIssue = GitlabIssues::where('url', $ticket->gitlab_issue)->with('gitlabLabels')->first(); - - $gitlabIssueLabels = $gitlabIssue ? $gitlabIssue->gitlabLabels->pluck('name') : []; - - if ($gitlabIssueLabels) { - match (true) { - $gitlabIssueLabels->contains('g-wip') => $this->updateTicketStatus($ticket, TicketStatusEnum::inDev), - $gitlabIssueLabels->contains('g-production') => $this->updateTicketStatus($ticket, TicketStatusEnum::production), - default => null, - }; - } - } - } - - /** - * Updates the ticket status only if it has changed. - * - * @param Ticket $ticket The ticket to update. - * @param TicketStatusEnum $status The new status to apply. - * - * @return void - */ - private function updateTicketStatus(Ticket $ticket, TicketStatusEnum $status): void - { - if ($ticket->status !== $status && $ticket->status !== TicketStatusEnum::waiting) { - $ticket->status = $status; - $ticket->saveOrFail(); - } - } -} diff --git a/app/Console/Commands/WarnBeforeAutoCloseTicket.php b/app/Console/Commands/WarnBeforeAutoCloseTicket.php deleted file mode 100644 index 289eeee..0000000 --- a/app/Console/Commands/WarnBeforeAutoCloseTicket.php +++ /dev/null @@ -1,38 +0,0 @@ -info('Running the Job, this could take some time.'); - $job = new JobsWarnBeforeAutoCloseTicket(); - $job->handle(); - $this->info('Job completed'); - - return 0; - } -} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php deleted file mode 100644 index 6fca931..0000000 --- a/app/Console/Kernel.php +++ /dev/null @@ -1,44 +0,0 @@ -job(ExportTicketsState::class)->weekly()->mondays()->at('07:00'); - $schedule->job(AutoCloseOldTickets::class)->dailyAt('08:00'); - $schedule->job(WarnBeforeAutoCloseTicket::class)->dailyAt('08:05'); - $schedule->command('app:update-gitlab-datas --is-cron')->hourly()->between('7:00', '19:00'); - } - - /** - * Register the commands for the application. - * - * @return void - */ - protected function commands() - { - $this->load(__DIR__ . '/Commands'); - require base_path('routes/console.php'); - } -} diff --git a/app/Enums/Credit/AccountTypeEnum.php b/app/Enums/Credit/AccountTypeEnum.php deleted file mode 100644 index 2e2c126..0000000 --- a/app/Enums/Credit/AccountTypeEnum.php +++ /dev/null @@ -1,21 +0,0 @@ -name => "Jours de développement", - self::seo->name => "Jours de seo", - ]; -} diff --git a/app/Enums/Credit/BalanceOperationEnum.php b/app/Enums/Credit/BalanceOperationEnum.php deleted file mode 100644 index 0b3caa2..0000000 --- a/app/Enums/Credit/BalanceOperationEnum.php +++ /dev/null @@ -1,21 +0,0 @@ -name => "Créditer un compte", - self::debit->name => "Débiter un compte", - ]; -} diff --git a/app/Enums/Credit/EstimationStatusEnum.php b/app/Enums/Credit/EstimationStatusEnum.php deleted file mode 100644 index 15d46ac..0000000 --- a/app/Enums/Credit/EstimationStatusEnum.php +++ /dev/null @@ -1,23 +0,0 @@ -name => "En attente", - self::accepted->name => "Acceptée", - self::refused->name => "Refusée", - ]; -} diff --git a/app/Enums/Credit/EstimationTimeEnum.php b/app/Enums/Credit/EstimationTimeEnum.php deleted file mode 100644 index 86fb130..0000000 --- a/app/Enums/Credit/EstimationTimeEnum.php +++ /dev/null @@ -1,49 +0,0 @@ -name => "Une demi-heure", - self::hour->name => "Une heure", - self::hourAndHalf->name => "Une heure et demie", - self::twoHours->name => "Deux heures", - self::twoHoursAndHalf->name => "Deux heures et demie", - self::threeHours->name => "Trois heures", - self::twoHoursAndHalf->name => "Trois heures et demie", - self::fourHours->name => "Quatre heures", - self::fourHoursAndHalf->name => "Quatre heures et demie", - self::fiveHours->name => "Cinq heures", - self::fiveHoursAndHalf->name => "Cinq heures et demie", - self::sixHours->name => "Six heures", - self::sixHoursAndHalf->name => "Six heures et demie", - self::sevenHours->name => "Sept heures", - self::sevenHoursAndHalf->name => "Sept heures et demi", - self::eightHours->name => "Huit heures", - ]; -} diff --git a/app/Enums/Informations/InfoColorsEnum.php b/app/Enums/Informations/InfoColorsEnum.php deleted file mode 100644 index fb210f6..0000000 --- a/app/Enums/Informations/InfoColorsEnum.php +++ /dev/null @@ -1,53 +0,0 @@ -name => "primary", - self::secondary->name => "secondary", - self::success->name => "success", - self::danger->name => "danger", - self::warning->name => "warning", - self::info->name => "info", - self::light->name => "light", - self::dark->name => "dark", - ]; - - /** - * Get Class - * - * @return string - */ - public function class(): string - { - return self::CLASSES[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toClasses(): array - { - return self::CLASSES; - } -} diff --git a/app/Enums/Invoices/InvoiceStatusEnum.php b/app/Enums/Invoices/InvoiceStatusEnum.php deleted file mode 100644 index 117fb38..0000000 --- a/app/Enums/Invoices/InvoiceStatusEnum.php +++ /dev/null @@ -1,29 +0,0 @@ -name => "Ouvert (nouveaux ou en cours)", - self::refused->name => "Refusé (par le client ou aucune réponse de sa part)", - self::canceled->name => "Annulé (supprimé)", - self::archived->name => "Archivé (validé et envoyé à la comptabilité)", - self::awaiting_signature->name => "En attente de signature", - self::awaiting_invoicing->name => "En attente de facturation", - ]; -} diff --git a/app/Enums/Invoices/TaskTypeEnum.php b/app/Enums/Invoices/TaskTypeEnum.php deleted file mode 100644 index b63cc21..0000000 --- a/app/Enums/Invoices/TaskTypeEnum.php +++ /dev/null @@ -1,57 +0,0 @@ -name => "Web", - self::seo->name => "SEO", - self::package->name => "Forfait", - self::arbitrary->name => "Libre", - ]; - - /** - * Custom added prices definition - */ - private const PRICES = [ - self::web->name => 600, - self::seo->name => 690, - // * Linked to packages table - self::package->name => 0, - // * Arbitrary number - self::arbitrary->name => 0, - ]; - - /** - * Get Price - * - * @return string - */ - public function price(): string - { - return self::PRICES[$this->name]; - } - - /** - * Get enum prices - * - * @return array - */ - public static function toPrices(): array - { - return self::PRICES; - } -} diff --git a/app/Enums/ItemsPerPaginationEnum.php b/app/Enums/ItemsPerPaginationEnum.php deleted file mode 100644 index 348f0a3..0000000 --- a/app/Enums/ItemsPerPaginationEnum.php +++ /dev/null @@ -1,16 +0,0 @@ -name => "Privé", - self::public->name => "Public", - ]; -} diff --git a/app/Enums/Tickets/TicketFileTypeEnum.php b/app/Enums/Tickets/TicketFileTypeEnum.php deleted file mode 100644 index 82dc1a6..0000000 --- a/app/Enums/Tickets/TicketFileTypeEnum.php +++ /dev/null @@ -1,70 +0,0 @@ -name => "Fichier png", - self::jpeg->name => "Fichier jpeg", - self::jpg->name => "Fichier jpg", - self::pdf->name => "Fichier pdf", - self::pptx->name => "Fichier pptx", - self::docx->name => "Fichier docx", - self::xlsx->name => "Fichier xlsx", - self::csv->name => "Fichier csv", - self::svg->name => "Fichier svg", - ]; - - /** - * Custom added mimes type definition - */ - private const MIMETYPE = [ - self::png->name => 'image/png', - self::jpeg->name => 'image/jpeg', - self::jpg->name => 'image/jpeg', - self::pdf->name => 'application/pdf', - self::pptx->name => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - self::docx->name => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - self::xlsx->name => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - self::csv->name => 'text/csv', - self::svg->name => 'image/svg+xml', - ]; - - /** - * Get Class - * - * @return string - */ - public function mimetypes(): string - { - return self::MIMETYPE[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toMimetypes(): array - { - return self::MIMETYPE; - } -} diff --git a/app/Enums/Tickets/TicketStatusEnum.php b/app/Enums/Tickets/TicketStatusEnum.php deleted file mode 100644 index b14de01..0000000 --- a/app/Enums/Tickets/TicketStatusEnum.php +++ /dev/null @@ -1,73 +0,0 @@ -name => "Nouveau", - self::estimateTodo->name => "Étude chef(s) de projet", - self::takenInAccount->name => "À planifier", - self::waiting->name => "En attente de réponse", - self::waitingValidation->name => "En attente de validation", - self::recette->name => "En recettage", - self::recetteValidated->name => "Recettage validé", - self::production->name => "En production", - self::archived->name => "Archivé", - self::inDev->name => "En cours de développement", - ]; - - /** - * Custom added classes definition - */ - private const CLASSES = [ - self::new->name => 'text-danger', - self::estimateTodo->name => 'text-info', - self::takenInAccount->name => 'text-info', - self::waiting->name => 'text-white bg-danger', - self::waitingValidation->name => 'text-warning bg-danger', - self::recette->name => 'text-primary', - self::recetteValidated->name => 'text-success', - self::production->name => 'text-success', - self::archived->name => 'text-secondary', - self::inDev->name => 'text-discovery', - ]; - - /** - * Get Class - * - * @return string - */ - public function class(): string - { - return self::CLASSES[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toClasses(): array - { - return self::CLASSES; - } -} diff --git a/app/Enums/Tickets/TicketTypeEnum.php b/app/Enums/Tickets/TicketTypeEnum.php deleted file mode 100644 index 7d203a1..0000000 --- a/app/Enums/Tickets/TicketTypeEnum.php +++ /dev/null @@ -1,67 +0,0 @@ -name => "Bug", - self::evolution->name => "Évolution", - self::br->name => "Demande BR", - self::newsletter->name => "Demande newsletter", - self::qrcode->name => "Demande de QR Code", - self::advice->name => "Conseil - Accompagnement", - self::complaints->name => "Réclamations consommateurs", - self::mailing->name => "Demande mail en masse", - ]; - - /** - * Custom added classes definition - */ - private const CLASSES = [ - self::bug->name => "bg-danger", - self::evolution->name => "bg-success", - self::br->name => "bg-primary", - self::newsletter->name => "bg-warning", - self::qrcode->name => "bg-secondary", - self::advice->name => "bg-info", - self::complaints->name => "bg-dark", - self::mailing->name => "bg-discovery", - ]; - - /** - * Get Class - * - * @return string - */ - public function class(): string - { - return self::CLASSES[$this->name]; - } - - /** - * Get enum classes - * - * @return array - */ - public static function toClasses(): array - { - return self::CLASSES; - } -} diff --git a/app/Enums/Users/RoleEnum.php b/app/Enums/Users/RoleEnum.php deleted file mode 100644 index 64b0f6b..0000000 --- a/app/Enums/Users/RoleEnum.php +++ /dev/null @@ -1,23 +0,0 @@ -name => "Developpeur", - self::admin->name => "Administrateur", - self::client->name => "Client", - ]; -} diff --git a/app/Events/NotifyAdmin.php b/app/Events/NotifyAdmin.php deleted file mode 100644 index 0431af2..0000000 --- a/app/Events/NotifyAdmin.php +++ /dev/null @@ -1,34 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } -} diff --git a/app/Events/NotifySubscriptions.php b/app/Events/NotifySubscriptions.php deleted file mode 100644 index ffaf05a..0000000 --- a/app/Events/NotifySubscriptions.php +++ /dev/null @@ -1,40 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - $this->ignoreUsers = $ignoreUsers; - } -} diff --git a/app/Events/NotifyTicketCreator.php b/app/Events/NotifyTicketCreator.php deleted file mode 100644 index d5682a4..0000000 --- a/app/Events/NotifyTicketCreator.php +++ /dev/null @@ -1,34 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } -} diff --git a/app/Events/TicketStatusChanged.php b/app/Events/TicketStatusChanged.php deleted file mode 100644 index 3f4c76a..0000000 --- a/app/Events/TicketStatusChanged.php +++ /dev/null @@ -1,62 +0,0 @@ -ticket = $ticket; - $this->status = $status; - $this->user = $user; - $this->message = $message; - $this->is_private = $is_private; - $this->status_changed = $status_changed; - } -} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php deleted file mode 100644 index 2b45543..0000000 --- a/app/Exceptions/Handler.php +++ /dev/null @@ -1,47 +0,0 @@ -, \Psr\Log\LogLevel::*> - */ - protected $levels = []; - - /** - * A list of the exception types that are not reported. - * - * @var array> - */ - protected $dontReport = []; - - /** - * A list of the inputs that are never flashed for validation exceptions. - * - * @var array - */ - protected $dontFlash = [ - 'current_password', - 'password', - 'password_confirmation', - ]; - - /** - * Register the exception handling callbacks for the application. - * - * @return void - */ - public function register() - { - $this->reportable(function (\Throwable $e) { - if (app()->bound('sentry')) { - app('sentry')->captureException($e); - } - }); - } -} diff --git a/app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php b/app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php deleted file mode 100644 index 13f9c51..0000000 --- a/app/Http/Controllers/Bo/Auth/ConfirmPasswordController.php +++ /dev/null @@ -1,29 +0,0 @@ -middleware('auth'); - } -} diff --git a/app/Http/Controllers/Bo/Auth/ForgotPasswordController.php b/app/Http/Controllers/Bo/Auth/ForgotPasswordController.php deleted file mode 100644 index 3f28ecf..0000000 --- a/app/Http/Controllers/Bo/Auth/ForgotPasswordController.php +++ /dev/null @@ -1,21 +0,0 @@ -middleware('guest:backend'); - } -} diff --git a/app/Http/Controllers/Bo/Auth/LoginController.php b/app/Http/Controllers/Bo/Auth/LoginController.php deleted file mode 100644 index e80dfd4..0000000 --- a/app/Http/Controllers/Bo/Auth/LoginController.php +++ /dev/null @@ -1,29 +0,0 @@ -middleware('guest:backend')->except('logout'); - } -} diff --git a/app/Http/Controllers/Bo/Auth/ResetPasswordController.php b/app/Http/Controllers/Bo/Auth/ResetPasswordController.php deleted file mode 100644 index f8c31b5..0000000 --- a/app/Http/Controllers/Bo/Auth/ResetPasswordController.php +++ /dev/null @@ -1,41 +0,0 @@ - 'required', - 'email' => 'required|email', - 'password' => [ - 'required', 'confirmed', Password::min(8) - ->mixedCase() - ->letters() - ->numbers() - ->symbols() - ->uncompromised() - ], - ]; - } -} diff --git a/app/Http/Controllers/Bo/BrandController.php b/app/Http/Controllers/Bo/BrandController.php deleted file mode 100644 index bf2d134..0000000 --- a/app/Http/Controllers/Bo/BrandController.php +++ /dev/null @@ -1,186 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $brandModels, - $search, - null, - 'name', - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($brandModels); - - /** Custom pagination */ - $brandModels = $this->customPaginate($brandModels, $request->pagination); - - return view('bo.pages.brands.index', compact('brandModels', 'search', 'searchFields')); - } - - /** - * Show model action. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Contracts\View\View - */ - public function show(Brand $brand): \Illuminate\Contracts\View\View - { - return view('bo.pages.brands.show', ['brandModel' => $brand]); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Contracts\View\View - */ - public function create(Brand $brand): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.brands.create', [ - 'brandModel' => $brand, - 'siteModels' => $siteModels - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Brands\StoreBrandRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreBrandRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $brand = new Brand(); - $brand->fill($request->safe()->except('sites')); - - if ($brand->saveOrFail()) { - $brand->updateSites($brand); - return redirect() - ->route('bo.brands.edit', $brand) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Contracts\View\View - */ - public function edit(Brand $brand): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.brands.edit', [ - 'brandModel' => $brand, - 'siteModels' => $siteModels - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Brands\UpdateBrandRequest $request - * @param \App\Models\Brand $brand - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateBrandRequest $request, Brand $brand): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $brand) { - $brand->fill($request->safe()->except(['sites'])); - $brand->updateSites($brand); - - if ($brand->saveOrFail()) { - return redirect() - ->route('bo.brands.edit', $brand) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Brand $brand - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Brand $brand): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($brand) { - if (count($brand->accounts)) { - return redirect() - ->route('bo.brands.index') - ->with('error', __( - ':model n\'as pas pu être supprimé car elle est encore associée avec des Sites.', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } else { - $brand->deleteSites($brand); - if ($brand->deleteOrFail()) { - return redirect() - ->route('bo.brands.index') - ->with('success', __( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } - return redirect() - ->back() - ->with('error', __( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.brands'))] - )); - } //end if - }); - } -} diff --git a/app/Http/Controllers/Bo/BrevoController.php b/app/Http/Controllers/Bo/BrevoController.php deleted file mode 100644 index f02553c..0000000 --- a/app/Http/Controllers/Bo/BrevoController.php +++ /dev/null @@ -1,77 +0,0 @@ -firstOrFail(); - - $formContent = $request->items[0]["ExtractedMarkdownMessage"]; - - $tblRegexPatterns = [ - 'user' => '/Matricule et Nom du demandeur\s*\|\s*([^|]+?)\s*\|/i', - 'email' => '/Email du demandeur\s*\|\s*([^|]+?)\s*\|/i', - 'brand' => '/Marque\s*\/\s*Filiale\s*\|\s*([^|]+?)\s*\|/i', - 'subject' => '/Pour quels besoins avez-vous besoin d\'envoyer des emails en masse\s*\?\s*\|\s*([^|]+?)\s*\|/is', - 'date_mep' => '/Date de première envoi souhaité\s*\|\s*([^|]+?)\s*\|/i', - 'comment' => '/Commentaire\s*\|\s*([^|]+?)(?=\s*\|)/i', - ]; - - foreach ($tblRegexPatterns as $field => $regex) { - if (preg_match($regex, $formContent, $matches)) { - $data[$field] = trim($matches[1]); - } else { - return response()->json(['reason' => "Champ manquant $field"], 422); - } - } - - if ($data['date_mep']) { - $dateMep = Carbon::createFromFormat('d/m/Y', $data['date_mep'])->format('Y-m-d'); - } - - $ticket = new Ticket([ - 'site_id' => $site->id, - 'type' => TicketTypeEnum::mailing->value, - 'status' => TicketStatusEnum::new->value, - 'date_mep' => $dateMep ?? null, - 'text' => " - Bonjour,\n - Nom du demandeur : {$data['user']}, - Adresse mail : {$data['email']}, - Marque / Filiale concernée : {$data['brand']}, - Sujet : {$data['subject']}, - Date d'envoi souhaitée : {$data['date_mep']}, - Commentaire : {$data['comment']},\n - Cordialement. - ", - 'title' => "Demande de mail en masse pour {$data['brand']}", - 'is_internal' => false - ]); - - $ticket->user()->associate($site->projectManager); - $ticket->site()->associate($site); - $ticket->assignedUser()->associate($site->projectManager); - $ticket->saveOrFail(); - - if (config('mail.MAIL_ADMIN')) { - Mail::to(config('mail.MAIL_ADMIN'))->send(new NewTicket($ticket)); - } else { - throw new \ErrorException('Missing MAIL_ADMIN in .env'); - } - - return response()->json(['ok' => true]); - } -} diff --git a/app/Http/Controllers/Bo/CompanyController.php b/app/Http/Controllers/Bo/CompanyController.php deleted file mode 100644 index 54578fc..0000000 --- a/app/Http/Controllers/Bo/CompanyController.php +++ /dev/null @@ -1,166 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $companyModels, - $search, - null, - 'name' - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($companyModels); - - /** Custom pagination */ - $companyModels = $this->customPaginate($companyModels, $request->pagination); - - return view('bo.pages.companies.index', compact('companyModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Company $company - * @return \Illuminate\Contracts\View\View - */ - public function create(Company $company): \Illuminate\Contracts\View\View - { - return view('bo.pages.companies.create', [ - 'companyModel' => $company, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Companies\StoreCompanyRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreCompanyRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $company = new Company(); - $company->fill($request->validated()); - - if ($company->saveOrFail()) { - return redirect() - ->route('bo.companies.edit', $company) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Company $company - * @return \Illuminate\Contracts\View\View - */ - public function edit(Company $company): \Illuminate\Contracts\View\View - { - return view('bo.pages.companies.edit', [ - 'companyModel' => $company - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Companies\UpdateCompanyRequest $request - * @param \App\Models\Company $company - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateCompanyRequest $request, Company $company): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $company) { - $company->fill($request->validated()); - if ($company->saveOrFail()) { - return redirect() - ->route('bo.companies.edit', $company) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Company $company - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Company $company): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($company) { - if (count($company->invoices()->get()->toArray())) { - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_deleted_relationship', - [ - 'model' => Str::singular(trans('models.classes.companies')), - 'relationship' => trans('models.classes.invoices') - ] - )); - } - if ($company->deleteOrFail()) { - return redirect() - ->route('bo.companies.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.companies'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/Credit/AccountController.php b/app/Http/Controllers/Bo/Credit/AccountController.php deleted file mode 100644 index 9cc4a21..0000000 --- a/app/Http/Controllers/Bo/Credit/AccountController.php +++ /dev/null @@ -1,107 +0,0 @@ -user(); - - if (!$user->isAdmin()) { - $brandModels = $user->brands()->pluck('id'); - } else { - $brandModels = $request->brand ?? Brand::all()->pluck('id'); - } - - /** @var \Illuminate\Database\Eloquent\Builder $credit_accountModels */ - $credit_accountModels = Account::query()->whereIn('brand_id', $brandModels); - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $credit_accountModels, - $search, - null, - 'label', - 'balance', - ); - } - $searchFields = trans('Label, solde'); - - /** Sort columns with a query */ - $this->sortQuery($credit_accountModels); - - /** Custom pagination */ - $credit_accountModels = $this->customPaginate($credit_accountModels, $request->pagination); - - return view('bo.pages.credit_accounts.index', compact( - 'credit_accountModels', - 'brandModels', - 'search', - 'searchFields' - )); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Brand $brand - * @param \App\Models\Account $account - * @return \Illuminate\Contracts\View\View - */ - public function create(Brand $brand, Account $account): \Illuminate\Contracts\View\View - { - return view('bo.pages.credit_accounts.create', [ - 'brandModel' => $brand, - 'credit_accountModel' => $account - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Models\Brand $brand - * @param \App\Http\Requests\Bo\CreditAccounts\StoreCreditAccountRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(Brand $brand, StoreCreditAccountRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($brand, $request) { - $credit_accountModel = new Account(); - $credit_accountModel->brand_id = $brand->id; - $credit_accountModel->fill($request->validated()); - - if ($credit_accountModel->saveOrFail()) { - return redirect() - ->route('bo.brands.credit_accounts.index', $brand) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/Credit/CreditLogController.php b/app/Http/Controllers/Bo/Credit/CreditLogController.php deleted file mode 100644 index ba3c9b2..0000000 --- a/app/Http/Controllers/Bo/Credit/CreditLogController.php +++ /dev/null @@ -1,108 +0,0 @@ -brand; - $credit_accountModel = $request->account; - - /** @var \Illuminate\Database\Eloquent\Builder $credit_logModels */ - $credit_logModels = CreditLog::query()->where('credit_account_id', $credit_accountModel->id); - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $credit_logModels, - $search, - null, - 'amount', - ); - } - $searchFields = trans('Montant'); - - /** Sort columns with a query */ - $this->sortQuery($credit_logModels); - - /** Custom pagination */ - $credit_logModels = $this->customPaginate($credit_logModels, $request->pagination); - - return view('bo.pages.credit_logs.index', compact( - 'credit_logModels', - 'credit_accountModel', - 'brandModel', - 'search', - 'searchFields' - )); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Brand $brand - * @param \App\Models\Account $account - * @return \Illuminate\Contracts\View\View - */ - public function create(Brand $brand, Account $account): \Illuminate\Contracts\View\View - { - return view('bo.pages.credit_logs.create', [ - 'brandModel' => $brand, - 'credit_accountModel' => $account - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Models\Brand $brand - * @param \App\Models\Account $account - * @param \App\Http\Requests\Bo\CreditLogs\StoreCreditLogRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store( - Brand $brand, - Account $account, - StoreCreditLogRequest $request - ): \Illuminate\Http\RedirectResponse { - return DB::transaction(function () use ($brand, $account, $request) { - $credit_logModel = new CreditLog(); - $credit_logModel->credit_account_id = $request->account->id; - $credit_logModel->type = BalanceOperationEnum::credit; - $credit_logModel->fill($request->validated()); - - if ($credit_logModel->saveOrFail()) { - return redirect() - ->route('bo.brands.credit_accounts.index', ['brand' => $brand, 'account' => $account]) - ->with('success', trans( - ':model a été crédité', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':model ne peut être crédité', - ['model' => Str::singular(trans('models.classes.accounts'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/Credit/EstimationController.php b/app/Http/Controllers/Bo/Credit/EstimationController.php deleted file mode 100644 index 0a77513..0000000 --- a/app/Http/Controllers/Bo/Credit/EstimationController.php +++ /dev/null @@ -1,122 +0,0 @@ -authorize('estimate', $ticket); - return view('estimations.create', \compact('ticket')); - } - - /** - * Create Ticket estimation - * - * @param \App\Http\Requests\Bo\Credit\CreateEstimateRequest $request - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function estimateSubmit(CreateEstimateRequest $request, Ticket $ticket) - { - return DB::transaction(function () use ($request, $ticket) { - /** @var \App\Models\User */ - $user = auth()->user(); - $estimate = new Estimation($request->validated()); - $estimate->ticket()->associate($ticket); - $estimate->estimator()->associate($user); - $ticket->status = TicketStatusEnum::waitingValidation; - $ticket->saveQuietly(); - if ($estimate->saveOrFail()) { - $message = sprintf( - '%s a modifié le statut en %s, Une estimation de %s jours à été ajoutée', - $user->name, - $ticket->status->label(), - \number_format(\floatval($request->amount), 1, ',', '') - ); - event(new TicketStatusChanged($ticket, $ticket->status, $user)); - event(new NotifySubscriptions($ticket, $message)); - event(new NotifyAdmin($ticket, $message)); - return response()->redirectToRoute('bo.ticket.show', $ticket) - ->with('info', trans('L\'estimation à bien été ajouté')); - } - return \back(); - }); - } - - /** - * Answer ticket estimation - * - * @param \App\Http\Requests\Bo\Credit\AnswerEstimateRequest $request - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function estimatePendingSubmit(AnswerEstimateRequest $request, Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - /** @var \App\Models\Credit\Estimation */ - $estimation = $ticket->estimation; - if ($request->answer) { - $ticket->status = TicketStatusEnum::takenInAccount; - $estimation->status = EstimationStatusEnum::accepted; - } else { - $ticket->status = TicketStatusEnum::archived; - $estimation->status = EstimationStatusEnum::refused; - } - $estimation->validator()->associate($user); - if ($estimation->saveOrFail() and $ticket->saveOrFail()) { - $message = sprintf( - 'Une réponse à été fourni par %s pour l\'estimation du ticket n°%d : %s', - $user->name, - $ticket->id, - $estimation->status->label() - ); - event(new NotifySubscriptions($ticket, $message)); - event(new NotifyAdmin($ticket, $message)); - return response()->redirectToRoute('bo.ticket.show', $ticket) - ->with('info', trans('Votre réponse à été enregistrée')); - } - return \back(); - } - - /** - * Handle submit and cancel an estimate on ticket - * - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function estimateCancelSubmit(Ticket $ticket) - { - $this->authorize('cancelEstimate', $ticket); - - /** @var \App\Models\Credit\Estimation */ - $estimation = $ticket->estimation; - $ticket->status = TicketStatusEnum::estimateTodo; - - if ($estimation->deleteOrFail() and $ticket->saveOrFail()) { - return response()->redirectToRoute('bo.ticket.show', $ticket) - ->with('info', trans('L\'estimation a été supprimée.')); - } - return \back(); - } -} diff --git a/app/Http/Controllers/Bo/InformationController.php b/app/Http/Controllers/Bo/InformationController.php deleted file mode 100644 index 70c213b..0000000 --- a/app/Http/Controllers/Bo/InformationController.php +++ /dev/null @@ -1,158 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $informationModels, - $search, - null, - 'title', - 'message' - ); - } - $searchFields = trans('Titre, message'); - - /** Sort columns with a query */ - $this->sortQuery($informationModels); - - /** Custom pagination */ - $informationModels = $this->customPaginate($informationModels, $request->pagination); - - return view('bo.pages.informations.index', compact('informationModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Information $information - * @return \Illuminate\Contracts\View\View - */ - public function create(Information $information): \Illuminate\Contracts\View\View - { - return view('bo.pages.informations.create', [ - 'informationModel' => $information - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Informations\StoreInformationRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreInformationRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $information = new Information(); - $information->fill($request->validated()); - - if ($information->saveOrFail()) { - return redirect() - ->route('bo.informations.edit', $information) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Information $information - * @return \Illuminate\Contracts\View\View - */ - public function edit(Information $information): \Illuminate\Contracts\View\View - { - return view('bo.pages.informations.edit', [ - 'informationModel' => $information, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Informations\UpdateInformationRequest $request - * @param \App\Models\Information $information - * @return \Illuminate\Http\RedirectResponse - * @ignore phpcs:disable Generic.Files.LineLength.TooLong - */ - public function update(UpdateInformationRequest $request, Information $information): \Illuminate\Http\RedirectResponse - { - // phpcs:enable - return DB::transaction(function () use ($request, $information) { - $information->fill($request->validated()); - if ($information->saveOrFail()) { - return redirect() - ->route('bo.informations.edit', $information) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Information $information - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Information $information): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($information) { - if ($information->deleteOrFail()) { - return redirect() - ->route('bo.informations.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.informations'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/InvoiceController.php b/app/Http/Controllers/Bo/InvoiceController.php deleted file mode 100644 index ded9c35..0000000 --- a/app/Http/Controllers/Bo/InvoiceController.php +++ /dev/null @@ -1,227 +0,0 @@ -query('sort_col') && !request()->query('sort_way')) - ? Invoice::query()->orderByDesc('created_at') - : Invoice::query(); - - $status = intval($request->status); - - switch ($status) { - case InvoiceStatusEnum::awaiting_signature->value: - $invoiceModels->whereNotNull('sent_client_date')->whereNull('signed_date'); - break; - case InvoiceStatusEnum::awaiting_invoicing->value: - $invoiceModels->whereNotNull('sent_client_date')->whereNotNull('signed_date')->whereNull('sent_accounting_date'); - break; - default: - if ($status !== 0) { - $invoiceModels->where('status', $status); - } - break; - } - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $invoiceModels, - $search, - null, - 'firstname', - 'lastname', - 'ref', - 'site_id', - ); - } - $searchFields = trans('Nom, Prénom, Référence, Site'); - - /** Sort columns with a query */ - $this->sortQuery($invoiceModels); - - /** Custom pagination */ - $invoiceModels = $this->customPaginate($invoiceModels, $request->pagination); - - return view('bo.pages.invoices.index', compact('invoiceModels', 'search', 'searchFields', 'status')); - } - - /** - * Show model action. - * - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Contracts\View\View - */ - public function show(Invoice $invoice): \Illuminate\Contracts\View\View - { - return view('bo.pages.invoices.show', ['invoiceModel' => $invoice]); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Contracts\View\View - */ - public function create(Invoice $invoice): \Illuminate\Contracts\View\View - { - $packageModels = Package::where('published', true)->get(); - $taskRowModel = Invoice::getTaskStructure(); - $siteModels = Site::orderBy('name', 'ASC')->get(); - $companyModels = Company::get(); - - return view('bo.pages.invoices.create', [ - 'invoiceModel' => $invoice, - 'taskRowModel' => $taskRowModel, - 'packageModels' => $packageModels, - 'siteModels' => $siteModels, - 'companyModels' => $companyModels, - 'invoiceStatusArray' => $invoice->getInvoiceStatusArray($invoice), - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Invoices\StoreInvoiceRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreInvoiceRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $invoice = new Invoice(); - $invoice->fill($request->validated()); - - if ($invoice->saveOrFail()) { - return redirect() - ->route('bo.invoices.edit', $invoice) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.invoices'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.invoices'))] - )); - }); - } - - /** - * Edit model action. - * - * @param Invoice $invoice - * @return \Illuminate\Contracts\View\View - */ - public function edit(Invoice $invoice): \Illuminate\Contracts\View\View - { - $packageModels = Package::get(); - $taskRowModel = Invoice::getTaskStructure(); - $siteModels = Site::orderBy('name', 'ASC')->get(); - $companyModels = Company::get(); - - return view('bo.pages.invoices.edit', [ - 'invoiceModel' => $invoice, - 'taskRowModel' => $taskRowModel, - 'packageModels' => $packageModels, - 'siteModels' => $siteModels, - 'companyModels' => $companyModels, - 'invoiceStatusArray' => $invoice->getInvoiceStatusArray($invoice), - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Invoices\UpdateInvoiceRequest $request - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateInvoiceRequest $request, Invoice $invoice): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $invoice) { - $invoice->fill(($invoice->status->value === InvoiceStatusEnum::opened->value) ? $request->validated() : []); - if ($invoice->saveOrFail()) { - return redirect() - ->route('bo.invoices.edit', $invoice) - ->with('success', __( - 'crud.messages.has_been_updated', - ['model' => __('models.classes.invoices')] - )); - } //end if - return redirect() - ->back() - ->with('error', __( - 'crud.messages.cannot_be_updated', - ['model' => __('models.classes.invoices')] - )); - }); - } - - /** - * Download Invoice. - * - * @param \App\Models\Invoice $invoice - * @return \Illuminate\Http\RedirectResponse|\Symfony\Component\HttpFoundation\Response - */ - public function download(Invoice $invoice) - { - if (Gate::allows('isAdmin')) { - return $invoice->generateInvoice() - ->stream(Str::slug(trans('Devis :appname :date - ref :ref', [ - 'appname' => config('app.name'), - 'date' => - $invoice->created_at !== $invoice->updated_at ? - $invoice->updated_at->isoFormat('YYYY-MM-DD') : - $invoice->created_at->isoFormat('YYYY-MM-DD'), - 'ref' => $invoice->ref, - ])) . '.pdf'); - } - return redirect()->route('bo.invoices.index') - ->with('error', __('crud.messages.cannot_be_updated', [ - 'model' => __('models.classes.invoices') - ])); - } - - /** - * Get a paginate resource. - * - * @param \Illuminate\Http\Request $request - * @return Illuminate\Http\JsonResponse - */ - public function jsonPaginate(Request $request): \Illuminate\Http\JsonResponse - { - $model = $request->targetModel; - return DB::transaction(function () use ($model) { - $models = $model::query()->orderBy('name', 'ASC')->paginate(12); - return \response()->json($models ?? 500); - }); - } -} diff --git a/app/Http/Controllers/Bo/LabelController.php b/app/Http/Controllers/Bo/LabelController.php deleted file mode 100644 index 6bd7c43..0000000 --- a/app/Http/Controllers/Bo/LabelController.php +++ /dev/null @@ -1,157 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $labelModels, - $search, - null, - 'name' - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($labelModels); - - /** Custom pagination */ - $labelModels = $this->customPaginate($labelModels, $request->pagination); - - return view('bo.pages.labels.index', compact('labelModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Label $label - * @return \Illuminate\Contracts\View\View - */ - public function create(Label $label): \Illuminate\Contracts\View\View - { - return view('bo.pages.labels.create', [ - 'labelModel' => $label - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Labels\StoreLabelRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreLabelRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $label = new Label(); - $label->fill($request->validated()); - - if ($label->saveOrFail()) { - return redirect() - ->route('bo.labels.edit', $label) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Label $label - * @return \Illuminate\Contracts\View\View - */ - public function edit(Label $label): \Illuminate\Contracts\View\View - { - return view('bo.pages.labels.edit', [ - 'labelModel' => $label, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Labels\UpdateLabelRequest $request - * @param \App\Models\Label $label - * @return \Illuminate\Http\RedirectResponse - * @ignore phpcs:disable Generic.Files.LineLength.TooLong - */ - public function update(UpdateLabelRequest $request, Label $label): \Illuminate\Http\RedirectResponse - { - // phpcs:enable - return DB::transaction(function () use ($request, $label) { - $label->fill($request->validated()); - if ($label->saveOrFail()) { - return redirect() - ->route('bo.labels.edit', $label) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Label $label - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Label $label): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($label) { - if ($label->deleteOrFail()) { - return redirect() - ->route('bo.labels.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.labels'))] - )); - }); - } -} diff --git a/app/Http/Controllers/Bo/PackageController.php b/app/Http/Controllers/Bo/PackageController.php deleted file mode 100644 index df6956e..0000000 --- a/app/Http/Controllers/Bo/PackageController.php +++ /dev/null @@ -1,177 +0,0 @@ -status; - if ($status === null) { - $packageModels->where('published', true); - } elseif ($status === '0') { - $packageModels->where('published', false); - } elseif ($status === '1') { - $packageModels->where('published', true); - } - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $packageModels, - $search, - null, - 'name', - 'amount' - ); - } - $searchFields = trans('Nom, Montant'); - - /** Sort columns with a query */ - $this->sortQuery($packageModels); - - /** Custom pagination */ - $packageModels = $this->customPaginate($packageModels, $request->pagination); - - return view('bo.pages.packages.index', compact('packageModels', 'search', 'searchFields', 'status')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Package $package - * @return \Illuminate\Contracts\View\View - */ - public function create(Package $package): \Illuminate\Contracts\View\View - { - return view('bo.pages.packages.create', [ - 'packageModel' => $package, - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Packages\StorePackageRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StorePackageRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $package = new Package(); - $package->fill($request->validated()); - - if ($package->saveOrFail()) { - return redirect() - ->route('bo.packages.edit', $package) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Package $package - * @return \Illuminate\Contracts\View\View - */ - public function edit(Package $package): \Illuminate\Contracts\View\View - { - return view('bo.pages.packages.edit', [ - 'packageModel' => $package, - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Packages\UpdatePackageRequest $request - * @param \App\Models\Package $package - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdatePackageRequest $request, Package $package): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $package) { - $package->fill($request->validated()); - if ($package->saveOrFail()) { - return redirect() - ->route('bo.packages.edit', $package) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Package $package - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Package $package): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($package) { - if ($package->deleteOrFail()) { - return redirect() - ->route('bo.packages.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.packages'))] - )); - }); - } - - /** - * Change model published. - * - * @param \App\Models\Package $package - * @return \Illuminate\Http\RedirectResponse - */ - public function changePublished(Package $package) - { - $package->update(['published' => !$package->getOriginal('published')]); - return redirect()->back()->with('success', trans(__('crud.messages.publish_status_saved'))); - } -} diff --git a/app/Http/Controllers/Bo/SiteController.php b/app/Http/Controllers/Bo/SiteController.php deleted file mode 100644 index ee3aef5..0000000 --- a/app/Http/Controllers/Bo/SiteController.php +++ /dev/null @@ -1,204 +0,0 @@ -isAdmin()) { - /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ - $siteModels = Site::query()->with(['invoices', 'tickets']); - } else { - /** @var \Illuminate\Database\Eloquent\Builder $siteModels */ - $siteModels = Site::whereHas('users', function (\Illuminate\Database\Eloquent\Builder $query) use ($user) { - $query->where('id', $user->id)->with(['invoices', 'tickets']); - }); - } - - /** @var string $search Search field */ - $search = $request->search; - if ($search) { - $this->searchQuery( - $siteModels, - $search, - null, - 'name', - ); - } - $searchFields = trans('Nom'); - - /** Sort columns with a query */ - $this->sortQuery($siteModels); - - /** Custom pagination */ - $siteModels = $this->customPaginate($siteModels, $request->pagination); - - return view('bo.pages.sites.index', compact('siteModels', 'search', 'searchFields')); - } - - /** - * Show model action. - * - * @param \App\Models\Site $site - * @return \Illuminate\Contracts\View\View - */ - public function show(Site $site): \Illuminate\Contracts\View\View - { - return view('bo.pages.sites.show', ['siteModel' => $site]); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\Site $site - * @return \Illuminate\Contracts\View\View - */ - public function create(Site $site): \Illuminate\Contracts\View\View - { - $userModels = User::orderBy('name', 'ASC')->get(); - - return view('bo.pages.sites.create', [ - 'siteModel' => $site, - 'userModels' => $userModels - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Sites\StoreSiteRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreSiteRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $site = new Site(); - $site->fill($request->validated()); - if ($site->saveOrFail()) { - $site->users()->attach(collect($request->validated('users'))->pluck('id')); - return redirect() - ->route('bo.sites.edit', $site) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\Site $site - * @return \Illuminate\Contracts\View\View - */ - public function edit(Site $site): \Illuminate\Contracts\View\View - { - $userModels = User::orderBy('name', 'ASC')->get(); - - return view('bo.pages.sites.edit', [ - 'siteModel' => $site, - 'userModels' => $userModels - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Sites\UpdateSiteRequest $request - * @param \App\Models\Site $site - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateSiteRequest $request, Site $site): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $site) { - $site->fill($request->validated()); - $site->users()->sync(collect($request->validated('users'))->pluck('id')); - if ($site->saveOrFail()) { - return redirect() - ->route('bo.sites.edit', $site) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\Site $site - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(Site $site): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($site) { - if ($site->deleteOrFail()) { - $site->users()->detach(); - return redirect() - ->route('bo.sites.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.sites'))] - )); - }); - } - - /** - * Get a paginate resource. - * - * @param \Illuminate\Http\Request $request - * @return Illuminate\Http\JsonResponse - */ - public function jsonPaginate(Request $request): \Illuminate\Http\JsonResponse - { - return DB::transaction(function () use ($request) { - $model = $request->targetModel; - $search = $request->search; - $models = $model::where("name", "LIKE", "%{$search}%")->orderBy("name", "ASC"); - - return ToolboxHelper::jsonPaginate($this->customPaginate($models, $request->pagination)); - }); - } -} diff --git a/app/Http/Controllers/Bo/TicketController.php b/app/Http/Controllers/Bo/TicketController.php deleted file mode 100644 index 001889b..0000000 --- a/app/Http/Controllers/Bo/TicketController.php +++ /dev/null @@ -1,923 +0,0 @@ -authorizeResource(Ticket::class, 'ticket'); - } - - /** - * Tickets List - * - * @param SortTickets $request - * @return \Illuminate\Http\JsonResponse|\Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - */ - public function index(SortTickets $request) - { - // * Handle Ajax - if ($request->ajax()) { - $tickets = Ticket::with(['user', 'assignedUser']); - if ($request->s) { - $tickets = $tickets->where('text', 'LIKE', "%$request->s%") - ->orWhere('id', $request->s) - ->orWhereHas('user', function ($q) use ($request) { - $q->where('name', 'LIKE', "%$request->s%"); - }); - } - /** @var \Illuminate/Pagination/LengthAwarePaginator $tickets */ - $tickets = $tickets->paginate(); - return \response()->json($tickets->getCollection()->map(function (Ticket $ticket) { - return [ - 'label' => sprintf( - 'Ticket %d (%s): %s', - $ticket->id, - $ticket->user ? $ticket->user->name : trans('Utilisateur supprimé'), - Str::limit(\preg_replace('/[[:cntrl:]]+/', '', $ticket->text), 35) - ), - 'value' => $ticket->id - ]; - })); - } //end if - - /** @var \App\Models\User */ - $user = auth()->user(); - $tickets = Ticket::with(['site', 'labels']); - if (!$user->isAdmin()) { - $tickets->whereHas('site', function ($q) use ($user) { - $q->whereHas('users', function ($q) use ($user) { - $q->whereId($user->id); - }); - }); - $tickets->where('is_internal', false); - } else { - $tickets->has('site'); - } - - $tickets->where( - 'status', - ($request->st == TicketStatusEnum::archived->value) ? '=' : '<>', - TicketStatusEnum::archived - ); - - if (!$user->isAdmin() && $user->sites->count() === 1) { - $request->merge([ - 'pr' => $user->sites->first()->id, - ]); - } - - $tickets = $this->filterTickets($tickets, $request); - $tickets = $this->searchTicket($tickets, $request); - - /** Sort columns with a query */ - $this->sortQuery($tickets); - - /** Custom pagination */ - $tickets = $this->customPaginate($tickets, $request->pagination); - - $sites = Site::select('id', 'name')->orderBy('name')->get(); - $status = Arr::sort(TicketStatusEnum::cases(), function (TicketStatusEnum $value) { - return $value->label(); - }); - $types = Arr::sort(TicketTypeEnum::cases(), function (TicketTypeEnum $value) { - return $value->label(); - }); - - return view('bo.pages.tickets.index', compact('tickets', 'sites', 'status', 'types')); - } - - /** - * Show Ticket - * - * @param Request $request - * @param Ticket $ticket - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - */ - public function show(Request $request, Ticket $ticket) - { - if ($request->ajax()) { - return \response()->json([ - 'label' => $ticket->formatName($ticket), - 'value' => $ticket->id - ]); - } - - /** @var \App\Models\User */ - $user = auth()->user(); - - if (!$user->can('update', $ticket)) { - abort(403); - } - - if ($ticket->is_internal && !$user->can('changeInternalStatus', $ticket)) { - abort(403); - } - - $messages = $ticket->messages()->orderBy('created_at', 'DESC')->get(); - $isSubscribed = (bool)$ticket->subscriptions()->where('user_id', $user->id)->count(); - return view('bo.pages.tickets.show', [ - 'ticket' => $ticket, - 'messages' => $messages, - 'isSubscribed' => $isSubscribed - ]); - } - - /** - * Show create Form - * - * @return \Illuminate\Http\RedirectResponse - */ - public function create() - { - /** @var \App\Models\User */ - $user = auth()->user(); - if ($user->isAdmin()) { - $sites = Site::orderBy('name')->get(); - } else { - $sites = $user->sites; - } - - if (!count($sites)) { - return redirect()->route('bo.sites.create') - ->with('warning', trans('Vous devez tout d\'abord créer un site pour y ajouter un ticket')); - } - return view('bo.pages.tickets.create', compact('sites')); - } - - /** - * Create ticket - * - * @param StoreTicket $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreTicket $request) - { - try { - return DB::transaction(function () use ($request) { - /** @var \App\Models\Site */ - $site = Site::findOrFail($request->site_id); - - /** @var \App\Models\User */ - $user = auth()->user(); - - $ticket = new Ticket($request->validated()); - - /** @var array<\Illuminate\Http\UploadedFile> */ - $fileTickets = $request->file_tickets ?? []; - if (count($fileTickets) > 0) { - foreach ($fileTickets as $key => $file) { - if ($key === 0) { - $ticket->file = FileStorageHelper::storeFile($ticket, $file); - } else { - $fileNumber = 'file' . $key + 1; - $ticket->$fileNumber = FileStorageHelper::storeFile($ticket, $file); - } - } - } - - $ticket->user()->associate(auth()->user()); - $ticket->site()->associate($site); - $ticket->saveOrFail(); - - if ($request->labels) { - $ticket->labels()->sync($request->labels); - } - - $user->subscriptions()->toggle($ticket->id); - - if (config('mail.MAIL_ADMIN')) { - Mail::to(config('mail.MAIL_ADMIN'))->send(new NewTicket($ticket)); - } else { - throw new \ErrorException('Missing MAIL_ADMIN in .env'); - } - - return redirect()->route('bo.ticket.show', $ticket) - ->with('success', trans('Ticket enregistré !')); - }); - } catch (\ErrorException $e) { - report($e); - Session::flash('error', trans('Une erreur est survenue')); - } //end try - - return \back(); - } - - /** - * Show update form - * - * @param Ticket $ticket - * @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function edit(Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - if ($user->isAdmin()) { - $sites = Site::orderBy('name')->get(); - } else { - $sites = $user->sites; - } - return view('bo.pages.tickets.edit', compact('ticket', 'sites')); - } - - /** - * Update Model - * - * @param UpdateTicket $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateTicket $request, Ticket $ticket) - { - $ticket->fill($request->validated()); - - try { - return DB::transaction(function () use ($request, $ticket) { - /** @var \App\Models\Site */ - $site = Site::findOrFail($request->site_id); - - /** @var null|array<\Illuminate\Http\UploadedFile> */ - $fileTickets = $request->file_tickets; - if (isset($fileTickets) && count($fileTickets) > 0) { - foreach ($fileTickets as $key => $file) { - if ($key === 0) { - $ticket->file = FileStorageHelper::storeFile($ticket, $file); - } else { - $fileNumber = 'file' . $key + 1; - $ticket->$fileNumber = FileStorageHelper::storeFile($ticket, $file); - } - } - } - - $ticket->labels()->sync($request->labels); - - $ticket->site()->associate($site); - $ticket->saveOrFail(); - - return redirect()->route('bo.ticket.edit', $ticket->id) - ->with('success', 'Modifications enregistrées !'); - }); - } catch (\ErrorException $e) { - report($e); - Session::flash('error', trans('Une erreur est survenue')); - } //end try - - return \back(); - } - - /** - * Change ticket Status - * - * @param ChangeTicketStatus $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function changeStatus(ChangeTicketStatus $request, Ticket $ticket) - { - if ($ticket->gitlab_issue) { - \dispatch(new UpdateIssueLabels($ticket, $request->status)); - } - - $ticket->fill($request->validated()); - $ticket->saveOrFail(); - - return back() - ->with('warning', trans('Le status à été modifié')); - } - - /** - * Add a new Message to the Ticket - * - * @param CreateMessage $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function createMessage(CreateMessage $request, Ticket $ticket) - { - try { - return DB::transaction(function () use ($request, $ticket) { - /** @var \Illuminate\Http\UploadedFile|null */ - $filesMessage = $request->file_messages; - $message = new Message($request->validated()); - $message->user()->associate(auth()->user()); - $message->ticket()->associate($ticket); - - /** @var \App\Models\User */ - $user = auth()->user(); - // Subscribe to ticket. - if ($request->subscribe) { - $user->subscriptions()->syncWithoutDetaching([$ticket->id]); - } else { - $user->subscriptions()->detach($ticket->id); - } - - // Store files if any. - if (isset($filesMessage) and $filesMessage) { - foreach ($filesMessage as $key => $singleFile) { - if ($key === 0) { - $message->file = FileStorageHelper::storeFile($message, $singleFile); - $message->saveOrFail(); - } else { - $fileNumber = 'file' . $key + 1; - $message->$fileNumber = FileStorageHelper::storeFile($message, $singleFile); - $message->saveOrFail(); - } - } - } - - $message->saveOrFail(); - - return back() - ->with('success', trans('Votre message à été ajouté')); - }, 5); - } catch (\ErrorException $e) { - report($e); - Session::flash('error', trans('Une erreur est survenue')); - } //end try - - return back(); - } - - /** - * Update Message - * - * @param UpdateMessage $request - * @param Ticket $ticket - * @param Message $message - * @return \Illuminate\Http\RedirectResponse - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed - */ - public function updateMessage(UpdateMessage $request, Ticket $ticket, Message $message) - { - $message->message = $request->message; - $message->saveOrFail(); - - return back() - ->with('success', trans('Votre message à bien été modifié')); - } - - /** - * Change ticket status to archived - * - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function setToArchive(Ticket $ticket) - { - $ticket->status = TicketStatusEnum::archived; - $ticket->saveOrFail(); - return redirect()->route('bo.ticket.index') - ->with('warning', trans('Le ticket est archivé')); - } - - /** - * Subscribe to ticket - * - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function subscribe(Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - $user->subscriptions()->toggle($ticket->id); - if ($user->subscriptions()->where('ticket_id', $ticket->id)->exists()) { - return back() - ->with('success', trans('Vous avez été inscrit')); - } - return back()->with('warning', trans('Vous avez été désinscrit')); - } - - /** - * Reopen ticket - * - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function reopen(Ticket $ticket) - { - $message = trans(':ticketName à réouvert le ticket n°:ticketNumber', [ - 'ticketName' => $ticket->user->name, - 'ticketNumber' => $ticket->id, - ]); - /** @var \App\Enums\Tickets\TicketStatusEnum */ - $oldStatus = $ticket->status; - $ticket->status = TicketStatusEnum::new; - $ticket->saveQuietly(); - event(new TicketStatusChanged($ticket, $oldStatus, null, $message, false, false)); - event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); - - /** @var \App\Models\User */ - $user = auth()->user(); - $user->subscriptions()->toggle($ticket->id); - - return back()->with('warning', trans('Votre ticket à été réouvert.')); - } - - /** - * Assign ticket to user ticket - * - * @param AssignTicketToUserRequest $request - * @param Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function assignTo(AssignTicketToUserRequest $request, Ticket $ticket) - { - /** @var \App\Models\User */ - $user = auth()->user(); - - /** @var \App\Models\User|null */ - if ($assignedUser = User::whereId($request->assign)->first()) { - $message = trans(':admin a assigné le ticket n°:ticketNumber à :assignedAdmin', [ - 'admin' => $user->name, - 'ticketNumber' => $ticket->id, - 'assignedAdmin' => $assignedUser->name, - ]); - $ticket->assignedUser()->associate($assignedUser); - } else { - $message = trans( - ':admin a modifié l\'assignation du ticket n°:ticketNumber, il n\'est plus assigné à quelqu\'un.', - [ - 'admin' => $user->name, - 'ticketNumber' => $ticket->id, - ] - ); - $ticket->assignedUser()->dissociate(); - } - $ticket->saveQuietly(); - - - /** @var \App\Enums\Tickets\TicketStatusEnum */ - $oldStatus = $ticket->status; - // * Notification systeme doit etre privée. - event(new TicketStatusChanged($ticket, $oldStatus, null, $message, true, false)); - event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); - - /** @var \App\Models\User */ - $user = auth()->user(); - $user->subscriptions()->toggle($ticket->id); - - if ($assignedUser) { - return back()->with('info', trans('Le ticket à été assigné à :assignedUser', [ - 'assignedUser' => $assignedUser->name - ])); - } - return back()->with('info', trans('Le ticket n\'est plus assigné à personne')); - } - - - /** - * Link two tickets. - * - * @param LinkTicket $request - * @param Ticket $ticket - * - * @return \Illuminate\Http\RedirectResponse - */ - public function linkTicket(LinkTicket $request, Ticket $ticket) - { - $linkedTicket = Ticket::findOrFail($request->validated())->first(); - - if ($ticket->site_id !== $linkedTicket->site_id) { - return back()->with('error', trans('Le ticket que vous avez renseigné ne fait pas partie du même site.')); - } - - if (!$ticket->linkedTickets()->where('linked_ticket_id', $linkedTicket->id)->exists()) { - $ticket->linkedTickets()->attach($linkedTicket->id); - $linkedTicket->linkedTickets()->attach($ticket->id); - return back()->with('success', trans('Les tickets ont été liés avec succès.')); - } - - return back()->with('error', trans('Les tickets sont déjà liés ensemble.')); - } - - /** - * Unlink two tickets. - * - * @param Ticket $ticket - * @param Ticket $linkedTicket - * - * @return \Illuminate\Http\RedirectResponse - */ - public function unlinkTicket(Ticket $ticket, Ticket $linkedTicket) - { - $ticket->linkedTickets()->detach($linkedTicket->id); - $linkedTicket->linkedTickets()->detach($ticket->id); - - return back()->with('warning', trans('Le lien entre les tickets à été supprimé.')); - } - - // * PRIVATES - - /** - * Filter Tickets request constructor - * - * @param Builder $tickets - * @param Request $request - * @return Builder - * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh - */ - private function filterTickets(Builder $tickets, Request $request): Builder - { - //phpcs:enable - if ($request->rst) { - Session::remove('tickets.ass'); - Session::remove('tickets.st'); - Session::remove('tickets.pr'); - Session::remove('tickets.ty'); - Session::remove('tickets.sort_col'); - Session::remove('tickets.sort_way'); - Session::remove('tickets.or'); - Session::remove('tickets.search'); - } - if ($request->assr) { - Session::remove('tickets.ass'); - } - if ($request->prs) { - Session::remove('tickets.pr'); - } - if ($request->sts) { - Session::remove('tickets.st'); - } - if ($request->tys) { - Session::remove('tickets.ty'); - } - if ($request->sort_col) { - Session::put('tickets.sort_col', $request->sort_col); - } - if ($request->sort_way) { - Session::put('tickets.sort_way', $request->sort_way); - } - if ($request->ord) { - Session::remove('tickets.or'); - } - if ($request->pr) { - Session::put('tickets.pr', $request->pr); - } - if ($request->st) { - Session::put('tickets.st', $request->st); - } - if ($request->ty) { - Session::put('tickets.ty', $request->ty); - } - if ($request->ass) { - Session::put('tickets.ass', $request->ass); - } - if (Session::has('tickets.or')) { - Session::remove('tickets.ass'); - Session::remove('tickets.st'); - Session::remove('tickets.ty'); - Session::remove('tickets.sort_col'); - Session::remove('tickets.sort_way'); - Session::remove('tickets.search'); - } - - if ($request->or && Session::has('tickets.pr')) { - Session::put('tickets.or', $request->or); - } - - Session::save(); - - if (Session::has('tickets.pr')) { - $tickets->where('site_id', Session::get('tickets.pr')); - } - - if (Session::has('tickets.ass')) { - $tickets->whereHas('assignedUser', function ($q) { - $q->whereId(Session::get('tickets.ass')); - }); - } - - if (Session::has('tickets.st')) { - $tickets->where('status', Session::get('tickets.st')); - } - - if (Session::has('tickets.ty')) { - $tickets->where('type', Session::get('tickets.ty')); - } - - if (Session::has('tickets.or')) { - $tickets->orderBy('order', 'ASC'); - } - - if ( - Session::has('tickets.sort_col') and - Session::has('tickets.sort_way') and - in_array(Session::get('tickets.sort_col'), [ - 'type', - 'title', - 'assigned_to', - 'date_mep', - 'created_at', - 'created_by' - ]) - ) { - $tickets->orderBy( - Session::get('tickets.sort_col'), - Session::get('tickets.sort_way') - ); - } else { - $tickets->orderBy('last_activity', 'DESC'); - } - - return $tickets; - } - - /** - * Search ticket sql request constructor - * - * @param Builder $tickets - * @param Request $request - * @return Builder - */ - private function searchTicket(Builder $tickets, Request $request): Builder - { - if ($request->exists('search')) { - if (empty($request->search)) { - Session::remove('tickets.search'); - } else { - Session::put('tickets.search', $request->search); - } - } - - if (!Session::has('tickets.search')) { - return $tickets; - } - - return $this->searchQuery($tickets, Session::get('tickets.search'), function ($q) { - $words = explode(' ', Session::get('tickets.search')); - if (\is_array($words)) { - foreach ($words as $word) { - if (!strlen($word)) { - continue; - } - $s = collect(TicketStatusEnum::cases())->filter(function (TicketStatusEnum $t) use ($word) { - return Str::slug($t->label()) === Str::slug($word); - })->map(function (TicketStatusEnum $ticket) { - return $ticket->value; - }); - $t = collect(TicketTypeEnum::cases())->filter(function (TicketTypeEnum $s) use ($word) { - return Str::slug($s->label()) === Str::slug($word); - })->map(function (TicketTypeEnum $ticket) { - return $ticket->value; - }); - $q->orWhere('id', $word) - ->orWhereIn('status', $s) - ->orWhereIn('type', $t) - ->orWhereHas('user', function ($q) use ($word) { - $q->where('name', 'LIKE', "%$word%"); - }); - } //end foreach - } //end if - }, 'text', 'title', 'file', 'file2', 'file3', 'file4', 'file5'); - } - - /** - * Get a paginate resource. - * - * @param \Illuminate\Http\Request $request - * @return Illuminate\Http\JsonResponse - */ - public function jsonPaginate(Request $request): \Illuminate\Http\JsonResponse - { - return DB::transaction(function () use ($request) { - $model = $request->targetModel; - $search = $request->search; - - // * Handle Ajax - $tickets = $model::with(['user', 'assignedUser']); - if ($search) { - $tickets = $tickets->where('text', 'LIKE', "%$search%") - ->orWhere('id', $search) - ->orWhereHas('user', function ($q) use ($search) { - $q->where('name', 'LIKE', "%$search%"); - }) - ->orderBy("id", "ASC"); - } - - return ToolboxHelper::jsonPaginate( - $this->customPaginate($tickets, $request->pagination), - 'formatName' - ); - }); - } - - /** - * Create a gitlab issue from a ticket. - * - * @param \App\Models\Ticket $ticket - * @return \Illuminate\Http\RedirectResponse - */ - public function createGitlabIssue(Ticket $ticket) - { - $userGitlabId = auth()->user()->gitlab_id; - $gitlabRepoId = $ticket->site->gitlab_project_id; - $description = \sprintf("%s
", $ticket->text); - $cLabel = match ($ticket->type) { - TicketTypeEnum::bug => 'c-bug,to-dispatch', - TicketTypeEnum::evolution => 'c-feature', - TicketTypeEnum::newsletter => 'c-feature,g-to-estimate', - }; - - $assigneeId = match ($ticket->type) { - TicketTypeEnum::bug => $userGitlabId, - TicketTypeEnum::evolution, - TicketTypeEnum::newsletter => $ticket->site->projectManager?->gitlab_id - }; - - try { - foreach ($ticket->getFiles() as $key => $file) { - if (!\is_null($file)) { - $uploadedFile = GitLab::projects()->uploadFile($gitlabRepoId, $file); - $description .= $this->formatGitlabFiles($ticket, $uploadedFile, $key + 1); - } - } - - $data = [ - 'title' => sprintf( - 'ts-%s : %s', - $ticket->id, - $ticket->title - ), - 'description' => $description, - 'labels' => \implode(",", [ - 'c-support', - $cLabel - ]), - ]; - - if ($assigneeId) { - $data['assignee_id'] = $assigneeId; - } - - $issue = GitLab::issues()->create($gitlabRepoId, $data); - } catch (\Exception $e) { - \report($e); - return back()->with('error', \trans("Une erreur est survenue")); - } catch (\Throwable $e) { - \report($e); - return back()->with('error', \trans("Une erreur est survenue")); - } //end try - - $ticket->gitlab_issue = $issue['web_url']; - $ticket->save(); - - return back()->with( - 'success', - trans("L'issue a été créée sur Gitlab.") - ); - } - - /** - * Format files for Gitlab issues - * - * @param \App\Models\Ticket $ticket - * @param array $uploadedFile - * @param integer $fileNb - * @return string - */ - private function formatGitlabFiles(Ticket $ticket, array $uploadedFile, int $fileNb) - { - if (Str::endsWith($ticket->file, ['jpg', 'png', 'jpeg', 'pptx', 'docx', 'xslx', 'csv', 'svg'])) { - $file = \sprintf( - "![Fichier joint %d](%s)", - $fileNb, - $uploadedFile['url'] - ); - } else { - $file = \sprintf( - '%s', - $uploadedFile['url'], - __('Lien vers le fichier'), - ); - } - return \sprintf("

Fichier %d :
%s
", $fileNb, $file); - } - - /** - * Change order. - * - * @param \App\Http\Requests\Bo\UpdateChangeOrderRequest $request - * @param mixed ...$params - * @return \Illuminate\Http\RedirectResponse - * @throws \RuntimeException Si le nom du parametre de la route ne correspond pas au params utilisé. - */ - public function changeOrder(UpdateChangeOrderRequest $request, mixed ...$params): \Illuminate\Http\RedirectResponse - { - $paramNames = collect(request()->route()->parameterNames); - $className = Str::of($paramNames->get($paramNames->count() - 2))->lower()->studly(); - $className = "\\App\\Models\\{$className}"; - $model = Arr::get($params, $paramNames->count() - 2); - - if (!class_exists($className)) { - throw new \RuntimeException("The {$className} class doesn't exist."); - } - - if (!\is_object($model)) { - throw new \RuntimeException("The second last param isn't an object."); - } - - if (get_class($model) !== (string)Str::of($className)->replaceStart('\\', '')) { - throw new \RuntimeException("The {$className} doesn't match second last binded param."); - } - - /** @var \Illuminate\Database\Eloquent\Model|null */ - $model = $className::query()->where($model->getRouteKeyName(), $model->getRouteKey())->first(); - - if (!$model) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - return DB::transaction(function () use ($request, $className, $model) { - /** @var \Illuminate\Support\Collection $models */ - $models = $className::query() - ->orderBy('order', 'ASC') - ->where('site_id', $model->site_id) - ->where('status', '!=', TicketStatusEnum::archived) - ->where('id', '!=', $model->getKey()) - ->where('order', $request->direction ? '<' : '>', $model->order) - ->get(); - /** @var \Illuminate\Database\Eloquent\Model|null $tmp */ - $tmp = $request->direction ? $models->last() : $models->first(); - - if (!$tmp) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - $newOrder = $tmp->getOriginal('order'); - $tmp->update(['order' => $model->getOriginal('order')]); - $model->update(['order' => $newOrder]); - - return redirect()->back()->with('success', trans('crud.messages.order_changed')); - }); - } - - /** - * Update ticket priority. - * - * @param UpdateTicketPriorityRequest $request - * @param Ticket $ticket - * @return void - */ - public function changePriority(UpdateTicketPriorityRequest $request, Ticket $ticket) - { - $newPriority = $request->validated('priority'); - - return DB::transaction(function () use ($ticket, $newPriority) { - // Update all tickets who will be moved with this priority update. - $request = Ticket::query() - ->where('site_id', $ticket->site_id) - ->whereNot('status', TicketStatusEnum::archived) - ->whereNot('id', $ticket->id) - ->whereBetween('order', [min($ticket->order, $newPriority), max($ticket->order, $newPriority)]); - $ticket->order < $newPriority ? $request->decrement('order', 1) : $request->increment('order', 1); - - // Update the ticket. - $ticket->order = $newPriority; - if (!$ticket->saveOrFail()) { - return back()->with('error', trans('crud.messages.order_not_changed')); - }; - - return redirect()->back()->with('success', trans('crud.messages.order_changed')); - }); - } -} diff --git a/app/Http/Controllers/Bo/TicketTypeController.php b/app/Http/Controllers/Bo/TicketTypeController.php deleted file mode 100644 index 9722789..0000000 --- a/app/Http/Controllers/Bo/TicketTypeController.php +++ /dev/null @@ -1,81 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $ticketTypeModels, - $search, - null, - 'type', - ); - } - $searchFields = trans('Type'); - - /** Sort columns with a query */ - $this->sortQuery($ticketTypeModels); - - /** Custom pagination */ - $ticketTypeModels = $this->customPaginate($ticketTypeModels, $request->pagination); - - return view('bo.pages.ticket_types.index', compact('ticketTypeModels', 'search', 'searchFields')); - } - - /** - * Show the form for editing the specified resource. - * - * @param App\Models\Ticket\TicketType $ticketType - * @return \Illuminate\Contracts\View\View - * @ignore phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClass - */ - public function edit(TicketType $ticketType): \Illuminate\Contracts\View\View - { - return view('bo.pages.ticket_types.edit', ['ticketTypeModel' => $ticketType]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\TicketTypes\UpdateTicketTypeRequest $request - * @param \App\Models\Ticket\TicketType $ticketType - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateTicketTypeRequest $request, TicketType $ticketType): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $ticketType) { - $ticketType->fill($request->validated()); - - if ($ticketType->saveOrFail()) { - return redirect()->route('bo.ticket_types.edit', $ticketType->id) - ->with('success', __('crud.messages.has_been_updated', [ - 'model' => trans_choice('models.classes.ticket_types', 1) - ])); - } - return redirect()->route('bo.ticket_types.edit', $ticketType->id) - ->with('error', __('crud.messages.cannot_be_updated', [ - 'model' => trans_choice('models.classes.ticket_types', 1) - ])); - }); - } -} diff --git a/app/Http/Controllers/Bo/UserController.php b/app/Http/Controllers/Bo/UserController.php deleted file mode 100644 index b678ee2..0000000 --- a/app/Http/Controllers/Bo/UserController.php +++ /dev/null @@ -1,231 +0,0 @@ -search; - if ($search) { - $this->searchQuery( - $userModels, - $search, - null, - 'name', - 'email' - ); - } - $searchFields = trans('Label, email'); - - /** Sort columns with a query */ - $this->sortQuery($userModels); - - /** Custom pagination */ - $userModels = $this->customPaginate($userModels, $request->pagination); - - return view('bo.pages.users.index', compact('userModels', 'search', 'searchFields')); - } - - /** - * Show the form for creating a new resource. - * - * @param \App\Models\User $user - * @return \Illuminate\Contracts\View\View - */ - public function create(User $user): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.users.create', [ - 'userModel' => $user, - 'siteModels' => $siteModels - ]); - } - - /** - * Store a newly created resource in storage. - * - * @param \App\Http\Requests\Bo\Users\StoreUserRequest $request - * @return \Illuminate\Http\RedirectResponse - */ - public function store(StoreUserRequest $request): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request) { - $user = new User(); - $user->fill($request->safe()->except('sites')); - - if ($user->saveOrFail()) { - $user->sites()->attach(collect($request->validated('sites'))->pluck('id')); - return redirect() - ->route('bo.users.edit', $user) - ->with('success', trans( - 'crud.messages.has_been_created', - ['model' => Str::singular(trans('models.classes.users'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_created', - ['model' => Str::singular(trans('models.classes.users'))] - )); - }); - } - - /** - * Show the form for editing the specified resource. - * - * @param \App\Models\User $user - * @return \Illuminate\Contracts\View\View - */ - public function edit(User $user): \Illuminate\Contracts\View\View - { - $siteModels = Site::orderBy('name', 'ASC')->get(); - - return view('bo.pages.users.edit', [ - 'userModel' => $user, - 'siteModels' => $siteModels - ]); - } - - /** - * Update the specified resource in storage. - * - * @param \App\Http\Requests\Bo\Users\UpdateUserRequest $request - * @param \App\Models\User $user - * @return \Illuminate\Http\RedirectResponse - */ - public function update(UpdateUserRequest $request, User $user): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($request, $user) { - $user->fill($request->safe()->except(['sites'])); - $user->sites()->sync(collect($request->validated('sites'))->pluck('id')); - if ($user->saveOrFail()) { - return redirect() - ->route('bo.users.edit', $user) - ->with('success', trans( - 'crud.messages.has_been_updated', - ['model' => Str::singular(trans('models.classes.users'))] - )); - } //end if - return redirect() - ->back() - ->with('error', trans( - 'crud.messages.cannot_be_updated', - ['model' => Str::singular(trans('models.classes.users'))] - )); - }); - } - - /** - * Remove the specified resource from storage. - * - * @param \App\Models\User $user - * @return \Illuminate\Http\RedirectResponse - */ - public function destroy(User $user): \Illuminate\Http\RedirectResponse - { - return DB::transaction(function () use ($user) { - if ($user->deleteOrFail()) { - $user->sites()->detach(); - return redirect() - ->route('bo.users.index') - ->with('success', trans( - 'crud.messages.has_been_deleted', - ['model' => Str::singular(trans('models.classes.users'))] - )); - } - return redirect() - ->back() - ->with('error', trans( - ':crud.messages.cannot_be_deleted', - ['model' => Str::singular(trans('models.classes.users'))] - )); - }); - } - - /** - * Password reset form - * - * @return \Illuminate\Contracts\View\View - */ - public function settings(): \Illuminate\Contracts\View\View - { - return view('bo.pages.users.settings'); - } - - /** - * Favourite site submit - * - * @param \App\Http\Requests\Bo\Users\FavouriteSiteRequest $request - * - * @return \Illuminate\Http\RedirectResponse - */ - public function favouriteSiteSubmit(FavouriteSiteRequest $request): \Illuminate\Http\RedirectResponse - { - /** @var \App\Models\User */ - $user = auth()->user(); - - try { - $user->favourite_site_id = $request->favourite_site_id; - $user->saveOrFail(); - - return redirect()->back()->with("success", trans('crud.messages.favourite_site_changed')); - } catch (\Exception $e) { - \report($e); - return redirect()->back()->with('error', trans('crud.messages.favourite_site_not_changed')); - } catch (\Throwable $e) { - \report($e); - return redirect()->back()->with('error', trans('crud.messages.favourite_site_not_changed')); - } - } - - /** - * Password reset submit - * - * @return \Illuminate\Http\RedirectResponse - */ - public function passwordResetSubmit(): \Illuminate\Http\RedirectResponse - { - /** @var \App\Models\User */ - $user = auth()->user(); - $request = new Request(['email' => $user->email]); - return app(ForgotPasswordController::class)->sendResetLinkEmail($request); - } - - /** - * Get february last day date of the year - * - * @param integer $year - * @return integer 28 or 29 - */ - private function getLastDayFebruary(int $year): int - { - if ((is_int($year / 4) && !is_int($year / 100)) || is_int($year / 400)) { - return 29; - } - return 28; - } -} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php deleted file mode 100644 index 75b55bd..0000000 --- a/app/Http/Controllers/Controller.php +++ /dev/null @@ -1,247 +0,0 @@ -middleware(function ($request, $next) { - $ignore = [ - // * Support Web - 9, - // * Gen-Game- Web - 15, - // * Store LDC - 19, - // * CRM - 27, - // * LDC - WEB - 55, - ]; - - $ticketsNew = Ticket::where('status', TicketStatusEnum::new); - $ticketsWaiting = Ticket::where('status', TicketStatusEnum::waiting); - $ticketsInProgress = Ticket::whereNotIn( - 'status', - [ - TicketStatusEnum::new, - TicketStatusEnum::estimateTodo, - TicketStatusEnum::waiting, - TicketStatusEnum::production, - TicketStatusEnum::archived, - TicketStatusEnum::takenInAccount - ] - ); - - /** @var \App\Models\User|null */ - $user = Auth::user(); - if (!is_null($user) and !$user->isAdmin()) { - $ticketsNew = $ticketsNew->where('is_internal', false)->whereNotIn('site_id', $ignore); - $ticketsWaiting = $ticketsWaiting->where('is_internal', false)->whereNotIn('site_id', $ignore); - $ticketsInProgress = $ticketsInProgress->where('is_internal', false)->whereNotIn('site_id', $ignore); - } - - View::share('ticketsNew', $ticketsNew->count()); - View::share('ticketsWaiting', $ticketsWaiting->count()); - View::share('ticketsInProgress', $ticketsInProgress->count()); - - return $next($request); - }); - } - - /** - * Build Search query on specified fields - * splitting search into words or using whole sentence - * - * @param \Illuminate\Database\Eloquent\Builder $query The eloquent query builder. - * @param string $search The query string. - * @param callable $searchQuery The query string. - * @param string ...$fields Either a simple array or a string - * in case of a string the two fields - * would be concatenate to make the search. - * @return \Illuminate\Database\Eloquent\Builder - */ - protected function searchQuery( - Builder $query, - string $search, - callable $searchQuery = null, - string ...$fields - ): Builder { - if (count($fields)) { - // Search using words. - $words = explode(' ', $search); - $query->where(function ($query) use ($searchQuery, $words, $search, $fields) { - foreach ($words as $word) { - if (!strlen($word)) { - continue; - } - $this->searchOnFields($query, $word, $fields); - } //end foreach - // Search whole using whole sentence. - $this->searchOnFields($query, $search, $fields); - if ($searchQuery) { - $searchQuery($query); - } - }); - } //end if - return $query; - } - - /** - * Build query search on all fields - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param string $search - * @param array $fields - * @return \Illuminate\Database\Eloquent\Builder - */ - private function searchOnFields( - Builder $query, - string $search, - array $fields - ): \Illuminate\Database\Eloquent\Builder { - $table = $query->getModel()->getTable(); - foreach ($fields as $field) { - $field = str_replace('?', '\?', $field); - if (is_array($field)) { - $query->orWhereRaw( - sprintf("UPPER(CONCAT(%s)) LIKE UPPER(?)", collect($field)->map(function ($q) use ($table) { - return "`$table`.`$q`"; - })->implode(', \' \', ')), - ['%' . htmlspecialchars($search) . '%'] - ); - return $query; - } - // Get models woth enum's label. - if (is_array($this->getSearchValue($query, $search, $field))) { - foreach ($this->getSearchValue($query, $search, $field) as $array) { - $query->orWhereRaw( - "UPPER(`$table`.`$field`) LIKE UPPER(?)", - ['%' . htmlspecialchars($array->value) . '%'] - ); - } - return $query; - } - // Get models with relation's name/label. - if (Str::endsWith($field, '_id')) { - $query->orWhereHas(Str::remove('_id', $field), function ($queryRelation) use ($field, $search) { - if (Schema::hasColumn(Str::remove('_id', $field) . 's', 'name')) { - $queryRelation->where('name', 'like', '%' . $search . '%'); - } elseif (Schema::hasColumn(Str::remove('_id', $field) . 's', 'label')) { - $queryRelation->where('label', 'like', '%' . $search . '%'); - } - }); - return $query; - } - $query->orWhereRaw( - "UPPER(`$table`.`$field`) LIKE UPPER(?)", - ['%' . htmlspecialchars($this->getSearchValue($query, $search, $field)) . '%'] - ); - } //end foreach - return $query; - } - - /** - * Get the search value (on string or Enum). - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param string $search - * @param string $field - * @return string|array - */ - protected function getSearchValue(Builder $query, string $search, string $field): string|array - { - $cast = $query->getModel()->getCasts()[$field] ?? null; - if ( - count($query->getModel()->getCasts()) and // Check if the model has casts. - $cast and // Check if there is cast about specific field. - enum_exists($cast) // Check if the cast is an enum. - ) { - /** @var \App\Traits\Enums $cast */ - // @phpstan-ignore-next-line - $cases = collect($cast::toArray()); - $enum = $cases->filter(function ($item) use ($search) { - return preg_match('/' . Str::lower($search) . '/', Str::lower($item->label)); - }); - return $enum->toArray(); - } else { - return $search; - } - } - - /** - * Sort columns with a query - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param array $ignore - * @return \Illuminate\Database\Eloquent\Builder - */ - protected function sortQuery(Builder $query, array $ignore = []): Builder - { - $rName = request()->route()->getName(); - $table = $query->getModel()->getTable(); - if (request()->sort_col) { - Session::put("$rName.sort_col", request()->sort_col); - Session::put("$rName.sorted", true); - } - if (request()->sort_way) { - Session::put("$rName.sort_way", request()->sort_way); - Session::put("$rName.sorted", true); - } - if (request()->rst) { - Session::remove("$rName.sorted"); - Session::remove("$rName.sort_col"); - Session::remove("$rName.sort_way"); - } - if ( - request()->sort_col && - request()->sort_way && - Schema::hasColumn($table, request()->sort_col) && - (!isset($ignore) || (isset($ignore) && !in_array(request()->sort_col, $ignore))) - ) { - $query = $query->orderBy("$table." . request()->sort_col, request()->sort_way); - } - return $query; - } - - /** - * Customize pagination with cache or config (default). - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @param integer|null $pagination - * @return \Illuminate\Pagination\LengthAwarePaginator - */ - protected function customPaginate(Builder $query, $pagination): LengthAwarePaginator - { - if ($pagination) { - Cache::put('pagination', $pagination); - }; - $query = $query->paginate( - (Cache::get('pagination')) ? intval(Cache::get('pagination')) : config('pagination.default') - ); - return $query; - } -} diff --git a/app/Http/Controllers/Front/HomeController.php b/app/Http/Controllers/Front/HomeController.php new file mode 100644 index 0000000..f439723 --- /dev/null +++ b/app/Http/Controllers/Front/HomeController.php @@ -0,0 +1,19 @@ + - */ - protected $middleware = [ - \App\Http\Middleware\TrustHosts::class, - \App\Http\Middleware\TrustProxies::class, - \Illuminate\Http\Middleware\HandleCors::class, - \App\Http\Middleware\PreventRequestsDuringMaintenance::class, - \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class, - \App\Http\Middleware\TrimStrings::class, - \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, - ]; - - /** - * The application's route middleware groups. - * - * @var array> - */ - protected $middlewareGroups = [ - 'web' => [ - 'htmlsanitize', - \App\Http\Middleware\EncryptCookies::class, - \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, - \Illuminate\Session\Middleware\StartSession::class, - \Illuminate\View\Middleware\ShareErrorsFromSession::class, - \App\Http\Middleware\VerifyCsrfToken::class, - \Illuminate\Routing\Middleware\SubstituteBindings::class, - \App\Http\Middleware\SecureHeaders::class, - ], - - 'api' => [ - \Illuminate\Routing\Middleware\ThrottleRequests::class . ':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, - 'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class, - 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, - 'can' => \Illuminate\Auth\Middleware\Authorize::class, - 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, - 'is-admin' => \App\Http\Middleware\IsAdmin::class, - 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, - 'signed' => \App\Http\Middleware\ValidateSignature::class, - 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, - 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - 'htmlsanitize' => \App\Http\Middleware\HtmlSanitizer::class, - ]; -} diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php deleted file mode 100644 index feb58cb..0000000 --- a/app/Http/Middleware/Authenticate.php +++ /dev/null @@ -1,40 +0,0 @@ - route('login') - ]; - if (!$request->expectsJson()) { - // * Notify must login - Session::flash('warning', trans('Veuillez vous connecter pour continuer')); - - foreach ($request->route()->gatherMiddleware() as $middleware) { - if (\is_string($middleware) and strpos($middleware, 'auth:') !== false) { - $route = $logins[str_replace('auth:', '', $middleware)] ?? null; - if ($route) { - return $route; - } - } - } - return route('login'); - } - abort(401); - - return null; - } -} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php deleted file mode 100644 index b6e9bbc..0000000 --- a/app/Http/Middleware/EncryptCookies.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected $except = []; -} diff --git a/app/Http/Middleware/HtmlSanitizer.php b/app/Http/Middleware/HtmlSanitizer.php deleted file mode 100644 index 857ca84..0000000 --- a/app/Http/Middleware/HtmlSanitizer.php +++ /dev/null @@ -1,61 +0,0 @@ -all(); - /** @var callable|null */ - $cleanInput = null; - $cleanInput = function ( - null|string|array &$input, - string $name, - ?string $rootName = null - ) use ( - $params, - &$cleanInput - ): void { - // * Nested element array - if (is_array($input)) { - array_walk_recursive($input, $cleanInput, $name); - } - if (!is_string($input)) { - return; - } - if (in_array($name, $params) or in_array($rootName ?? $name, $params)) { - // ? Is a json input ? - if ($isJson = \json_decode($input, true) and is_array($isJson)) { - // ! Decode each json field recursive. - \array_walk_recursive($isJson, function (string|array &$item) { - if (\is_string($item)) { - $item = clean($item); - $item = ToolboxHelper::stripCkEditorSchemesOnMediaInputs($item); - } - }); - } else { - $input = clean($input); - $input = ToolboxHelper::stripCkEditorSchemesOnMediaInputs($input); - } - } else { - $input = strip_tags($input); - } - }; - \array_walk($inputs, $cleanInput); - $request->merge($inputs); - return $next($request); - } -} diff --git a/app/Http/Middleware/IsAdmin.php b/app/Http/Middleware/IsAdmin.php deleted file mode 100644 index b1f95b7..0000000 --- a/app/Http/Middleware/IsAdmin.php +++ /dev/null @@ -1,26 +0,0 @@ -user(); - if ($user->isAdmin()) { - return $next($request); - } - return redirect()->route('bo.home'); - } -} diff --git a/app/Http/Middleware/PreventRequestsDuringMaintenance.php b/app/Http/Middleware/PreventRequestsDuringMaintenance.php deleted file mode 100644 index 842e4b9..0000000 --- a/app/Http/Middleware/PreventRequestsDuringMaintenance.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected $except = []; -} diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php deleted file mode 100644 index 7b691f9..0000000 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ /dev/null @@ -1,42 +0,0 @@ -check()) { - switch ($guard) { - case 'backend': - if (!$request->routeIs('bo.*') && !$request->routeIs('login')) { - continue; - } - return \redirect()->route('bo.dashboard'); - default: - throw new \RuntimeException("Unhandled guard `{$guard}` ."); - } - } - } - - return $next($request); - } -} diff --git a/app/Http/Middleware/SecureHeaders.php b/app/Http/Middleware/SecureHeaders.php deleted file mode 100644 index cae7777..0000000 --- a/app/Http/Middleware/SecureHeaders.php +++ /dev/null @@ -1,103 +0,0 @@ -removeUnwantedHeaders($this->unwantedHeaderList); - $response = $next($request); - $response->headers->set('Referrer-Policy', 'no-referrer-when-downgrade'); - $response->headers->set('X-Content-Type-Options', 'nosniff'); - $response->headers->set('X-XSS-Protection', '1; mode=block'); - $response->headers->set('X-Frame-Options', 'SAMEORIGIN'); - $response->headers->set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains;'); - $cspPolicies = [ - "default-src 'none';", - "manifest-src 'self';", - // * CKEDITOR Specific https://ckeditor.com/docs/ckeditor5/latest/installation/advanced/csp.html - "connect-src 'self' blob:;", - "img-src * data: blob:;", - "frame-src 'self' " . implode(' ', [ - 'https://www.google.com/recaptcha/', - 'https://recaptcha.google.com/recaptcha/', - 'https://www.google.com/maps/' - ]) . ';', - "font-src 'self' data: https://fonts.gstatic.com;", - // ! Using CKEditor will must have unsafe-inline style - // phpcs:ignore Generic.Files.LineLength.TooLong - "style-src 'self' 'unsafe-inline' " . \implode(' ', [ - 'https://cdnjs.cloudflare.com', - // * File Manager - 'https://fonts.googleapis.com', - 'https://cdn.jsdelivr.net', - 'https://use.fontawesome.com', - 'https://fonts.googleapis.com' - ]) . ';', - // ! If you dont use ckeditor use this - // "style-src 'self' 'nonce-$nonce';", - // phpcs:ignore Generic.Files.LineLength.TooLong - "script-src 'self' {$jsDev} " . \implode(' ', [ - 'https: blob:', - 'https://www.googletagmanager.com', - 'https://cdnjs.cloudflare.com', - "$scheme://www.google-analytics.com", - ]) . ';' - ]; - - $response->headers->set( - 'Content-Security-Policy', - implode(' ', $cspPolicies) . $reportUri - ); - $response->headers->set('Feature-Policy', 'fullscreen \'self\';'); - return $response; - } - - /** - * Remove unwanted headers - * - * @param array $headerList - * @return void - */ - private function removeUnwantedHeaders(array $headerList) - { - foreach ($headerList as $header) { - header_remove($header); - } - } -} diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php deleted file mode 100644 index 88cadca..0000000 --- a/app/Http/Middleware/TrimStrings.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ - protected $except = [ - 'current_password', - 'password', - 'password_confirmation', - ]; -} diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php deleted file mode 100644 index 7186414..0000000 --- a/app/Http/Middleware/TrustHosts.php +++ /dev/null @@ -1,20 +0,0 @@ - - */ - public function hosts() - { - return [ - $this->allSubdomainsOfApplicationUrl(), - ]; - } -} diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php deleted file mode 100644 index d727add..0000000 --- a/app/Http/Middleware/TrustProxies.php +++ /dev/null @@ -1,28 +0,0 @@ -|string|null - */ - protected $proxies; - - /** - * The headers that should be used to detect proxies. - * - * @var integer - */ - protected $headers = - Request::HEADER_X_FORWARDED_FOR | - Request::HEADER_X_FORWARDED_HOST | - Request::HEADER_X_FORWARDED_PORT | - Request::HEADER_X_FORWARDED_PROTO | - Request::HEADER_X_FORWARDED_AWS_ELB; -} diff --git a/app/Http/Middleware/ValidateSignature.php b/app/Http/Middleware/ValidateSignature.php deleted file mode 100644 index 83aa732..0000000 --- a/app/Http/Middleware/ValidateSignature.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - protected $except = []; -} diff --git a/app/Http/Middleware/VerifyCsrfToken.php b/app/Http/Middleware/VerifyCsrfToken.php deleted file mode 100644 index 0054b1d..0000000 --- a/app/Http/Middleware/VerifyCsrfToken.php +++ /dev/null @@ -1,18 +0,0 @@ - - */ - protected $except = [ - '/csp-report', - '/brevo-in' - ]; -} diff --git a/app/Http/Middlewares/HandleInertiaRequests.php b/app/Http/Middlewares/HandleInertiaRequests.php new file mode 100644 index 0000000..ba2ed54 --- /dev/null +++ b/app/Http/Middlewares/HandleInertiaRequests.php @@ -0,0 +1,30 @@ + + */ + public function share(Request $request): array + { + $props = [ + ...InertiaHelper::errorProps(parent::share($request)), + // More props here. + ]; + + return array_replace_recursive( + $props, + InertiaSharedRegistry::resolve($request) + ); + } +} diff --git a/app/Http/Requests/Bo/AssignTicketToUserRequest.php b/app/Http/Requests/Bo/AssignTicketToUserRequest.php deleted file mode 100644 index e474f26..0000000 --- a/app/Http/Requests/Bo/AssignTicketToUserRequest.php +++ /dev/null @@ -1,42 +0,0 @@ -user(); - return auth()->check() and $user->isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'assign' => [ - 'nullable', 'exists:users,id', - // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - /** @var \App\Models\User $user */ - if ($user = User::whereId($value)->first() and !$user->isAdmin()) { - $fail(trans('Cet utilisateur ne peut se voir assigner un ticket')); - } - } - ] - ]; - } -} diff --git a/app/Http/Requests/Bo/Brands/StoreBrandRequest.php b/app/Http/Requests/Bo/Brands/StoreBrandRequest.php deleted file mode 100644 index 7b5261c..0000000 --- a/app/Http/Requests/Bo/Brands/StoreBrandRequest.php +++ /dev/null @@ -1,47 +0,0 @@ - 'required|string|min:3|max:255', - 'sites' => 'nullable|array', - 'sites.*.id' => 'required|exists:sites,id' - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom de la marque'), - 'sites' => trans('Sites associés à la marque'), - 'sites.*.id' => trans('Élément parmis les sites associés à la marque'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Brands/UpdateBrandRequest.php b/app/Http/Requests/Bo/Brands/UpdateBrandRequest.php deleted file mode 100644 index 976fef4..0000000 --- a/app/Http/Requests/Bo/Brands/UpdateBrandRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -|string> - */ - public function rules(): array - { - return [ - 'items' => 'required|array|min:1', - 'items.0.From.Address' => 'required|email', - 'items.0.To.*.Address' => 'required|email|in:mailing@reply.uwil.fr', - 'items.0.ExtractedMarkdownMessage' => 'required|string|min:10', - ]; - } -} diff --git a/app/Http/Requests/Bo/ChangeTicketStatus.php b/app/Http/Requests/Bo/ChangeTicketStatus.php deleted file mode 100644 index 9832a6f..0000000 --- a/app/Http/Requests/Bo/ChangeTicketStatus.php +++ /dev/null @@ -1,43 +0,0 @@ -user(); - return auth()->check() and $user->isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'status' => [ - 'required', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketStatusEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketStatusEnum::toLabels()) - ])); - } - } - ], - ]; - } -} diff --git a/app/Http/Requests/Bo/Companies/StoreCompanyRequest.php b/app/Http/Requests/Bo/Companies/StoreCompanyRequest.php deleted file mode 100644 index 4101aa4..0000000 --- a/app/Http/Requests/Bo/Companies/StoreCompanyRequest.php +++ /dev/null @@ -1,31 +0,0 @@ - 'required|string|min:3|max:255', - ]; - } -} diff --git a/app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php b/app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php deleted file mode 100644 index 12c2050..0000000 --- a/app/Http/Requests/Bo/Companies/UpdateCompanyRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -user())) { - return false; - } - if ( - !$user->can('createPrivateMessage', $this->route()->ticket) - && $this->is_private == MessageTypeEnum::private - ) { - return false; - } - return auth()->check() and $user->sites and ($user->isAdmin() or $user->sites->contains( - $this->route()->ticket->site_id - )); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation() - { - /** @var \App\Models\User */ - $user = auth()->user(); - $this->merge([ - 'subscribe' => $this->subscribe ? true : false, - 'type' => $this->is_private ? MessageTypeEnum::private->value : MessageTypeEnum::public->value - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - /** @var \App\Models\User */ - $user = auth()->user(); - return [ - 'subscribe' => 'required|boolean', - 'message' => [ - 'required', - 'min:' . ($user->isAdmin() ? '5' : '20'), - function ($attribute, $value, $fail) { - $forbidden = ['merci de', 'merci de']; - foreach ($forbidden as $word) { - if (stripos(strtolower($value), $word) !== false) { - $fail( - "Le champs 'Message' contient la chaine de caractère non autorisée suivante : $word" - ); - } - } - }, - ], - 'file_messages' => 'sometimes|array', - 'file_messages.*' => 'mimes:pptx,docx,xlsx,csv,txt,jpeg,jpg,png,pdf,svg|max:2048', - 'type' => ['required', new Enum(MessageTypeEnum::class)] - ]; - } -} diff --git a/app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php b/app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php deleted file mode 100644 index 0713f96..0000000 --- a/app/Http/Requests/Bo/Credit/AnswerEstimateRequest.php +++ /dev/null @@ -1,48 +0,0 @@ -check()) { - return false; - } - /** @var \App\Models\User */ - $user = auth()->user(); - return $user->can('validateEstimate', $this->ticket); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation() - { - $this->merge([ - 'answer' => $this->status === 'accept' - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'status' => 'required|in:accept,refuse', - 'answer' => 'required|boolean' - ]; - } -} diff --git a/app/Http/Requests/Bo/Credit/CreateEstimateRequest.php b/app/Http/Requests/Bo/Credit/CreateEstimateRequest.php deleted file mode 100644 index da90770..0000000 --- a/app/Http/Requests/Bo/Credit/CreateEstimateRequest.php +++ /dev/null @@ -1,71 +0,0 @@ -check()) { - return false; - } - /** @var \App\Models\User */ - $user = auth()->user(); - return $user->isAdmin() and $user->can('estimate', $this->ticket); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - /** @var \App\Models\Ticket */ - $ticket = $this->ticket; - return [ - 'amount' => [ - 'required', - 'numeric', - 'gt:0', - function ($attribute, $value, $fail) { - if (fmod((\floatval($value) * 1000), 62.5) !== 0.0) { - $fail("$attribute doit être un multiple de 62.5 (soit 0.0625)"); - } - } - ], - 'credit_account_id' => [ - 'required', - 'exists:credit_accounts,id', - function ($attribute, $value, $fail) use ($ticket) { - /** @var \App\Models\Credit\Account|null */ - $account = Account::whereId($value)->first(); - if ($account and !$ticket->accountIsValidForThisTicket($account)) { - $fail("$attribute does not belong to the ticket brand"); - } - } - ] - ]; - } - - /** - * Get custom messages for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'amount' => 'Montant', - 'credit_account_id' => 'Compte à débiter' - ]; - } -} diff --git a/app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php b/app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php deleted file mode 100644 index e5adb88..0000000 --- a/app/Http/Requests/Bo/CreditAccounts/StoreCreditAccountRequest.php +++ /dev/null @@ -1,52 +0,0 @@ - 'required|string|min:3|max:255', - 'type' => [ - 'required', - Rule::in(collect(AccountTypeEnum::cases())->pluck('value')->all()), - ], - 'balance' => 'required|numeric|min:0|max:255', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'label' => trans('Label du compte'), - 'type' => trans('Type du compte'), - 'balance' => trans('Solde du compte'), - ]; - } -} diff --git a/app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php b/app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php deleted file mode 100644 index 9d04ef7..0000000 --- a/app/Http/Requests/Bo/CreditLogs/StoreCreditLogRequest.php +++ /dev/null @@ -1,50 +0,0 @@ - [ - // phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - 'required', 'numeric', 'min:0', 'max:255', function ($attribute, $value, $fail) { - if (($value * 10) % 5 !== 0) { - $fail("Le Montant de l'opération doit être divisible par 0.5 jour/homme"); - } - }, - ], - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'amount' => trans('Montant de l\'opération'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Informations/StoreInformationRequest.php b/app/Http/Requests/Bo/Informations/StoreInformationRequest.php deleted file mode 100644 index c1c18e0..0000000 --- a/app/Http/Requests/Bo/Informations/StoreInformationRequest.php +++ /dev/null @@ -1,52 +0,0 @@ - 'required|string|min:3|max:255', - 'message' => 'required|string|min:3|max:255', - 'type' => [ - 'required', - Rule::in(collect(InfoColorsEnum::cases())->pluck('value')->all()), - ], - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'title' => trans('Titre de l\'information'), - 'message' => trans('Message de l\'information'), - 'type' => trans('Type d\'information'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Informations/UpdateInformationRequest.php b/app/Http/Requests/Bo/Informations/UpdateInformationRequest.php deleted file mode 100644 index d8780c8..0000000 --- a/app/Http/Requests/Bo/Informations/UpdateInformationRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -merge([ - 'tasks' => request()->tasks ? \collect(json_decode(request()->tasks)) - ->map(function ($task) { - return \array_intersect_key((array)$task, Invoice::getTaskStructure()); - })->toArray() : [], - 'show_days' => $this->show_days ? true : false, - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'firstname' => 'required|string|min:3|max:255', - 'lastname' => 'required|string|min:3|max:255', - 'object' => 'required|string|min:3|max:255', - 'tasks' => 'required|array|min:1', - 'tasks.*' => 'required|array', - 'tasks.*.days' => 'required|numeric', - 'tasks.*.amount' => 'required|numeric', - 'tasks.*.desc' => 'required|string|min:10', - 'tasks.*.type' => [ - 'required', new Enum(TaskTypeEnum::class) - ], - 'tasks.*.package' => 'required_if:tasks.*.type,' . TaskTypeEnum::package->value . - '|nullable|exists:packages,id', - 'comment' => 'sometimes|nullable|string|min:15', - 'show_days' => 'required|boolean', - 'site_id' => 'required|integer|exists:sites,id', - 'company_id' => 'required|integer|exists:companies,id', - 'invoiced_to_id' => 'required|integer|exists:companies,id', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'firstname' => trans('Prénom de la personne associée'), - 'lastname' => trans('Nom de la personne associée'), - 'object' => trans('Objet du devis'), - 'tasks' => trans('Tâches du devis'), - 'tasks.*' => trans('Tâches du devis'), - 'tasks.*.days' => trans('Nombre de jours dédiés à la tâche'), - 'tasks.*.amount' => trans('Montant dédié à la tâche'), - 'tasks.*.desc' => trans('Description dédié à la tâche'), - 'tasks.*.type' => trans('Type de tâche'), - 'tasks.*.package' => trans('Forfait dédié à la tâche'), - 'comment' => trans('Commentaire du devis'), - 'show_days' => trans('Visibilité des jours'), - 'site_id' => trans('Site associé'), - 'company_id' => trans('Companie associé'), - 'invoiced_to_id' => trans('Entité à facturer'), - 'signed_date' => trans('Date de signature du Devis'), - 'sent_client_date' => trans('Date d\'envoi du Devis au client'), - 'sent_accounting_date' => trans('Date d\'envoi du Devis à la comptabilité'), - 'status' => trans('État du devis'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php b/app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php deleted file mode 100644 index fe65552..0000000 --- a/app/Http/Requests/Bo/Invoices/UpdateInvoiceRequest.php +++ /dev/null @@ -1,49 +0,0 @@ -route('invoice'); - if ($model->status->value === InvoiceStatusEnum::opened->value) { - if (!$model->sent_client_date) { - $rules = array_merge($rules, parent::rules()); - } - $rules = array_merge($rules, [ - 'comment' => 'sometimes|nullable|string|min:15', - 'sent_client_date' => 'required_with:signed_date,sent_accounting_date|sometimes|nullable|date', - 'signed_date' => 'required_with:sent_accounting_date|sometimes|nullable|date', - 'sent_accounting_date' => 'sometimes|nullable|date', - 'status' => [ - 'required', - new Enum(InvoiceStatusEnum::class), - //phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) use ($model) { - if ( - (intval($value) === InvoiceStatusEnum::archived->value) && - (is_null($model->sent_client_date) || - is_null($model->signed_date) || - is_null($model->sent_accounting_date)) - ) { - $fail(__('Le status :status doit être assigné lorsque les 3 dates sont saisies', [ - 'status' => InvoiceStatusEnum::archived->label() - ])); - } - }, - ], - ]); - } //end if - return $rules; - } -} diff --git a/app/Http/Requests/Bo/Labels/StoreLabelRequest.php b/app/Http/Requests/Bo/Labels/StoreLabelRequest.php deleted file mode 100644 index f1235d7..0000000 --- a/app/Http/Requests/Bo/Labels/StoreLabelRequest.php +++ /dev/null @@ -1,49 +0,0 @@ - 'required|string|min:2|max:255|unique:labels,name', - 'color' => [ - 'required', - new Hex(), - ], - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('validation.attributes.name'), - 'color' => trans('validation.attributes.color'), - ]; - } -} diff --git a/app/Http/Requests/Bo/Labels/UpdateLabelRequest.php b/app/Http/Requests/Bo/Labels/UpdateLabelRequest.php deleted file mode 100644 index bb08e9b..0000000 --- a/app/Http/Requests/Bo/Labels/UpdateLabelRequest.php +++ /dev/null @@ -1,18 +0,0 @@ - 'required|string|min:2|max:255|unique:labels,name,' . $this->route('label')->id . ',id', - ]); - } -} diff --git a/app/Http/Requests/Bo/LinkTicket.php b/app/Http/Requests/Bo/LinkTicket.php deleted file mode 100644 index cc8624b..0000000 --- a/app/Http/Requests/Bo/LinkTicket.php +++ /dev/null @@ -1,39 +0,0 @@ -isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - $ticket = $this->route('ticket'); - return [ - 'linked_ticket_id' => [ - 'required', - 'numeric', - 'exists:tickets,id', - 'not_in:' . $ticket->id, - ] - ]; - } -} diff --git a/app/Http/Requests/Bo/Packages/StorePackageRequest.php b/app/Http/Requests/Bo/Packages/StorePackageRequest.php deleted file mode 100644 index 7445846..0000000 --- a/app/Http/Requests/Bo/Packages/StorePackageRequest.php +++ /dev/null @@ -1,59 +0,0 @@ -merge([ - 'published' => $this->boolean('published'), - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|string|min:3|max:255', - 'amount' => 'required|numeric|min:0|regex:/^\d+(\.\d{1,2})?$/', - 'published' => 'required|boolean', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom'), - 'amount' => trans('Montant (par jour)'), - 'published' => trans('Publication') - ]; - } -} diff --git a/app/Http/Requests/Bo/Packages/UpdatePackageRequest.php b/app/Http/Requests/Bo/Packages/UpdatePackageRequest.php deleted file mode 100644 index dc8ae54..0000000 --- a/app/Http/Requests/Bo/Packages/UpdatePackageRequest.php +++ /dev/null @@ -1,7 +0,0 @@ - 'required|string|min:3|max:255', - 'users' => 'nullable|array', - 'users.*.id' => 'required|exists:users,id', - 'gitlab_project_id' => 'nullable', - 'project_manager_id' => 'nullable|exists:users,id', - 'url_re7' => 'nullable|url', - 'url_prod' => 'nullable|url' - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom du site'), - 'users' => trans('Utilisateurs associés au site'), - 'users.*.id' => trans('Élément parmis les Utilisateurs associés au site'), - 'gitlab_project_id' => trans('ID du dépôt Gitlab'), - 'project_manager_id' => trans('Chef de projet'), - 'url_re7' => trans('Url de RECETTE'), - 'url_prod' => trans('Url de prod') - ]; - } -} diff --git a/app/Http/Requests/Bo/Sites/UpdateSiteRequest.php b/app/Http/Requests/Bo/Sites/UpdateSiteRequest.php deleted file mode 100644 index 2f665be..0000000 --- a/app/Http/Requests/Bo/Sites/UpdateSiteRequest.php +++ /dev/null @@ -1,7 +0,0 @@ -check(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'search' => 'nullable|string', - 'sort_way' => 'sometimes|in:asc,desc', - 'status' => [ - 'sometimes', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketStatusEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketStatusEnum::toLabels()) - ])); - } - } - ], - 'pr' => 'sometimes|int|exists:sites,id' - ]; - } -} diff --git a/app/Http/Requests/Bo/StoreTicket.php b/app/Http/Requests/Bo/StoreTicket.php deleted file mode 100644 index 12fb6fa..0000000 --- a/app/Http/Requests/Bo/StoreTicket.php +++ /dev/null @@ -1,130 +0,0 @@ -check(); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation() - { - /** @var \App\Models\User|null */ - $user = auth()->user(); - if ($user) { - if (!$user->isAdmin()) { - $this->merge([ - 'status' => TicketStatusEnum::new->value, - 'is_internal' => false, - ]); - } else { - $this->merge([ - 'is_internal' => $this->is_internal ? true : false, - ]); - } - } - $this->merge([ - 'labels' => $this->labels ?? [] - ]); - } - - - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - /** @var \App\Models\User */ - $user = auth()->user(); - return [ - 'site_id' => [ - 'required', - 'exists:sites,id', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - /** @var \App\Models\User */ - $user = auth()->user(); - if ($user->isAdmin()) { - return; - } - if (!in_array($value, $user->sites()->pluck('id')->all())) { - $fail(__('Veuillez choisir entre :values', [ - 'values' => $user->sites()->pluck('name')->implode(',') - ])); - } - } - ], - 'type' => [ - 'required', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketTypeEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketTypeEnum::toLabels()) - ])); - } - } - ], - 'status' => [ - 'required', - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - function ($attribute, $value, $fail) { - if (!in_array($value, TicketStatusEnum::toValues())) { - $fail(__('Veuillez choisir entre :values', [ - 'value' => implode(',', TicketStatusEnum::toLabels()) - ])); - } - } - ], - 'date_mep' => 'nullable|date', - 'text' => [ - 'required', - 'string', - 'min:40', - function ($attribute, $value, $fail) { - $forbidden = ['merci de', 'merci de']; - foreach ($forbidden as $word) { - if (stripos(strtolower($value), $word) !== false) { - $fail( - "Le champs 'Description du ticket' contient la chaine de caractère non autorisée suivante : $word" - ); - } - } - }, - ], - 'title' => 'required|string|between:3,255', - 'file_tickets' => 'sometimes|array', - 'file_tickets.*' => 'mimes:pptx,docx,xlsx,csv,txt,jpeg,jpg,png,pdf,svg|max:2048', - 'is_internal' => 'required|boolean', - 'labels' => 'sometimes|array', - 'labels.*' => [ - // @phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - 'required', 'exists:labels,id', function ($attribute, $value, $fail) use ($user) { - if (!$user->can('assignLabels', Ticket::class)) { - $fail(trans('Vous n\'êtes pas autorisé à modifier cette valeur')); - } - } - ] - ]; - } -} diff --git a/app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php b/app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php deleted file mode 100644 index 759f50f..0000000 --- a/app/Http/Requests/Bo/TicketTypes/UpdateTicketTypeRequest.php +++ /dev/null @@ -1,44 +0,0 @@ - 'required|string|min:3|max:255', - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'type' => trans('Type'), - 'template' => trans('Template'), - ]; - } -} diff --git a/app/Http/Requests/Bo/UpdateChangeOrderRequest.php b/app/Http/Requests/Bo/UpdateChangeOrderRequest.php deleted file mode 100644 index d6be727..0000000 --- a/app/Http/Requests/Bo/UpdateChangeOrderRequest.php +++ /dev/null @@ -1,42 +0,0 @@ -check(); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation(): void - { - $this->merge([ - 'direction' => $this->route('direction') === 'up' ? true : false - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - return [ - 'direction' => 'required|boolean', - ]; - } -} diff --git a/app/Http/Requests/Bo/UpdateMessage.php b/app/Http/Requests/Bo/UpdateMessage.php deleted file mode 100644 index 32f1bb1..0000000 --- a/app/Http/Requests/Bo/UpdateMessage.php +++ /dev/null @@ -1,35 +0,0 @@ -user(); - - return auth()->check() && $user->isAdmin(); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - /** @var \App\Models\User */ - $user = auth()->user(); - return [ - 'message' => 'required|min:' . ($user->isAdmin() ? '5' : '20'), - ]; - } -} diff --git a/app/Http/Requests/Bo/UpdateTicket.php b/app/Http/Requests/Bo/UpdateTicket.php deleted file mode 100644 index 2bde3b8..0000000 --- a/app/Http/Requests/Bo/UpdateTicket.php +++ /dev/null @@ -1,22 +0,0 @@ -user())) { - return false; - } - return auth()->check() and ($user->isAdmin() or - optional(request()->route()->ticket)->created_by === $user->id - ); - } -} diff --git a/app/Http/Requests/Bo/UpdateTicketPriorityRequest.php b/app/Http/Requests/Bo/UpdateTicketPriorityRequest.php deleted file mode 100644 index 79c4a06..0000000 --- a/app/Http/Requests/Bo/UpdateTicketPriorityRequest.php +++ /dev/null @@ -1,57 +0,0 @@ -check(); - } - - /** - * Prepare the data for validation. - * - * @return void - */ - protected function prepareForValidation(): void - { - $this->ticket = $this->route('ticket'); - $max = Ticket::query()->where('site_id', $this->ticket->site_id)->max('order'); - - $this->merge([ - 'priority' => min($this->integer('priority'), $max) - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules(): array - { - return [ - 'priority' => [ - 'required', - 'integer', - 'min:1', - function ($attribute, $value, $fail) { - if ($this->ticket && intval($value) === $this->ticket->order) { - $fail("La valeur de {$attribute} doit être différente de la valeur actuelle."); - } - }, - ], - ]; - } -} diff --git a/app/Http/Requests/Bo/Users/FavouriteSiteRequest.php b/app/Http/Requests/Bo/Users/FavouriteSiteRequest.php deleted file mode 100644 index 9a7935d..0000000 --- a/app/Http/Requests/Bo/Users/FavouriteSiteRequest.php +++ /dev/null @@ -1,39 +0,0 @@ - [ - 'nullable', - 'exists:sites,id', - Rule::in($user->sites->pluck('id')), - ], - ]; - } -} diff --git a/app/Http/Requests/Bo/Users/StoreUserRequest.php b/app/Http/Requests/Bo/Users/StoreUserRequest.php deleted file mode 100644 index 0482610..0000000 --- a/app/Http/Requests/Bo/Users/StoreUserRequest.php +++ /dev/null @@ -1,70 +0,0 @@ -merge([ - 'gitlab_id' => \boolval($this->input('gitlab_id')) ? $this->input('gitlab_id') : null - ]); - } - - /** - * Get the validation rules that apply to the request. - * - * @return array - */ - public function rules() - { - return [ - 'name' => 'required|string|min:3|max:255', - 'email' => 'email|required|unique:users,email', - 'role' => [ - 'required', - Rule::in(collect(RoleEnum::cases())->pluck('value')->all()), - ], - 'sites' => 'nullable|array', - 'sites.*.id' => 'required|exists:sites,id', - 'gitlab_id' => 'nullable|integer|unique:users,gitlab_id' - ]; - } - - /** - * Get custom attributes for validator errors. - * - * @return array - */ - public function attributes(): array - { - return [ - 'name' => trans('Nom de l\'utilisateur'), - 'email' => trans('Email de l\'utilisateur'), - 'role' => trans('Rôle de l\'utilisateur'), - 'sites' => trans('Sites associés à l\'utilisateur'), - 'sites.*.id' => trans('Élément parmis les sites associés à l\'utilisateur'), - 'gitlab_id' => trans("ID de l'utilisateur Gitlab") - ]; - } -} diff --git a/app/Http/Requests/Bo/Users/UpdateUserRequest.php b/app/Http/Requests/Bo/Users/UpdateUserRequest.php deleted file mode 100644 index 9c1986a..0000000 --- a/app/Http/Requests/Bo/Users/UpdateUserRequest.php +++ /dev/null @@ -1,19 +0,0 @@ - 'email|required|unique:users,email,' . $this->route('user')->id . ',id', - 'gitlab_id' => 'nullable|integer|unique:users,gitlab_id,' . $this->route('user')->id . ',id' - ]); - } -} diff --git a/app/Http/Resources/UserLabeledResource.php b/app/Http/Resources/UserLabeledResource.php deleted file mode 100644 index 712f04c..0000000 --- a/app/Http/Resources/UserLabeledResource.php +++ /dev/null @@ -1,30 +0,0 @@ -collection->mapWithKeys(function (User $user, $key) { - return [ - $key => [ - 'label' => sprintf('%d %s', $user->id, $user->name), - 'key' => $user->id - ] - ]; - }); - } -} diff --git a/app/Interfaces/SpsConfigInterface.php b/app/Interfaces/SpsConfigInterface.php deleted file mode 100644 index 1e87835..0000000 --- a/app/Interfaces/SpsConfigInterface.php +++ /dev/null @@ -1,42 +0,0 @@ -where('status', TicketStatusEnum::production) - ->orWhere('status', TicketStatusEnum::waitingValidation); - })->whereDate('updated_at', '<=', Carbon::now()->subDays($limitDays)) - ->whereDoesntHave('messages', function ($q) use ($limitDays) { - $q->whereDate('updated_at', '>', Carbon::now()->subDays($limitDays)); - })->get(); - /** @var \App\Models\Ticket $ticket */ - foreach ($tickets as $ticket) { - /** @var \App\Enums\Tickets\TicketStatusEnum */ - $oldStatus = $ticket->status; - $ticket->status = TicketStatusEnum::archived; - $ticket->saveQuietly(); - event(new TicketStatusChanged($ticket, $oldStatus, null, $message)); - event(new NotifySubscriptions($ticket, $message, collect([$ticket->user]))); - } - } -} diff --git a/app/Jobs/ExportTicketsState.php b/app/Jobs/ExportTicketsState.php deleted file mode 100644 index 7d9ec7b..0000000 --- a/app/Jobs/ExportTicketsState.php +++ /dev/null @@ -1,117 +0,0 @@ -header; - - // Récupération des tickets. - Ticket::query() - ->whereNotIn( - 'status', - [TicketStatusEnum::archived, TicketStatusEnum::production] - ) - ->orderBy(Site::select('name') - ->whereColumn('sites.id', 'tickets.site_id')) - ->orderBy('order')->get()->each(function (Ticket $ticket) use (&$csvlines, &$lastSiteId, &$order) { - $csvlines[] = [ - "", - $ticket->site->name, - $ticket->id, - $lastSiteId === $ticket->site_id ? $order + 1 : 1, - $ticket->date_mep?->format('d-m-Y') ?? 'No MEP Date', - $ticket->type->label(), - $ticket->title, - $ticket->status->label(), - $ticket->projectManager->name ?? 'No PM', - $ticket->assignedUser()->name ?? 'No Assigned User', - Carbon::create($ticket->getRawOriginal('last_activity'))->format('d-m-Y H:i:s'), - $ticket->created_at->format('d-m-Y H:i:s'), - route('bo.ticket.show', $ticket->id), - $ticket->gitlab_issue ?? 'No GitLab Issue' - ]; - - $order = $lastSiteId === $ticket->site_id ? $order + 1 : 1; - $lastSiteId = $ticket->site_id; - }); - - Notification::route('mail', config('mail.MAIL_ADMIN')) - ->notify(new ExportTicketsStateNotification($this->array2csv($csvlines, ";"))); - } - - /** - * converts an array to a csv stream - * - * @param array $data - * @param string $delimiter - * @param string $enclosure - * @param string $escape_char - * - * @return string - */ - protected function array2csv( - array $data, - string $delimiter = ',', - string $enclosure = '"', - string $escape_char = "\\" - ) { - $f = fopen('php://memory', 'r+'); - - // UTF-8 BOM. - $BOM = "\xEF\xBB\xBF"; - fwrite($f, $BOM); - - foreach ($data as $item) { - fputcsv($f, $item, $delimiter, $enclosure, $escape_char); - } - rewind($f); - return stream_get_contents($f); - } -} diff --git a/app/Jobs/SendTicketMentionMail.php b/app/Jobs/SendTicketMentionMail.php deleted file mode 100644 index eb429fe..0000000 --- a/app/Jobs/SendTicketMentionMail.php +++ /dev/null @@ -1,47 +0,0 @@ -user = $user; - $this->mail = $mail; - } - - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - Mail::to($this->user->email)->send($this->mail); - Log::debug(sprintf('Mention mail sent to %s', $this->user->email)); - } -} diff --git a/app/Jobs/SendUserCreatedEmail.php b/app/Jobs/SendUserCreatedEmail.php deleted file mode 100644 index 56fe1bc..0000000 --- a/app/Jobs/SendUserCreatedEmail.php +++ /dev/null @@ -1,45 +0,0 @@ -user = $user->withoutRelations(); - } - - /** - * Execute the job. - * - * @return void - */ - public function handle() - { - Mail::to(['email' => $this->user->email]) - ->send(new UserCreatedMail($this->user)); - Log::debug(sprintf('Sent %s to %s', UserCreatedMail::class, $this->user->email)); - } -} diff --git a/app/Jobs/UpdateIssueLabels.php b/app/Jobs/UpdateIssueLabels.php deleted file mode 100644 index 127c1cb..0000000 --- a/app/Jobs/UpdateIssueLabels.php +++ /dev/null @@ -1,85 +0,0 @@ -ticket = $ticket; - $this->requestStatus = $requestStatus; - } - - /** - * Execute the job. - */ - public function handle(): void - { - $oldStatus = $this->ticket->status; - $requestStatus = (int) $this->requestStatus; - $gitlabIssue = $this->getGitlabIssue($this->ticket->site->gitlab_project_id, $this->ticket->gitlab_issue); - - $issueLabels = $gitlabIssue['labels']; - - if ($oldStatus === TicketStatusEnum::waiting && $requestStatus !== TicketStatusEnum::waiting->value) { - $issueLabels = array_values(array_diff($issueLabels, ['g-wait'])); - } - - switch ($requestStatus) { - case TicketStatusEnum::takenInAccount->value: - $newLabels = ['g-to-dispatch']; - $updatedLabels = array_unique(array_merge($issueLabels, $newLabels)); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::waiting->value: - $newLabels = ['g-wait']; - $updatedLabels = array_unique(array_merge($issueLabels, $newLabels)); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::waitingValidation->value: - $removeLabels = ['g-to-estimate']; - $updatedLabels = array_diff($issueLabels, $removeLabels); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::recetteValidated->value: - $newLabels = ['g-re7-ok', 'to-prod']; - $updatedLabels = array_unique(array_merge($issueLabels, $newLabels)); - - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $updatedLabels); - break; - case TicketStatusEnum::archived->value: - $updatedIssue = $this->closeGitlabIssue($gitlabIssue['project_id'], $gitlabIssue['iid'], $issueLabels); - break; - default: - $updatedIssue = $this->updateGitlabIssueLabels($gitlabIssue['project_id'], $gitlabIssue['iid'], $issueLabels); - break; - } - } -} diff --git a/app/Jobs/WarnBeforeAutoCloseTicket.php b/app/Jobs/WarnBeforeAutoCloseTicket.php deleted file mode 100644 index b77bf33..0000000 --- a/app/Jobs/WarnBeforeAutoCloseTicket.php +++ /dev/null @@ -1,44 +0,0 @@ -where('status', TicketStatusEnum::production) - ->orWhere('status', TicketStatusEnum::waitingValidation); - })->whereDate('updated_at', '<=', Carbon::now()->subDays($warningDays)) - ->whereDoesntHave('messages', function ($q) use ($warningDays) { - $q->whereDate('updated_at', '>', Carbon::now()->subDays($warningDays)); - })->get(); - foreach ($tickets as $ticket) { - $date = $ticket->messages->sortByDesc('updated_at')->first()->updated_at ?? $ticket->updated_at; - $limitDate = $date->addDays($warningDays); - if (intval(Carbon::now()->diff($limitDate)->format('%a')) >= $warningDays) { - event(new NotifySubscriptions($ticket, $messageToAll, collect([$ticket->user]))); - } - event(new NotifyTicketCreator($ticket, sprintf( - $messageToUser, - intval($date->diff(Carbon::now()->subDays($warningDays))->format('%a') + 1) - ))); - } - } -} diff --git a/app/Lib/Helpers/CollectionHelper.php b/app/Lib/Helpers/CollectionHelper.php deleted file mode 100644 index b9e9ecd..0000000 --- a/app/Lib/Helpers/CollectionHelper.php +++ /dev/null @@ -1,64 +0,0 @@ -count(); - - return self::paginator($results->forPage($page, $pageSize), $total, $pageSize, $page, [ - 'path' => Paginator::resolveCurrentPath(), - 'pageName' => 'page', - ]); - } - - /** - * Create a new length-aware paginator instance. - * - * @param \Illuminate\Support\Collection $items - * @param integer $total - * @param integer $perPage - * @param integer $currentPage - * @param array $options - * @return \Illuminate\Pagination\LengthAwarePaginator - */ - protected static function paginator(Collection $items, int $total, int $perPage, int $currentPage, array $options) - { - return Container::getInstance()->makeWith(LengthAwarePaginator::class, [ - 'items' => $items, - 'total' => $total, - 'perPage' => $perPage, - 'currentPage' => $currentPage, - 'options' => $options - ]); - } -} diff --git a/app/Lib/Helpers/ExceptionsHelper.php b/app/Lib/Helpers/ExceptionsHelper.php deleted file mode 100644 index 4813275..0000000 --- a/app/Lib/Helpers/ExceptionsHelper.php +++ /dev/null @@ -1,190 +0,0 @@ -setModules([]); - $event->setOsContext(null); - - /** @var \Sentry\ExceptionDataBag[] */ - $exceptionBag = []; - foreach ($event->getExceptions() as $exceptionDataBag) { - $exceptionBag[] = self::getAnonymizedSentryException($exceptionDataBag); - } - $event->setExceptions($exceptionBag); - return $event; - } - - /** - * Anonimize Sentry Exception bag - * - * @param \Sentry\ExceptionDataBag $exceptionDataBag - * @return \Sentry\ExceptionDataBag - */ - private static function getAnonymizedSentryException( - \Sentry\ExceptionDataBag $exceptionDataBag - ): \Sentry\ExceptionDataBag { - $exceptionDataBag->setValue(self::getAnonymizedMessage($exceptionDataBag->getValue())); - if ($stackTrace = $exceptionDataBag->getStacktrace()) { - $exceptionDataBag->setStacktrace(self::getAnonymizedSentryStackTrace($stackTrace)); - } - return $exceptionDataBag; - } - - /** - * Anonymise sentry stacktrace - * - * @param \Sentry\Stacktrace $stackTrace - * @return \Sentry\Stacktrace - */ - private static function getAnonymizedSentryStackTrace(\Sentry\Stacktrace $stackTrace): \Sentry\Stacktrace - { - /** @var \Sentry\Frame[] */ - $frames = \array_reverse($stackTrace->getFrames(), true); - $i = \count($frames) - 1; - // * Remove all but keep first (index.php). - while ($i-- > 0) { - $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); - } - foreach ($frames as $index => $frame) { - $frame->setPostContext([]); - $frame->setPreContext([]); - $frame->setContextLine(''); - $frame->setVars(self::getAnonymizedSentryParams($frame->getVars())); - $stackTrace->addFrame($frame); - if ($index === 0) { - $stackTrace->removeFrame(count($stackTrace->getFrames()) - 1); - } - } - return $stackTrace; - } - - /** - * Get anonymized sentry params - * - * @param mixed[] $params - * @return string[] - */ - private static function getAnonymizedSentryParams(array $params): array - { - foreach ($params as &$param) { - $type = \strtolower(\gettype($param)); - if (\is_string($param)) { - $type = \explode(' ', \trim(strtolower($param)))[0] ?? null; - } - switch (true) { - case $type === 'lambda': - case $type === 'object': - continue 2; - case $type === 'array' and \is_array($param): - $param = sprintf('Array(%d)', \count($param)); - continue 2; - default: - if (\is_numeric($param)) { - $param = \ucfirst($type); - continue 2; - } - if (\is_string($param)) { - $param = sprintf('String(%d)', \strlen($param)); - continue 2; - } - } //end switch - } //end foreach - return $params; - } - - - /** - * Anonymize at least Sql queries - * - * @param string $message - * @return string - */ - public static function getAnonymizedMessage(string $message): string - { - $message = \preg_replace('/^(.*)( \(SQL:.*\))$/', '$1', $message) ?? $message; - if ($sqlPos = \strpos($message, 'to use near')) { - $message = \mb_strcut($message, 0, $sqlPos); - } - return $message; - } - - /** - * Anonymize stack trace - * - * @param \Throwable $e - * @return string - */ - public static function getAnonymizedStackTrace(\Throwable $e): string - { - $projectPath = \realpath(\sprintf('%s/../', \app_path())); - $traceStack = $e->getTrace(); - $traceStr = ''; - $maxStackStage = 0; - foreach ($traceStack as $stackStage => $stack) { - $maxStackStage = $stackStage; - $traceStr .= \sprintf( - '#%s %s(%d): ', - $stackStage, - str_replace($projectPath, '', $stack['file'] ?? ''), - $stack['line'] ?? '' - ); - if (isset($stack['class'])) { - $traceStr .= "{$stack['class']}->{$stack['function']}("; - if (isset($stack['args'])) { - $traceStr .= self::handleArgs($stack); - } - $traceStr .= ")\n"; - } elseif (isset($stack['function'])) { - $traceStr .= "{$stack['function']}("; - if (isset($stack['args'])) { - $traceStr .= self::handleArgs($stack); - } - $traceStr .= ")\n"; - } - } //end foreach - $maxStackStage++; - $traceStr .= "#$maxStackStage {main}"; - return $traceStr; - } - - /** - * Handle Args - * - * @param array $stack - * @return string - */ - public static function handleArgs(array $stack): string - { - $traceArgs = ''; - $argsCount = count($stack['args']); - for ($i = 0; $i < $argsCount; $i++) { - $type = \gettype($stack['args'][$i]); - switch ($type) { - case 'object': - $traceArgs .= sprintf('Object(%s)', \get_class($stack['args'][$i])); - break; - case 'array': - $traceArgs .= sprintf('Array(%d)', \count($stack['args'][$i])); - break; - case 'string': - $traceArgs .= sprintf('String(%d)', \strlen($stack['args'][$i])); - break; - default: - $traceArgs .= \gettype($stack['args'][$i]); - } - $traceArgs .= ($i !== ($argsCount - 1) ? ',' : ''); - } - return $traceArgs; - } -} diff --git a/app/Lib/Helpers/FileStorageHelper.php b/app/Lib/Helpers/FileStorageHelper.php deleted file mode 100644 index a6a783d..0000000 --- a/app/Lib/Helpers/FileStorageHelper.php +++ /dev/null @@ -1,452 +0,0 @@ -{$attribute}), '/'); - if (\strpos($path, 'storage') !== 0) { - return; - } - $path = ToolboxHelper::mbReplace('storage/', '', $path); - if (Storage::disk('public')->exists($path)) { - Storage::disk('public')->delete($path); - } - } - - /** - * Destroy the file associate with the attribute old value (before updated to DB). - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $attribute - * @param boolean $onlyIfUpdated - * @return void - */ - public static function removeOldFile(Model $model, string $attribute, bool $onlyIfUpdated = true): void - { - // * Ignore If removal has to be done only if the field has changed and it actually hasnt. - if ($onlyIfUpdated and $model->{$attribute} === ToolboxHelper::getOriginal($model, $attribute)) { - return; - } - $originalPath = \ltrim(\urldecode(ToolboxHelper::getOriginal($model, $attribute)), '/'); - if (\strpos($originalPath, 'storage') !== 0) { - return; - } - $originalPath = ToolboxHelper::mbReplace('storage/', '', $originalPath); - if (Storage::disk('public')->exists($originalPath)) { - Storage::disk('public')->delete($originalPath); - } - } - - /** - * Store a file using optimized storage strategy - * - * You can use filename param to overload file name. - * - * @param \Illuminate\Database\Eloquent\Model $model The model that will hold the picture. - * @param \Illuminate\Http\UploadedFile|\SplFileInfo|string $file The file, will just return itself is string. - * @param boolean $slugify Force filename slugification. - * @param string|null $filename This string may be used to store the file. - * @param boolean $private To store the file in a private space. - * @return string - * @throws \RuntimeException If file copy fails. - * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh - */ - public static function storeFile( - Model $model, - $file, - bool $slugify = false, - string $filename = null, - bool $private = false - ): string { - // phpcs:enable - $tableName = $model->getTable(); - if (\is_object($file) and $file instanceof \Illuminate\Http\UploadedFile) { - /** @var \Illuminate\Http\UploadedFile $file */ - $filename = $filename ?: $file->getClientOriginalName(); - $filename = $slugify ? self::slugifyFileName($filename) : $filename; - $newPath = self::prepareMoveFile($tableName, $filename, $private); - $newPath = str_replace(storage_path('app'), '', $newPath); - - if (!$private) { - // * Store public file. - $file->storePubliclyAs( - pathinfo($newPath, \PATHINFO_DIRNAME), - pathinfo($newPath, \PATHINFO_BASENAME) - ); - return 'storage' . str_replace('/public', '', $newPath); - } - - $file->storeAs( - pathinfo($newPath, \PATHINFO_DIRNAME), - pathinfo($newPath, \PATHINFO_BASENAME) - ); - - return str_replace('/private/', '', $newPath); - } //end if - if (\is_object($file) and $file instanceof \SplFileInfo) { - /** @var \SplFileInfo $file */ - $filename = $filename ?: $file->getBaseName(); - $filename = $slugify ? self::slugifyFileName($filename) : $filename; - $newPath = self::prepareMoveFile($tableName, $filename, $private); - if (!File::copy($file->getRealPath(), $newPath)) { - throw new \RuntimeException(sprintf( - 'Failed to copy file %s to %s', - $file->getRealPath(), - $newPath - )); - } - return $private ? - \ltrim(str_replace(\storage_path('app/private'), '/storage/app/private', $newPath), '/') : - \ltrim(str_replace(\storage_path('app/public'), '/storage', $newPath), '/'); - } - return strval($file); - } - - /** - * Store all files from string attribute html - * If oldHtmlString is passed, a diff is done with new and old files - * to keep only files that are present in the new html string. - * - * @param \Illuminate\Database\Eloquent\Model $model The model that will hold the picture. - * @param string $htmlString The html string to parse and modify files. - * @param string|null $oldHtmlString The old html string with alreadyParsed - * files using storeModelFilesFromHtml. - * @return string Html with files pathes replaced using storage strategy. - */ - public static function storeModelFilesFromHtml( - Model $model, - string $htmlString, - string $oldHtmlString = null - ): string { - \collect(self::onlyUploadedFilesWithFileManager(self::findFilesInHtml($htmlString))) - ->each(function (string $path) use ($model, &$htmlString) { - /** @var \Illuminate\Filesystem\FilesystemAdapter */ - $disk = Storage::disk('uploads'); - $fileInfo = new \SplFileInfo($disk->path( - ToolboxHelper::mbReplace('/uploads/', '', \urldecode($path)) - )); - $htmlString = ToolboxHelper::mbReplace( - $path, - '/' . self::storeFile($model, $fileInfo, true), - $htmlString - ); - }); - - if ($oldHtmlString) { - self::removeOldModelFilesFromHtml($htmlString, $oldHtmlString); - } - - return $htmlString; - } - - /** - * Remove all old files from string attribute html that are stored in public that - * are nove present anymore on new html string - * - * @param string $newHtmlString The html string with alreadyParsed files using storeModelFilesFromHtml. - * @param string $oldHtmlString The old html string with alreadyParsed files using storeModelFilesFromHtml. - * @return void - */ - public static function removeOldModelFilesFromHtml(string $newHtmlString, string $oldHtmlString): void - { - self::removeOldFiles(self::findFilesInHtml($oldHtmlString), self::findFilesInHtml($newHtmlString)); - } - - /** - * Remove all old files that are stored in public that - * are not present anymore on new array files - * - * @param string[] $oldFiles The old array files. - * @param string[] $newFiles The new array files. - * @return void - */ - public static function removeOldFiles(array $oldFiles, array $newFiles): void - { - $oldFiles = \collect(self::onlyUploadedFilesWithFileStorageHelper($oldFiles)); - $filesToKeep = \collect(self::onlyUploadedFilesWithFileStorageHelper($newFiles)); - $filesToRemove = $oldFiles->diff($filesToKeep); - $filesToRemove->each(function (string $publicStorageFilePath) { - $path = ToolboxHelper::mbReplace('storage/', '', \ltrim(\urldecode($publicStorageFilePath), '/')); - if (Storage::disk('public')->exists($path)) { - Storage::disk('public')->delete($path); - } - }); - } - - /** - * Remove all files from string attribute html that are stored in public - * - * @param string $htmlString The html string with alreadyParsed files using storeModelFilesFromHtml. - * @return void - */ - public static function removeModelFilesOfHtml(string $htmlString): void - { - $filesToRemove = \collect(self::onlyUploadedFilesWithFileStorageHelper(self::findFilesInHtml($htmlString))); - $filesToRemove->each(function (string $publicStorageFilePath) { - $path = ToolboxHelper::mbReplace('storage/', '', \ltrim(\urldecode($publicStorageFilePath), '/')); - if (Storage::disk('public')->exists($path)) { - Storage::disk('public')->delete($path); - } - }); - } - - /** - * Find all occurence of files in html - * - * @param string $html - * @return array - */ - public static function findFilesInHtml(string $html): array - { - preg_match_all('/href="(?P.*)"|src="(?P.*)"|url="(?P.*)"/Um', $html, $m, PREG_SET_ORDER, 0); - return collect($m)->pluck('href')->filter() - ->concat(collect($m)->pluck('url')->filter()) - ->concat(collect($m)->pluck('src')->filter()) - ->all(); - } - - /** - * Filter array to get only uploaded files that exists - * on disk 'public' (using helper storage strategy) - * - * @param array $urls - * @return array - */ - public static function onlyUploadedFilesWithFileStorageHelper(array $urls): array - { - return \collect($urls)->unique() - // * Filter to get only /uploads and using app url or empty - ->filter(function (string $url) { - $path = \parse_url($url, \PHP_URL_PATH); - return \strpos(\ltrim($path, '/'), 'storage/modelfiles') === 0; - })->filter(function (string $url) { - $path = \parse_url($url, \PHP_URL_PATH); - return Storage::disk('public') - ->exists(ToolboxHelper::mbReplace('storage/', '', \ltrim(\urldecode($path), '/'))); - })->all(); - } - - /** - * Filter array to get only uploaded files that exists - * on disk 'uploads' - * - * @param array $urls - * @return array - */ - private static function onlyUploadedFilesWithFileManager(array $urls): array - { - return \collect($urls)->unique() - // * Filter to get only /uploads and using app url or empty - ->filter(function (string $url) { - $host = \parse_url($url, \PHP_URL_HOST); - $path = \parse_url($url, \PHP_URL_PATH); - return ($host === \parse_url(config('app.url'), PHP_URL_HOST) or \is_null($host)) and - \strpos(\ltrim($path, '/'), 'uploads') === 0; - })->filter(function (string $url) { - $path = \parse_url($url, \PHP_URL_PATH); - return Storage::disk('uploads') - ->exists(ToolboxHelper::mbReplace('uploads/', '', \ltrim(\urldecode($path), '/'))); - })->all(); - } - - /** - * Prepare storage path and return - * the file full path - * - * @param string $tableName Model table name. - * @param string $filename The basename for the file. - * @param boolean $private May the file be stored in a private dir. - * @return string - */ - private static function prepareMoveFile(string $tableName, string $filename, bool $private = false): string - { - // * Security filter - $filename = \htmlspecialchars($filename); - // * Security filter + beautifier - $filename = self::sanitizeFileName($filename); - // * Slugify filename - $ext = \pathinfo($filename, \PATHINFO_EXTENSION); - $filename = Str::slug(\pathinfo($filename, \PATHINFO_FILENAME)) . - (\strlen($ext) ? ".{$ext}" : ''); - - $folderPath = self::getStoragePath( - $private ? 'app/private/modelfiles' : 'app/public/modelfiles', - $tableName, - $filename, - $private - ); - $filename = self::getFileUniqueName($folderPath, $filename); - return "{$folderPath}/{$filename}"; - } - - /** - * Create sub folders to store files using pattern - * storage/modelfiles/posts/10/04/19/5f - * year/month/day/md5 first 2 letters - * - * @param string $storage_dir - * @param string $table - * @param string $filename - * @return string - */ - private static function getStoragePath(string $storage_dir, string $table, string $filename): string - { - $filenameHash = \md5($filename); - $pathFolder = \storage_path(sprintf( - '%s/%s/%s/%s/%s/%s', - $storage_dir, - $table, - gmdate('y'), - gmdate('m'), - gmdate('d'), - substr($filenameHash, 0, 2) - )); - if (!File::exists($pathFolder)) { - File::makeDirectory($pathFolder, 0755, true); - } - return $pathFolder; - } - - /** - * Get unique filename if the path is already occupied - * - * @param string $folderPath - * @param string $filename - * @return string - * @throws \RuntimeException If a unique filename cannot be obtained. - */ - private static function getFileUniqueName(string $folderPath, string $filename): string - { - $attempts = 0; - $maxAttempts = 20; - while (File::exists("{$folderPath}/{$filename}")) { - if ($attempts++ >= $maxAttempts) { - throw new \RuntimeException("Failed to have a unique filename for {$folderPath}/{$filename}"); - } - $filename = pathinfo($filename, \PATHINFO_FILENAME) . - \uniqid('-') . '.' . - pathinfo($filename, \PATHINFO_EXTENSION); - } - return $filename; - } - - /** - * Slugify the filename - * - * @param string $filename - * @return string - */ - public static function slugifyFileName(string $filename): string - { - return Str::slug(pathinfo($filename, \PATHINFO_FILENAME)) . '.' . pathinfo($filename, \PATHINFO_EXTENSION); - } - - /** - * Sanitize File name for uploaded files - * - * @param string $filename The original uploaded client file name. - * @param boolean $beautify Beautify the filename. - * @return string The sanitized file name. - */ - public static function sanitizeFileName(string $filename, bool $beautify = true): string - { - // * Sanitize filename - // phpcs:disable Generic.Files.LineLength.TooLong - $filename = preg_replace( - '~ - [<>:"/\\\|?*]| # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words - [\x00-\x1F]| # control characters http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx - [\x7F\xA0\xAD]| # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN - [#\[\]@!$&\'()+,;=]| # URI reserved https://tools.ietf.org/html/rfc3986#section-2.2 - [{}^\~`] # URL unsafe characters https://www.ietf.org/rfc/rfc1738.txt - ~x', - '-', - $filename - ); - // phpcs:enable - // * Avoids '.' '..' or '.hiddenFiles' . - $filename = Str::of($filename)->ltrim('.-'); - // * Optional beautification - if ($beautify) { - $filename = static::beautifyFilename($filename); - } - // * Maximize filename length to 255 bytes http://serverfault.com/a/9548/44086 - /** @var string */ - $extension = pathinfo($filename, \PATHINFO_EXTENSION); - /** @var string */ - $filename = pathinfo($filename, \PATHINFO_FILENAME); - - $encoding = mb_detect_encoding($filename); - $encoding = $encoding ? $encoding : null; - return \mb_strcut( - $filename, - 0, - 255 - (!empty($extension) ? strlen($extension) + 1 : 0), - $encoding - ) . (!empty($extension) ? ".$extension" : ''); - } - - /** - * Beautify a filename - * - * @param string $filename - * @return string - */ - private static function beautifyFilename(string $filename): string - { - // Reduce consecutive characters. - $filename = preg_replace([ - // * "file name.zip" becomes 'file-name.zip' - '/ +/', - // * "file___name.zip" becomes 'file-name.zip' - '/_+/', - // * "file---name.zip" becomes 'file-name.zip' - '/-+/' - ], '-', $filename); - $filename = preg_replace([ - // * "file--.--.-.--name.zip" becomes "file.name.zip" - '/-*\.-*/', - // * "file...name..zip" becomes "file.name.zip" - '/\.{2,}/' - ], '.', $filename); - // Lowercase for windows/unix interoperability http://support.microsoft.com/kb/100625 . - $filename = mb_strtolower($filename, mb_detect_encoding($filename)); - // * ".file-name.-" becomes "file-name" - $filename = trim($filename, '.-'); - return $filename; - } -} diff --git a/app/Lib/Helpers/ToolboxHelper.php b/app/Lib/Helpers/ToolboxHelper.php deleted file mode 100644 index 507eadc..0000000 --- a/app/Lib/Helpers/ToolboxHelper.php +++ /dev/null @@ -1,564 +0,0 @@ -[^\s@]+@([^\s@.,]+\.)+[^\s@.,]{2,})|(?P@\w*)|(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) { - $match = collect($matches)->first() ?? ''; - if (filter_var($match, FILTER_VALIDATE_EMAIL)) { - return strlen($match) ? "$match" : $match; - } elseif (isset($matches['user']) and strlen($matches['user'])) { - return sprintf( - '%s', - $matches['user'] - ); - } else { - $url = $match; - if (\strpos($url, 'http') === false and \strpos($url, 'https') === false) { - $url = sprintf( - '%s://%s', - config('app.env') !== 'local' ? 'https' : 'http', - $url - ); - } - $fsligthbox = self::isImageFile($url) ? 'data-fslightbox="gallery"' : ''; - return strlen($match) ? "$match" : $match; - } - }, - $text - ); - return nl2br($text); - } - - /** - * Check uri points to image file - * - * @param string $url - * @return boolean - */ - public static function isImageFile(string $url): bool - { - $m = []; - return \preg_match('/(\.png|\.jpg|\.jpeg|\.gif)$/', $url, $m) === 1; - } - - /** - * Check uri points to pdf file - * - * @param string $url - * @return boolean - */ - public static function isPdfFile(string $url): bool - { - $m = []; - return \preg_match('/(\.pdf)$/', $url, $m) === 1; - } - - /** - * Strip scheme (https) on oembed urls - * Only embed allowed are for MP4 self hosted videos right now - * - * https is force by ckeditor MediaElements which natively supports - * only cloud hosted medias (youtube, spotify etc..) - * - * @param string $input - * @return string - */ - public static function stripCkEditorSchemesOnMediaInputs(string $input): string - { - $input = \preg_replace('/(?<=)/m', '', $input); - return $input; - } - - /** - * Assert That no Back Office url is present on txt - * - * @param string $field - * @param string $text - * @return string - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - */ - public static function assertNoInternalBoUrls(string $field, string $text): string - { - $routes = Route::getRoutes(); - // * Url replace and email replace. - $text = preg_replace_callback( - // phpcs:ignore Generic.Files.LineLength.TooLong - '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) use ($routes, $field) { - $match = collect($matches)->first() ?? ''; - $url = $match; - try { - $request = Request::create($url); - // If a route is match then it do not throws exception. - if ( - \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && - trim($routes->match($request)->getPrefix() ?? '', '/') === 'bo' - ) { - // Removes the matched url. - throw ValidationException::withMessages([ - $field => trans( - 'crud.libs.toolbox.assertNoInternalBoUrls', - ['attribute' => $field] - ) - ]); - } - return $match; - } catch (NotFoundHttpException $e) { - return $match; - } - }, - $text - ); - return $text; - } - - /** - * Assert That only external url is present on txt - * - * @param string $field - * @param string $text - * @return string - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - */ - public static function assertNoInternalUrls(string $field, string $text): string - { - self::assertNoInternalBoUrls($field, $text); - $routes = Route::getRoutes(); - // * Url replace and email replace. - $text = preg_replace_callback( - // phpcs:ignore Generic.Files.LineLength.TooLong - '/(?P(?:http[s]?:\/\/.)?(?:www\.)?[-a-zA-Z0-9@%._\+~#=]{2,256}\.[a-z]{2,6}\b(?:[-a-zA-Z0-9@:%_\+.~#?&\/\/=]*))/', - function ($matches) use ($routes, $field) { - $match = collect($matches)->first() ?? ''; - $url = $match; - try { - $request = Request::create($url); - // If a route is match then it do not throws exception. - if ( - \parse_url(config('app.url'), \PHP_URL_HOST) === \parse_url($url, \PHP_URL_HOST) && - $routes->match($request) - ) { - // Removes the matched url. - throw ValidationException::withMessages([ - $field => trans( - 'crud.libs.toolbox.assertNoInternalUrls', - ['attribute' => $field, 'appname' => config('app.name')] - ) - ]); - } - return $match; - } catch (NotFoundHttpException $e) { - return $match; - } - }, - $text - ); - return $text; - } - - /** - * Assert Is Unique - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param array $columns - * @return void - * @throws \Illuminate\Validation\ValidationException If a model like this already exists. - */ - public static function assertIsUnique(Model $model, array $columns): void - { - $columns = collect($columns); - /** @var string|null */ - $firstColumn = $columns->pull($columns->keys()->first()); - if (!$firstColumn) { - return; - } - $modelClass = \get_class($model); - $uniqueRule = Rule::unique((new $modelClass())->getTable()); - if ($model->id) { - $uniqueRule->ignore($model->id); - } - $uniqueRule->where(function ($q) use ($model, $columns) { - $columns->map(function (string $column) use ($model, $q) { - $q->where($column, $model->{$column}); - }); - }); - Validator::make([$firstColumn => $model->{$firstColumn}], [ - $firstColumn => ['required', $uniqueRule] - ])->validate(); - } - - /** - * @param array $array1 - * @param array $array2 - * - * @return array - */ - public static function arrayMergeRecursiveDistinct(array &$array1, array &$array2): array - { - $merged = $array1; - foreach ($array2 as $key => &$value) { - if (is_array($value) && isset($merged[$key]) && is_array($merged[$key])) { - $merged[$key] = self::arrayMergeRecursiveDistinct($merged[$key], $value); - } else { - $merged[$key] = $value; - } - } - - return $merged; - } - - /** - * Mutltibyte string replace - * - * @param array|string $search - * @param array|string $replace - * @param array|string $subject - * @param integer $count - * @return array|string - */ - public static function mbReplace( - array|string $search, - array|string $replace, - array|string $subject, - int &$count = 0 - ): array|string { - if (!is_array($search) && is_array($replace)) { - return false; - } - if (is_array($subject)) { - // Call mb_replace for each single string in $subject . - foreach ($subject as &$string) { - $string = &self::mbReplace($search, $replace, $string, $count); - } - } elseif (is_array($search)) { - if (!is_array($replace)) { - foreach ($search as &$string) { - $subject = self::mbReplace($string, $replace, $subject, $count); - } - } else { - $n = max(count($search), count($replace)); - while ($n--) { - $subject = self::mbReplace(current($search), current($replace), $subject, $count); - next($search); - next($replace); - } - } - } else { - $parts = mb_split(preg_quote($search), $subject); - $count = count($parts) - 1; - $subject = implode($replace, $parts); - } //end if - return $subject; - } - - /** - * Asserts that the field is unique - * - * @param string $table - * @param string $field - * @param string|integer|float|boolean|null|array $value - * @param integer|null $id - * @param callable|null $query - * @return void - * @throws \Illuminate\Validation\ValidationException If the field is not unique. - */ - public static function assertFieldIsUnique( - string $table, - string $field, - string|int|float|bool|null|array $value, - ?int $id = null, - ?callable $query = null - ) { - if (!$query) { - Validator::make([$field => $value], [ - self::mbReplace('.', '\.', $field) => Rule::unique($table, $field)->ignore($id), - ], [ - self::mbReplace('.', '\.', "{$field}.unique") - => trans('crud.libs.toolbox.assertFieldIsUnique', ['attribute' => $field, 'value' => $value]) - ])->validate(); - return; - } - Validator::make([$field => $value], [ - $field => Rule::unique($table)->where($query)->ignore($id), - ], [ - $field . '.unique' => trans( - 'crud.libs.toolbox.assertFieldIsUnique', - ['attribute' => $field, 'value' => $value] - ) - ])->validate(); - } - - /** - * Get original polyfill with autotranslate behavior - * - * @param \Illuminate\Database\Eloquent\Model $model - * @param string $attribute - * @return mixed - */ - public static function getOriginal(Model $model, string $attribute): mixed - { - if (\in_array('Spatie\Translatable\HasTranslations', \class_uses_recursive($model))) { - return $model->getTranslation( - $attribute, - $model->getLocale(), - $model->useFallbackLocale() - ); - } - return $model->getOriginal($attribute); - } - - /** - * Dynamic model query - * - * @param string $defaultLocale - * @param \Illuminate\Contracts\Database\Eloquent\Builder $q - * @param string $column - * @param string $value - * @return \Illuminate\Contracts\Database\Eloquent\Builder - */ - public static function queryColumnWithLocales( - string $defaultLocale, - Builder $q, - string $column, - string $value - ): Builder { - $currentLocale = app()->currentLocale(); - $locales = collect(config('app.locales')) - ->mapWithKeys(fn(string $locale) => [$locale => $locale]); - if (!$locales->has($defaultLocale)) { - // * Remove default locale. - $locales->pull($defaultLocale); - } - if (!$locales->has($currentLocale)) { - // * Remove current locale. - $locales->pull($currentLocale); - } - - return $q->where(function (Builder $q) use ($defaultLocale, $currentLocale, $locales, $column, $value) { - // * Query default locale - $q->whereRaw("JSON_EXTRACT({$column}, '$.{$defaultLocale}') = '{$value}'"); - if ($defaultLocale !== $currentLocale) { - // * Query current locale - $q->whereRaw("JSON_EXTRACT({$column}, '$.{$currentLocale}') = '{$value}'"); - } - // * Query any other locale - $locales->each(fn($locale) => $q->orWhereRaw( - "JSON_EXTRACT({$column}, '$.{$locale}') = '{$value}'" - )); - }); - } - - /** - * Generates an array from a dot separated string - * - * @param string $path - * @param mixed $value - * @param string $separator - * @return array - */ - public static function dotStringToNestedArray(string $path, mixed $value, string $separator = '.'): array - { - $arr = $value; - $keys = array_reverse(explode($separator, $path)); - - foreach ($keys as $key) { - $arr = [$key => $arr]; - } - return $arr; - } - - /** - * Convert deeply an object to array - * - * @param array|object $input - * @return array - * @throws \RuntimeException If $input var is a scalar value. - */ - public static function objectToArray($input): array - { - // Only process if it's an object or array being passed to the function. - if (is_object($input) or is_array($input)) { - $ret = (array)$input; - foreach ($ret as &$item) { - // Recursively process EACH element only if not scalar. - $item = (is_object($item) or is_array($item)) ? - self::objectToArray($item) : $item; - } - return $ret; - } else { - throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input)); - } - } - - /** - * Convert deeply an array to object - * - * @param array|object $input - * @return object - * @throws \RuntimeException If $input var is a scalar value. - */ - public static function arrayToObject($input): object - { - // Only process if it's an object or array being passed to the function. - if (is_object($input) or is_array($input)) { - $ret = (object)$input; - foreach ($ret as &$item) { - // Recursively process EACH element only if not scalar. - $item = (is_object($item) or is_array($item)) ? - self::arrayToObject($item) : $item; - } - return $ret; - } else { - throw new \RuntimeException('Cannot handle $input of type ' . \gettype($input)); - } - } - - /** - * Validate picture - * - * @param string $attribute - * @param string|null $value - * @param callback $fail - * @param object $sizes - * @return void - */ - public static function validatePicture(string $attribute, string|null $value, callable $fail, object $sizes) - { - if (!($useStorage = Storage::exists($value)) and !File::exists($value)) { - $fail(trans(':attribute n\'existe pas dans le système de fichier', [ - 'attribute' => $attribute - ])); - return; - } - /** @var string */ - $fileFullPath = self::getUploadedFileFullPath($value, $useStorage); - if ( - !\in_array(self::getUploadedFileMimeType($value, $useStorage), [ - 'image/jpeg', - 'image/jpg', - 'image/png', - 'image/gif' - ]) - ) { - $fail(trans(':attribute doit être une image de type \'image/jpeg,image/jpg,image/png,image/gif\'', [ - 'attribute' => $attribute - ])); - } - if (!($dimensions = \getimagesize($fileFullPath)) or !isset($dimensions[0]) or !isset($dimensions[1])) { - $fail(trans(':attribute impossible de valider les dimensions', [ - 'attribute' => $attribute - ])); - } else { - $width = intval($dimensions[0]); - $height = intval($dimensions[1]); - - $xMessage = trans( - ":attribute la largeur doit être comprise entre {$sizes->minWith}px et {$sizes->maxWith}px" - ); - if ($sizes->minWith === $sizes->maxWith) { - $xMessage = trans(":attribute la largeur doit être de {$sizes->minWith}px"); - } - $yMessage = trans( - ":attribute la hauteur doit être comprise entre {$sizes->minWith}px et {$sizes->maxWith}px" - ); - if ($sizes->minHeight === $sizes->maxHeight) { - $yMessage = trans(":attribute la hauteur doit être de {$sizes->minWith}px"); - } - - if (($width < $sizes->minWith) or ($width > $sizes->maxWith)) { - $fail($xMessage); - } - if (($height < $sizes->minHeight) or ($height > $sizes->maxHeight)) { - $fail($yMessage); - } - } //end if - } - - /** - * Get the file full path - * - * @param string $value - * @param boolean $useStorage - * @return string - */ - private static function getUploadedFileFullPath(string $value, bool $useStorage): string - { - /** @var \Illuminate\Filesystem\FilesystemAdapter */ - $disk = Storage::disk(); - return !$useStorage ? (realpath($value) ?: $value) : $disk->path($value); - } - - /** - * Get the file mimetype - * - * @param string $value - * @param boolean $useStorage - * @return string|false - */ - private static function getUploadedFileMimeType(string $value, bool $useStorage) - { - return !$useStorage ? File::mimeType($value) : Storage::mimeType($value); - } - - /** - * Return a json in a good format for schedule. - * - * @param \Illuminate\Pagination\LengthAwarePaginator $collectionPaginated - * @param mixed $formatFunction - * @return \Illuminate\Http\JsonResponse - */ - public static function jsonPaginate( - LengthAwarePaginator $collectionPaginated, - mixed $formatFunction = null - ): \Illuminate\Http\JsonResponse { - $collectionFormatted = $collectionPaginated->getCollection() - ->map(function (Model $model) use ($formatFunction) { - $model->name = $formatFunction ? $model->$formatFunction($model) : $model->name; - $model->label = $formatFunction ? $model->$formatFunction($model) : $model->name; - $model->value = $model->id; - return $model; - }); - - $models = new \Illuminate\Pagination\LengthAwarePaginator( - $collectionFormatted, - $collectionPaginated->total(), - $collectionPaginated->perPage(), - $collectionPaginated->currentPage(), - [ - 'path' => config('app.url') . '/' . request()->path(), - 'query' => [ - 'page' => $collectionPaginated->currentPage() - ] - ] - ); - - return \response()->json($models ?? 500); - } -} diff --git a/app/Listeners/AddStatusMessages.php b/app/Listeners/AddStatusMessages.php deleted file mode 100644 index 1edf542..0000000 --- a/app/Listeners/AddStatusMessages.php +++ /dev/null @@ -1,103 +0,0 @@ -ticket_id = $event->ticket->id; - // * Le message system est privé si demandé (eg: Assignation à une personne). - $message->type = $event->is_private ? MessageTypeEnum::private : MessageTypeEnum::public; - if ($event->message) { - $message->message = $event->message; - } elseif ($event->user) { - $message->message = sprintf( - "%s %s %s", - $event->user->name, - trans('a modifié le statut en'), - $event->ticket->status->label() - ); - } else { - $message->message = sprintf( - "%s : %s", - trans('Le statut est passé à'), - $event->ticket->status->label() - ); - } - if ($event->status_changed) { - switch ($event->ticket->status) { - case TicketStatusEnum::new: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Votre ticket a été créé, nous allons en prendre connaissance.') - ); - break; - case TicketStatusEnum::estimateTodo: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Votre ticket nécessite une estimation, nous allons vous proposer un devis.') - ); - break; - case TicketStatusEnum::takenInAccount: - $message->message .= sprintf("
" . - trans('Votre ticket est dans le processus de traitement.') . "
"); - break; - case TicketStatusEnum::waiting: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Nous attendons une réponse de votre part pour procéder à la suite du traitement.') - ); - break; - case TicketStatusEnum::waitingValidation: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Nous attendons une validation de votre part pour procéder au traitement.') - ); - break; - case TicketStatusEnum::recette: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Le traitement à été réalisé et mis à disposition sur la plateforme de recette. - Vous pouvez vérifier que la solution mise en œuvre correspond à la demande.') - ); - break; - case TicketStatusEnum::production: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('La solution à été mise en ligne. - Vous pouvez vérifier sur le site de production que tout fonctionne comme attendu.') - ); - break; - case TicketStatusEnum::archived: - $message->message = sprintf( - "%s
%s
", - $message->message, - trans('Ce ticket est clos.') - ); - break; - } //end switch - } //end if - $message->save(); - } -} diff --git a/app/Listeners/SendNotificationMailToAdmin.php b/app/Listeners/SendNotificationMailToAdmin.php deleted file mode 100644 index 8498763..0000000 --- a/app/Listeners/SendNotificationMailToAdmin.php +++ /dev/null @@ -1,23 +0,0 @@ -ticket; - Mail::to(config('mail.MAIL_ADMIN')) - ->send(new TicketUpdate($ticket, $event->corpsMaj)); - } -} diff --git a/app/Listeners/SendNotificationMailToTicketCreator.php b/app/Listeners/SendNotificationMailToTicketCreator.php deleted file mode 100644 index edd52b6..0000000 --- a/app/Listeners/SendNotificationMailToTicketCreator.php +++ /dev/null @@ -1,23 +0,0 @@ -ticket; - Mail::to($ticket->user()->withTrashed()->first()->email) - ->send(new TicketUpdate($ticket, $event->corpsMaj)); - } -} diff --git a/app/Listeners/SendSubscriptionsNotificationsMail.php b/app/Listeners/SendSubscriptionsNotificationsMail.php deleted file mode 100644 index 1f46865..0000000 --- a/app/Listeners/SendSubscriptionsNotificationsMail.php +++ /dev/null @@ -1,37 +0,0 @@ -email ?? ''; - $ignoreUsers = $event->ignoreUsers ?? collect(); - foreach ($event->ticket->subscriptions as $sub) { - if ( - // * Ignore the message author (job in sync). - $sub->email !== $ignoreConnectedUserEmail and - // * Are there are users to notify - !$ignoreUsers->filter(function (User $user) use ($sub) { - return $user->email === $sub->email; - })->count() - ) { - Mail::to($sub->email) - ->send(new TicketUpdate($event->ticket, $event->corpsMaj)); - } - } - } -} diff --git a/app/Mail/NewTicket.php b/app/Mail/NewTicket.php deleted file mode 100644 index 70078e3..0000000 --- a/app/Mail/NewTicket.php +++ /dev/null @@ -1,40 +0,0 @@ -ticket = $ticket; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - $ticket = $this->ticket; - return $this->subject("[Support] Nouveau ticket n° $ticket->id - $ticket->title") - ->view('emails.new-ticket', compact('ticket')); - } -} diff --git a/app/Mail/TicketMention.php b/app/Mail/TicketMention.php deleted file mode 100644 index 0834c00..0000000 --- a/app/Mail/TicketMention.php +++ /dev/null @@ -1,47 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - $ticket = $this->ticket; - $corpsMaj = ToolboxHelper::plainToHtml($this->corpsMaj); - return $this->subject("[Support] Vous avez été mentionné sur le ticket n°$ticket->id - $ticket->title") - ->view('emails.ticket-mention', compact('ticket', 'corpsMaj')); - } -} diff --git a/app/Mail/TicketUpdate.php b/app/Mail/TicketUpdate.php deleted file mode 100644 index 3aafc3d..0000000 --- a/app/Mail/TicketUpdate.php +++ /dev/null @@ -1,47 +0,0 @@ -ticket = $ticket; - $this->corpsMaj = $corpsMaj; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - $ticket = $this->ticket; - $corpsMaj = \html_entity_decode(ToolboxHelper::plainToHtml($this->corpsMaj)); - return $this->subject("[Support][{$ticket->site->name}] Ticket n°$ticket->id - $ticket->title") - ->view('emails.ticket-update', compact('ticket', 'corpsMaj')); - } -} diff --git a/app/Mail/UserCreatedMail.php b/app/Mail/UserCreatedMail.php deleted file mode 100644 index 0019e4e..0000000 --- a/app/Mail/UserCreatedMail.php +++ /dev/null @@ -1,38 +0,0 @@ -user = $user; - } - - /** - * Build the message. - * - * @return $this - */ - public function build() - { - return $this - ->subject(sprintf('%s : Votre compte a été crée', config('app.name'))) - ->view('emails.mail-created') - ->text('emails.mail-created-plain') - ->with('user', $this->user) - ->with('pwd', $this->user->tmpPass); - } -} diff --git a/app/Models/Brand.php b/app/Models/Brand.php deleted file mode 100644 index b5513db..0000000 --- a/app/Models/Brand.php +++ /dev/null @@ -1,80 +0,0 @@ -sites) { - foreach (request()->sites as $siteId) { - $site = Site::where('id', $siteId)->firstOrFail(); - $site->brand_id = $brand->id; - $site->saveOrFail(); - } - } - } - - /** - * Delete all sites with the relationship. - * - * @param \App\Models\Brand $brand - * @return void - */ - public static function deleteSites(Brand $brand): void - { - foreach ($brand->sites as $site) { - $site->brand_id = null; - $site->saveOrFail(); - } - } - - // * RELATIONSHIPS - - /** - * HasMany Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function sites() - { - return $this->hasMany(Site::class); - } - - /** - * HasMany Account relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function accounts() - { - return $this->hasMany(Account::class); - } -} diff --git a/app/Models/Company.php b/app/Models/Company.php deleted file mode 100644 index 63cd49d..0000000 --- a/app/Models/Company.php +++ /dev/null @@ -1,55 +0,0 @@ -hasMany(Invoice::class); - } - - /** - * Return value attribute for belongsto search component - * - * @return \Illuminate\Database\Eloquent\Casts\Attribute - */ - protected function value(): Attribute - { - return new Attribute( - get: fn () => $this->id, - ); - } -} diff --git a/app/Models/Credit/Account.php b/app/Models/Credit/Account.php deleted file mode 100644 index 865b6da..0000000 --- a/app/Models/Credit/Account.php +++ /dev/null @@ -1,78 +0,0 @@ - AccountTypeEnum::class - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsTo Brand relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function brand() - { - return $this->belongsTo(Brand::class); - } - - /** - * HasOne Account relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasOne - */ - public function creditlogs() - { - return $this->HasOne(CreditLog::class, 'credit_account_id'); - } -} diff --git a/app/Models/Credit/CreditLog.php b/app/Models/Credit/CreditLog.php deleted file mode 100644 index dc8c250..0000000 --- a/app/Models/Credit/CreditLog.php +++ /dev/null @@ -1,88 +0,0 @@ - BalanceOperationEnum::class - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (self $model) { - $model->created_at = now(); - if ($model->type->equals(BalanceOperationEnum::debit)) { - $model->account->balance = $model->account->balance - $model->amount; - } - if ($model->type->equals(BalanceOperationEnum::credit)) { - $model->account->balance = $model->account->balance + $model->amount; - } - $model->account->saveOrFail(); - }); - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsToMany estimation relation (1 nullable) - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function estimation() - { - return $this->belongsToMany(Estimation::class, EstimationLog::class, 'credit_log_id', 'credit_estimation_id') - ->withTimestamps(); - } - - /** - * BelongsTo account relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function account() - { - return $this->belongsTo(Account::class, 'credit_account_id'); - } -} diff --git a/app/Models/Credit/Estimation.php b/app/Models/Credit/Estimation.php deleted file mode 100644 index 2069164..0000000 --- a/app/Models/Credit/Estimation.php +++ /dev/null @@ -1,105 +0,0 @@ - EstimationStatusEnum::class - ]; - - /** - * The table associated with the model. - * - * @var string - */ - protected $table = 'credit_estimations'; - - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'amount', 'status', 'credit_account_id' - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::updating(function (self $model) { - if (!$model->original['validator_id'] !== $model->validator_id) { - $log = new CreditLog(); - $log->account()->associate($model->account); - $log->type = BalanceOperationEnum::debit; - $log->amount = $model->amount; - $log->saveOrFail(); - $log->estimation()->sync([$model->id]); - } - if ($model->status->equals(EstimationStatusEnum::pending)) { - throw ValidationException::withMessages([trans('Impossible de modifier une estimation')]); - } - }); - } - - - // * RELATIONSHIPS - - /** - * BelongsTo Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function ticket() - { - return $this->belongsTo(Ticket::class); - } - - /** - * BelongsTo Credit\Account relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function account() - { - return $this->belongsTo(Account::class, 'credit_account_id'); - } - - /** - * BelongsTo User relation - * The use who created the estimate - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function estimator() - { - return $this->belongsTo(User::class, 'estimator_id'); - } - - /** - * BelongsTo User relation (nullable) - * The use who validated the estimate - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function validator() - { - return $this->belongsTo(User::class, 'validator_id'); - } -} diff --git a/app/Models/Credit/EstimationLog.php b/app/Models/Credit/EstimationLog.php deleted file mode 100644 index d2d6c57..0000000 --- a/app/Models/Credit/EstimationLog.php +++ /dev/null @@ -1,15 +0,0 @@ -belongsToMany(GitlabLabels::class, 'gitlab_issues_labels', 'issue_id', 'label_id') - ->withTimestamps(); - } -} diff --git a/app/Models/GitlabLabels.php b/app/Models/GitlabLabels.php deleted file mode 100644 index 4701b71..0000000 --- a/app/Models/GitlabLabels.php +++ /dev/null @@ -1,29 +0,0 @@ -belongsToMany(GitlabIssues::class, 'gitlab_issues_labels', 'label_id', 'issue_id') - ->withTimestamps(); - } -} diff --git a/app/Models/GitlabMilestones.php b/app/Models/GitlabMilestones.php deleted file mode 100644 index 36af898..0000000 --- a/app/Models/GitlabMilestones.php +++ /dev/null @@ -1,26 +0,0 @@ - InfoColorsEnum::class, - ]; - - // * EVENTS - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::created(function () { - cache()->put('infos', Information::all(), 3600); - }); - static::updated(function () { - cache()->put('infos', Information::all(), 3600); - }); - static::deleted(function () { - cache()->put('infos', Information::all(), 3600); - }); - } -} diff --git a/app/Models/Invoice.php b/app/Models/Invoice.php deleted file mode 100644 index 6cf2c8f..0000000 --- a/app/Models/Invoice.php +++ /dev/null @@ -1,261 +0,0 @@ - 'array', - 'signed_date' => 'date', - 'sent_client_date' => 'date', - 'sent_accounting_date' => 'date', - 'status' => InvoiceStatusEnum::class, - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (self $model) { - $model->ref = \sprintf( - '%s_%s_%s', - Carbon::now()->isoFormat('YYYY-MM'), - Str::padLeft((Invoice::whereYear('created_at', Carbon::now()->isoFormat('YYYY')) - ->whereMonth('created_at', Carbon::now()->isoFormat('MM')) - ->count() + 1) ?: 1, 4, '0'), - Str::substr(Str::upper(Str::slug(Auth::user()->name)), 0, 1) - ); - $model->total_days = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['days']) + \floatval($previous); - }); - $model->total = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['amount']) + \floatval($previous); - }); - $model->status = InvoiceStatusEnum::opened; - }); - static::updating(function (self $model) { - $model->total_days = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['days']) + \floatval($previous); - }); - $model->total = collect($model->tasks) - /** @var null|float $previous */ - ->reduce(function ($previous, array $task) { - return \floatval($task['amount']) + \floatval($previous); - }); - - if($model->sent_accounting_date && $model->status !== InvoiceStatusEnum::archived->value) { - $model->status = InvoiceStatusEnum::archived; - } - }); - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsTo Site - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function site() - { - return $this->BelongsTo(Site::class); - } - - /** - * BelongsTo Company - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function company() - { - return $this->BelongsTo(Company::class); - } - /** - * BelongsTo Company - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function companyInvoiced() - { - return $this->BelongsTo(Company::class, 'invoiced_to_id'); - } - - // * METHODS - - /** - * Get the tasks line structure skel - * - * @return array - */ - public static function getTaskStructure(): array - { - return [ - // * string - 'desc' => '', - // * usigned float - 'days' => 0, - // * Invoice\TaskTypeEnum value - 'type' => TaskTypeEnum::web, - // * usigned float - 'amount' => 0, - // * package ID if task type package or null - 'package' => null - ]; - } - - /** - * Generate Invoice - * - * @return LaravelMpdf - */ - public function generateInvoice(): LaravelMpdf - { - /** @var \Illuminate\Database\Eloquent\Collection<\App\Models\Package> */ - $packages = Package::get()->keyBy('id')->all(); - - /** @var \Mccarlosen\LaravelMpdf\LaravelMpdfWrapper */ - $mpdf = app('laravel-mpdf'); - /** @var \Mccarlosen\LaravelMpdf\LaravelMpdf */ - $pdf = $mpdf->loadView( - 'bo.pages.documents.invoice', - $this->toArray(), - [ - 'site' => $this->site, - 'company' => $this->company, - 'companyInvoiced' => $this->companyInvoiced, - 'packages' => $packages, - ], - [ - 'mode' => '', - 'format' => 'A4', - 'default_font_size' => '12', - 'default_font' => 'sans-serif', - 'margin_left' => 0, - 'margin_right' => 0, - 'margin_top' => 0, - 'margin_bottom' => 0, - 'margin_header' => 0, - 'margin_footer' => 0, - 'orientation' => 'P', - 'title' => __('Devis Équipe Web :ref', ['ref' => $this->ref]), - 'author' => 'Equipe Web', - 'watermark' => '', - 'show_watermark' => false, - 'watermark_font' => 'sans-serif', - 'display_mode' => 'fullpage', - 'watermark_text_alpha' => 0.1, - 'custom_font_dir' => '', - 'custom_font_data' => [], - 'auto_language_detection' => false, - 'temp_dir' => ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir(), - 'pdfa' => false, - 'pdfaauto' => false, - ] - ); - return $pdf; - } - - /** - * Get the invoice status array depending to the dates entered. - * - * @param \App\Models\Invoice $invoice - * @return array - */ - public static function getInvoiceStatusArray(Invoice $invoice): array - { - $invoiceStatusArray = []; - if ($invoice->signed_date && $invoice->sent_client_date && $invoice->sent_accounting_date) { - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'], - InvoiceStatusEnum::toArray()['archived'], - ]); - } - if ($invoice->signed_date) { - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'] - ]); - } - if ($invoice->sent_client_date) { - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'], - InvoiceStatusEnum::toArray()['refused'], - ]); - } - return array_merge($invoiceStatusArray, [ - InvoiceStatusEnum::toArray()['opened'], - InvoiceStatusEnum::toArray()['canceled'], - ]); - } -} diff --git a/app/Models/Label.php b/app/Models/Label.php deleted file mode 100644 index 903d86c..0000000 --- a/app/Models/Label.php +++ /dev/null @@ -1,76 +0,0 @@ - HtmlColor::class, - ]; - - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'name', - 'color' - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (self $model) { - ToolboxHelper::assertIsUnique($model, ['name']); - }); - static::updating(function (self $model) { - ToolboxHelper::assertIsUnique($model, ['name']); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsToMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function tickets() - { - return $this->belongsToMany(Ticket::class); - } - - /** - * BelongsTo Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function site() - { - return $this->belongsTo(Site::class); - } -} diff --git a/app/Models/Message.php b/app/Models/Message.php deleted file mode 100644 index c12985a..0000000 --- a/app/Models/Message.php +++ /dev/null @@ -1,137 +0,0 @@ - MessageTypeEnum::class - ]; - - /** - * The attributes that are mass assignable. - * - * @return void - */ - protected static function booted() - { - static::created(function (Message $message) { - $message->load(['user' => function ($q) { - $q->withTrashed(); - }]); - /** @var \App\Models\Ticket $ticket */ - $ticket = $message->ticket; - $ticket->last_activity = $message->updated_at; - $ticket->saveQuietly(); - if ($message->user) { - $ticket->load(['user' => function ($q) { - $q->withTrashed(); - }]); - /** @var \App\Models\User $messageUser */ - $messageUser = $message->user()->withTrashed()->firstOrFail(); - // * Send mail to mentionned users\ - /** @var \Illuminate\Support\Collection<\App\Models\User> */ - $dontNotifyUsers = $ticket->sendBeenMentionnedToUser($message); - - // * Ignorer le cas où le message est privé et l'auteur du ticket n'est pas admin. - if (!$ticket->user->isAdmin() && $message->type->equals(MessageTypeEnum::private)) { - $dontNotifyUsers->push($ticket->user); - } - - // * Filter Users if the message is private. - if ($message->type->equals(MessageTypeEnum::private)) { - $dontNotifyUsers = $dontNotifyUsers->concat( - // * Add to ignore list all non Admin users. - $ticket->subscriptions->filter(function (User $suscribedUser) { - return !$suscribedUser->isAdmin(); - }) - ); - } - // * If email has not been sen to ticket author yet. - if ( - !$dontNotifyUsers->contains(function (User $dontNotifyUser) use ($ticket) { - return $dontNotifyUser->id === $ticket->user->id; - }) and $ticket->user->id !== $messageUser->id - ) { - // * Send mail to ticket author - event(new NotifyTicketCreator( - $ticket, - trans('Nouvelle réponse de :name :
:message sur votre ticket', [ - 'name' => $messageUser->name, - 'message' => $message->message - ]) - )); - $dontNotifyUsers->push($ticket->user); - } - // ? Is message author is admin ? - if ($messageUser->isAdmin()) { - // Add subscription. - $messageUser->subscriptions()->syncWithoutDetaching([$ticket->id]); - \session()->flash('info', trans('Vous avez été inscrit.')); - } - // * Send mail to other subscribed users - event(new NotifySubscriptions( - $message->ticket, - trans('Nouvelle réponse de :name :
:message', [ - 'name' => $message->user->name, - 'message' => $message->message - ]), - $dontNotifyUsers - )); - }//end if - }); - } - - // * RELATIONSHIPS - - /** - * BelongsTo Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function ticket() - { - return $this->belongsTo(Ticket::class, 'ticket_id'); - } - - /** - * BelongsTo User relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function user() - { - return $this->belongsTo(User::class, 'user_id'); - } -} diff --git a/app/Models/Package.php b/app/Models/Package.php deleted file mode 100644 index 33c3de3..0000000 --- a/app/Models/Package.php +++ /dev/null @@ -1,43 +0,0 @@ - - */ - protected $casts = [ - 'published' => 'boolean', - ]; - -} diff --git a/app/Models/Site.php b/app/Models/Site.php deleted file mode 100644 index 3ac1f28..0000000 --- a/app/Models/Site.php +++ /dev/null @@ -1,150 +0,0 @@ -invoices()->delete(); - $site->tickets()->delete(); - }); - } - - // * METHODS - - /** - * Common methods function. - * - * @param Model $model - * @return void - */ - private static function manageFields(Model $model) - { - if ($model->url_re7) { - ToolboxHelper::assertNoInternalUrls('url_re7', $model->url_re7); - } - if ($model->url_prod) { - ToolboxHelper::assertNoInternalUrls('url_prod', $model->url_prod); - } - } - - - // * RELATIONSHIPS - - /** - * HasMany Message relation - * The users of type client that would have access to this site tickets - * - * @return \Illuminate\Database\Eloquent\Relations\belongsToMany - */ - public function users() - { - return $this->belongsToMany(User::class); - } - - /** - * HasMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function tickets() - { - return $this->hasMany(Ticket::class, 'site_id'); - } - - /** - * HasMany Invoices relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function invoices() - { - return $this->hasMany(Invoice::class, 'site_id'); - } - - /** - * BelongsTo Brand relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function brand() - { - return $this->belongsTo(Brand::class); - } - - /** - * BelongsTo User relation - * The project manager of the site - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function projectManager(): BelongsTo - { - return $this->belongsTo(User::class, 'project_manager_id'); - } - - /** - * Return value attribute for belongsto search component - * - * @return \Illuminate\Database\Eloquent\Casts\Attribute - */ - protected function value(): Attribute - { - return new Attribute( - get: fn () => $this->id, - ); - } -} diff --git a/app/Models/SiteUser.php b/app/Models/SiteUser.php deleted file mode 100644 index aad20c1..0000000 --- a/app/Models/SiteUser.php +++ /dev/null @@ -1,15 +0,0 @@ - 'bool', - 'type' => TicketTypeEnum::class, - 'status' => TicketStatusEnum::class, - 'date_mep' => 'date', - 'last_activity' => 'timestamp', - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (Ticket $ticket) { - self::setOrder($ticket); - // If bug force the ticket status on new. All the others are estimateTodo. - if ($ticket->type->equals(TicketTypeEnum::bug)) { - $ticket->status = TicketStatusEnum::new; - } else { - $ticket->status = TicketStatusEnum::estimateTodo; - } - }); - static::updating(function (Ticket $ticket) { - if ( - !$ticket->original['status'] !== $ticket->status->value && $ticket->original['order'] === $ticket->order - ) { - $user = auth()->user(); - - event(new TicketStatusChanged( - $ticket, - TicketStatusEnum::make($ticket->original['status']), - $user, - null, - false - )); - - $message = $user ? sprintf('%s a modifié le statut en %s', $user->name, $ticket->status->label()) : sprintf('Le statut a été modifié en %s', $ticket->status->label()); - - event(new NotifySubscriptions($ticket, $message)); - event(new NotifyAdmin($ticket, $message)); - } - if ($ticket->status->equals(TicketStatusEnum::archived)) { - self::setOrder($ticket, true); - } - }); - } - - /** - * Set order after the last element of the list. - * - * @param self $model - * @param boolean $isArchived - * @return void - */ - private static function setOrder(self $model, bool $isArchived = false): void - { - $maxOrder = \intval(self::query()->where('status', '!=', TicketStatusEnum::archived)->max('order')); - if ($isArchived) { - $request = Ticket::query() - ->where('site_id', $model->site_id) - ->whereNot('status', TicketStatusEnum::archived) - ->whereNot('id', $model->id) - ->whereBetween('order', [$model->order, $maxOrder]); - $request->decrement('order', 1); - $model->order = 0; - return; - } - $model->order = $maxOrder + 1; - } - - - // * RELATIONSHIPS - - /** - * HasOne Credit\Estimation relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasOne - */ - public function estimation() - { - return $this->hasOne(Estimation::class); - } - - /** - * BelongsTo Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function site() - { - return $this->belongsTo(Site::class); - } - - /** - * BelongsTo User relation - * The user that created the ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function user() - { - return $this->belongsTo(User::class, 'created_by'); - } - - /** - * BelongsTo User relation - * The user that is in charge of the ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function assignedUser() - { - return $this->belongsTo(User::class, 'assigned_to'); - } - - /** - * BelongsTo User relation - * The user that is in charge of the site linked to this ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function projectManager() - { - return $this->belongsTo(User::class, 'project_manager_id'); - } - - /** - * HasMany Message relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function messages() - { - return $this->hasMany(Message::class, 'ticket_id'); - } - - /** - * BelongsToMany User relation - * The Users that are following this ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function subscriptions() - { - return $this->belongsToMany(User::class, 'subscriptions'); - } - - /** - * BelongsToMany Label relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function labels() - { - return $this->belongsToMany(Label::class, 'label_ticket'); - } - - /** - * BelongsTo ticket_type - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsTo - */ - public function ticketType() - { - return $this->belongsTo(TicketType::class, 'type', 'type'); - } - - /** - * BelongsToMany Linked Ticket - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function linkedTickets() - { - return $this->belongsToMany(Ticket::class, 'linked_tickets', 'ticket_id', 'linked_ticket_id'); - } - - // * METHODS - - /** - * Parse message @user tags and send emails to concerned users - * returns and array with to users notified - * - * @param Message $message - * @return Collection - */ - public function sendBeenMentionnedToUser(Message $message): Collection - { - $ticket = $this; - // Find @user + send mail si un seul user est trouvé. - /** @var \Illuminate\Support\Collection<\App\Models\User> */ - $usersNotified = collect([]); - $matches = []; - $ticket->load('site'); - \preg_match_all('/@\w*/', $message->message, $matches); - $matches = collect($matches[0] ?? [])->unique(); - foreach ($matches as $pseudo_usertag) { - try { - /** @var \App\Models\User $user */ - $user = User::where('name', 'LIKE', '%' . ltrim($pseudo_usertag, '@') . '%') - ->where('email', '!=', $ticket->user->email) - ->where(function ($q) use ($ticket) { - $q->whereHas('sites', function ($q) use ($ticket) { - $q->where('id', $ticket->site->id); - }) - ->orWhere('role', RoleEnum::admin) - ->orWhere('role', RoleEnum::developper); - })->firstOrFail(); - - if ($ticket->is_internal) { - if ($user->isAdmin()) { - $usersNotified->add($user); - SendTicketMentionMail::dispatchAfterResponse( - $user, - new TicketMention($ticket, $message->message) - ); - } - } else { - $usersNotified->add($user); - SendTicketMentionMail::dispatchAfterResponse( - $user, - new TicketMention($ticket, $message->message) - ); - } - } catch (ModelNotFoundException $e) { - continue; - } //end try - } //end foreach - - return $usersNotified; - } - - /** - * full_name getter - * - * @return string - */ - public function getFullNameAttribute(): string - { - return trans('Ticket n° :ticketId : :ticketSiteName', [ - 'ticketId' => $this->id, - 'ticketSiteName' => $this->site->name - ]); - } - - /** - * Check if an account has the same brand as this ticket. - * - * @param Account $account - * @return boolean - */ - public function accountIsValidForThisTicket(Account $account): bool - { - /** @var \App\Models\Brand|null */ - if (!($siteBrand = optional($this->site)->brand)) { - return false; - } - - /** @var \App\Models\Brand */ - $accountBrand = $account->brand; - - return !\is_null($accountBrand->id) and $accountBrand->id === $siteBrand->id; - } - - /** - * Format the ticket name to contain more information. - * - * @param self $ticket - * @return string - */ - public static function formatName(self $ticket): string - { - return sprintf( - 'Ticket %d (%s): %s', - $ticket->id, - $ticket->user ? $ticket->user->name : trans('Utilisateur supprimé'), - Str::limit(\preg_replace('/[[:cntrl:]]+/', '', $ticket->text), 35), - ); - } - - /** - * Get an array of all files columns of the ticket. - * - * @return array - */ - public function getFiles(): array - { - return [ - $this->file, - $this->file2, - $this->file3, - $this->file4, - $this->file5, - ]; - } -} diff --git a/app/Models/Ticket/TicketType.php b/app/Models/Ticket/TicketType.php deleted file mode 100644 index 264ec40..0000000 --- a/app/Models/Ticket/TicketType.php +++ /dev/null @@ -1,67 +0,0 @@ - TicketTypeEnum::class, - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function () { - throw new \Error('Action impossible'); - }); - static::updating(function (self $model) { - ToolboxHelper::assertNoInternalBoUrls('template', $model->template); - }); - static::deleting(function () { - throw new \Error('Action impossible'); - }); - } - - // * RELATIONSHIPS - - /** - * BelongsToMany tickets - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function tickets() - { - return $this->hasMany(Ticket::class, 'type', 'type'); - } -} diff --git a/app/Models/User.php b/app/Models/User.php deleted file mode 100644 index 84ea559..0000000 --- a/app/Models/User.php +++ /dev/null @@ -1,199 +0,0 @@ - 'datetime', - 'role' => RoleEnum::class - ]; - - /** - * Perform any actions required after the model boots. - * - * @return void - */ - protected static function booted() - { - static::creating(function (User $user) { - if (\is_null($user->password)) { - $user->password = Str::random(10); - $user->tmpPass = $user->password; - } - if (Hash::needsRehash($user->password)) { - $user->password = Hash::make($user->password); - } - Cache::flush('AdminUsers'); - }); - static::created(function (User $user) { - $user->sendMailConfirm(); - }); - static::updating(function (User $user) { - if (Hash::needsRehash($user->password)) { - $user->password = Hash::make($user->password); - } - Cache::flush('AdminUsers'); - }); - } - - // * METHODS - - /** - * get User brands - * - * @return \Illuminate\Database\Eloquent\Collection<\App\Models\Brand> - */ - public function brands() - { - return $this->sites->pluck('brand')->filter(); - } - - /** - * Send User creation confirm mail - * - * @return void - */ - public function sendMailConfirm() - { - dispatch(new SendUserCreatedEmail($this)); - } - - /** - * Send User reset password mail - * - * @param mixed $token - * @return void - */ - public function sendPasswordResetNotification(mixed $token) - { - /** @var string $token */ - $this->notify(new ResetPassword($token)); - } - - /** - * Is the user an admin or a developper ? - * - * @return boolean - */ - public function isAdmin(): bool - { - return ($this->role->equals(RoleEnum::developper) or - $this->role->equals(RoleEnum::admin)); - } - - /** - * Get All Admin users - * - * @return Collection - */ - public static function adminUsers(): Collection - { - return Cache::remember('AdminUsers', 86400, function () { - return self::whereIn('role', [RoleEnum::admin, RoleEnum::developper])->orderBy('name')->get(); - }); - } - - // * RELATIONSHIPS - - /** - * HasMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function tickets() - { - return $this->hasMany(Ticket::class, 'created_by'); - } - - /** - * HasMany Message relation - * - * @return \Illuminate\Database\Eloquent\Relations\HasMany - */ - public function messages() - { - return $this->hasMany(Message::class, 'user_id'); - } - - /** - * BelongsToMany Ticket relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function subscriptions() - { - return $this->belongsToMany(Ticket::class, 'subscriptions'); - } - - /** - * BelongsToMany Site relation - * - * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany - */ - public function sites() - { - return $this->belongsToMany(Site::class); - } -} diff --git a/app/Notifications/ExportTicketsStateNotification.php b/app/Notifications/ExportTicketsStateNotification.php deleted file mode 100644 index ed889c7..0000000 --- a/app/Notifications/ExportTicketsStateNotification.php +++ /dev/null @@ -1,60 +0,0 @@ -csvContent = $csvContent; - } - - /** - * Get the notification's delivery channels. - * - * @return array - */ - public function via(): array - { - return ['mail']; - } - - /** - * Get the mail representation of the notification. - * - * @return \Illuminate\Notifications\Messages\MailMessage - */ - public function toMail(): \Illuminate\Notifications\Messages\MailMessage - { - return (new MailMessage()) - ->subject(trans("Export de l'état des lieux des tickets")) - ->line(trans("Vous trouverez ci-joint le fichier CSV contenant l'état des tickets.")) - ->attachData( - $this->csvContent, - sprintf('tickets_state_%s.csv', Carbon::now()->format('Y-m-d_H-i-s')), - [ - 'mime' => 'text/csv', - ] - ); - } -} diff --git a/app/Notifications/ResetPassword.php b/app/Notifications/ResetPassword.php deleted file mode 100644 index e9ee470..0000000 --- a/app/Notifications/ResetPassword.php +++ /dev/null @@ -1,34 +0,0 @@ -subject(trans('Reinitialisation de mot de passe')) - //phpcs:ignore Generic.Files.LineLength.TooLong - ->line(trans('Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.')) - /** @var string $url */ - ->action(trans('Réinitialiser le mot de passe'), $url) - //phpcs:ignore Generic.Files.LineLength.TooLong - ->line(trans('Ce lien de réinitialisation de mot de passe expirera dans :count minutes. ', ['count' => config('auth.passwords.' . config('auth.defaults.passwords') . '.expire')])) - //phpcs:ignore Generic.Files.LineLength.TooLong - ->line(trans('Si vous n\'avez pas demandé de réinitialisation de mot de passe, aucune autre action n\'est requise.')); - $message->viewData['greeting'] = 'Bonjour,'; - return $message; - } -} diff --git a/app/Policies/AccountPolicy.php b/app/Policies/AccountPolicy.php deleted file mode 100644 index 23468ee..0000000 --- a/app/Policies/AccountPolicy.php +++ /dev/null @@ -1,73 +0,0 @@ -check(); - } - - /** - * Determine if the user can view a given account. - * - * @return boolean - */ - public function view() - { - return false; - } - - /** - * Determine if the user can create a new account. - * - * @param \App\Models\User $user - * @return boolean - */ - public function create(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can update a given account. - * - * @return boolean - */ - public function update() - { - return false; - } - - /** - * Determine if the user can delete a given account. - * - * @param \App\Models\User $user - * @return boolean - */ - public function delete(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can credit a given account. - * - * @return boolean - */ - public function credit() - { - return true; - } -} diff --git a/app/Policies/CreditLogPolicy.php b/app/Policies/CreditLogPolicy.php deleted file mode 100644 index 56f6309..0000000 --- a/app/Policies/CreditLogPolicy.php +++ /dev/null @@ -1,22 +0,0 @@ -isAdmin() or $user->brands()->count() > 0; - } -} diff --git a/app/Policies/EstimationPolicy.php b/app/Policies/EstimationPolicy.php deleted file mode 100644 index 3e89d6c..0000000 --- a/app/Policies/EstimationPolicy.php +++ /dev/null @@ -1,27 +0,0 @@ -status->equals(EstimationStatusEnum::pending); - } -} diff --git a/app/Policies/SitePolicy.php b/app/Policies/SitePolicy.php deleted file mode 100644 index 1cf86d2..0000000 --- a/app/Policies/SitePolicy.php +++ /dev/null @@ -1,20 +0,0 @@ -check(); - } -} diff --git a/app/Policies/TicketPolicy.php b/app/Policies/TicketPolicy.php deleted file mode 100644 index eae3a92..0000000 --- a/app/Policies/TicketPolicy.php +++ /dev/null @@ -1,306 +0,0 @@ -check(); - } - - /** - * Determine if the user can view a given ticket. - * - * @return boolean - */ - public function view() - { - return auth()->check(); - } - - /** - * Determine if the user can create a ticket. - * - * @return boolean - */ - public function create() - { - return auth()->check(); - } - - /** - * Determine if the user can update a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function update(User $user, Ticket $ticket) - { - return $user->sites->contains($ticket->site_id) - || $user->isAdmin(); - } - - /** - * Determine if the user can change the status of a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function changeStatus(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can link ticket . - * - * @param \App\Models\User $user - * @return boolean - */ - public function linkTicket(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can change the internal status of a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function changeInternalStatus(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can delete a given ticket. - * - * @return boolean - */ - public function delete() - { - return false; - } - - /** - * Determine if the user can force delete a given ticket. - * - * @return boolean - */ - public function forceDelete() - { - return false; - } - - /** - * Determine if the user can restore a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function restore(User $user, Ticket $ticket) - { - return $user->sites->contains($ticket->site_id) - || $user->isAdmin(); - } - - /** - * Determine if the user can suscribe to a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - * phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - */ - public function suscribeToTicket(User $user, Ticket $ticket) - { - // phpcs:enable - return !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can create a message for a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - * phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundBeforeLastUsed - */ - public function createMessage(User $user, Ticket $ticket) - { - // phpcs:enable - return !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can create a private message for a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function createPrivateMessage(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can update a message for a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function updateMessage(User $user, Ticket $ticket) - { - return !$ticket->status->equals(TicketStatusEnum::archived) - && $user->isAdmin(); - } - - /** - * Determine if the user can reopen a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function reopen(User $user) - { - return $user->role->equals(RoleEnum::client); - } - - /** - * Determine if the user can assign a given ticket to a user. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function assignTo(User $user, Ticket $ticket) - { - return $user->isAdmin() - && !$ticket->status->equals(TicketStatusEnum::archived) - && !$ticket->status->equals(TicketStatusEnum::production); - } - - /** - * Determine if the user can assign tickets. - * - * @param \App\Models\User $user - * @return boolean - */ - public function assignTickets(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can assign labels to a given ticket. - * - * @param \App\Models\User $user - * @return boolean - */ - public function assignLabels(User $user) - { - return $user->isAdmin(); - } - - /** - * Determine if the user can estimate a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function estimate(User $user, Ticket $ticket) - { - if (!($brand = $ticket->site->brand)) { - return false; - } - return $user->isAdmin() - && (bool)$brand->accounts()->count() - && !$ticket->estimation()->exists() - && !(bool)$ticket->is_internal - && !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can validate the estimation of a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function validateEstimate(User $user, Ticket $ticket) - { - if (!($brand = $ticket->site->brand)) { - return false; - } - return ($user->role->equals(RoleEnum::client) - || $user->role->equals(RoleEnum::developper)) - && (bool)$brand->accounts()->count() - && $ticket->estimation()->exists() - && !(bool)$ticket->is_internal - && !$ticket->status->equals(TicketStatusEnum::archived); - } - - /** - * Determine if the user can cancel the estimation of a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function cancelEstimate(User $user, Ticket $ticket) - { - return $user->role->equals(RoleEnum::developper) - && $ticket->estimation()->exists(); - } - - /** - * Determine if the user can create a gitlab issue from a given ticket. - * - * @param \App\Models\User $user - * @param \App\Models\Ticket $ticket - * @return boolean - */ - public function createGitlabIssue(User $user, Ticket $ticket) - { - return $user->role->equals(RoleEnum::developper) - && ( - $ticket->type->equals(TicketTypeEnum::bug) - || $ticket->type->equals(TicketTypeEnum::evolution) - || $ticket->type->equals(TicketTypeEnum::newsletter) - ) - && !\is_null($ticket->site->gitlab_project_id) - && \is_null($ticket->gitlab_issue); - } - - /** - * Determine if the user can changeOrder - * - * @param User $user - * @return boolean - * @throws Error The error. - */ - public function changeOrder(User $user) - { - return $user->role->equals(RoleEnum::developper); - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php deleted file mode 100644 index 9d1fd44..0000000 --- a/app/Providers/AppServiceProvider.php +++ /dev/null @@ -1,38 +0,0 @@ -getClientIp(); - } else { - return request()->server('HTTP_X_FORWARDED_FOR') ?? - request()->getClientIp(); - } - }); - - // * LOCAL FORCE eg: for Carbon - setlocale(LC_ALL, \sprintf( - '%s_%s.UTF-8', - config('app.locale'), - \strtoupper(config('app.locale')) - )); - } -} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php deleted file mode 100644 index fe22c2f..0000000 --- a/app/Providers/AuthServiceProvider.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ - protected $policies = []; - - /** - * Register any authentication / authorization services. - * - * @return void - */ - public function boot(): void - { - $this->registerPolicies(); - - Gate::define('isAdmin', function (User $user) { - return \auth()->check() && ($user->role->equals(RoleEnum::developper) or - $user->role->equals(RoleEnum::admin)); - }); - - Gate::define('isDev', function (User $user) { - return \auth()->check() && $user->role->equals(RoleEnum::developper); - }); - - Gate::define('isClient', function (User $user) { - return \auth()->check() && $user->role->equals(RoleEnum::client); - }); - } -} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php deleted file mode 100644 index 395c518..0000000 --- a/app/Providers/BroadcastServiceProvider.php +++ /dev/null @@ -1,21 +0,0 @@ -> - */ - protected $listen = [ - Registered::class => [SendEmailVerificationNotification::class], - TicketStatusChanged::class => [AddStatusMessages::class], - NotifySubscriptions::class => [SendSubscriptionsNotificationsMail::class], - NotifyTicketCreator::class => [SendNotificationMailToTicketCreator::class], - NotifyAdmin::class => [SendNotificationMailToAdmin::class], - ]; - - /** - * Determine if events and listeners should be automatically discovered. - * - * @return boolean - */ - public function shouldDiscoverEvents(): bool - { - return false; - } -} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php deleted file mode 100644 index 3ce5af2..0000000 --- a/app/Providers/RouteServiceProvider.php +++ /dev/null @@ -1,179 +0,0 @@ -configureRateLimiting(); - - $this->cspReportRoute(); - - $this->routes(function () { - Route::middleware('web') - ->namespace($this->namespace) - ->group(base_path('routes/web-bo.php')); - }); - Route::bind('account', function ($value, RoutingRoute $route) { - /** @var \App\Models\User|null */ - if (!($user = \auth()->user())) { - abort(401); - } - - $this->assertClientHasBrands($user); - - // * If route has brand parameter - /** @var \App\Models\Brand|null */ - if ($brand = $route->parameter('brand')) { - return Account::where('id', \intval($value))->whereHas('brand', function ($q) use ($brand) { - $q->where('id', $brand->id); - })->firstOrFail(); - } - return Account::where('id', \intval($value))->firstOrFail(); - }); - Route::bind('brand', function ($value) { - /** @var \App\Models\User|null */ - if (!($user = \auth()->user())) { - abort(401); - } - - $this->assertClientHasBrands($user); - - return Account::where('id', \intval($value))->firstOrFail(); - }); - Route::model('credit_log', function ($value) { - /** @var \App\Models\User|null */ - if (!($user = \auth()->user())) { - abort(401); - } - - $this->assertClientHasBrands($user); - - return CreditLog::where('id', \intval($value))->firstOrFail(); - }); - Route::model('brand', Brand::class); - Route::model('label', Label::class); - Route::model('package', Package::class); - Route::model('information', Information::class); - Route::model('company', Company::class); - Route::model('invoice', Invoice::class); - Route::model('user', User::class); - Route::model('site', Site::class); - Route::model('ticket_type', TicketType::class); - Route::bind('ticket', function ($value) { - return Ticket::where('id', $value)->has('site')->firstOrFail(); - }); - } - - /** - * Configure the rate limiters for the application. - * - * @return void - */ - protected function configureRateLimiting(): void - { - RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(150)->by($request->user()?->id ?: app('clientIp')); - }); - RateLimiter::for('web', function (Request $request) { - return Limit::perMinute(150)->by($request->user()?->id ?: app('clientIp')); - }); - RateLimiter::for('credentials', function (Request $request) { - return Limit::perMinute(30)->by($request->user()?->id ?: app('clientIp')); - }); - } - - /** - * Assert client user has brands - * or return to tickets.index with warning - * - * @param \App\Models\User $user - * @return void - */ - private function assertClientHasBrands(User $user): void - { - if (!$user->isAdmin()) { - $userBrandsAccounts = $user->brands()->each(function (Brand $brand) { - $brand->load('accounts'); - })->pluck('accounts')->flatten(); - - if (!$userBrandsAccounts->count()) { - \redirect()->route('bo.ticket.index')->withErrors(['warning' => trans( - // phpcs:ignore Generic.Files.LineLength.TooLong - 'Pour utiliser cette fonctionnalité vous devez appartenir à une marque, merci d\'en faire la demande à :mail', - ['mail' => collect(config('mail.contactsList.serviceweb'))->implode(' ')] - )])->throwResponse(); - } - } - } - - /** - * * Register CSP report URI - * - * Put this function inside RouteServiceProvider, - * and call it in RouteServiceProvider::boot - * - * @return void - */ - private function cspReportRoute() - { - // * CSP REPORT URI, Please add /csp-report to VerifyCsrfToken $except middleware - \Illuminate\Support\Facades\Route::post('/csp-report', function () { - $isCspRequest = request()->header('Content-Type') === 'application/csp-report'; - if (!$isCspRequest or !request()->json('csp-report') or !is_array(request()->json('csp-report'))) { - abort(401); - } - // * Flatten if needed - $cspReport = collect(request()->json('csp-report')) - ->flatMap(function ($v, $k) { - return [$k => is_array($v) ? collect($v)->flatten()->implode(', ') : $v]; - })->all(); - // * Filter array keys - $cspReport = collect(array_intersect_key($cspReport, [ - 'blocked-uri' => '', 'document-uri' => '', 'original-policy' => '', - 'referrer' => '', 'violated-directive' => '' - ])); - \Illuminate\Support\Facades\Log::warning(sprintf( - "CSP REPORT for %s : \n %s", - $cspReport->get('document-uri'), - $cspReport->implode("\n") - )); - })->middleware('throttle:5,2') - ->withoutMiddleware(\App\Http\Middleware\VerifyCsrfToken::class) - ->name('cspReportUri'); - } -} diff --git a/app/Providers/TranslationServiceProvider.php b/app/Providers/TranslationServiceProvider.php deleted file mode 100644 index 7aa3b60..0000000 --- a/app/Providers/TranslationServiceProvider.php +++ /dev/null @@ -1,78 +0,0 @@ -collectLocalesStrings() as $locale) { - // * Supported locales - Cache::remember(sprintf('translations.%s', $locale), 84600, function () use ($locale) { - $translations = [ - 'php' => $this->phpTranslations($locale), - 'json' => $this->jsonTranslations($locale), - ]; - return $translations; - }); - } - } - - /** - * Gather provided langs checking from files - * - * @return \Illuminate\Support\Collection - */ - private function collectLocalesStrings(): Collection - { - return collect(File::allFiles(resource_path('lang/')))->flatMap(function (SplFileInfo $file) { - if ($file->getRelativePath() and \strpos($file->getRelativePath(), 'vendor') !== 0) { - return [$file->getRelativePath() => '']; - } - })->keys(); - } - - /** - * Gather all php translations - * - * @param string $locale - * @return array - */ - private function phpTranslations(string $locale): array - { - $path = resource_path("lang/$locale"); - - return collect(File::allFiles($path))->flatMap(function ($file) use ($locale) { - $translation = $file->getBasename('.php'); - return [$translation => trans($translation, [], $locale)]; - })->all(); - } - - /** - * Gather json translations - * - * @param string $locale - * @return array - */ - private function jsonTranslations(string $locale): array - { - $path = resource_path("lang/$locale.json"); - - if (is_string($path) && is_readable($path)) { - return json_decode(file_get_contents($path), true) ?? []; - } - - return []; - } -} diff --git a/app/Providers/ViewServiceProvider.php b/app/Providers/ViewServiceProvider.php deleted file mode 100644 index 5f61265..0000000 --- a/app/Providers/ViewServiceProvider.php +++ /dev/null @@ -1,37 +0,0 @@ -runningInConsole()) { - $appInfos = Cache::remember('composer', 3600, function () { - return json_decode(File::get(\app_path('../composer.json'))); - }); - View::share('name', $appInfos->name); - View::share('version', $appInfos->version); - View::share('license', $appInfos->license); - // * Informations - $infos = Cache::remember('infos', 3600, function () { - return Information::all(); - }); - View::share('informations', $infos); - // * FORCE BOOTSTRAP PAGINATOR - Paginator::defaultView('bo.modules.pagination'); - } //end if - } -} diff --git a/app/Rules/Hex.php b/app/Rules/Hex.php deleted file mode 100644 index 199be1a..0000000 --- a/app/Rules/Hex.php +++ /dev/null @@ -1,76 +0,0 @@ -forceFull = $forceFull; - - $this->allowAlpha = $allowAlpha; - } - - /** - * Run the validation rule. - * - * @param string $attribute - * @param mixed $value - * @param \Closure(string):\Illuminate\Translation\PotentiallyTranslatedString $fail - * @return void - * @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInImplementedInterfaceBeforeLastUsed - * @phpcs:disable Squiz.Commenting.FunctionComment.IncorrectTypeHint - */ - public function validate(string $attribute, mixed $value, \Closure $fail): void - { - $pattern = '/^#([a-fA-F0-9]{6}'; - - if (!$this->forceFull) { - $pattern .= '|[a-fA-F0-9]{3}'; - } - - if ($this->allowAlpha) { - $pattern .= '|[a-fA-F0-9]{8}'; - - if (!$this->forceFull) { - $pattern .= '|[a-fA-F0-9]{4}'; - } - } - - $pattern .= ')$/'; - - if (!(bool)preg_match($pattern, $value)) { - $fail(trans($this->message())); - } - } - - /** - * Get the validation error message. - * - * @return string - */ - public function message(): string - { - return 'The hex code is not valid'; - } -} diff --git a/app/Traits/Controllers/ChangesModelOrder.php b/app/Traits/Controllers/ChangesModelOrder.php deleted file mode 100644 index f504823..0000000 --- a/app/Traits/Controllers/ChangesModelOrder.php +++ /dev/null @@ -1,64 +0,0 @@ -route()->parameterNames); - $className = Str::of($paramNames->get($paramNames->count() - 2))->lower()->studly(); - $className = "\\App\\Models\\{$className}"; - $model = Arr::get($params, $paramNames->count() - 2); - - if (!class_exists($className)) { - throw new \RuntimeException("The {$className} class doesn't exist."); - } - - if (!\is_object($model)) { - throw new \RuntimeException("The second last param isn't an object."); - } - - if (get_class($model) !== (string)Str::of($className)->replaceStart('\\', '')) { - throw new \RuntimeException("The {$className} doesn't match second last binded param."); - } - - /** @var \Illuminate\Database\Eloquent\Model|null */ - $model = $className::query()->where($model->getRouteKeyName(), $model->getRouteKey())->first(); - - if (!$model) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - return DB::transaction(function () use ($request, $className, $model) { - /** @var \Illuminate\Database\Eloquent\Model|null */ - $tmp = $className::query() - ->where('order', $request->direction ? '<' : '>', $model->getOriginal('order')) - ->orderBy('order', $request->direction ? 'DESC' : 'ASC') - ->first(); - - if (!$tmp) { - return back()->with('error', trans('crud.messages.order_not_changed')); - } - - $newOrder = $tmp->getOriginal('order'); - $tmp->update(['order' => $model->getOriginal('order')]); - $model->update(['order' => $newOrder]); - - return redirect()->back()->with('success', trans('crud.messages.order_changed')); - }); - } -} diff --git a/app/Traits/Controllers/HasGitlabIssue.php b/app/Traits/Controllers/HasGitlabIssue.php deleted file mode 100644 index a664f83..0000000 --- a/app/Traits/Controllers/HasGitlabIssue.php +++ /dev/null @@ -1,59 +0,0 @@ -show($projectId, (int) $matches[1]); - - return $gitlabIssue; - } - - /** - * Update labels for a GitLab issue. - * - * @param int|string $projectId - * @param int $issueId - * @param array $labels - * - * @return array - */ - public function updateGitlabIssueLabels($projectId, int $issueId, array $labels): array - { - return GitLab::issues()->update($projectId, $issueId, [ - 'labels' => implode(',', $labels), - ]); - } - - /** - * Close a GitLab issue. - * - * @param int|string $projectId - * @param int $issueId - * @param array $labels - * - * @return array - */ - public function closeGitlabIssue($projectId, int $issueId, array $labels): array - { - return GitLab::issues()->update($projectId, $issueId, [ - 'state_event' => 'close', - 'labels' => implode(',', $labels), - ]); - } -} diff --git a/app/Traits/Enums/BaseEnum.php b/app/Traits/Enums/BaseEnum.php deleted file mode 100644 index 42058da..0000000 --- a/app/Traits/Enums/BaseEnum.php +++ /dev/null @@ -1,256 +0,0 @@ -name]; - } - - /** - * Get enum label - * - * @return string - */ - public function label(): string - { - return self::toLabels()[$this->name]; - } - - /** - * Get enum name - * - * @return string - */ - public function name(): string - { - return $this->name; - } - - // * STATIC FETCH METHODS - - /** - * Get enum labels - * - * @return array - */ - public static function toLabels(): array - { - if (empty(self::getCache('labels'))) { - $labels = self::getLabelsConstant(); - self::setCache('labels', \collect(self::cases()) - ->mapWithKeys(function ($enum) use ($labels) { - if (!\is_null($labels) and !isset($labels[$enum->name])) { - throw new \Error('Missing definition label ' . self::class . " for {$enum->name}"); - } - return [$enum->name => \trans( - !\is_null($labels) ? $labels[$enum->name] : Str::ucfirst($enum->name) - )]; - })->all()); - } - return self::getCache('labels'); - } - - /** - * Get enum values - * - * @return array - */ - public static function toValues(): array - { - if (empty(self::getCache('values'))) { - self::setCache('values', \collect(self::cases()) - ->mapWithKeys(fn ($enum) => [$enum->name => $enum->value])->all()); - } - return self::getCache('values'); - } - - /** - * Get enums - * - * @return array - */ - public static function all(): array - { - return self::cases(); - } - - /** - * Get enums - * - * @return array - */ - public static function toArray(): array - { - if (empty(self::getCache('enums'))) { - $definitions = self::getCustomDefinitions(); - self::setCache('enums', \collect(self::cases()) - ->mapWithKeys(function ($enum) use ($definitions) { - $baseArray = [ - 'name' => $enum->name, - 'label' => $enum->label(), - 'value' => $enum->value ?? null, - ]; - foreach ($definitions as $index => $elements) { - $index = Str::lower(Str::singular($index)); - if (!isset($elements[$enum->name])) { - throw new \Error("Missing definition {$index} " . self::class . " for {$enum->name}"); - } - $baseArray[$index] = $elements[$enum->name]; - } - return [$enum->name => (object)$baseArray]; - })->all()); - } - return self::getCache('enums'); - } - - /** - * Fetch enum using value - * - * @param \App\Traits\Enums\BaseEnum|integer|string $value - * @return \App\Traits\Enums\BaseEnum|null - */ - public static function make(self|int|string $value): self|null - { - return !\is_object($value) ? - \collect(self::cases())->keyBy('value')->get($value) : $value; - } - - /** - * Test if 2 enum are equals - * - * @param object ...$others - * @return boolean - * @throws \Error If provided element are not enums taht extends BaseEnum. - */ - public function equals(object ...$others): bool - { - foreach ($others as $other) { - if (!\in_array(BaseEnum::class, \class_uses_recursive($other))) { - throw new \Error(__METHOD__ . - ' requires $enum to use ' . BaseEnum::class); - } - if ( - get_class($this) === get_class($other) - && $this->value === $other->value - ) { - return true; - } - } - return false; - } - - /** - * Serialize to json - * - * @return mixed - */ - public function jsonSerialize(): mixed - { - return $this->value; - } - - - // * CACHE - - /** - * Get cache array - * - * @param string $index - * @return array - */ - private static function getCache(string $index): array - { - self::initCache(); - if (!isset($GLOBALS[self::class]['props'][$index])) { - $GLOBALS[self::class]['props'][$index] = []; - } - return $GLOBALS[self::class]['props'][$index]; - } - - /** - * Set cache array - * - * @param string $index - * @param array $items - * @return void - */ - private static function setCache(string $index, array $items): void - { - self::initCache(); - if (!isset($GLOBALS[self::class]['props'][$index])) { - $GLOBALS[self::class]['props'][$index] = []; - } - $GLOBALS[self::class]['props'][$index] = $items; - } - - /** - * Init cache if needed - * - * @return void - */ - private static function initCache(): void - { - if (!isset($GLOBALS[self::class])) { - $GLOBALS[self::class] = [ - 'props' => [ - 'enums' => [], - 'values' => [], - 'labels' => [] - ], - 'customProps' => null - ]; - } - } - - // * PRIVATE - - /** - * Fetch the LABELS constant if exists - * - * @return array|null - */ - private static function getLabelsConstant(): array|null - { - $class_name = self::class; - try { - $constant_reflex = new \ReflectionClassConstant($class_name, 'LABELS'); - return $constant_reflex->getValue(); - } catch (\ReflectionException $e) { - return null; - } - } - - /** - * Get custom constants - * - * @return array - */ - private static function getCustomDefinitions(): array - { - // ? Has custom props in cache ? - if (!isset($GLOBALS[self::class]) or \is_null($GLOBALS[self::class]['customProps'])) { - $names = \collect(self::cases())->keyBy('name'); - - $GLOBALS[self::class]['customProps'] = \collect((new \ReflectionClass(self::class))->getConstants()) - ->filter(function (mixed $constant, string $key) use ($names) { - if ($key === 'LABELS' or !\is_array($constant)) { - return false; - } - return \collect($constant)->keys() - ->filter(fn (string $name) => $names->has($name))->count(); - })->all(); - } - return $GLOBALS[self::class]['customProps']; - } -} diff --git a/app/Traits/Enums/SpsConfigTrait.php b/app/Traits/Enums/SpsConfigTrait.php deleted file mode 100644 index 1d376cd..0000000 --- a/app/Traits/Enums/SpsConfigTrait.php +++ /dev/null @@ -1,52 +0,0 @@ -destination()); - } - /** - * destination method - * Return acs url concatenated with url - * - * @return string - */ - public function destination(): string - { - return $this->url() . "/saml2/support/acs"; - } - /** - * logout method - * Return sls url concatenated with url - * - * @return string - */ - public function logout(): string - { - return $this->url() . "/saml2/support/sls"; - } - /** - * certificate method - * Return certificate (.pem) file from kebab case of Enum name - * - * @return string - */ - public function certificate(): string - { - return 'file://' . storage_path( - sprintf( - 'samlidp/%s.pem', - str()->kebab($this->name) - ) - ); - } -} diff --git a/app/Traits/Models/IsCachedAsCollection.php b/app/Traits/Models/IsCachedAsCollection.php deleted file mode 100644 index f8ede85..0000000 --- a/app/Traits/Models/IsCachedAsCollection.php +++ /dev/null @@ -1,103 +0,0 @@ -all(); - } - Cache::put(static::getCacheKeyName(), static::queryCached(static::query()) - ->where($conditions)->get() - ->pipe(fn (Collection $collection) => \call_user_func([self::class, 'filterQuery'], $collection))); - } - - /** - * Change query for cached elements - * - * @param \Illuminate\Database\Eloquent\Builder $query - * @return \Illuminate\Database\Eloquent\Builder - */ - protected static function queryCached(Builder $query): Builder - { - return $query; - } - - /** - * Change query for cached elements - * - * @param \Illuminate\Support\Collection $results - * @return \Illuminate\Support\Collection - */ - protected static function filterQuery(Collection $results): Collection - { - return $results; - } - - /** - * Get the class basename - * - * @return string - */ - protected static function getCacheKeyName(): string - { - return static::getCallClassBaseName(); - } - - /** - * Get the class basename - * - * @return string - */ - protected static function getCallClassBaseName(): string - { - return str_replace(__NAMESPACE__ . '\\', '', get_called_class()); - } -} diff --git a/app/Traits/Models/MiniCrudModel.php b/app/Traits/Models/MiniCrudModel.php deleted file mode 100644 index 09109f1..0000000 --- a/app/Traits/Models/MiniCrudModel.php +++ /dev/null @@ -1,180 +0,0 @@ -setData($attributes['data']); - } - } - - /** - * Apply function on data typed text while on save event - * - * @return void - */ - public function minicrudCreating() - { - /** @var array */ - $data = $this->data; - foreach ($data as &$input) { - switch ($input['inputType']) { - case InputType::text->value: - $input['text'] = clean($input['text']); - $input['text'] = FileStorageHelper::storeModelFilesFromHtml($this, $input['text']); - break; - } //end switch - } //end foreach - $this->data = $data; - } - - /** - * Apply function on data typed text while on update event - * - * @return void - */ - public function minicrudUpdating() - { - $this->minicrudCreating(); - } - - /** - * Apply function on data typed text while on updated event - * - * @return void - */ - public function minicrudUpdated() - { - /** @var array */ - foreach ($this->data as $index => $input) { - switch ($input['inputType']) { - case InputType::text->value: - $original = ToolboxHelper::getOriginal($this, 'data'); - FileStorageHelper::removeOldModelFilesFromHtml( - $input['text'], - $original[$index]['text'] ?? '' - ); - break; - } //end switch - } //end foreach - } - - /** - * Apply function on data typed text while on deleted event - * - * @return void - */ - public function minicrudDeleted() - { - /** @var array */ - foreach ($this->data as $input) { - switch ($input['inputType']) { - case InputType::text->value: - FileStorageHelper::removeModelFilesOfHtml($input['text']); - break; - } //end switch - } //end foreach - } - - /** - * Set a specific prop - * - * @param array $data - * @return void - */ - private function setData(array $data): void - { - $attrs = $this->attributes; - if (isset($attrs['data'])) { - unset($attrs['data']); - } - $this->setAttribute('data', $data); - } - - /** - * Set a specific prop - * - * @param array $value - * @return void - */ - protected function setDataAttribute(array $value): void - { - $this->attributes['data'] = $this->castAttributeAsJson( - 'data', - $this->serializeData($value) - ); - } - - /** - * Set a specific prop - * - * @param string|null $data - * @return array - */ - protected function getDataAttribute(string|null $data): array - { - return $this->fromJson($data ?? $this->attributes['data'] ?? '[]'); - } - - /** - * Serialize properties - * - * @param array $data - * @return array - * @throws \ErrorException If input type is no handled. - * @throws \Illuminate\Validation\ValidationException If url is a bo url. - * @phpcs:disable Squiz.Commenting.FunctionCommentThrowTag.WrongNumber - * @phpcs:disable Generic.Metrics.CyclomaticComplexity.TooHigh - */ - private function serializeData(array $data): array - { - foreach ($data as $o => $input) { - switch ($input['inputType']) { - case InputType::image->value: - $data[$o]['value'] = \preg_replace( - '/^\/|^/', - '', - FileStorageHelper::storeFile($this, $input['value'], true) - ); - break; - case InputType::selectEnum->value: - case InputType::boolean->value: - case InputType::password->value: - case InputType::email->value: - case InputType::number->value: - case InputType::videoVimeo->value: - case InputType::videoYoutube->value: - case InputType::video->value: - break; - case InputType::string->value: - case InputType::text->value: - case InputType::url->value: - ToolboxHelper::assertNoInternalBoUrls('content', $input['value']); - break; - default: - throw new \ErrorException(sprintf( - 'Unknown input Type %s', - $input['inputType'] - )); - } //end switch - } //end foreach - return $data; - } -} diff --git a/artisan b/artisan index 67a3329..c35e31d 100644 --- a/artisan +++ b/artisan @@ -1,53 +1,18 @@ #!/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); +$status = $app->handleCommand(new ArgvInput); exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php index 037e17d..1f9a926 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -1,55 +1,92 @@ 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; +return Application::configure(basePath: dirname(__DIR__)) + ->withRouting( + health: '/up', + then: function () { + Route::middleware(['web', 'throttle:5,2']) + ->post('/csp-report', function () { + $isCspRequest = request()->header('Content-Type') === 'application/csp-report'; + if (!$isCspRequest or !request()->json('csp-report') or !is_array(request()->json('csp-report'))) { + abort(401); + } + // * Flatten if needed. + $cspReport = collect(request()->json('csp-report')) + ->flatMap(function ($v, $k) { + return [$k => is_array($v) ? collect($v)->flatten()->implode(', ') : $v]; + })->all(); + // * Filter array keys. + $cspReport = collect(array_intersect_key($cspReport, [ + 'blocked-uri' => '', + 'document-uri' => '', + 'original-policy' => '', + 'referrer' => '', + 'violated-directive' => '', + ])); + Log::warning(sprintf( + "CSP REPORT for %s : \n %s", + $cspReport->get('document-uri'), + $cspReport->implode("\n") + )); + })->name('cspReportUri'); + } + ) + ->withMiddleware(function (Middleware $middleware) { + $middleware->web(append: [ + \Uwil\LaravelI18n\Middlewares\ForceLocale::class, + \App\Http\Middlewares\HandleInertiaRequests::class, + \Illuminate\Http\Middleware\AddLinkHeadersForPreloadedAssets::class, + \Uwil\LaravelCommon\Middlewares\SecureHeaders::class, + \Uwil\LaravelCommon\Middlewares\TrimStrings::class, + \Uwil\LaravelCommon\Middlewares\TrustHosts::class, + \Uwil\LaravelCommon\Middlewares\TrustProxies::class, + \Uwil\LaravelBackend\Middlewares\LogoutUnpublishedUsers::class, + ]); + $middleware->preventRequestForgery(except: [ + '/csp-report', + ]); + $middleware->group('saml', [ + \Uwil\LaravelBackend\Middlewares\EncryptCookies::class, + \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + \Illuminate\Session\Middleware\StartSession::class, + ]); + $middleware->alias([ + 'auth' => \Uwil\LaravelBackend\Middlewares\Authenticate::class, + 'guest' => \Uwil\LaravelBackend\Middlewares\RedirectIfAuthenticated::class, + ]); + }) + ->withExceptions(function (Exceptions $exceptions) { + $exceptions->render(function (HttpException $e, Request $request) { + $status = $e->getStatusCode(); + return InertiaHelper::errorRender($request, $status); + }); + /** + * Automatic exception capture with Sentry. + */ + $exceptions->report(function (Throwable $e) { + if (app()->bound('sentry')) { + app('sentry')->captureException($e); + } + }); + /** + * Handling validation errors by excluding sensitive fields from the flash. + */ + $exceptions->render(function (ValidationException $e, Request $request) { + $safeInput = collect($request->all()) + ->except(['password', 'password_confirmation', 'current_password']) + ->toArray(); + return back() + ->withInput($safeInput) + ->withErrors($e->errors()); + }); + })->create(); diff --git a/bootstrap/providers.php b/bootstrap/providers.php new file mode 100644 index 0000000..b472c6e --- /dev/null +++ b/bootstrap/providers.php @@ -0,0 +1,7 @@ +=4.0.0" + "doctrine/dbal": "<4.0.0 || >=5.0.0" }, "require-dev": { - "doctrine/dbal": "^3.7.0", + "doctrine/dbal": "^4.0.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -117,7 +117,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" }, "funding": [ { @@ -133,187 +133,7 @@ "type": "tidelift" } ], - "time": "2023-12-11T17:09:12+00:00" - }, - { - "name": "carlos-meneses/laravel-mpdf", - "version": "2.1.13", - "source": { - "type": "git", - "url": "https://github.com/mccarlosen/laravel-mpdf.git", - "reference": "f2461faf0c5d328d28de13c3dcc14e70d77aef83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mccarlosen/laravel-mpdf/zipball/f2461faf0c5d328d28de13c3dcc14e70d77aef83", - "reference": "f2461faf0c5d328d28de13c3dcc14e70d77aef83", - "shasum": "" - }, - "require": { - "mpdf/mpdf": "^8.0|^8.1", - "php": "^5.6|^7.0|^8.0" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "PDF": "Mccarlosen\\LaravelMpdf\\Facades\\LaravelMpdf" - }, - "providers": [ - "Mccarlosen\\LaravelMpdf\\LaravelMpdfServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Mccarlosen\\LaravelMpdf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Laravel Mpdf: Using Mpdf in Laravel to generate Pdfs.", - "keywords": [ - "laravel", - "mpdf", - "pdf" - ], - "support": { - "issues": "https://github.com/mccarlosen/laravel-mpdf/issues", - "source": "https://github.com/mccarlosen/laravel-mpdf/tree/2.1.13" - }, - "funding": [ - { - "url": "https://www.paypal.me/mccarlosen", - "type": "custom" - } - ], - "time": "2023-09-01T15:09:05+00:00" - }, - { - "name": "clue/stream-filter", - "version": "v1.7.0", - "source": { - "type": "git", - "url": "https://github.com/clue/stream-filter.git", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/stream-filter/zipball/049509fef80032cb3f051595029ab75b49a3c2f7", - "reference": "049509fef80032cb3f051595029ab75b49a3c2f7", - "shasum": "" - }, - "require": { - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "Clue\\StreamFilter\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "A simple and modern approach to stream filtering in PHP", - "homepage": "https://github.com/clue/stream-filter", - "keywords": [ - "bucket brigade", - "callback", - "filter", - "php_user_filter", - "stream", - "stream_filter_append", - "stream_filter_register" - ], - "support": { - "issues": "https://github.com/clue/stream-filter/issues", - "source": "https://github.com/clue/stream-filter/tree/v1.7.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2023-12-20T15:40:13+00:00" - }, - { - "name": "codegreencreative/laravel-samlidp", - "version": "v5.3.1", - "source": { - "type": "git", - "url": "https://github.com/codegreencreative/laravel-samlidp.git", - "reference": "527423b32c06086379c2ac964804e6d78c90b0aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/codegreencreative/laravel-samlidp/zipball/527423b32c06086379c2ac964804e6d78c90b0aa", - "reference": "527423b32c06086379c2ac964804e6d78c90b0aa", - "shasum": "" - }, - "require": { - "ext-zlib": "*", - "illuminate/routing": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "laravel/framework": "^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "litesaml/lightsaml": "^4.0", - "php": "^7.2.5|^8.0" - }, - "require-dev": { - "laravel/pint": "^1.17" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "CodeGreenCreative\\SamlIdp\\LaravelSamlIdpServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "CodeGreenCreative\\SamlIdp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Make your PHP Laravel application an Identification Provider using SAML 2.0. This package allows you to implement your own Identification Provider (idP) using the SAML 2.0 standard to be used with supporting SAML 2.0 Service Providers (SP).", - "keywords": [ - "SAML 2.0", - "SSO", - "acl", - "auth", - "idp", - "laravel", - "saml" - ], - "support": { - "issues": "https://github.com/codegreencreative/laravel-samlidp/issues", - "source": "https://github.com/codegreencreative/laravel-samlidp/tree/v5.3.1" - }, - "time": "2025-02-27T16:33:19+00:00" + "time": "2024-02-09T16:56:22+00:00" }, { "name": "dflydev/dot-access-data", @@ -392,31 +212,30 @@ }, { "name": "diglactic/laravel-breadcrumbs", - "version": "v9.0.0", + "version": "v10.1.0", "source": { "type": "git", "url": "https://github.com/diglactic/laravel-breadcrumbs.git", - "reference": "88e8f01e013e811215770e27b40a74014c28f2c4" + "reference": "64245821155ccfe721832898840408ee6136db31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/88e8f01e013e811215770e27b40a74014c28f2c4", - "reference": "88e8f01e013e811215770e27b40a74014c28f2c4", + "url": "https://api.github.com/repos/diglactic/laravel-breadcrumbs/zipball/64245821155ccfe721832898840408ee6136db31", + "reference": "64245821155ccfe721832898840408ee6136db31", "shasum": "" }, "require": { "facade/ignition-contracts": "^1.0", - "laravel/framework": "^8.0 || ^9.0 || ^10.0 || ^11.0", - "php": "^7.3 || ^8.0" + "laravel/framework": "^10.0 || ^11.0 || ^12.0 || ^13.0", + "php": "^8.1" }, "conflict": { "davejamesmiller/laravel-breadcrumbs": "*" }, "require-dev": { - "orchestra/testbench": "^6.0 || ^7.0 || ^8.0 || ^9.0", - "php-coveralls/php-coveralls": "^2.7", - "phpunit/phpunit": "^9.5 || ^10.5", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1" + "orchestra/testbench": "^8.0 || ^9.0 || ^10.0 || ^11.0", + "phpunit/phpunit": "^10.5 || ^11.5 || ^12.5", + "spatie/phpunit-snapshot-assertions": "^5.1" }, "type": "library", "extra": { @@ -457,379 +276,38 @@ ], "support": { "issues": "https://github.com/diglactic/laravel-breadcrumbs/issues", - "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v9.0.0" + "source": "https://github.com/diglactic/laravel-breadcrumbs/tree/v10.1.0" }, - "time": "2024-03-12T00:42:39+00:00" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "time": "2022-05-20T20:07:39+00:00" - }, - { - "name": "doctrine/dbal", - "version": "3.9.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/ec16c82f20be1a7224e65ac67144a29199f87959", - "reference": "ec16c82f20be1a7224e65ac67144a29199f87959", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "2.1.1", - "phpstan/phpstan-strict-rules": "^2", - "phpunit/phpunit": "9.6.22", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.4" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "time": "2025-01-16T08:28:55+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.4", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", - "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9 || ^12", - "phpstan/phpstan": "1.4.10 || 2.0.3", - "phpstan/phpstan-phpunit": "^1.0 || ^2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/log": "^1 || ^2 || ^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.4" - }, - "time": "2024-12-07T21:18:45+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2024-05-22T20:47:39+00:00" + "time": "2026-03-30T05:25:07+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.10", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/6d6c96277ea252fc1304627204c3d5e6e15faa3b", + "reference": "6d6c96277ea252fc1304627204c3d5e6e15faa3b", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" + "doctrine/coding-standard": "^12.0 || ^13.0", + "phpstan/phpstan": "^1.12 || ^2.0", + "phpstan/phpstan-phpunit": "^1.4 || ^2.0", + "phpstan/phpstan-strict-rules": "^1.6 || ^2.0", + "phpunit/phpunit": "^8.5 || ^12.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + "Doctrine\\Inflector\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -874,7 +352,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" + "source": "https://github.com/doctrine/inflector/tree/2.1.0" }, "funding": [ { @@ -890,7 +368,7 @@ "type": "tidelift" } ], - "time": "2024-02-18T20:23:39+00:00" + "time": "2025-08-10T19:31:58+00:00" }, { "name": "doctrine/lexer", @@ -971,29 +449,28 @@ }, { "name": "dragonmantank/cron-expression", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "8c784d071debd117328803d86b2097615b457500" + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", - "reference": "8c784d071debd117328803d86b2097615b457500", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/d61a8a9604ec1f8c3d150d09db6ce98b32675013", + "reference": "d61a8a9604ec1f8c3d150d09db6ce98b32675013", "shasum": "" }, "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" + "php": "^8.2|^8.3|^8.4|^8.5" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.32|^2.1.31", + "phpunit/phpunit": "^8.5.48|^9.0" }, "type": "library", "extra": { @@ -1024,7 +501,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.6.0" }, "funding": [ { @@ -1032,7 +509,7 @@ "type": "github" } ], - "time": "2024-10-09T13:47:03+00:00" + "time": "2025-10-31T18:51:33+00:00" }, { "name": "dxw/cidr", @@ -1132,16 +609,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.3", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "b115554301161fa21467629f1e1391c1936de517" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", - "reference": "b115554301161fa21467629f1e1391c1936de517", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -1187,7 +664,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -1195,24 +672,24 @@ "type": "github" } ], - "time": "2024-12-27T00:36:43+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "ezyang/htmlpurifier", - "version": "v4.18.0", + "version": "v4.19.0", "source": { "type": "git", "url": "https://github.com/ezyang/htmlpurifier.git", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b" + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/cb56001e54359df7ae76dc522d08845dc741621b", - "reference": "cb56001e54359df7ae76dc522d08845dc741621b", + "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/b287d2a16aceffbf6e0295559b39662612b77fcf", + "reference": "b287d2a16aceffbf6e0295559b39662612b77fcf", "shasum": "" }, "require": { - "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0" + "php": "~5.6.0 || ~7.0.0 || ~7.1.0 || ~7.2.0 || ~7.3.0 || ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0 || ~8.5.0" }, "require-dev": { "cerdic/css-tidy": "^1.7 || ^2.0", @@ -1254,9 +731,9 @@ ], "support": { "issues": "https://github.com/ezyang/htmlpurifier/issues", - "source": "https://github.com/ezyang/htmlpurifier/tree/v4.18.0" + "source": "https://github.com/ezyang/htmlpurifier/tree/v4.19.0" }, - "time": "2024-11-01T03:51:45+00:00" + "time": "2025-10-17T16:34:55+00:00" }, { "name": "facade/ignition-contracts", @@ -1313,31 +790,31 @@ }, { "name": "fruitcake/php-cors", - "version": "v1.3.0", + "version": "v1.4.0", "source": { "type": "git", "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", + "reference": "38aaa6c3fd4c157ffe2a4d10aa8b9b16ba8de379", "shasum": "" }, "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" + "php": "^8.1", + "symfony/http-foundation": "^5.4|^6.4|^7.3|^8" }, "require-dev": { - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^2", "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" + "squizlabs/php_codesniffer": "^4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -1368,7 +845,7 @@ ], "support": { "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" + "source": "https://github.com/fruitcake/php-cors/tree/v1.4.0" }, "funding": [ { @@ -1380,250 +857,28 @@ "type": "github" } ], - "time": "2023-10-12T05:21:21+00:00" - }, - { - "name": "graham-campbell/bounded-cache", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Bounded-Cache.git", - "reference": "c6db68b27174c3da061cc61747fa934c87ae8cd0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Bounded-Cache/zipball/c6db68b27174c3da061cc61747fa934c87ae8cd0", - "reference": "c6db68b27174c3da061cc61747fa934c87ae8cd0", - "shasum": "" - }, - "require": { - "php": "^8.1", - "psr/simple-cache": "^2.0 || ^3.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^5.0", - "graham-campbell/testbench-core": "^4.2", - "mockery/mockery": "^1.6.12", - "phpunit/phpunit": "^10.5.45 || ^11.5.7" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\BoundedCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "A Bounded TTL PSR-16 Cache Implementation", - "keywords": [ - "Bounded Cache", - "Bounded-Cache", - "Graham Campbell", - "GrahamCampbell", - "bounded", - "cache", - "psr16" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Bounded-Cache/issues", - "source": "https://github.com/GrahamCampbell/Bounded-Cache/tree/v3.0.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/bounded-cache", - "type": "tidelift" - } - ], - "time": "2025-02-09T23:15:50+00:00" - }, - { - "name": "graham-campbell/gitlab", - "version": "v7.6.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-GitLab.git", - "reference": "783fcc7e059ed61d9176bf7243ac0bbc05cc157f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-GitLab/zipball/783fcc7e059ed61d9176bf7243ac0bbc05cc157f", - "reference": "783fcc7e059ed61d9176bf7243ac0bbc05cc157f", - "shasum": "" - }, - "require": { - "graham-campbell/bounded-cache": "^1.2 || ^2.2 || ^3.0", - "graham-campbell/manager": "^5.1", - "guzzlehttp/guzzle": "^7.8.1", - "guzzlehttp/psr7": "^2.6.2", - "illuminate/contracts": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "illuminate/support": "^8.75 || ^9.0 || ^10.0 || ^11.0", - "m4tthumphrey/php-gitlab-api": "11.14.*", - "php": "^7.4.15 || ^8.0.2", - "symfony/cache": "^5.4 || ^6.0 || ^7.0" - }, - "require-dev": { - "graham-campbell/analyzer": "^4.1", - "graham-campbell/testbench": "^6.1", - "mockery/mockery": "^1.6.6", - "phpunit/phpunit": "^9.6.17 || ^10.5.13" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "GrahamCampbell\\GitLab\\GitLabServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "GrahamCampbell\\GitLab\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "GitLab Is A GitLab Bridge For Laravel", - "keywords": [ - "Bridge", - "Graham Campbell", - "GrahamCampbell", - "Laravel GitLab", - "Laravel-GitLab", - "PHP GitLab API", - "framework", - "gitlab", - "gitlab bridge", - "laravel", - "php-gitlab-api" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Laravel-GitLab/issues", - "source": "https://github.com/GrahamCampbell/Laravel-GitLab/tree/v7.6.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/gitlab", - "type": "tidelift" - } - ], - "time": "2025-03-03T17:44:37+00:00" - }, - { - "name": "graham-campbell/manager", - "version": "v5.2.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Laravel-Manager.git", - "reference": "b6a4172a32b931fe20c5c242251c8c98b2c79e41" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Laravel-Manager/zipball/b6a4172a32b931fe20c5c242251c8c98b2c79e41", - "reference": "b6a4172a32b931fe20c5c242251c8c98b2c79e41", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "illuminate/support": "^8.75 || ^9.0 || ^10.0 || ^11.0 || ^12.0", - "php": "^7.4.15 || ^8.0.2" - }, - "require-dev": { - "graham-campbell/analyzer": "^4.2.1 || ^5.0.0", - "graham-campbell/testbench-core": "^4.2.1", - "mockery/mockery": "^1.6.12", - "phpunit/phpunit": "^9.6.22 || ^10.5.45 || ^11.5.10" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\Manager\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Manager Provides Some Manager Functionality For Laravel", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Laravel Manager", - "Laravel-Manager", - "connector", - "framework", - "interface", - "laravel", - "manager" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Laravel-Manager/issues", - "source": "https://github.com/GrahamCampbell/Laravel-Manager/tree/v5.2.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/manager", - "type": "tidelift" - } - ], - "time": "2025-03-02T20:18:37+00:00" + "time": "2025-12-03T09:33:47+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.1.3", + "version": "v1.1.4", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", - "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/e01f4a821471308ba86aa202fed6698b6b695e3b", + "reference": "e01f4a821471308ba86aa202fed6698b6b695e3b", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3" + "phpoption/phpoption": "^1.9.5" }, "require-dev": { - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.41 || ^9.6.22 || ^10.5.45 || ^11.5.7" }, "type": "library", "autoload": { @@ -1652,7 +907,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.4" }, "funding": [ { @@ -1664,26 +919,26 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:45:45+00:00" + "time": "2025-12-27T19:43:20+00:00" }, { "name": "guzzlehttp/guzzle", - "version": "7.9.2", + "version": "7.10.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", + "reference": "b51ac707cfa420b7bfd4e4d5e510ba8008e822b4", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", + "guzzlehttp/promises": "^2.3", + "guzzlehttp/psr7": "^2.8", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -1774,7 +1029,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" + "source": "https://github.com/guzzle/guzzle/tree/7.10.0" }, "funding": [ { @@ -1790,20 +1045,20 @@ "type": "tidelift" } ], - "time": "2024-07-24T11:22:20+00:00" + "time": "2025-08-23T22:36:01+00:00" }, { "name": "guzzlehttp/promises", - "version": "2.0.4", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455" + "reference": "481557b130ef3790cf82b713667b43030dc9c957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455", - "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455", + "url": "https://api.github.com/repos/guzzle/promises/zipball/481557b130ef3790cf82b713667b43030dc9c957", + "reference": "481557b130ef3790cf82b713667b43030dc9c957", "shasum": "" }, "require": { @@ -1811,7 +1066,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "type": "library", "extra": { @@ -1857,7 +1112,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.4" + "source": "https://github.com/guzzle/promises/tree/2.3.0" }, "funding": [ { @@ -1873,20 +1128,20 @@ "type": "tidelift" } ], - "time": "2024-10-17T10:06:22+00:00" + "time": "2025-08-22T14:34:08+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.7.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/7d0ed42f28e42d61352a7a79de682e5e67fec884", + "reference": "7d0ed42f28e42d61352a7a79de682e5e67fec884", "shasum": "" }, "require": { @@ -1902,7 +1157,8 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" + "jshttp/mime-db": "1.54.0.1", + "phpunit/phpunit": "^8.5.44 || ^9.6.25" }, "suggest": { "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" @@ -1973,7 +1229,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" + "source": "https://github.com/guzzle/psr7/tree/2.9.0" }, "funding": [ { @@ -1989,20 +1245,20 @@ "type": "tidelift" } ], - "time": "2024-07-18T11:15:46+00:00" + "time": "2026-03-10T16:41:02+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.4", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", - "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/4f4bbd4e7172148801e76e3decc1e559bdee34e1", + "reference": "4f4bbd4e7172148801e76e3decc1e559bdee34e1", "shasum": "" }, "require": { @@ -2011,7 +1267,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "phpunit/phpunit": "^8.5.44 || ^9.6.25", "uri-template/tests": "1.0.0" }, "type": "library", @@ -2059,7 +1315,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.5" }, "funding": [ { @@ -2075,20 +1331,93 @@ "type": "tidelift" } ], - "time": "2025-02-03T10:55:03+00:00" + "time": "2025-08-22T14:27:06+00:00" }, { - "name": "jean85/pretty-package-versions", - "version": "2.1.0", + "name": "inertiajs/inertia-laravel", + "version": "v2.0.24", "source": { "type": "git", - "url": "https://github.com/Jean85/pretty-package-versions.git", - "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10" + "url": "https://github.com/inertiajs/inertia-laravel.git", + "reference": "ea345adad12f110edbbc4bef03b69c2374a535d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", - "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10", + "url": "https://api.github.com/repos/inertiajs/inertia-laravel/zipball/ea345adad12f110edbbc4bef03b69c2374a535d4", + "reference": "ea345adad12f110edbbc4bef03b69c2374a535d4", + "shasum": "" + }, + "require": { + "ext-json": "*", + "laravel/framework": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1.0", + "symfony/console": "^6.2|^7.0|^8.0" + }, + "conflict": { + "laravel/boost": "<2.2.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.2", + "larastan/larastan": "^3.0", + "laravel/pint": "^1.16", + "mockery/mockery": "^1.3.3", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "phpunit/phpunit": "^10.4|^11.5|^12.0", + "roave/security-advisories": "dev-master" + }, + "suggest": { + "ext-pcntl": "Recommended when running the Inertia SSR server via the `inertia:start-ssr` artisan command." + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Inertia\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "./helpers.php" + ], + "psr-4": { + "Inertia\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jonathan Reinink", + "email": "jonathan@reinink.ca", + "homepage": "https://reinink.ca" + } + ], + "description": "The Laravel adapter for Inertia.js.", + "keywords": [ + "inertia", + "laravel" + ], + "support": { + "issues": "https://github.com/inertiajs/inertia-laravel/issues", + "source": "https://github.com/inertiajs/inertia-laravel/tree/v2.0.24" + }, + "time": "2026-04-10T14:36:44+00:00" + }, + { + "name": "jean85/pretty-package-versions", + "version": "2.1.1", + "source": { + "type": "git", + "url": "https://github.com/Jean85/pretty-package-versions.git", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/4d7aa5dab42e2a76d99559706022885de0e18e1a", + "reference": "4d7aa5dab42e2a76d99559706022885de0e18e1a", "shasum": "" }, "require": { @@ -2098,8 +1427,9 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "jean85/composer-provided-replaced-stub-package": "^1.0", - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^7.5|^8.5|^9.6", + "rector/rector": "^2.0", "vimeo/psalm": "^4.3 || ^5.0" }, "type": "library", @@ -2132,30 +1462,30 @@ ], "support": { "issues": "https://github.com/Jean85/pretty-package-versions/issues", - "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0" + "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.1" }, - "time": "2024-11-18T16:19:46+00:00" + "time": "2025-03-19T14:43:43+00:00" }, { "name": "laravel/framework", - "version": "v11.44.1", + "version": "v13.6.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "0883d4175f4e2b5c299e7087ad3c74f2ce195c6d" + "reference": "416a93ea9c53161e0d4b8a44045f447b65a7d2f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/0883d4175f4e2b5c299e7087ad3c74f2ce195c6d", - "reference": "0883d4175f4e2b5c299e7087ad3c74f2ce195c6d", + "url": "https://api.github.com/repos/laravel/framework/zipball/416a93ea9c53161e0d4b8a44045f447b65a7d2f1", + "reference": "416a93ea9c53161e0d4b8a44045f447b65a7d2f1", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", + "brick/math": "^0.14.2 || ^0.15 || ^0.16 || ^0.17", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.4", - "egulias/email-validator": "^3.2.1|^4.0", + "egulias/email-validator": "^4.0", "ext-ctype": "*", "ext-filter": "*", "ext-hash": "*", @@ -2165,33 +1495,35 @@ "ext-tokenizer": "*", "fruitcake/php-cors": "^1.3", "guzzlehttp/guzzle": "^7.8.2", + "guzzlehttp/promises": "^2.0.3", "guzzlehttp/uri-template": "^1.0", - "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", - "laravel/serializable-closure": "^1.3|^2.0", - "league/commonmark": "^2.6", + "laravel/prompts": "^0.3.0", + "laravel/serializable-closure": "^2.0.10", + "league/commonmark": "^2.8.1", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", "league/uri": "^7.5.1", "monolog/monolog": "^3.0", - "nesbot/carbon": "^2.72.6|^3.8.4", + "nesbot/carbon": "^3.8.4", "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", + "php": "^8.3", + "psr/container": "^1.1.1 || ^2.0.1", + "psr/log": "^1.0 || ^2.0 || ^3.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^7.0.3", - "symfony/error-handler": "^7.0.3", - "symfony/finder": "^7.0.3", - "symfony/http-foundation": "^7.2.0", - "symfony/http-kernel": "^7.0.3", - "symfony/mailer": "^7.0.3", - "symfony/mime": "^7.0.3", - "symfony/polyfill-php83": "^1.31", - "symfony/process": "^7.0.3", - "symfony/routing": "^7.0.3", - "symfony/uid": "^7.0.3", - "symfony/var-dumper": "^7.0.3", + "symfony/console": "^7.4.0 || ^8.0.0", + "symfony/error-handler": "^7.4.0 || ^8.0.0", + "symfony/finder": "^7.4.0 || ^8.0.0", + "symfony/http-foundation": "^7.4.0 || ^8.0.0", + "symfony/http-kernel": "^7.4.0 || ^8.0.0", + "symfony/mailer": "^7.4.0 || ^8.0.0", + "symfony/mime": "^7.4.0 || ^8.0.0", + "symfony/polyfill-php84": "^1.33", + "symfony/polyfill-php85": "^1.33", + "symfony/process": "^7.4.5 || ^8.0.5", + "symfony/routing": "^7.4.0 || ^8.0.0", + "symfony/uid": "^7.4.0 || ^8.0.0", + "symfony/var-dumper": "^7.4.0 || ^8.0.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.6.1", "voku/portable-ascii": "^2.0.2" @@ -2200,9 +1532,9 @@ "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/log-implementation": "1.0|2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" + "psr/container-implementation": "1.1 || 2.0", + "psr/log-implementation": "1.0 || 2.0 || 3.0", + "psr/simple-cache-implementation": "1.0 || 2.0 || 3.0" }, "replace": { "illuminate/auth": "self.version", @@ -2223,6 +1555,7 @@ "illuminate/filesystem": "self.version", "illuminate/hashing": "self.version", "illuminate/http": "self.version", + "illuminate/json-schema": "self.version", "illuminate/log": "self.version", "illuminate/macroable": "self.version", "illuminate/mail": "self.version", @@ -2232,6 +1565,7 @@ "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", + "illuminate/reflection": "self.version", "illuminate/routing": "self.version", "illuminate/session": "self.version", "illuminate/support": "self.version", @@ -2246,7 +1580,6 @@ "aws/aws-sdk-php": "^3.322.9", "ext-gmp": "*", "fakerphp/faker": "^1.24", - "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^2.4", "laravel/pint": "^1.18", "league/flysystem-aws-s3-v3": "^3.25.1", @@ -2255,22 +1588,24 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.11.2", - "pda/pheanstalk": "^5.0.6", + "opis/json-schema": "^2.4.1", + "orchestra/testbench-core": "^11.0.0", + "pda/pheanstalk": "^7.0.0 || ^8.0.0", "php-http/discovery": "^1.15", "phpstan/phpstan": "^2.0", - "phpunit/phpunit": "^10.5.35|^11.3.6|^12.0.1", - "predis/predis": "^2.3", - "resend/resend-php": "^0.10.0", - "symfony/cache": "^7.0.3", - "symfony/http-client": "^7.0.3", - "symfony/psr-http-message-bridge": "^7.0.3", - "symfony/translation": "^7.0.3" + "phpunit/phpunit": "^11.5.50 || ^12.5.8 || ^13.0.3", + "predis/predis": "^2.3 || ^3.0", + "rector/rector": "^2.3", + "resend/resend-php": "^1.0", + "symfony/cache": "^7.4.0 || ^8.0.0", + "symfony/http-client": "^7.4.0 || ^8.0.0", + "symfony/psr-http-message-bridge": "^7.4.0 || ^8.0.0", + "symfony/translation": "^7.4.0 || ^8.0.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.322.9).", - "brianium/paratest": "Required to run tests in parallel (^7.0|^8.0).", + "brianium/paratest": "Required to run tests in parallel (^7.0 || ^8.0).", "ext-apcu": "Required to use the APC cache driver.", "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", @@ -2279,8 +1614,8 @@ "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0|^6.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0 || ^5.0 || ^6.0).", + "fakerphp/faker": "Required to generate fake data using the fake() helper (^1.23).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.25.1).", @@ -2289,24 +1624,25 @@ "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^7.0 || ^8.0).", "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", - "phpunit/phpunit": "Required to use assertions and run tests (^10.5.35|^11.3.6|^12.0.1).", - "predis/predis": "Required to use the predis connector (^2.3).", + "phpunit/phpunit": "Required to use assertions and run tests (^11.5.50 || ^12.5.8 || ^13.0.3).", + "predis/predis": "Required to use the predis connector (^2.3 || ^3.0).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^7.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.0)." + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0 || ^7.0).", + "resend/resend-php": "Required to enable support for the Resend mail transport (^0.10.0 || ^1.0).", + "spatie/fork": "Required to use the 'fork' concurrency driver (^1.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^7.4 || ^8.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^7.4 || ^8.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^7.4 || ^8.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^7.4 || ^8.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^7.4 || ^8.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^7.4 || ^8.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "11.x-dev" + "dev-master": "13.0.x-dev" } }, "autoload": { @@ -2317,6 +1653,7 @@ "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Log/functions.php", + "src/Illuminate/Reflection/helpers.php", "src/Illuminate/Support/functions.php", "src/Illuminate/Support/helpers.php" ], @@ -2325,7 +1662,8 @@ "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" + "src/Illuminate/Conditionable/", + "src/Illuminate/Reflection/" ] } }, @@ -2349,38 +1687,38 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2025-03-05T15:34:10+00:00" + "time": "2026-04-21T13:32:11+00:00" }, { "name": "laravel/prompts", - "version": "v0.3.5", + "version": "v0.3.17", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1" + "reference": "6a82ac19a28b916ae0885828795dbd4c59d9a818" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/57b8f7efe40333cdb925700891c7d7465325d3b1", - "reference": "57b8f7efe40333cdb925700891c7d7465325d3b1", + "url": "https://api.github.com/repos/laravel/prompts/zipball/6a82ac19a28b916ae0885828795dbd4c59d9a818", + "reference": "6a82ac19a28b916ae0885828795dbd4c59d9a818", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "ext-mbstring": "*", "php": "^8.1", - "symfony/console": "^6.2|^7.0" + "symfony/console": "^6.2|^7.0|^8.0" }, "conflict": { "illuminate/console": ">=10.17.0 <10.25.0", "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { - "illuminate/collections": "^10.0|^11.0|^12.0", + "illuminate/collections": "^10.0|^11.0|^12.0|^13.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3|^3.4", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" + "pestphp/pest": "^2.3|^3.4|^4.0", + "phpstan/phpstan": "^1.12.28", + "phpstan/phpstan-mockery": "^1.1.3" }, "suggest": { "ext-pcntl": "Required for the spinner to be animated." @@ -2406,33 +1744,89 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.3.5" + "source": "https://github.com/laravel/prompts/tree/v0.3.17" }, - "time": "2025-02-11T13:34:40+00:00" + "time": "2026-04-20T16:07:33+00:00" }, { - "name": "laravel/serializable-closure", - "version": "v2.0.3", + "name": "laravel/sentinel", + "version": "v1.1.0", "source": { "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f379c13663245f7aa4512a7869f62eb14095f23f" + "url": "https://github.com/laravel/sentinel.git", + "reference": "972d9885d9d14312a118e9565c4e6ecc5e751ea1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f379c13663245f7aa4512a7869f62eb14095f23f", - "reference": "f379c13663245f7aa4512a7869f62eb14095f23f", + "url": "https://api.github.com/repos/laravel/sentinel/zipball/972d9885d9d14312a118e9565c4e6ecc5e751ea1", + "reference": "972d9885d9d14312a118e9565c4e6ecc5e751ea1", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/container": "^8.37|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.0" + }, + "require-dev": { + "laravel/pint": "^1.27", + "orchestra/testbench": "^6.47.1|^7.56|^8.37|^9.16|^10.9|^11.0", + "phpstan/phpstan": "^2.1.33" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Sentinel\\SentinelServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Sentinel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mior Muhammad Zaki", + "email": "mior@laravel.com" + } + ], + "support": { + "source": "https://github.com/laravel/sentinel/tree/v1.1.0" + }, + "time": "2026-03-24T14:03:38+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v2.0.12", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "a6abb4e54f6fcd3138120b9ad497f0bd146f9919" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/a6abb4e54f6fcd3138120b9ad497f0bd146f9919", + "reference": "a6abb4e54f6fcd3138120b9ad497f0bd146f9919", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "illuminate/support": "^10.0|^11.0|^12.0", + "illuminate/support": "^10.0|^11.0|^12.0|^13.0", "nesbot/carbon": "^2.67|^3.0", - "pestphp/pest": "^2.36|^3.0", + "pestphp/pest": "^2.36|^3.0|^4.0", "phpstan/phpstan": "^2.0", - "symfony/var-dumper": "^6.2.0|^7.0.0" + "symfony/var-dumper": "^6.2.0|^7.0.0|^8.0.0" }, "type": "library", "extra": { @@ -2469,37 +1863,106 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2025-02-11T15:03:05+00:00" + "time": "2026-04-14T13:33:34+00:00" }, { - "name": "laravel/tinker", - "version": "v2.10.1", + "name": "laravel/telescope", + "version": "v5.20.0", "source": { "type": "git", - "url": "https://github.com/laravel/tinker.git", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3" + "url": "https://github.com/laravel/telescope.git", + "reference": "38ec6e6006a67e05e0c476c5f8ef3550b72e43d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/22177cc71807d38f2810c6204d8f7183d88a57d3", - "reference": "22177cc71807d38f2810c6204d8f7183d88a57d3", + "url": "https://api.github.com/repos/laravel/telescope/zipball/38ec6e6006a67e05e0c476c5f8ef3550b72e43d8", + "reference": "38ec6e6006a67e05e0c476c5f8ef3550b72e43d8", "shasum": "" }, "require": { - "illuminate/console": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^7.2.5|^8.0", - "psy/psysh": "^0.11.1|^0.12.0", - "symfony/var-dumper": "^4.3.4|^5.0|^6.0|^7.0" + "ext-json": "*", + "laravel/framework": "^8.37|^9.0|^10.0|^11.0|^12.0|^13.0", + "laravel/sentinel": "^1.0", + "php": "^8.0", + "symfony/console": "^5.3|^6.0|^7.0|^8.0", + "symfony/var-dumper": "^5.0|^6.0|^7.0|^8.0" + }, + "require-dev": { + "ext-gd": "*", + "guzzlehttp/guzzle": "^6.0|^7.0", + "laravel/octane": "^1.4|^2.0", + "orchestra/testbench": "^6.47.1|^7.55|^8.36|^9.15|^10.8|^11.0", + "phpstan/phpstan": "^1.10" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Telescope\\TelescopeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Telescope\\": "src/", + "Laravel\\Telescope\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Mohamed Said", + "email": "mohamed@laravel.com" + } + ], + "description": "An elegant debug assistant for the Laravel framework.", + "keywords": [ + "debugging", + "laravel", + "monitoring" + ], + "support": { + "issues": "https://github.com/laravel/telescope/issues", + "source": "https://github.com/laravel/telescope/tree/v5.20.0" + }, + "time": "2026-04-06T12:52:26+00:00" + }, + { + "name": "laravel/tinker", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/tinker.git", + "reference": "4faba77764bd33411735936acdf30446d058c78b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/tinker/zipball/4faba77764bd33411735936acdf30446d058c78b", + "reference": "4faba77764bd33411735936acdf30446d058c78b", + "shasum": "" + }, + "require": { + "illuminate/console": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/contracts": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "php": "^8.1", + "psy/psysh": "^0.12.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0|^8.0" }, "require-dev": { "mockery/mockery": "~1.3.3|^1.4.2", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.5.8|^9.3.3|^10.0" + "phpunit/phpunit": "^10.5|^11.5" }, "suggest": { - "illuminate/database": "The Illuminate Database package (^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0)." + "illuminate/database": "The Illuminate Database package (^8.0|^9.0|^10.0|^11.0|^12.0|^13.0)." }, "type": "library", "extra": { @@ -2507,6 +1970,9 @@ "providers": [ "Laravel\\Tinker\\TinkerServiceProvider" ] + }, + "branch-alias": { + "dev-master": "3.x-dev" } }, "autoload": { @@ -2533,85 +1999,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.10.1" + "source": "https://github.com/laravel/tinker/tree/v3.0.2" }, - "time": "2025-01-27T14:24:01+00:00" - }, - { - "name": "laravel/ui", - "version": "v4.6.1", - "source": { - "type": "git", - "url": "https://github.com/laravel/ui.git", - "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/ui/zipball/7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", - "reference": "7d6ffa38d79f19c9b3e70a751a9af845e8f41d88", - "shasum": "" - }, - "require": { - "illuminate/console": "^9.21|^10.0|^11.0|^12.0", - "illuminate/filesystem": "^9.21|^10.0|^11.0|^12.0", - "illuminate/support": "^9.21|^10.0|^11.0|^12.0", - "illuminate/validation": "^9.21|^10.0|^11.0|^12.0", - "php": "^8.0", - "symfony/console": "^6.0|^7.0" - }, - "require-dev": { - "orchestra/testbench": "^7.35|^8.15|^9.0|^10.0", - "phpunit/phpunit": "^9.3|^10.4|^11.5" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Ui\\UiServiceProvider" - ] - }, - "branch-alias": { - "dev-master": "4.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\Ui\\": "src/", - "Illuminate\\Foundation\\Auth\\": "auth-backend/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Laravel UI utilities and presets.", - "keywords": [ - "laravel", - "ui" - ], - "support": { - "source": "https://github.com/laravel/ui/tree/v4.6.1" - }, - "time": "2025-01-28T15:15:29+00:00" + "time": "2026-03-17T14:54:13+00:00" }, { "name": "league/commonmark", - "version": "2.6.1", + "version": "2.8.2", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "d990688c91cedfb69753ffc2512727ec646df2ad" + "reference": "59fb075d2101740c337c7216e3f32b36c204218b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad", - "reference": "d990688c91cedfb69753ffc2512727ec646df2ad", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/59fb075d2101740c337c7216e3f32b36c204218b", + "reference": "59fb075d2101740c337c7216e3f32b36c204218b", "shasum": "" }, "require": { @@ -2636,11 +2039,11 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 | ^7.0", - "symfony/process": "^5.4 | ^6.0 | ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0 || ^8.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0 || ^8.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0 || ^8.0", "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" + "vimeo/psalm": "^4.24.0 || ^5.0.0 || ^6.0.0" }, "suggest": { "symfony/yaml": "v2.3+ required if using the Front Matter extension" @@ -2648,7 +2051,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.7-dev" + "dev-main": "2.9-dev" } }, "autoload": { @@ -2705,7 +2108,7 @@ "type": "tidelift" } ], - "time": "2024-12-29T14:10:59+00:00" + "time": "2026-03-19T13:16:38+00:00" }, { "name": "league/config", @@ -2791,16 +2194,16 @@ }, { "name": "league/flysystem", - "version": "3.29.1", + "version": "3.33.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" + "reference": "570b8871e0ce693764434b29154c54b434905350" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", - "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/570b8871e0ce693764434b29154c54b434905350", + "reference": "570b8871e0ce693764434b29154c54b434905350", "shasum": "" }, "require": { @@ -2824,13 +2227,13 @@ "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", - "ext-mongodb": "^1.3", + "ext-mongodb": "^1.3|^2", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", "guzzlehttp/psr7": "^2.6", "microsoft/azure-storage-blob": "^1.1", - "mongodb/mongodb": "^1.2", + "mongodb/mongodb": "^1.2|^2", "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", @@ -2868,22 +2271,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" + "source": "https://github.com/thephpleague/flysystem/tree/3.33.0" }, - "time": "2024-10-08T08:58:34+00:00" + "time": "2026-03-25T07:59:30+00:00" }, { "name": "league/flysystem-local", - "version": "3.29.0", + "version": "3.31.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", - "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/2f669db18a4c20c755c2bb7d3a7b0b2340488079", + "reference": "2f669db18a4c20c755c2bb7d3a7b0b2340488079", "shasum": "" }, "require": { @@ -2917,9 +2320,9 @@ "local" ], "support": { - "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.31.0" }, - "time": "2024-08-09T21:24:39+00:00" + "time": "2026-01-23T15:30:45+00:00" }, { "name": "league/mime-type-detection", @@ -2979,33 +2382,38 @@ }, { "name": "league/uri", - "version": "7.5.1", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri.git", - "reference": "81fb5145d2644324614cc532b28efd0215bda430" + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", - "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/08cf38e3924d4f56238125547b5720496fac8fd4", + "reference": "08cf38e3924d4f56238125547b5720496fac8fd4", "shasum": "" }, "require": { - "league/uri-interfaces": "^7.5", - "php": "^8.1" + "league/uri-interfaces": "^7.8.1", + "php": "^8.1", + "psr/http-factory": "^1" }, "conflict": { "league/uri-schemes": "^1.0" }, "suggest": { "ext-bcmath": "to improve IPV4 host parsing", + "ext-dom": "to convert the URI into an HTML anchor tag", "ext-fileinfo": "to create Data URI from file contennts", "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", - "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", - "league/uri-components": "Needed to easily manipulate URI objects components", + "ext-uri": "to use the PHP native URI class", + "jeremykendall/php-domain-parser": "to further parse the URI host and resolve its Public Suffix and Top Level Domain", + "league/uri-components": "to provide additional tools to manipulate URI objects components", + "league/uri-polyfill": "to backport the PHP URI extension for older versions of PHP", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -3033,6 +2441,7 @@ "description": "URI manipulation library", "homepage": "https://uri.thephpleague.com", "keywords": [ + "URN", "data-uri", "file-uri", "ftp", @@ -3045,9 +2454,11 @@ "psr-7", "query-string", "querystring", + "rfc2141", "rfc3986", "rfc3987", "rfc6570", + "rfc8141", "uri", "uri-template", "url", @@ -3057,7 +2468,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri/tree/7.5.1" + "source": "https://github.com/thephpleague/uri/tree/7.8.1" }, "funding": [ { @@ -3065,26 +2476,25 @@ "type": "github" } ], - "time": "2024-12-08T08:40:02+00:00" + "time": "2026-03-15T20:22:25+00:00" }, { "name": "league/uri-interfaces", - "version": "7.5.0", + "version": "7.8.1", "source": { "type": "git", "url": "https://github.com/thephpleague/uri-interfaces.git", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", - "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/85d5c77c5d6d3af6c54db4a78246364908f3c928", + "reference": "85d5c77c5d6d3af6c54db4a78246364908f3c928", "shasum": "" }, "require": { "ext-filter": "*", "php": "^8.1", - "psr/http-factory": "^1", "psr/http-message": "^1.1 || ^2.0" }, "suggest": { @@ -3092,6 +2502,7 @@ "ext-gmp": "to improve IPV4 host parsing", "ext-intl": "to handle IDN host with the best performance", "php-64bit": "to improve IPV4 host parsing", + "rowbot/url": "to handle URLs using the WHATWG URL Living Standard specification", "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" }, "type": "library", @@ -3116,7 +2527,7 @@ "homepage": "https://nyamsprod.com" } ], - "description": "Common interfaces and classes for URI representation and interaction", + "description": "Common tools for parsing and resolving RFC3987/RFC3986 URI", "homepage": "https://uri.thephpleague.com", "keywords": [ "data-uri", @@ -3141,7 +2552,7 @@ "docs": "https://uri.thephpleague.com", "forum": "https://thephpleague.slack.com", "issues": "https://github.com/thephpleague/uri-src/issues", - "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.8.1" }, "funding": [ { @@ -3149,162 +2560,49 @@ "type": "github" } ], - "time": "2024-12-08T08:18:47+00:00" + "time": "2026-03-08T20:05:35+00:00" }, { - "name": "litesaml/lightsaml", - "version": "4.5.0", + "name": "mcamara/laravel-localization", + "version": "v2.4.0", "source": { "type": "git", - "url": "https://github.com/litesaml/lightsaml.git", - "reference": "144f1c7d99d22bb2f69ae55e57f238a7b87884cf" + "url": "https://github.com/mcamara/laravel-localization.git", + "reference": "b4b530b8d892cc8787b94059085a53b37224009b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/litesaml/lightsaml/zipball/144f1c7d99d22bb2f69ae55e57f238a7b87884cf", - "reference": "144f1c7d99d22bb2f69ae55e57f238a7b87884cf", + "url": "https://api.github.com/repos/mcamara/laravel-localization/zipball/b4b530b8d892cc8787b94059085a53b37224009b", + "reference": "b4b530b8d892cc8787b94059085a53b37224009b", "shasum": "" }, "require": { - "litesaml/schemas": "^3.0", - "php": "^8.1", - "psr/event-dispatcher": "^1.0", - "psr/log": "^3.0", - "robrichards/xmlseclibs": "^3.0", - "symfony/http-foundation": "^6.0|^7.0" + "laravel/framework": "^11.0|^12.0|^13.0", + "php": "^8.2" }, "require-dev": { - "mockery/mockery": "^1.4.4", - "php-cs-fixer/shim": "^3.70", - "phpstan/phpstan": "^1.8", - "phpunit/phpunit": "^10.1", - "pimple/pimple": "~3.0", - "rector/rector": "^1.2.2" + "orchestra/testbench": "^9.0|^10.0|^11.0", + "phpunit/phpunit": "^10.1|^11.0|^12.5.12" }, - "type": "library", - "autoload": { - "psr-4": { - "LightSaml\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "William", - "email": "work@suppo.fr", - "homepage": "https://github.com/william-suppo" - } - ], - "description": "SAML 2.0 PHP library", - "keywords": [ - "SAML 2.0", - "Single Logout", - "Single SignOn", - "library", - "lightSAML", - "php" - ], - "support": { - "docs": "https://litesaml.github.io/cookbook/", - "issues": "https://github.com/litesaml/lightsaml/issues", - "source": "https://github.com/litesaml/lightsaml" - }, - "time": "2025-02-28T07:24:20+00:00" - }, - { - "name": "litesaml/schemas", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/litesaml/schemas.git", - "reference": "11f0dec57cd55f7fd2378bf9f55ae6c7c38d15b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/litesaml/schemas/zipball/11f0dec57cd55f7fd2378bf9f55ae6c7c38d15b7", - "reference": "11f0dec57cd55f7fd2378bf9f55ae6c7c38d15b7", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "phpstan/phpstan": "^2.1.5", - "phpunit/phpunit": "^10.1", - "squizlabs/php_codesniffer": "^3.10.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "LiteSaml\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "William", - "email": "work@suppo.fr" - } - ], - "description": "Deliver schemas for Lite Saml library", - "support": { - "issues": "https://github.com/litesaml/schemas/issues", - "source": "https://github.com/litesaml/schemas/tree/3.1.1" - }, - "time": "2025-02-23T10:38:31+00:00" - }, - { - "name": "m4tthumphrey/php-gitlab-api", - "version": "11.14.0", - "source": { - "type": "git", - "url": "https://github.com/GitLabPHP/Client.git", - "reference": "6b805882e1478873cc89ee62d2decf74eee2d5f2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GitLabPHP/Client/zipball/6b805882e1478873cc89ee62d2decf74eee2d5f2", - "reference": "6b805882e1478873cc89ee62d2decf74eee2d5f2", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-xml": "*", - "php": "^7.4.15 || ^8.0.2", - "php-http/cache-plugin": "^1.8.1 || ^2.0", - "php-http/client-common": "^2.7.1", - "php-http/discovery": "^1.19.2", - "php-http/httplug": "^2.4", - "php-http/multipart-stream-builder": "^1.3", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/http-client-implementation": "^1.0", - "psr/http-factory-implementation": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "symfony/options-resolver": "^4.4 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.26" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "guzzlehttp/guzzle": "^7.8", - "http-interop/http-factory-guzzle": "^1.2" + "suggest": { + "ext-intl": "*" }, "type": "library", "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false + "laravel": { + "aliases": { + "LaravelLocalization": "Mcamara\\LaravelLocalization\\Facades\\LaravelLocalization" + }, + "providers": [ + "Mcamara\\LaravelLocalization\\LaravelLocalizationServiceProvider" + ] } }, "autoload": { - "psr-4": { - "Gitlab\\": "src/" - } + "psr-0": { + "Mcamara\\LaravelLocalization": "src/" + }, + "classmap": [] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3312,62 +2610,53 @@ ], "authors": [ { - "name": "Fabien Bourigault", - "email": "bourigaultfabien@gmail.com", - "homepage": "https://github.com/fbourigault" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Matt Humphrey", - "email": "matth@windsor-telecom.co.uk", - "homepage": "https://github.com/m4tthumphrey" - }, - { - "name": "Miguel Piedrafita", - "email": "github@miguelpiedrafita.com", - "homepage": "https://github.com/m1guelpf" + "name": "Marc Cámara", + "email": "mcamara88@gmail.com", + "role": "Developer" } ], - "description": "GitLab API v4 client for PHP", + "description": "Easy localization for Laravel", + "homepage": "https://github.com/mcamara/laravel-localization", "keywords": [ - "api", - "gitlab" + "laravel", + "localization", + "php" ], "support": { - "issues": "https://github.com/GitLabPHP/Client/issues", - "source": "https://github.com/GitLabPHP/Client/tree/11.14.0" + "issues": "https://github.com/mcamara/laravel-localization/issues", + "source": "https://github.com/mcamara/laravel-localization/tree/v2.4.0" }, "funding": [ { - "url": "https://github.com/GrahamCampbell", + "url": "https://github.com/iwasherefirst2", + "type": "github" + }, + { + "url": "https://github.com/mcamara", "type": "github" } ], - "time": "2024-03-17T21:35:56+00:00" + "time": "2026-03-17T19:24:07+00:00" }, { "name": "mews/purifier", - "version": "3.4.3", + "version": "3.4.4", "source": { "type": "git", "url": "https://github.com/mewebstudio/Purifier.git", - "reference": "acc71bc512dcf9b87144546d0e3055fc76d244ff" + "reference": "b2705cc6c832ce7229373418e191d71b6c037841" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/acc71bc512dcf9b87144546d0e3055fc76d244ff", - "reference": "acc71bc512dcf9b87144546d0e3055fc76d244ff", + "url": "https://api.github.com/repos/mewebstudio/Purifier/zipball/b2705cc6c832ce7229373418e191d71b6c037841", + "reference": "b2705cc6c832ce7229373418e191d71b6c037841", "shasum": "" }, "require": { "ezyang/htmlpurifier": "^4.16.0", - "illuminate/config": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", - "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0", + "illuminate/config": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/filesystem": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", + "illuminate/support": "^5.8|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0|^12.0|^13.0", "php": "^7.2|^8.0" }, "require-dev": { @@ -3423,22 +2712,22 @@ ], "support": { "issues": "https://github.com/mewebstudio/Purifier/issues", - "source": "https://github.com/mewebstudio/Purifier/tree/3.4.3" + "source": "https://github.com/mewebstudio/Purifier/tree/3.4.4" }, - "time": "2025-02-24T16:00:29+00:00" + "time": "2026-04-15T16:41:08+00:00" }, { "name": "monolog/monolog", - "version": "3.8.1", + "version": "3.10.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", - "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/b321dd6749f0bf7189444158a3ce785cc16d69b0", + "reference": "b321dd6749f0bf7189444158a3ce785cc16d69b0", "shasum": "" }, "require": { @@ -3456,7 +2745,7 @@ "graylog2/gelf-php": "^1.4.2 || ^2.0", "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", + "mongodb/mongodb": "^1.8 || ^2.0", "php-amqplib/php-amqplib": "~2.4 || ^3", "php-console/php-console": "^3.1.8", "phpstan/phpstan": "^2", @@ -3516,7 +2805,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.1" + "source": "https://github.com/Seldaek/monolog/tree/3.10.0" }, "funding": [ { @@ -3528,253 +2817,20 @@ "type": "tidelift" } ], - "time": "2024-12-05T17:15:07+00:00" - }, - { - "name": "mpdf/mpdf", - "version": "v8.2.5", - "source": { - "type": "git", - "url": "https://github.com/mpdf/mpdf.git", - "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/mpdf/zipball/e175b05e3e00977b85feb96a8cccb174ac63621f", - "reference": "e175b05e3e00977b85feb96a8cccb174ac63621f", - "shasum": "" - }, - "require": { - "ext-gd": "*", - "ext-mbstring": "*", - "mpdf/psr-http-message-shim": "^1.0 || ^2.0", - "mpdf/psr-log-aware-trait": "^2.0 || ^3.0", - "myclabs/deep-copy": "^1.7", - "paragonie/random_compat": "^1.4|^2.0|^9.99.99", - "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", - "psr/http-message": "^1.0 || ^2.0", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "setasign/fpdi": "^2.1" - }, - "require-dev": { - "mockery/mockery": "^1.3.0", - "mpdf/qrcode": "^1.1.0", - "squizlabs/php_codesniffer": "^3.5.0", - "tracy/tracy": "~2.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-bcmath": "Needed for generation of some types of barcodes", - "ext-xml": "Needed mainly for SVG manipulation", - "ext-zlib": "Needed for compression of embedded resources, such as fonts" - }, - "type": "library", - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Mpdf\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-only" - ], - "authors": [ - { - "name": "Matěj Humpál", - "role": "Developer, maintainer" - }, - { - "name": "Ian Back", - "role": "Developer (retired)" - } - ], - "description": "PHP library generating PDF files from UTF-8 encoded HTML", - "homepage": "https://mpdf.github.io", - "keywords": [ - "pdf", - "php", - "utf-8" - ], - "support": { - "docs": "https://mpdf.github.io", - "issues": "https://github.com/mpdf/mpdf/issues", - "source": "https://github.com/mpdf/mpdf" - }, - "funding": [ - { - "url": "https://www.paypal.me/mpdf", - "type": "custom" - } - ], - "time": "2024-11-18T15:30:42+00:00" - }, - { - "name": "mpdf/psr-http-message-shim", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/mpdf/psr-http-message-shim.git", - "reference": "f25a0153d645e234f9db42e5433b16d9b113920f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/psr-http-message-shim/zipball/f25a0153d645e234f9db42e5433b16d9b113920f", - "reference": "f25a0153d645e234f9db42e5433b16d9b113920f", - "shasum": "" - }, - "require": { - "psr/http-message": "^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Mpdf\\PsrHttpMessageShim\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Dorison", - "email": "mark@chromatichq.com" - }, - { - "name": "Kristofer Widholm", - "email": "kristofer@chromatichq.com" - }, - { - "name": "Nigel Cunningham", - "email": "nigel.cunningham@technocrat.com.au" - } - ], - "description": "Shim to allow support of different psr/message versions.", - "support": { - "issues": "https://github.com/mpdf/psr-http-message-shim/issues", - "source": "https://github.com/mpdf/psr-http-message-shim/tree/v2.0.1" - }, - "time": "2023-10-02T14:34:03+00:00" - }, - { - "name": "mpdf/psr-log-aware-trait", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/mpdf/psr-log-aware-trait.git", - "reference": "a633da6065e946cc491e1c962850344bb0bf3e78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mpdf/psr-log-aware-trait/zipball/a633da6065e946cc491e1c962850344bb0bf3e78", - "reference": "a633da6065e946cc491e1c962850344bb0bf3e78", - "shasum": "" - }, - "require": { - "psr/log": "^3.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Mpdf\\PsrLogAwareTrait\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mark Dorison", - "email": "mark@chromatichq.com" - }, - { - "name": "Kristofer Widholm", - "email": "kristofer@chromatichq.com" - } - ], - "description": "Trait to allow support of different psr/log versions.", - "support": { - "issues": "https://github.com/mpdf/psr-log-aware-trait/issues", - "source": "https://github.com/mpdf/psr-log-aware-trait/tree/v3.0.0" - }, - "time": "2023-05-03T06:19:36+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.13.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/024473a478be9df5fdaca2c793f2232fe788e414", - "reference": "024473a478be9df5fdaca2c793f2232fe788e414", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.13.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2025-02-12T12:17:51+00:00" + "time": "2026-01-02T08:56:05+00:00" }, { "name": "nesbot/carbon", - "version": "3.8.6", + "version": "3.11.4", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon.git", - "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd" + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/ff2f20cf83bd4d503720632ce8a426dc747bf7fd", - "reference": "ff2f20cf83bd4d503720632ce8a426dc747bf7fd", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/e890471a3494740f7d9326d72ce6a8c559ffee60", + "reference": "e890471a3494740f7d9326d72ce6a8c559ffee60", "shasum": "" }, "require": { @@ -3782,9 +2838,9 @@ "ext-json": "*", "php": "^8.1", "psr/clock": "^1.0", - "symfony/clock": "^6.3 || ^7.0", + "symfony/clock": "^6.3.12 || ^7.0 || ^8.0", "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" + "symfony/translation": "^4.4.18 || ^5.2.1 || ^6.0 || ^7.0 || ^8.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -3792,14 +2848,13 @@ "require-dev": { "doctrine/dbal": "^3.6.3 || ^4.0", "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.57.2", + "friendsofphp/php-cs-fixer": "^v3.87.1", "kylekatarnls/multi-tester": "^2.5.3", - "ondrejmirtes/better-reflection": "^6.25.0.4", "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.11.2", - "phpunit/phpunit": "^10.5.20", - "squizlabs/php_codesniffer": "^3.9.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^2.1.22", + "phpunit/phpunit": "^10.5.53", + "squizlabs/php_codesniffer": "^3.13.4 || ^4.0.0" }, "bin": [ "bin/carbon" @@ -3842,14 +2897,14 @@ } ], "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", + "homepage": "https://carbonphp.github.io/carbon/", "keywords": [ "date", "datetime", "time" ], "support": { - "docs": "https://carbon.nesbot.com/docs", + "docs": "https://carbonphp.github.io/carbon/guide/getting-started/introduction.html", "issues": "https://github.com/CarbonPHP/carbon/issues", "source": "https://github.com/CarbonPHP/carbon" }, @@ -3867,29 +2922,31 @@ "type": "tidelift" } ], - "time": "2025-02-20T17:33:38+00:00" + "time": "2026-04-07T09:57:54+00:00" }, { "name": "nette/schema", - "version": "v1.3.2", + "version": "v1.3.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d" + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", - "reference": "da801d52f0354f70a638673c4a0f04e16529431d", + "url": "https://api.github.com/repos/nette/schema/zipball/f0ab1a3cda782dbc5da270d28545236aa80c4002", + "reference": "f0ab1a3cda782dbc5da270d28545236aa80c4002", "shasum": "" }, "require": { "nette/utils": "^4.0", - "php": "8.1 - 8.4" + "php": "8.1 - 8.5" }, "require-dev": { - "nette/tester": "^2.5.2", - "phpstan/phpstan-nette": "^1.0", + "nette/phpstan-rules": "^1.0", + "nette/tester": "^2.6", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1.39@stable", "tracy/tracy": "^2.8" }, "type": "library", @@ -3899,6 +2956,9 @@ } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -3927,35 +2987,37 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.2" + "source": "https://github.com/nette/schema/tree/v1.3.5" }, - "time": "2024-10-06T23:10:23+00:00" + "time": "2026-02-23T03:47:12+00:00" }, { "name": "nette/utils", - "version": "v4.0.5", + "version": "v4.1.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", + "url": "https://api.github.com/repos/nette/utils/zipball/bb3ea637e3d131d72acc033cfc2746ee893349fe", + "reference": "bb3ea637e3d131d72acc033cfc2746ee893349fe", "shasum": "" }, "require": { - "php": "8.0 - 8.4" + "php": "8.2 - 8.5" }, "conflict": { "nette/finder": "<3", "nette/schema": "<1.2.2" }, "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", + "jetbrains/phpstorm-attributes": "^1.2", + "nette/phpstan-rules": "^1.0", "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", + "phpstan/extension-installer": "^1.4@stable", + "phpstan/phpstan": "^2.1@stable", "tracy/tracy": "^2.9" }, "suggest": { @@ -3969,10 +3031,13 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-master": "4.1-dev" } }, "autoload": { + "psr-4": { + "Nette\\": "src" + }, "classmap": [ "src/" ] @@ -4013,22 +3078,22 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" + "source": "https://github.com/nette/utils/tree/v4.1.3" }, - "time": "2024-08-07T15:39:19+00:00" + "time": "2026-02-13T03:05:33+00:00" }, { "name": "nikic/php-parser", - "version": "v5.4.0", + "version": "v5.7.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494" + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", - "reference": "447a020a1f875a434d62f2a401f53b82a396e494", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/dca41cd15c2ac9d055ad70dbfd011130757d1f82", + "reference": "dca41cd15c2ac9d055ad70dbfd011130757d1f82", "shasum": "" }, "require": { @@ -4047,7 +3112,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-master": "5.x-dev" } }, "autoload": { @@ -4071,37 +3136,37 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.7.0" }, - "time": "2024-12-30T11:07:19+00:00" + "time": "2025-12-06T11:56:16+00:00" }, { "name": "nunomaduro/termwind", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda" + "reference": "712a31b768f5daea284c2169a7d227031001b9a8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/52915afe6a1044e8b9cee1bcff836fb63acf9cda", - "reference": "52915afe6a1044e8b9cee1bcff836fb63acf9cda", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/712a31b768f5daea284c2169a7d227031001b9a8", + "reference": "712a31b768f5daea284c2169a7d227031001b9a8", "shasum": "" }, "require": { "ext-mbstring": "*", "php": "^8.2", - "symfony/console": "^7.1.8" + "symfony/console": "^7.4.4 || ^8.0.4" }, "require-dev": { - "illuminate/console": "^11.33.2", - "laravel/pint": "^1.18.2", + "illuminate/console": "^11.47.0", + "laravel/pint": "^1.27.1", "mockery/mockery": "^1.6.12", - "pestphp/pest": "^2.36.0", - "phpstan/phpstan": "^1.12.11", - "phpstan/phpstan-strict-rules": "^1.6.1", - "symfony/var-dumper": "^7.1.8", + "pestphp/pest": "^2.36.0 || ^3.8.4 || ^4.3.2", + "phpstan/phpstan": "^1.12.32", + "phpstan/phpstan-strict-rules": "^1.6.2", + "symfony/var-dumper": "^7.3.5 || ^8.0.4", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -4133,7 +3198,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Its like Tailwind CSS, but for the console.", + "description": "It's like Tailwind CSS, but for the console.", "keywords": [ "cli", "console", @@ -4144,7 +3209,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.3.0" + "source": "https://github.com/nunomaduro/termwind/tree/v2.4.0" }, "funding": [ { @@ -4160,7 +3225,7 @@ "type": "github" } ], - "time": "2024-11-21T10:39:51+00:00" + "time": "2026-02-16T23:10:27+00:00" }, { "name": "nyholm/psr7", @@ -4241,504 +3306,81 @@ "time": "2024-09-09T07:06:30+00:00" }, { - "name": "paragonie/random_compat", - "version": "v9.99.100", + "name": "onelogin/php-saml", + "version": "4.3.1", "source": { "type": "git", - "url": "https://github.com/paragonie/random_compat.git", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a" + "url": "https://github.com/SAML-Toolkits/php-saml.git", + "reference": "b009f160e4ac11f49366a45e0d45706b48429353" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paragonie/random_compat/zipball/996434e5492cb4c3edcb9168db6fbb1359ef965a", - "reference": "996434e5492cb4c3edcb9168db6fbb1359ef965a", + "url": "https://api.github.com/repos/SAML-Toolkits/php-saml/zipball/b009f160e4ac11f49366a45e0d45706b48429353", + "reference": "b009f160e4ac11f49366a45e0d45706b48429353", "shasum": "" }, "require": { - "php": ">= 7" + "php": ">=7.3", + "robrichards/xmlseclibs": ">=3.1.4" }, "require-dev": { - "phpunit/phpunit": "4.*|5.*", - "vimeo/psalm": "^1" + "pdepend/pdepend": "^2.8.0", + "php-coveralls/php-coveralls": "^2.0", + "phploc/phploc": "^4.0 || ^5.0 || ^6.0 || ^7.0", + "phpunit/phpunit": "^9.5", + "sebastian/phpcpd": "^4.0 || ^5.0 || ^6.0 ", + "squizlabs/php_codesniffer": "^3.5.8" }, "suggest": { - "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Paragon Initiative Enterprises", - "email": "security@paragonie.com", - "homepage": "https://paragonie.com" - } - ], - "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", - "keywords": [ - "csprng", - "polyfill", - "pseudorandom", - "random" - ], - "support": { - "email": "info@paragonie.com", - "issues": "https://github.com/paragonie/random_compat/issues", - "source": "https://github.com/paragonie/random_compat" - }, - "time": "2020-10-15T08:29:30+00:00" - }, - { - "name": "php-http/cache-plugin", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/cache-plugin.git", - "reference": "5c591e9e04602cec12307e3e1be3abefeb005e29" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/cache-plugin/zipball/5c591e9e04602cec12307e3e1be3abefeb005e29", - "reference": "5c591e9e04602cec12307e3e1be3abefeb005e29", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/client-common": "^1.9 || ^2.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "psr/http-factory-implementation": "^1.0", - "symfony/options-resolver": "^2.6 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" - }, - "require-dev": { - "nyholm/psr7": "^1.6.1", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + "ext-curl": "Install curl lib to be able to use the IdPMetadataParser for parsing remote XMLs", + "ext-dom": "Install xml lib", + "ext-openssl": "Install openssl lib in order to handle with x509 certs (require to support sign and encryption)", + "ext-zlib": "Install zlib" }, "type": "library", "autoload": { "psr-4": { - "Http\\Client\\Common\\Plugin\\": "src/" + "OneLogin\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "PSR-6 Cache plugin for HTTPlug", - "homepage": "http://httplug.io", + "description": "PHP SAML Toolkit", + "homepage": "https://github.com/SAML-Toolkits/php-saml", "keywords": [ - "cache", - "http", - "httplug", - "plugin" + "Federation", + "SAML2", + "SSO", + "identity", + "saml" ], "support": { - "issues": "https://github.com/php-http/cache-plugin/issues", - "source": "https://github.com/php-http/cache-plugin/tree/2.0.1" + "email": "sixto.martin.garcia@gmail.com", + "issues": "https://github.com/onelogin/SAML-Toolkits/issues", + "source": "https://github.com/onelogin/SAML-Toolkits/" }, - "time": "2024-10-02T11:25:38+00:00" - }, - { - "name": "php-http/client-common", - "version": "2.7.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/client-common.git", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/httplug": "^2.0", - "php-http/message": "^1.6", - "psr/http-client": "^1.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", - "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.17" - }, - "require-dev": { - "doctrine/instantiator": "^1.1", - "guzzlehttp/psr7": "^1.4", - "nyholm/psr7": "^1.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" - }, - "suggest": { - "ext-json": "To detect JSON responses with the ContentTypePlugin", - "ext-libxml": "To detect XML responses with the ContentTypePlugin", - "php-http/cache-plugin": "PSR-6 Cache plugin", - "php-http/logger-plugin": "PSR-3 Logger plugin", - "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\Common\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" + "url": "https://github.com/SAML-Toolkits", + "type": "github" } ], - "description": "Common HTTP Client implementations and tools for HTTPlug", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "common", - "http", - "httplug" - ], - "support": { - "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.7.2" - }, - "time": "2024-09-24T06:21:48+00:00" - }, - { - "name": "php-http/discovery", - "version": "1.20.0", - "source": { - "type": "git", - "url": "https://github.com/php-http/discovery.git", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d", - "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "*", - "psr/http-factory-implementation": "*", - "psr/http-message-implementation": "*" - }, - "require-dev": { - "composer/composer": "^1.0.2|^2.0", - "graham-campbell/phpspec-skip-example-extension": "^5.0", - "php-http/httplug": "^1.0 || ^2.0", - "php-http/message-factory": "^1.0", - "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3", - "sebastian/comparator": "^3.0.5 || ^4.0.8", - "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1" - }, - "type": "composer-plugin", - "extra": { - "class": "Http\\Discovery\\Composer\\Plugin", - "plugin-optional": true - }, - "autoload": { - "psr-4": { - "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations", - "homepage": "http://php-http.org", - "keywords": [ - "adapter", - "client", - "discovery", - "factory", - "http", - "message", - "psr17", - "psr7" - ], - "support": { - "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.20.0" - }, - "time": "2024-10-02T11:20:13+00:00" - }, - { - "name": "php-http/httplug", - "version": "2.4.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/httplug.git", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4", - "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/promise": "^1.1", - "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eric GELOEN", - "email": "geloen.eric@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "HTTPlug, the HTTP client abstraction for PHP", - "homepage": "http://httplug.io", - "keywords": [ - "client", - "http" - ], - "support": { - "issues": "https://github.com/php-http/httplug/issues", - "source": "https://github.com/php-http/httplug/tree/2.4.1" - }, - "time": "2024-09-23T11:39:58+00:00" - }, - { - "name": "php-http/message", - "version": "1.16.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/message.git", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a", - "shasum": "" - }, - "require": { - "clue/stream-filter": "^1.5", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.1 || ^2.0" - }, - "provide": { - "php-http/message-factory-implementation": "1.0" - }, - "require-dev": { - "ergebnis/composer-normalize": "^2.6", - "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0 || ^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/message-factory": "^1.0.2", - "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", - "slim/slim": "^3.0" - }, - "suggest": { - "ext-zlib": "Used with compressor/decompressor streams", - "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories", - "laminas/laminas-diactoros": "Used with Diactoros Factories", - "slim/slim": "Used with Slim Framework PSR-7 implementation" - }, - "type": "library", - "autoload": { - "files": [ - "src/filters.php" - ], - "psr-4": { - "Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "HTTP Message related tools", - "homepage": "http://php-http.org", - "keywords": [ - "http", - "message", - "psr-7" - ], - "support": { - "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.16.2" - }, - "time": "2024-10-02T11:34:13+00:00" - }, - { - "name": "php-http/multipart-stream-builder", - "version": "1.4.2", - "source": { - "type": "git", - "url": "https://github.com/php-http/multipart-stream-builder.git", - "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/multipart-stream-builder/zipball/10086e6de6f53489cca5ecc45b6f468604d3460e", - "reference": "10086e6de6f53489cca5ecc45b6f468604d3460e", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0", - "php-http/discovery": "^1.15", - "psr/http-factory-implementation": "^1.0" - }, - "require-dev": { - "nyholm/psr7": "^1.0", - "php-http/message": "^1.5", - "php-http/message-factory": "^1.0.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Message\\MultipartStream\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com" - } - ], - "description": "A builder class that help you create a multipart stream", - "homepage": "http://php-http.org", - "keywords": [ - "factory", - "http", - "message", - "multipart stream", - "stream" - ], - "support": { - "issues": "https://github.com/php-http/multipart-stream-builder/issues", - "source": "https://github.com/php-http/multipart-stream-builder/tree/1.4.2" - }, - "time": "2024-09-04T13:22:54+00:00" - }, - { - "name": "php-http/promise", - "version": "1.3.1", - "source": { - "type": "git", - "url": "https://github.com/php-http/promise.git", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3", - "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Http\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Joel Wurtz", - "email": "joel.wurtz@gmail.com" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com" - } - ], - "description": "Promise used for asynchronous HTTP requests", - "homepage": "http://httplug.io", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.3.1" - }, - "time": "2024-03-15T13:55:21+00:00" + "time": "2025-12-09T10:50:49+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.3", + "version": "1.9.5", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", - "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/75365b91986c2405cf5e1e012c5595cd487a98be", + "reference": "75365b91986c2405cf5e1e012c5595cd487a98be", "shasum": "" }, "require": { @@ -4746,7 +3388,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" + "phpunit/phpunit": "^8.5.44 || ^9.6.25 || ^10.5.53 || ^11.5.34" }, "type": "library", "extra": { @@ -4788,7 +3430,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.5" }, "funding": [ { @@ -4800,20 +3442,20 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:41:07+00:00" + "time": "2025-12-27T19:41:33+00:00" }, { "name": "phpseclib/phpseclib", - "version": "2.0.48", + "version": "2.0.53", "source": { "type": "git", "url": "https://github.com/phpseclib/phpseclib.git", - "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61" + "reference": "2d1a664b940b9b8f367185307dc010d11a2790f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/eaa7be704b8b93a6913b69eb7f645a59d7731b61", - "reference": "eaa7be704b8b93a6913b69eb7f645a59d7731b61", + "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/2d1a664b940b9b8f367185307dc010d11a2790f3", + "reference": "2d1a664b940b9b8f367185307dc010d11a2790f3", "shasum": "" }, "require": { @@ -4821,7 +3463,7 @@ }, "require-dev": { "phing/phing": "~2.7", - "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^9.4", + "phpunit/phpunit": "^4.8.35|^5.7|^6.0|^8.5|^9.4", "squizlabs/php_codesniffer": "~2.0" }, "suggest": { @@ -4894,7 +3536,7 @@ ], "support": { "issues": "https://github.com/phpseclib/phpseclib/issues", - "source": "https://github.com/phpseclib/phpseclib/tree/2.0.48" + "source": "https://github.com/phpseclib/phpseclib/tree/2.0.53" }, "funding": [ { @@ -4910,56 +3552,7 @@ "type": "tidelift" } ], - "time": "2024-12-14T21:03:54+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" + "time": "2026-04-10T01:30:02+00:00" }, { "name": "psr/clock", @@ -5375,16 +3968,16 @@ }, { "name": "psy/psysh", - "version": "v0.12.7", + "version": "v0.12.22", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", - "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/3be75d5b9244936dd4ac62ade2bfb004d13acf0f", + "reference": "3be75d5b9244936dd4ac62ade2bfb004d13acf0f", "shasum": "" }, "require": { @@ -5392,18 +3985,19 @@ "ext-tokenizer": "*", "nikic/php-parser": "^5.0 || ^4.0", "php": "^8.0 || ^7.4", - "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", - "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" + "symfony/console": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4", + "symfony/var-dumper": "^8.0 || ^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4" }, "conflict": { "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.2" + "bamarni/composer-bin-plugin": "^1.2", + "composer/class-map-generator": "^1.6" }, "suggest": { + "composer/class-map-generator": "Improved tab completion performance with better class discovery.", "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)", - "ext-pdo-sqlite": "The doc command requires SQLite to work.", "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well." }, "bin": [ @@ -5434,12 +4028,11 @@ "authors": [ { "name": "Justin Hileman", - "email": "justin@justinhileman.info", - "homepage": "http://justinhileman.com" + "email": "justin@justinhileman.info" } ], "description": "An interactive shell for modern PHP.", - "homepage": "http://psysh.org", + "homepage": "https://psysh.org", "keywords": [ "REPL", "console", @@ -5448,9 +4041,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.22" }, - "time": "2024-12-10T01:58:33+00:00" + "time": "2026-03-22T23:03:24+00:00" }, { "name": "ralouphie/getallheaders", @@ -5498,16 +4091,16 @@ }, { "name": "ramsey/collection", - "version": "2.1.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", - "reference": "3c5990b8a5e0b79cd1cf11c2dc1229e58e93f109", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -5568,27 +4161,26 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.1.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "time": "2025-03-02T04:48:29+00:00" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.6", + "version": "4.9.2", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088" + "reference": "8429c78ca35a09f27565311b98101e2826affde0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/91039bc1faa45ba123c4328958e620d382ec7088", - "reference": "91039bc1faa45ba123c4328958e620d382ec7088", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/8429c78ca35a09f27565311b98101e2826affde0", + "reference": "8429c78ca35a09f27565311b98101e2826affde0", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12", - "ext-json": "*", + "brick/math": "^0.8.16 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13 || ^0.14", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" }, @@ -5596,26 +4188,23 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", + "captainhook/captainhook": "^5.25", "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -5650,32 +4239,22 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.6" + "source": "https://github.com/ramsey/uuid/tree/4.9.2" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2024-04-27T21:32:50+00:00" + "time": "2025-12-14T04:43:48+00:00" }, { "name": "robrichards/xmlseclibs", - "version": "3.1.3", + "version": "3.1.5", "source": { "type": "git", "url": "https://github.com/robrichards/xmlseclibs.git", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07" + "reference": "03062be78178cbb5e8f605cd255dc32a14981f92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/2bdfd742624d739dfadbd415f00181b4a77aaf07", - "reference": "2bdfd742624d739dfadbd415f00181b4a77aaf07", + "url": "https://api.github.com/repos/robrichards/xmlseclibs/zipball/03062be78178cbb5e8f605cd255dc32a14981f92", + "reference": "03062be78178cbb5e8f605cd255dc32a14981f92", "shasum": "" }, "require": { @@ -5702,22 +4281,106 @@ ], "support": { "issues": "https://github.com/robrichards/xmlseclibs/issues", - "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.3" + "source": "https://github.com/robrichards/xmlseclibs/tree/3.1.5" }, - "time": "2024-11-20T21:13:56+00:00" + "time": "2026-03-13T10:31:56+00:00" }, { - "name": "sentry/sentry", - "version": "4.10.0", + "name": "scaler-tech/laravel-saml2", + "version": "2.7.2", "source": { "type": "git", - "url": "https://github.com/getsentry/sentry-php.git", - "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856" + "url": "https://github.com/scaler-tech/laravel-saml2.git", + "reference": "765b4bb0c56c1fb13b14779e843cd935c5b2eb6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/2af937d47d8aadb8dab0b1d7b9557e495dd12856", - "reference": "2af937d47d8aadb8dab0b1d7b9557e495dd12856", + "url": "https://api.github.com/repos/scaler-tech/laravel-saml2/zipball/765b4bb0c56c1fb13b14779e843cd935c5b2eb6a", + "reference": "765b4bb0c56c1fb13b14779e843cd935c5b2eb6a", + "shasum": "" + }, + "require": { + "ext-openssl": "*", + "illuminate/console": "^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0", + "illuminate/database": "^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0", + "illuminate/support": "^9.0 || ^10.0 || ^11.0 || ^12.0 || ^13.0", + "onelogin/php-saml": "^4.0", + "php": ">=8.2" + }, + "replace": { + "24slides/laravel-saml2": "self.version" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.94", + "kubawerlos/php-cs-fixer-custom-fixers": "^3.36", + "mockery/mockery": "^1.6", + "orchestra/testbench": "^7.0 || ^8.0 || ^9.0 || ^10.0 || ^11.0", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6 || ^10.5 || ^11.5 || ^12.5" + }, + "type": "library", + "extra": { + "laravel": { + "aliases": { + "Saml2": "Slides\\Saml2\\Facades\\Auth" + }, + "providers": [ + "Slides\\Saml2\\ServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Slides\\Saml2\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Scaler Tech", + "homepage": "https://github.com/scaler-tech/laravel-saml2", + "role": "Maintainer" + }, + { + "name": "Artem Brezhnev", + "email": "brezzhnev@gmail.com" + } + ], + "description": "SAML2 Service Provider integration for Laravel applications, based on OneLogin toolkit", + "homepage": "https://github.com/scaler-tech/laravel-saml2", + "keywords": [ + "SAML2", + "SSO", + "laravel", + "onelogin", + "saml" + ], + "support": { + "issues": "https://github.com/scaler-tech/laravel-saml2/issues", + "source": "https://github.com/scaler-tech/laravel-saml2" + }, + "time": "2026-03-20T13:15:15+00:00" + }, + { + "name": "sentry/sentry", + "version": "4.25.0", + "source": { + "type": "git", + "url": "https://github.com/getsentry/sentry-php.git", + "reference": "bfee3381e1f6dea8a5f3a18adba6419fe81c5f54" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/bfee3381e1f6dea8a5f3a18adba6419fe81c5f54", + "reference": "bfee3381e1f6dea8a5f3a18adba6419fe81c5f54", "shasum": "" }, "require": { @@ -5728,7 +4391,7 @@ "jean85/pretty-package-versions": "^1.5|^2.0.4", "php": "^7.2|^8.0", "psr/log": "^1.0|^2.0|^3.0", - "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0" + "symfony/options-resolver": "^4.4.30|^5.0.11|^6.0|^7.0|^8.0" }, "conflict": { "raven/raven": "*" @@ -5738,13 +4401,18 @@ "guzzlehttp/promises": "^2.0.3", "guzzlehttp/psr7": "^1.8.4|^2.1.1", "monolog/monolog": "^1.6|^2.0|^3.0", + "nyholm/psr7": "^1.8", + "open-telemetry/api": "^1.0", + "open-telemetry/exporter-otlp": "^1.0", + "open-telemetry/sdk": "^1.0", "phpbench/phpbench": "^1.0", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^8.5|^9.6", - "symfony/phpunit-bridge": "^5.2|^6.0|^7.0", - "vimeo/psalm": "^4.17" + "phpunit/phpunit": "^8.5.52|^9.6.34", + "spiral/roadrunner-http": "^3.6", + "spiral/roadrunner-worker": "^3.6" }, "suggest": { + "ext-excimer": "Enable Sentry profiling with the Excimer PHP extension.", "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler." }, "type": "library", @@ -5781,7 +4449,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-php/issues", - "source": "https://github.com/getsentry/sentry-php/tree/4.10.0" + "source": "https://github.com/getsentry/sentry-php/tree/4.25.0" }, "funding": [ { @@ -5793,39 +4461,41 @@ "type": "custom" } ], - "time": "2024-11-06T07:44:19+00:00" + "time": "2026-04-23T12:50:03+00:00" }, { "name": "sentry/sentry-laravel", - "version": "4.13.0", + "version": "4.25.0", "source": { "type": "git", "url": "https://github.com/getsentry/sentry-laravel.git", - "reference": "d232ac494258e0d50a77c575a5af5f1a426d3f87" + "reference": "6699c9465df6bee07d82279f7a209db941913456" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/d232ac494258e0d50a77c575a5af5f1a426d3f87", - "reference": "d232ac494258e0d50a77c575a5af5f1a426d3f87", + "url": "https://api.github.com/repos/getsentry/sentry-laravel/zipball/6699c9465df6bee07d82279f7a209db941913456", + "reference": "6699c9465df6bee07d82279f7a209db941913456", "shasum": "" }, "require": { - "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", + "illuminate/support": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", "nyholm/psr7": "^1.0", "php": "^7.2 | ^8.0", - "sentry/sentry": "^4.10", - "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0" + "sentry/sentry": "^4.23.0", + "symfony/psr-http-message-bridge": "^1.0 | ^2.0 | ^6.0 | ^7.0 | ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", "guzzlehttp/guzzle": "^7.2", "laravel/folio": "^1.1", - "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0", - "livewire/livewire": "^2.0 | ^3.0", + "laravel/framework": "^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0 | ^12.0 | ^13.0", + "laravel/octane": "^2.15", + "laravel/pennant": "^1.0", + "livewire/livewire": "^2.0 | ^3.0 | ^4.0", "mockery/mockery": "^1.3", - "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0", + "orchestra/testbench": "^4.7 | ^5.1 | ^6.0 | ^7.0 | ^8.0 | ^9.0 | ^10.0 | ^11.0", "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^8.4 | ^9.3 | ^10.4 | ^11.5" + "phpunit/phpunit": "^8.5 | ^9.6 | ^10.4 | ^11.5" }, "type": "library", "extra": { @@ -5870,7 +4540,7 @@ ], "support": { "issues": "https://github.com/getsentry/sentry-laravel/issues", - "source": "https://github.com/getsentry/sentry-laravel/tree/4.13.0" + "source": "https://github.com/getsentry/sentry-laravel/tree/4.25.0" }, "funding": [ { @@ -5882,43 +4552,38 @@ "type": "custom" } ], - "time": "2025-02-18T10:09:29+00:00" + "time": "2026-04-07T12:55:27+00:00" }, { - "name": "setasign/fpdi", - "version": "v2.6.3", + "name": "spatie/laravel-package-tools", + "version": "1.93.0", "source": { "type": "git", - "url": "https://github.com/Setasign/FPDI.git", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941" + "url": "https://github.com/spatie/laravel-package-tools.git", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Setasign/FPDI/zipball/67c31f5e50c93c20579ca9e23035d8c540b51941", - "reference": "67c31f5e50c93c20579ca9e23035d8c540b51941", + "url": "https://api.github.com/repos/spatie/laravel-package-tools/zipball/0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", + "reference": "0d097bce95b2bf6802fb1d83e1e753b0f5a948e7", "shasum": "" }, "require": { - "ext-zlib": "*", - "php": "^7.1 || ^8.0" - }, - "conflict": { - "setasign/tfpdf": "<1.31" + "illuminate/contracts": "^10.0|^11.0|^12.0|^13.0", + "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^7", - "setasign/fpdf": "~1.8.6", - "setasign/tfpdf": "~1.33", - "squizlabs/php_codesniffer": "^3.5", - "tecnickcom/tcpdf": "^6.2" - }, - "suggest": { - "setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured." + "mockery/mockery": "^1.5", + "orchestra/testbench": "^8.0|^9.2|^10.0|^11.0", + "pestphp/pest": "^2.1|^3.1|^4.0", + "phpunit/php-code-coverage": "^10.0|^11.0|^12.0", + "phpunit/phpunit": "^10.5|^11.5|^12.5", + "spatie/pest-plugin-test-time": "^2.2|^3.0" }, "type": "library", "autoload": { "psr-4": { - "setasign\\Fpdi\\": "src/" + "Spatie\\LaravelPackageTools\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5927,164 +4592,69 @@ ], "authors": [ { - "name": "Jan Slabon", - "email": "jan.slabon@setasign.com", - "homepage": "https://www.setasign.com" - }, - { - "name": "Maximilian Kresse", - "email": "maximilian.kresse@setasign.com", - "homepage": "https://www.setasign.com" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "role": "Developer" } ], - "description": "FPDI is a collection of PHP classes facilitating developers to read pages from existing PDF documents and use them as templates in FPDF. Because it is also possible to use FPDI with TCPDF, there are no fixed dependencies defined. Please see suggestions for packages which evaluates the dependencies automatically.", - "homepage": "https://www.setasign.com/fpdi", + "description": "Tools for creating Laravel packages", + "homepage": "https://github.com/spatie/laravel-package-tools", "keywords": [ - "fpdf", - "fpdi", - "pdf" + "laravel-package-tools", + "spatie" ], "support": { - "issues": "https://github.com/Setasign/FPDI/issues", - "source": "https://github.com/Setasign/FPDI/tree/v2.6.3" + "issues": "https://github.com/spatie/laravel-package-tools/issues", + "source": "https://github.com/spatie/laravel-package-tools/tree/1.93.0" }, "funding": [ { - "url": "https://tidelift.com/funding/github/packagist/setasign/fpdi", - "type": "tidelift" - } - ], - "time": "2025-02-05T13:22:35+00:00" - }, - { - "name": "symfony/cache", - "version": "v7.2.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/d33cd9e14326e14a4145c21e600602eaf17cc9e7", - "reference": "d33cd9e14326e14a4145c21e600602eaf17cc9e7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" - }, - "provide": { - "psr/cache-implementation": "2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0", - "symfony/cache-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, - "classmap": [ - "Traits/ValueWrapper.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", - "homepage": "https://symfony.com", - "keywords": [ - "caching", - "psr6" - ], - "support": { - "source": "https://github.com/symfony/cache/tree/v7.2.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2025-02-26T09:57:54+00:00" + "time": "2026-02-21T12:49:54+00:00" }, { - "name": "symfony/cache-contracts", - "version": "v3.5.1", + "name": "spatie/laravel-translatable", + "version": "6.14.1", "source": { "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b" + "url": "https://github.com/spatie/laravel-translatable.git", + "reference": "d120a925cf413b2427f886264bb6eb102ac23d42" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", - "reference": "15a4f8e5cd3bce9aeafc882b1acab39ec8de2c1b", + "url": "https://api.github.com/repos/spatie/laravel-translatable/zipball/d120a925cf413b2427f886264bb6eb102ac23d42", + "reference": "d120a925cf413b2427f886264bb6eb102ac23d42", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/cache": "^3.0" + "illuminate/database": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "php": "^8.3", + "spatie/laravel-package-tools": "^1.93.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.90", + "mockery/mockery": "^1.6.12", + "orchestra/testbench": "^9.0|^10.0|^11.0", + "pestphp/pest": "^4.0.0" }, "type": "library", "extra": { - "thanks": { - "url": "https://github.com/symfony/contracts", - "name": "symfony/contracts" + "aliases": { + "Translatable": "Spatie\\Translatable\\Facades\\Translatable" }, - "branch-alias": { - "dev-main": "3.5-dev" + "laravel": { + "providers": [ + "Spatie\\Translatable\\TranslatableServiceProvider" + ] } }, "autoload": { "psr-4": { - "Symfony\\Contracts\\Cache\\": "" + "Spatie\\Translatable\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -6093,61 +4663,58 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Sebastian De Deyne", + "email": "sebastian@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" } ], - "description": "Generic abstractions related to caching", - "homepage": "https://symfony.com", + "description": "A trait to make an Eloquent model hold translations", + "homepage": "https://github.com/spatie/laravel-translatable", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "eloquent", + "i8n", + "laravel-translatable", + "model", + "multilingual", + "spatie", + "translate" ], "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.1" + "issues": "https://github.com/spatie/laravel-translatable/issues", + "source": "https://github.com/spatie/laravel-translatable/tree/6.14.1" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/spatie", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2026-04-23T08:26:29+00:00" }, { "name": "symfony/clock", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/clock.git", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24" + "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", - "reference": "b81435fbd6648ea425d1ee96a2d8e68f4ceacd24", + "url": "https://api.github.com/repos/symfony/clock/zipball/b55a638b189a6faa875e0ccdb00908fb87af95b3", + "reference": "b55a638b189a6faa875e0ccdb00908fb87af95b3", "shasum": "" }, "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" + "php": ">=8.4", + "psr/clock": "^1.0" }, "provide": { "psr/clock-implementation": "1.0" @@ -6186,7 +4753,7 @@ "time" ], "support": { - "source": "https://github.com/symfony/clock/tree/v7.2.0" + "source": "https://github.com/symfony/clock/tree/v8.0.8" }, "funding": [ { @@ -6197,55 +4764,52 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/console", - "version": "v7.2.1", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" + "reference": "5b66d385dc58f69652e56f78a4184615e3f2b7f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", - "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "url": "https://api.github.com/repos/symfony/console/zipball/5b66d385dc58f69652e56f78a4184615e3f2b7f7", + "reference": "5b66d385dc58f69652e56f78a4184615e3f2b7f7", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" + "symfony/string": "^7.4|^8.0" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/lock": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6279,7 +4843,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.2.1" + "source": "https://github.com/symfony/console/tree/v8.0.8" }, "funding": [ { @@ -6290,29 +4854,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-11T03:49:26+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/css-selector", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" + "reference": "8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", - "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed", + "reference": "8db1c00226a94d8ab6aa89d9224eeee91e2ea2ed", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -6344,7 +4912,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.2.0" + "source": "https://github.com/symfony/css-selector/tree/v8.0.8" }, "funding": [ { @@ -6355,25 +4923,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", - "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -6386,7 +4958,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6411,7 +4983,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -6427,35 +4999,37 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/error-handler", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "aabf79938aa795350c07ce6464dd1985607d95d5" + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/aabf79938aa795350c07ce6464dd1985607d95d5", - "reference": "aabf79938aa795350c07ce6464dd1985607d95d5", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c1119fe8dcfc3825ec74ec061b96ef0c8f281517", + "reference": "c1119fe8dcfc3825ec74ec061b96ef0c8f281517", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" + "symfony/polyfill-php85": "^1.32", + "symfony/var-dumper": "^7.4|^8.0" }, "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" + "symfony/deprecation-contracts": "<2.5" }, "require-dev": { + "symfony/console": "^7.4|^8.0", "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" + "symfony/http-kernel": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/webpack-encore-bundle": "^1.0|^2.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -6486,7 +5060,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.2.4" + "source": "https://github.com/symfony/error-handler/tree/v8.0.8" }, "funding": [ { @@ -6497,33 +5071,37 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-02T20:27:07+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" + "reference": "f662acc6ab22a3d6d716dcb44c381c6002940df6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", - "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f662acc6ab22a3d6d716dcb44c381c6002940df6", + "reference": "f662acc6ab22a3d6d716dcb44c381c6002940df6", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<6.4", + "symfony/security-http": "<7.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -6532,13 +5110,14 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" + "symfony/stopwatch": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6566,7 +5145,7 @@ "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v8.0.8" }, "funding": [ { @@ -6577,25 +5156,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.1", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", - "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -6609,7 +5192,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -6642,7 +5225,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -6658,27 +5241,27 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/finder", - "version": "v7.2.2", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb" + "reference": "8da41214757b87d97f181e3d14a4179286151007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", - "reference": "87a71856f2f56e4100373e92529eed3171695cfb", + "url": "https://api.github.com/repos/symfony/finder/zipball/8da41214757b87d97f181e3d14a4179286151007", + "reference": "8da41214757b87d97f181e3d14a4179286151007", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "require-dev": { - "symfony/filesystem": "^6.4|^7.0" + "symfony/filesystem": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6706,7 +5289,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.2.2" + "source": "https://github.com/symfony/finder/tree/v8.0.8" }, "funding": [ { @@ -6717,46 +5300,48 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-12-30T19:00:17+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0" + "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ee1b504b8926198be89d05e5b6fc4c3810c090f0", - "reference": "ee1b504b8926198be89d05e5b6fc4c3810c090f0", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/02656f7ebeae5c155d659e946f6b3a33df24051b", + "reference": "02656f7ebeae5c155d659e946f6b3a33df24051b", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.1" }, "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4.12|>=7.0,<7.1.5" + "doctrine/dbal": "<4.3" }, "require-dev": { - "doctrine/dbal": "^3.6|^4", + "doctrine/dbal": "^4.3", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4.12|^7.1.5", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" + "symfony/cache": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", + "symfony/rate-limiter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6784,7 +5369,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.2.3" + "source": "https://github.com/symfony/http-foundation/tree/v8.0.8" }, "funding": [ { @@ -6795,82 +5380,72 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T10:56:55+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "9f1103734c5789798fefb90e91de4586039003ed" + "reference": "1770f6818d83b2fddc12185025b93f39a90cb628" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/9f1103734c5789798fefb90e91de4586039003ed", - "reference": "9f1103734c5789798fefb90e91de4586039003ed", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/1770f6818d83b2fddc12185025b93f39a90cb628", + "reference": "1770f6818d83b2fddc12185025b93f39a90cb628", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", + "symfony/error-handler": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", + "symfony/flex": "<2.10", "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.12" + "twig/twig": "<3.21" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", + "symfony/browser-kit": "^7.4|^8.0", + "symfony/clock": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/css-selector": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/dom-crawler": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/routing": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0", + "symfony/stopwatch": "^7.4|^8.0", + "symfony/translation": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.12" + "symfony/uid": "^7.4|^8.0", + "symfony/validator": "^7.4|^8.0", + "symfony/var-dumper": "^7.4|^8.0", + "symfony/var-exporter": "^7.4|^8.0", + "twig/twig": "^3.21" }, "type": "library", "autoload": { @@ -6898,7 +5473,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.2.4" + "source": "https://github.com/symfony/http-kernel/tree/v8.0.8" }, "funding": [ { @@ -6909,48 +5484,48 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-26T11:01:22+00:00" + "time": "2026-03-31T21:14:05+00:00" }, { "name": "symfony/mailer", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3" + "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/f3871b182c44997cf039f3b462af4a48fb85f9d3", - "reference": "f3871b182c44997cf039f3b462af4a48fb85f9d3", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca5f6edaf8780ece814404b58a4482b22b509c56", + "reference": "ca5f6edaf8780ece814404b58a4482b22b509c56", "shasum": "" }, "require": { "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", + "php": ">=8.4", "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^7.2", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/mime": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/twig-bridge": "<6.4" + "symfony/http-client-contracts": "<2.5" }, "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" + "symfony/console": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/messenger": "^7.4|^8.0", + "symfony/twig-bridge": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -6978,7 +5553,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.2.3" + "source": "https://github.com/symfony/mailer/tree/v8.0.8" }, "funding": [ { @@ -6989,48 +5564,50 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-27T11:08:17+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/mime", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "87ca22046b78c3feaff04b337f33b38510fd686b" + "reference": "ddff21f14c7ce04b98101b399a9463dce8b0ce66" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/87ca22046b78c3feaff04b337f33b38510fd686b", - "reference": "87ca22046b78c3feaff04b337f33b38510fd686b", + "url": "https://api.github.com/repos/symfony/mime/zipball/ddff21f14c7ce04b98101b399a9463dce8b0ce66", + "reference": "ddff21f14c7ce04b98101b399a9463dce8b0ce66", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-intl-idn": "^1.10", "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" + "phpdocumentor/reflection-docblock": "<5.2|>=7", + "phpdocumentor/type-resolver": "<1.5.1" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" + "phpdocumentor/reflection-docblock": "^5.2|^6.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/property-access": "^7.4|^8.0", + "symfony/property-info": "^7.4|^8.0", + "symfony/serializer": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7062,7 +5639,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.2.4" + "source": "https://github.com/symfony/mime/tree/v8.0.8" }, "funding": [ { @@ -7073,25 +5650,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-19T08:51:20+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/options-resolver", - "version": "v7.2.0", + "version": "v7.4.8", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50" + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/7da8fbac9dcfef75ffc212235d76b2754ce0cf50", - "reference": "7da8fbac9dcfef75ffc212235d76b2754ce0cf50", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", + "reference": "2888fcdc4dc2fd5f7c7397be78631e8af12e02b4", "shasum": "" }, "require": { @@ -7129,7 +5710,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.2.0" + "source": "https://github.com/symfony/options-resolver/tree/v7.4.8" }, "funding": [ { @@ -7140,25 +5721,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-20T11:17:29+00:00" + "time": "2026-03-24T13:12:05+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" + "reference": "141046a8f9477948ff284fa65be2095baafb94f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/141046a8f9477948ff284fa65be2095baafb94f2", + "reference": "141046a8f9477948ff284fa65be2095baafb94f2", "shasum": "" }, "require": { @@ -7208,7 +5793,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.36.0" }, "funding": [ { @@ -7219,25 +5804,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/ad1b7b9092976d6c948b8a187cec9faaea9ec1df", + "reference": "ad1b7b9092976d6c948b8a187cec9faaea9ec1df", "shasum": "" }, "require": { @@ -7286,7 +5875,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.36.0" }, "funding": [ { @@ -7297,25 +5886,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { @@ -7369,7 +5962,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.36.0" }, "funding": [ { @@ -7380,16 +5973,20 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", @@ -7450,7 +6047,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.36.0" }, "funding": [ { @@ -7461,6 +6058,10 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" @@ -7470,19 +6071,20 @@ }, { "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6a21eb99c6973357967f6ce3708cd55a6bec6315", + "reference": "6a21eb99c6973357967f6ce3708cd55a6bec6315", "shasum": "" }, "require": { + "ext-iconv": "*", "php": ">=7.2" }, "provide": { @@ -7530,7 +6132,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.36.0" }, "funding": [ { @@ -7541,25 +6143,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T17:25:58+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.31.0", + "version": "v1.36.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dfb55726c3a76ea3b6459fcfda1ec2d80a682411", + "reference": "dfb55726c3a76ea3b6459fcfda1ec2d80a682411", "shasum": "" }, "require": { @@ -7610,7 +6216,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.36.0" }, "funding": [ { @@ -7621,25 +6227,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { - "name": "symfony/polyfill-php83", - "version": "v1.31.0", + "name": "symfony/polyfill-php84", + "version": "v1.36.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" + "url": "https://github.com/symfony/polyfill-php84.git", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", + "url": "https://api.github.com/repos/symfony/polyfill-php84/zipball/88486db2c389b290bf87ff1de7ebc1e13e42bb06", + "reference": "88486db2c389b290bf87ff1de7ebc1e13e42bb06", "shasum": "" }, "require": { @@ -7657,7 +6267,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" + "Symfony\\Polyfill\\Php84\\": "" }, "classmap": [ "Resources/stubs" @@ -7677,7 +6287,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.4+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -7686,7 +6296,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-php84/tree/v1.36.0" }, "funding": [ { @@ -7697,25 +6307,109 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T18:47:49+00:00" }, { - "name": "symfony/polyfill-uuid", - "version": "v1.31.0", + "name": "symfony/polyfill-php85", + "version": "v1.36.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" + "url": "https://github.com/symfony/polyfill-php85.git", + "reference": "2c408a6bb0313e6001a83628dc5506100474254e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", - "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "url": "https://api.github.com/repos/symfony/polyfill-php85/zipball/2c408a6bb0313e6001a83628dc5506100474254e", + "reference": "2c408a6bb0313e6001a83628dc5506100474254e", + "shasum": "" + }, + "require": { + "php": ">=7.2" + }, + "type": "library", + "extra": { + "thanks": { + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php85\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php85/tree/v1.36.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2026-04-10T16:50:15+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.36.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/26dfec253c4cf3e51b541b52ddf7e42cb0908e94", + "reference": "26dfec253c4cf3e51b541b52ddf7e42cb0908e94", "shasum": "" }, "require": { @@ -7765,7 +6459,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.31.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.36.0" }, "funding": [ { @@ -7776,29 +6470,33 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-09T11:45:10+00:00" + "time": "2026-04-10T16:19:22+00:00" }, { "name": "symfony/process", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf" + "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", - "reference": "d8f411ff3c7ddc4ae9166fb388d1190a2df5b5cf", + "url": "https://api.github.com/repos/symfony/process/zipball/cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", + "reference": "cb8939aff03470d1a9d1d1b66d08c6fa71b3bbdc", "shasum": "" }, "require": { - "php": ">=8.2" + "php": ">=8.4" }, "type": "library", "autoload": { @@ -7826,7 +6524,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.2.4" + "source": "https://github.com/symfony/process/tree/v8.0.8" }, "funding": [ { @@ -7837,45 +6535,49 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-05T08:33:46+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/psr-http-message-bridge", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/psr-http-message-bridge.git", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f" + "reference": "94facc221260c1d5f20e31ee43cd6c6a824b4a19" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", - "reference": "03f2f72319e7acaf2a9f6fcbe30ef17eec51594f", + "url": "https://api.github.com/repos/symfony/psr-http-message-bridge/zipball/94facc221260c1d5f20e31ee43cd6c6a824b4a19", + "reference": "94facc221260c1d5f20e31ee43cd6c6a824b4a19", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "psr/http-message": "^1.0|^2.0", - "symfony/http-foundation": "^6.4|^7.0" + "symfony/http-foundation": "^7.4|^8.0" }, "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-kernel": "<6.4" + "php-http/discovery": "<1.15" }, "require-dev": { "nyholm/psr7": "^1.1", "php-http/discovery": "^1.15", "psr/log": "^1.1.4|^2|^3", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" + "symfony/browser-kit": "^7.4|^8.0", + "symfony/config": "^7.4|^8.0", + "symfony/event-dispatcher": "^7.4|^8.0", + "symfony/framework-bundle": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/runtime": "^7.4|^8.0" }, "type": "symfony-bridge", "autoload": { @@ -7909,7 +6611,7 @@ "psr-7" ], "support": { - "source": "https://github.com/symfony/psr-http-message-bridge/tree/v7.2.0" + "source": "https://github.com/symfony/psr-http-message-bridge/tree/v8.0.8" }, "funding": [ { @@ -7920,43 +6622,42 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-26T08:57:56+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/routing", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996" + "reference": "0de330ec2ea922a7b08ec45615bd51179de7fda4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/ee9a67edc6baa33e5fae662f94f91fd262930996", - "reference": "ee9a67edc6baa33e5fae662f94f91fd262930996", + "url": "https://api.github.com/repos/symfony/routing/zipball/0de330ec2ea922a7b08ec45615bd51179de7fda4", + "reference": "0de330ec2ea922a7b08ec45615bd51179de7fda4", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/deprecation-contracts": "^2.5|^3" }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" + "symfony/config": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/expression-language": "^7.4|^8.0", + "symfony/http-foundation": "^7.4|^8.0", + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -7990,7 +6691,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.2.3" + "source": "https://github.com/symfony/routing/tree/v8.0.8" }, "funding": [ { @@ -8001,25 +6702,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T10:56:55+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", - "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/45112560a3ba2d715666a509a0bc9521d10b6c43", + "reference": "45112560a3ba2d715666a509a0bc9521d10b6c43", "shasum": "" }, "require": { @@ -8037,7 +6742,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -8073,7 +6778,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.1" }, "funding": [ { @@ -8084,44 +6789,47 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T11:30:57+00:00" }, { "name": "symfony/string", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" + "reference": "ae9488f874d7603f9d2dfbf120203882b645d963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", - "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", + "url": "https://api.github.com/repos/symfony/string/zipball/ae9488f874d7603f9d2dfbf120203882b645d963", + "reference": "ae9488f874d7603f9d2dfbf120203882b645d963", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-ctype": "^1.8", + "symfony/polyfill-intl-grapheme": "^1.33", + "symfony/polyfill-intl-normalizer": "^1.0", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/emoji": "^7.4|^8.0", + "symfony/http-client": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" + "symfony/var-exporter": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8160,7 +6868,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.2.0" + "source": "https://github.com/symfony/string/tree/v8.0.8" }, "funding": [ { @@ -8171,60 +6879,58 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-11-13T13:31:26+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/translation", - "version": "v7.2.4", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a" + "reference": "27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/283856e6981286cc0d800b53bd5703e8e363f05a", - "reference": "283856e6981286cc0d800b53bd5703e8e363f05a", + "url": "https://api.github.com/repos/symfony/translation/zipball/27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f", + "reference": "27c03ae3940de24ba2f71cfdbac824f2aa1fdf2f", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0", + "symfony/translation-contracts": "^3.6.1" }, "conflict": { - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", + "nikic/php-parser": "<5.0", "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" + "symfony/service-contracts": "<2.5" }, "provide": { "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.18|^5.0", + "nikic/php-parser": "^5.0", "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", + "symfony/config": "^7.4|^8.0", + "symfony/console": "^7.4|^8.0", + "symfony/dependency-injection": "^7.4|^8.0", + "symfony/finder": "^7.4|^8.0", "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/intl": "^7.4|^8.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", + "symfony/routing": "^7.4|^8.0", "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" + "symfony/yaml": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8255,7 +6961,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v7.2.4" + "source": "https://github.com/symfony/translation/tree/v8.0.8" }, "funding": [ { @@ -8266,25 +6972,29 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.5.1", + "version": "v3.6.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" + "reference": "65a8bc82080447fae78373aa10f8d13b38338977" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", - "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/65a8bc82080447fae78373aa10f8d13b38338977", + "reference": "65a8bc82080447fae78373aa10f8d13b38338977", "shasum": "" }, "require": { @@ -8297,7 +7007,7 @@ "name": "symfony/contracts" }, "branch-alias": { - "dev-main": "3.5-dev" + "dev-main": "3.6-dev" } }, "autoload": { @@ -8333,7 +7043,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.1" }, "funding": [ { @@ -8344,33 +7054,37 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2025-07-15T13:41:35+00:00" }, { "name": "symfony/uid", - "version": "v7.2.0", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426" + "reference": "f63fa6096a24147283bce4d29327d285326438e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", - "reference": "2d294d0c48df244c71c105a169d0190bfb080426", + "url": "https://api.github.com/repos/symfony/uid/zipball/f63fa6096a24147283bce4d29327d285326438e0", + "reference": "f63fa6096a24147283bce4d29327d285326438e0", "shasum": "" }, "require": { - "php": ">=8.2", + "php": ">=8.4", "symfony/polyfill-uuid": "^1.15" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "symfony/console": "^7.4|^8.0" }, "type": "library", "autoload": { @@ -8407,7 +7121,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.2.0" + "source": "https://github.com/symfony/uid/tree/v8.0.8" }, "funding": [ { @@ -8418,40 +7132,44 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2024-09-25T14:21:43+00:00" + "time": "2026-03-30T15:14:47+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.2.3", + "version": "v8.0.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "82b478c69745d8878eb60f9a049a4d584996f73a" + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/82b478c69745d8878eb60f9a049a4d584996f73a", - "reference": "82b478c69745d8878eb60f9a049a4d584996f73a", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", + "reference": "cfb7badd53bf4177f6e9416cfbbccc13c0e773a1", "shasum": "" }, "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0" + "php": ">=8.4", + "symfony/polyfill-mbstring": "^1.0" }, "conflict": { - "symfony/console": "<6.4" + "symfony/console": "<7.4", + "symfony/error-handler": "<7.4" }, "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", + "symfony/console": "^7.4|^8.0", + "symfony/http-kernel": "^7.4|^8.0", + "symfony/process": "^7.4|^8.0", + "symfony/uid": "^7.4|^8.0", "twig/twig": "^3.12" }, "bin": [ @@ -8490,7 +7208,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.2.3" + "source": "https://github.com/symfony/var-dumper/tree/v8.0.8" }, "funding": [ { @@ -8501,43 +7219,54 @@ "url": "https://github.com/fabpot", "type": "github" }, + { + "url": "https://github.com/nicolas-grekas", + "type": "github" + }, { "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2025-01-17T11:39:41+00:00" + "time": "2026-03-31T07:15:36+00:00" }, { - "name": "symfony/var-exporter", - "version": "v7.2.4", + "name": "tightenco/ziggy", + "version": "v2.6.2", "source": { "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a" + "url": "https://github.com/tighten/ziggy.git", + "reference": "8a0b645921623f77dceaf543d61ecd51a391d96e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/4ede73aa7a73d81506002d2caadbbdad1ef5b69a", - "reference": "4ede73aa7a73d81506002d2caadbbdad1ef5b69a", + "url": "https://api.github.com/repos/tighten/ziggy/zipball/8a0b645921623f77dceaf543d61ecd51a391d96e", + "reference": "8a0b645921623f77dceaf543d61ecd51a391d96e", "shasum": "" }, "require": { - "php": ">=8.2" + "ext-json": "*", + "laravel/framework": ">=9.0", + "php": ">=8.1" }, "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" + "laravel/folio": "^1.1", + "orchestra/testbench": "^8.0 || ^9.0 || ^10.0", + "pestphp/pest": "^2.0 || ^3.0 || ^4.0", + "pestphp/pest-plugin-laravel": "^2.0 || ^3.0 || ^4.0" }, "type": "library", + "extra": { + "laravel": { + "providers": [ + "Tighten\\Ziggy\\ZiggyServiceProvider" + ] + } + }, "autoload": { "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "Tighten\\Ziggy\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -8545,64 +7274,51 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Daniel Coulbourne", + "email": "daniel@tighten.co" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Jake Bathman", + "email": "jake@tighten.co" + }, + { + "name": "Jacob Baker-Kretzmar", + "email": "jacob@tighten.co" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", + "description": "Use your Laravel named routes in JavaScript.", + "homepage": "https://github.com/tighten/ziggy", "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" + "Ziggy", + "javascript", + "laravel", + "routes" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.2.4" + "issues": "https://github.com/tighten/ziggy/issues", + "source": "https://github.com/tighten/ziggy/tree/v2.6.2" }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-02-13T10:27:23+00:00" + "time": "2026-03-05T14:41:19+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.3.0", + "version": "v2.4.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d" + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", - "reference": "0d72ac1c00084279c1816675284073c5a337c20d", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/f0292ccf0ec75843d65027214426b6b163b48b41", + "reference": "f0292ccf0ec75843d65027214426b6b163b48b41", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "php": "^7.4 || ^8.0", - "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^2.0", @@ -8635,28 +7351,28 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.4.0" }, - "time": "2024-12-21T16:25:41+00:00" + "time": "2025-12-02T11:56:42+00:00" }, { "name": "uwil/admin-secure-laravel", - "version": "5.0.0", + "version": "5.1.0", "source": { "type": "git", "url": "git@lab.s-web.fr:ldc-web/projets/ldc-web-admin-secure-laravel.git", - "reference": "7d9c052db4318752a312dc9763bc8c31ea053aa2" + "reference": "0299d8397111b5a80ea3200a9fd387b94c34f208" }, "dist": { "type": "zip", - "url": "https://lab.s-web.fr/api/v4/projects/20/packages/composer/archives/uwil/admin-secure-laravel.zip?sha=7d9c052db4318752a312dc9763bc8c31ea053aa2", - "reference": "7d9c052db4318752a312dc9763bc8c31ea053aa2", + "url": "https://lab.s-web.fr/api/v4/projects/20/packages/composer/archives/uwil/admin-secure-laravel.zip?sha=0299d8397111b5a80ea3200a9fd387b94c34f208", + "reference": "0299d8397111b5a80ea3200a9fd387b94c34f208", "shasum": "" }, "require": { "dxw/cidr": "^3.2", - "illuminate/support": "~11|~12", - "laravel/framework": "~11|~12", + "illuminate/support": "~11|~12|~13", + "laravel/framework": "~11|~12|~13", "php": "^8.3", "symfony/options-resolver": "^7.0" }, @@ -8705,21 +7421,21 @@ }, { "name": "uwil/k8s-laravel", - "version": "1.4.0", + "version": "3.0.0", "source": { "type": "git", "url": "git@lab.s-web.fr:ldc-web/projets/k8s-laravel.git", - "reference": "14da608cb5ebc1c48615d213545655db2009364f" + "reference": "96f85bef45b1ee8d6c2f85e5af2aa6003fa357fd" }, "dist": { "type": "zip", - "url": "https://lab.s-web.fr/api/v4/projects/90/packages/composer/archives/uwil/k8s-laravel.zip?sha=14da608cb5ebc1c48615d213545655db2009364f", - "reference": "14da608cb5ebc1c48615d213545655db2009364f", + "url": "https://lab.s-web.fr/api/v4/projects/90/packages/composer/archives/uwil/k8s-laravel.zip?sha=96f85bef45b1ee8d6c2f85e5af2aa6003fa357fd", + "reference": "96f85bef45b1ee8d6c2f85e5af2aa6003fa357fd", "shasum": "" }, "require": { - "illuminate/support": "~8|~9|~10|~11", - "laravel/framework": "~8|~9|~10|~11", + "illuminate/support": "~8|~9|~10|~11|~12|~13", + "laravel/framework": "~8|~9|~10|~11|~12|~13", "php": "~7.3|~7.4|~8" }, "require-dev": { @@ -8758,37 +7474,311 @@ "license": [ "MIT" ], - "authors": [ - { - "name": "Vincent BRIDIER", - "email": "vincent.bridier@ldc.fr", - "homepage": "https://www.ldc.fr" - } - ], - "description": "Laravel requirements for k8s" + "description": "Laravel requirements for k8s", + "support": { + "email": "equipe.web@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/k8s-laravel/-/issues" + } }, { - "name": "vlucas/phpdotenv", - "version": "v5.6.1", + "name": "uwil/laravel-activity-logs", + "version": "6.0.0", "source": { "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2" + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-activity-logs.git", + "reference": "765bf7aab42af11e79a64ce1b2245a09abae6fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/a59a13791077fe3d44f90e7133eb68e7d22eaff2", - "reference": "a59a13791077fe3d44f90e7133eb68e7d22eaff2", + "url": "https://lab.s-web.fr/api/v4/projects/229/packages/composer/archives/uwil/laravel-activity-logs.zip?sha=765bf7aab42af11e79a64ce1b2245a09abae6fe1", + "reference": "765bf7aab42af11e79a64ce1b2245a09abae6fe1", + "shasum": "" + }, + "require": { + "illuminate/support": "~13", + "laravel/framework": "~13", + "php": "^8.5", + "uwil/laravel-backend": "^5.0", + "uwil/laravel-common": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelActivityLogs\\ActivityLogsServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\LaravelActivityLogs\\": "src/" + } + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel Activity logs", + "keywords": [ + "activity", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-activity-logs/-/issues" + } + }, + { + "name": "uwil/laravel-backend", + "version": "5.0.1", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-backend.git", + "reference": "9ec385e80de62ebcb0362911c56a9e7d917bcc80" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/228/packages/composer/archives/uwil/laravel-backend.zip?sha=9ec385e80de62ebcb0362911c56a9e7d917bcc80", + "reference": "9ec385e80de62ebcb0362911c56a9e7d917bcc80", + "shasum": "" + }, + "require": { + "diglactic/laravel-breadcrumbs": "^10.0", + "illuminate/support": "~13", + "inertiajs/inertia-laravel": "^2.0", + "laravel/framework": "~13", + "laravel/telescope": "^5.7", + "php": "^8.5", + "sentry/sentry-laravel": "^4.10", + "uwil/laravel-activity-logs": "^6.0", + "uwil/laravel-common": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "orchestra/testbench": "^11.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7", + "uwil/admin-secure-laravel": "^5.1" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelBackend\\BackendServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\LaravelBackend\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Uwil\\LaravelBackend\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "phpcs": [ + "./vendor/bin/phpcs" + ], + "phpstan": [ + "./vendor/bin/phpstan" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel backend", + "keywords": [ + "backend", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-backend/-/issues" + } + }, + { + "name": "uwil/laravel-common", + "version": "6.0.0", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-common.git", + "reference": "dbaeb3f980a1c7a17c92601c090d8687c6bae8e6" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/215/packages/composer/archives/uwil/laravel-common.zip?sha=dbaeb3f980a1c7a17c92601c090d8687c6bae8e6", + "reference": "dbaeb3f980a1c7a17c92601c090d8687c6bae8e6", + "shasum": "" + }, + "require": { + "diglactic/laravel-breadcrumbs": "^10.0", + "illuminate/support": "~13", + "inertiajs/inertia-laravel": "^2.0", + "laravel/framework": "~13", + "mews/purifier": "^3.4", + "php": "^8.5", + "sentry/sentry-laravel": "^4.10", + "uwil/k8s-laravel": "^3.0", + "uwil/laravel-i18n": "^3.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "orchestra/testbench": "^11.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelCommon\\CommonServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Helpers/methods.php" + ], + "psr-4": { + "Uwil\\LaravelCommon\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "Uwil\\LaravelCommon\\Tests\\": "tests" + } + }, + "scripts": { + "test": [ + "vendor/bin/phpunit" + ], + "post-autoload-dump": [ + "@php ./vendor/bin/testbench package:discover --ansi" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel common utils and clean install", + "keywords": [ + "common", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-common/-/issues" + } + }, + { + "name": "uwil/laravel-i18n", + "version": "3.0.0", + "source": { + "type": "git", + "url": "git@lab.s-web.fr:ldc-web/projets/laravel-i18n.git", + "reference": "a87ec12228efd4b13c4a7298631c6dc0f601be47" + }, + "dist": { + "type": "zip", + "url": "https://lab.s-web.fr/api/v4/projects/252/packages/composer/archives/uwil/laravel-i18n.zip?sha=a87ec12228efd4b13c4a7298631c6dc0f601be47", + "reference": "a87ec12228efd4b13c4a7298631c6dc0f601be47", + "shasum": "" + }, + "require": { + "illuminate/support": "~13", + "laravel/framework": "~13", + "mcamara/laravel-localization": "^2.3", + "php": "^8.5", + "spatie/laravel-translatable": "^6.11", + "uwil/laravel-common": "^6.0" + }, + "require-dev": { + "larastan/larastan": "^3.9", + "orchestra/testbench": "^11.0", + "phpunit/php-code-coverage": "^11.0", + "phpunit/phpunit": "^11.0", + "slevomat/coding-standard": "^8.3", + "squizlabs/php_codesniffer": "^3.7" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Uwil\\LaravelI18n\\I18nServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Uwil\\LaravelI18n\\": "src/" + } + }, + "scripts": { + "phpcs": [ + "./vendor/bin/phpcs" + ], + "phpstan": [ + "./vendor/bin/phpstan" + ], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump" + ] + }, + "license": [ + "MIT" + ], + "description": "UWIL Laravel I18N", + "keywords": [ + "i18n", + "laravel", + "uwil" + ], + "support": { + "email": "digital@ldc.fr", + "issues": "https://lab.s-web.fr/ldc-web/projets/laravel-i18n/-/issues" + } + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.6.3", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "955e7815d677a3eaa7075231212f2110983adecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/955e7815d677a3eaa7075231212f2110983adecc", + "reference": "955e7815d677a3eaa7075231212f2110983adecc", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.3", + "graham-campbell/result-type": "^1.1.4", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.3", - "symfony/polyfill-ctype": "^1.24", - "symfony/polyfill-mbstring": "^1.24", - "symfony/polyfill-php80": "^1.24" + "phpoption/phpoption": "^1.9.5", + "symfony/polyfill-ctype": "^1.26", + "symfony/polyfill-mbstring": "^1.26", + "symfony/polyfill-php80": "^1.26" }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", @@ -8837,7 +7827,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.3" }, "funding": [ { @@ -8849,27 +7839,27 @@ "type": "tidelift" } ], - "time": "2024-07-20T21:52:34+00:00" + "time": "2025-12-27T19:49:13+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.3", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" + "reference": "d870a33f0f79d2b4579740b0620200221ee44aeb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", - "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/d870a33f0f79d2b4579740b0620200221ee44aeb", + "reference": "d870a33f0f79d2b4579740b0620200221ee44aeb", "shasum": "" }, "require": { - "php": ">=7.0.0" + "php": ">=7.1.0" }, "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + "phpunit/phpunit": "~8.5 || ~9.6 || ~10.5 || ~11.5" }, "suggest": { "ext-intl": "Use Intl for transliterator_transliterate() support" @@ -8899,7 +7889,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.3" + "source": "https://github.com/voku/portable-ascii/tree/2.1.0" }, "funding": [ { @@ -8923,220 +7913,35 @@ "type": "tidelift" } ], - "time": "2024-11-21T01:49:47+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" + "time": "2026-04-16T23:10:39+00:00" } ], "packages-dev": [ - { - "name": "archtechx/enums", - "version": "v0.3.2", - "source": { - "type": "git", - "url": "https://github.com/archtechx/enums.git", - "reference": "475f45e682b0771253707f9403b704759a08da5f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/archtechx/enums/zipball/475f45e682b0771253707f9403b704759a08da5f", - "reference": "475f45e682b0771253707f9403b704759a08da5f", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "nunomaduro/larastan": "^1.0|^2.4", - "orchestra/testbench": "^6.9|^7.0|^8.0", - "pestphp/pest": "^1.2|^2.0", - "pestphp/pest-plugin-laravel": "^1.0|^2.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ArchTech\\Enums\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Samuel Štancl", - "email": "samuel@archte.ch" - } - ], - "description": "Helpers for making PHP enums more lovable.", - "support": { - "issues": "https://github.com/archtechx/enums/issues", - "source": "https://github.com/archtechx/enums/tree/v0.3.2" - }, - "time": "2023-02-15T13:05:41+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.3", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2024-09-19T14:15:21+00:00" - }, { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v1.0.0", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/composer-installer.git", - "reference": "4be43904336affa5c2f70744a348312336afd0da" + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/4be43904336affa5c2f70744a348312336afd0da", - "reference": "4be43904336affa5c2f70744a348312336afd0da", + "url": "https://api.github.com/repos/PHPCSStandards/composer-installer/zipball/845eb62303d2ca9b289ef216356568ccc075ffd1", + "reference": "845eb62303d2ca9b289ef216356568ccc075ffd1", "shasum": "" }, "require": { - "composer-plugin-api": "^1.0 || ^2.0", + "composer-plugin-api": "^2.2", "php": ">=5.4", - "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" + "squizlabs/php_codesniffer": "^3.1.0 || ^4.0" }, "require-dev": { - "composer/composer": "*", + "composer/composer": "^2.2", "ext-json": "*", "ext-zip": "*", - "php-parallel-lint/php-parallel-lint": "^1.3.1", - "phpcompatibility/php-compatibility": "^9.0", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpcompatibility/php-compatibility": "^9.0 || ^10.0.0@dev", "yoast/phpunit-polyfills": "^1.0" }, "type": "composer-plugin", @@ -9155,9 +7960,9 @@ "authors": [ { "name": "Franck Nijhof", - "email": "franck.nijhof@dealerdirect.com", - "homepage": "http://www.frenck.nl", - "role": "Developer / IT Manager" + "email": "opensource@frenck.dev", + "homepage": "https://frenck.dev", + "role": "Open source developer" }, { "name": "Contributors", @@ -9165,7 +7970,6 @@ } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", - "homepage": "http://www.dealerdirect.com", "keywords": [ "PHPCodeSniffer", "PHP_CodeSniffer", @@ -9186,237 +7990,28 @@ ], "support": { "issues": "https://github.com/PHPCSStandards/composer-installer/issues", + "security": "https://github.com/PHPCSStandards/composer-installer/security/policy", "source": "https://github.com/PHPCSStandards/composer-installer" }, - "time": "2023-01-05T11:28:13+00:00" - }, - { - "name": "dragon-code/contracts", - "version": "2.24.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/contracts.git", - "reference": "c21ea4fc0a399bd803a2805a7f2c989749083896" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/contracts/zipball/c21ea4fc0a399bd803a2805a7f2c989749083896", - "reference": "c21ea4fc0a399bd803a2805a7f2c989749083896", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/http-kernel": "^4.0 || ^5.0 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.23" - }, - "conflict": { - "andrey-helldar/contracts": "*" - }, - "require-dev": { - "illuminate/database": "^10.0 || ^11.0 || ^12.0", - "phpdocumentor/reflection-docblock": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\Contracts\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "A set of contracts for any project", - "keywords": [ - "contracts", - "interfaces" - ], - "support": { - "source": "https://github.com/TheDragonCode/contracts" - }, "funding": [ { - "url": "https://boosty.to/dragon-code", - "type": "boosty" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2025-02-23T23:11:50+00:00" - }, - { - "name": "dragon-code/pretty-array", - "version": "4.2.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/pretty-array.git", - "reference": "b94034d92172a5d14a578822d68b2a8f8b5388e0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/pretty-array/zipball/b94034d92172a5d14a578822d68b2a8f8b5388e0", - "reference": "b94034d92172a5d14a578822d68b2a8f8b5388e0", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.20", - "dragon-code/support": "^6.11.2", - "ext-dom": "*", - "ext-mbstring": "*", - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.6 || ^10.0 || ^11.0 || ^12.0" - }, - "suggest": { - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "autoload": { - "psr-4": { - "DragonCode\\PrettyArray\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Simple conversion of an array to a pretty view", - "keywords": [ - "andrey helldar", - "array", - "dragon", - "dragon code", - "pretty", - "pretty array" - ], - "support": { - "issues": "https://github.com/TheDragonCode/pretty-array/issues", - "source": "https://github.com/TheDragonCode/pretty-array" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" + "url": "https://github.com/jrfnl", + "type": "github" }, { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" - } - ], - "time": "2025-02-24T15:35:24+00:00" - }, - { - "name": "dragon-code/support", - "version": "6.16.0", - "source": { - "type": "git", - "url": "https://github.com/TheDragonCode/support.git", - "reference": "ab9b657a307e75f6ba5b2b39e1e45207dc1a065a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDragonCode/support/zipball/ab9b657a307e75f6ba5b2b39e1e45207dc1a065a", - "reference": "ab9b657a307e75f6ba5b2b39e1e45207dc1a065a", - "shasum": "" - }, - "require": { - "dragon-code/contracts": "^2.22.0", - "ext-bcmath": "*", - "ext-ctype": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.1", - "psr/http-message": "^1.0.1 || ^2.0", - "symfony/polyfill-php81": "^1.25", - "voku/portable-ascii": "^1.4.8 || ^2.0.1" - }, - "conflict": { - "andrey-helldar/support": "*" - }, - "require-dev": { - "illuminate/contracts": "^9.0 || ^10.0 || ^11.0 || ^12.0", - "phpunit/phpunit": "^9.6 || ^11.0 || ^12.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "suggest": { - "dragon-code/laravel-support": "Various helper files for the Laravel and Lumen frameworks", - "symfony/thanks": "Give thanks (in the form of a GitHub) to your fellow PHP package maintainers" - }, - "type": "library", - "extra": { - "dragon-code": { - "docs-generator": { - "preview": { - "brand": "php", - "vendor": "The Dragon Code" - } - } - } - }, - "autoload": { - "psr-4": { - "DragonCode\\Support\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://dragon-code.pro" - } - ], - "description": "Support package is a collection of helpers and tools for any project.", - "keywords": [ - "dragon", - "dragon-code", - "framework", - "helper", - "helpers", - "laravel", - "php", - "support", - "symfony", - "yii", - "yii2" - ], - "support": { - "issues": "https://github.com/TheDragonCode/support/issues", - "source": "https://github.com/TheDragonCode/support" - }, - "funding": [ - { - "url": "https://boosty.to/dragon-code", - "type": "boosty" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" }, { - "url": "https://yoomoney.ru/to/410012608840929", - "type": "yoomoney" + "url": "https://thanks.dev/u/gh/phpcsstandards", + "type": "thanks_dev" } ], - "time": "2025-02-24T14:01:52+00:00" + "time": "2025-11-11T04:32:07+00:00" }, { "name": "fakerphp/faker", @@ -9483,16 +8078,16 @@ }, { "name": "filp/whoops", - "version": "2.17.0", + "version": "2.18.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "075bc0c26631110584175de6523ab3f1652eb28e" + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/075bc0c26631110584175de6523ab3f1652eb28e", - "reference": "075bc0c26631110584175de6523ab3f1652eb28e", + "url": "https://api.github.com/repos/filp/whoops/zipball/d2102955e48b9fd9ab24280a7ad12ed552752c4d", + "reference": "d2102955e48b9fd9ab24280a7ad12ed552752c4d", "shasum": "" }, "require": { @@ -9542,7 +8137,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.17.0" + "source": "https://github.com/filp/whoops/tree/2.18.4" }, "funding": [ { @@ -9550,24 +8145,24 @@ "type": "github" } ], - "time": "2025-01-25T12:00:00+00:00" + "time": "2025-08-08T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -9575,8 +8170,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -9599,45 +8194,32 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { - "name": "laravel-lang/attributes", - "version": "2.13.1", + "name": "iamcal/sql-parser", + "version": "v0.7", "source": { "type": "git", - "url": "https://github.com/Laravel-Lang/attributes.git", - "reference": "394329d99eaa990626c194c5eb39648e881ecc35" + "url": "https://github.com/iamcal/SQLParser.git", + "reference": "610392f38de49a44dab08dc1659960a29874c4b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/attributes/zipball/394329d99eaa990626c194c5eb39648e881ecc35", - "reference": "394329d99eaa990626c194c5eb39648e881ecc35", + "url": "https://api.github.com/repos/iamcal/SQLParser/zipball/610392f38de49a44dab08dc1659960a29874c4b8", + "reference": "610392f38de49a44dab08dc1659960a29874c4b8", "shasum": "" }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/var-dumper": "^6.0 || ^7.0" + "php-coveralls/php-coveralls": "^1.0", + "phpunit/phpunit": "^5|^6|^7|^8|^9" }, "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Attributes\\ServiceProvider" - ] - } - }, "autoload": { "psr-4": { - "LaravelLang\\Attributes\\": "src/" + "iamcal\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -9646,296 +8228,72 @@ ], "authors": [ { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" + "name": "Cal Henderson", + "email": "cal@iamcal.com" } ], - "description": "List of 126 languages for form field names", - "keywords": [ - "attributes", - "fields", - "form", - "lang", - "languages", - "laravel", - "messages", - "translations", - "validation" - ], + "description": "MySQL schema parser", "support": { - "issues": "https://github.com/Laravel-Lang/attributes/issues", - "source": "https://github.com/Laravel-Lang/attributes/tree/2.13.1" + "issues": "https://github.com/iamcal/SQLParser/issues", + "source": "https://github.com/iamcal/SQLParser/tree/v0.7" }, - "time": "2025-03-04T07:28:17+00:00" + "time": "2026-01-28T22:20:33+00:00" }, { - "name": "laravel-lang/common", - "version": "v4.0.0", + "name": "larastan/larastan", + "version": "v3.9.6", "source": { "type": "git", - "url": "https://github.com/Laravel-Lang/common.git", - "reference": "31744c7f64610990a77c7705e590e04c1fca372d" + "url": "https://github.com/larastan/larastan.git", + "reference": "9ad17e83e96b63536cb6ac39c3d40d29ff9cf636" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/common/zipball/31744c7f64610990a77c7705e590e04c1fca372d", - "reference": "31744c7f64610990a77c7705e590e04c1fca372d", - "shasum": "" - }, - "require": { - "laravel-lang/attributes": "^2.3.3", - "laravel-lang/http-statuses": "^3.3.1", - "laravel-lang/lang": "^13.0", - "laravel-lang/publisher": "^14.6.4", - "php": "^8.1" - }, - "require-dev": { - "orchestra/testbench": "^8.5 || ^9.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.3" - }, - "type": "library", - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - }, - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro", - "homepage": "https://github.com/andrey-helldar" - } - ], - "description": "Easily connect the necessary language packs to the application", - "keywords": [ - "Laravel-lang", - "attribute", - "attributes", - "breeze", - "cashier", - "fortify", - "framework", - "http", - "http-status", - "http-status-code", - "i18n", - "jetstream", - "lang", - "language", - "languages", - "laravel", - "locale", - "locales", - "nova", - "publisher", - "spark", - "translation", - "translations", - "ui" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/common/issues", - "source": "https://github.com/Laravel-Lang/common" - }, - "funding": [ - { - "url": "https://opencollective.com/laravel-lang", - "type": "open_collective" - } - ], - "time": "2023-08-09T09:24:50+00:00" - }, - { - "name": "laravel-lang/http-statuses", - "version": "3.10.1", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/http-statuses.git", - "reference": "061870d98bf213bccfdc8e7421a820ee7916922d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/http-statuses/zipball/061870d98bf213bccfdc8e7421a820ee7916922d", - "reference": "061870d98bf213bccfdc8e7421a820ee7916922d", + "url": "https://api.github.com/repos/larastan/larastan/zipball/9ad17e83e96b63536cb6ac39c3d40d29ff9cf636", + "reference": "9ad17e83e96b63536cb6ac39c3d40d29ff9cf636", "shasum": "" }, "require": { "ext-json": "*", - "laravel-lang/publisher": "^14.1 || ^15.0 || ^16.0", - "php": "^8.1" + "iamcal/sql-parser": "^0.7.0", + "illuminate/console": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/container": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/contracts": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/database": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/http": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/pipeline": "^11.44.2 || ^12.4.1 || ^13", + "illuminate/support": "^11.44.2 || ^12.4.1 || ^13", + "php": "^8.2", + "phpstan/phpstan": "^2.1.44" }, "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0 || ^11.0 || ^12.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\HttpStatuses\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\HttpStatuses\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 127 languages for HTTP statuses", - "keywords": [ - "http", - "lang", - "languages", - "laravel", - "messages", - "status", - "translations" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/http-statuses/issues", - "source": "https://github.com/Laravel-Lang/http-statuses/tree/3.10.1" - }, - "time": "2025-03-02T15:29:55+00:00" - }, - { - "name": "laravel-lang/lang", - "version": "13.12.0", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/lang.git", - "reference": "25a5a07b635f0694cb34a37b58cfb78d0f4ee19e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/lang/zipball/25a5a07b635f0694cb34a37b58cfb78d0f4ee19e", - "reference": "25a5a07b635f0694cb34a37b58cfb78d0f4ee19e", - "shasum": "" - }, - "require": { - "ext-json": "*", - "laravel-lang/publisher": "^14.0 || ^15.0 || ^16.0", - "php": "^8.1" - }, - "require-dev": { - "laravel-lang/status-generator": "^1.19 || ^2.0", - "phpunit/phpunit": "^10.0", - "symfony/var-dumper": "^6.0 || ^7.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Lang\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "LaravelLang\\Lang\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" - } - ], - "description": "List of 78 languages for Laravel Framework, Laravel Jetstream, Laravel Fortify, Laravel Breeze, Laravel Cashier, Laravel Nova, Laravel Spark and Laravel UI", - "keywords": [ - "lang", - "languages", - "laravel", - "lpm" - ], - "support": { - "issues": "https://github.com/Laravel-Lang/lang/issues", - "source": "https://github.com/Laravel-Lang/lang" - }, - "time": "2023-12-16T17:26:12+00:00" - }, - { - "name": "laravel-lang/publisher", - "version": "14.7.1", - "source": { - "type": "git", - "url": "https://github.com/Laravel-Lang/publisher.git", - "reference": "946405e3d8c7105b0ae8cf8de34a3e6e98a70a84" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Laravel-Lang/publisher/zipball/946405e3d8c7105b0ae8cf8de34a3e6e98a70a84", - "reference": "946405e3d8c7105b0ae8cf8de34a3e6e98a70a84", - "shasum": "" - }, - "require": { - "archtechx/enums": "^0.3", - "composer/semver": "^3.3", - "dragon-code/pretty-array": "^4.0", - "dragon-code/support": "^6.3", - "ext-json": "*", - "illuminate/console": "^8.79 || ^9.18 || ^10.0 || ^11.0", - "illuminate/support": "^8.79 || ^9.18 || ^10.0 || ^11.0", - "league/commonmark": "^2.3", - "league/config": "^1.2", - "php": "^8.1" - }, - "conflict": { - "laravel-lang/attributes": "<2.0", - "laravel-lang/http-statuses": "<3.0", - "laravel-lang/lang": "<11.0" - }, - "require-dev": { - "laravel-lang/json-fallback-hotfix": "^1.0", - "orchestra/testbench": "^6.25 || ^7.22 || ^8.0 || ^9.0", - "phpunit/phpunit": "^9.6 || ^10.0", - "symfony/var-dumper": "^5.0 || ^6.0" + "doctrine/coding-standard": "^13", + "laravel/framework": "^11.44.2 || ^12.7.2 || ^13", + "mockery/mockery": "^1.6.12", + "nikic/php-parser": "^5.4", + "orchestra/canvas": "^v9.2.2 || ^10.0.1 || ^11", + "orchestra/testbench-core": "^9.12.0 || ^10.1 || ^11", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpunit/phpunit": "^10.5.35 || ^11.5.15 || ^12.5.8" }, "suggest": { - "laravel-lang/attributes": "List of 78 languages for form field names", - "laravel-lang/http-statuses": "List of 78 languages for HTTP statuses", - "laravel-lang/lang": "List of 78 languages for Laravel Framework, Jetstream, Fortify, Breeze, Cashier, Nova, Spark and UI." + "orchestra/testbench": "Using Larastan for analysing a package needs Testbench", + "phpmyadmin/sql-parser": "Install to enable Larastan's optional phpMyAdmin-based SQL parser automatically" }, - "type": "library", + "type": "phpstan-extension", "extra": { - "laravel": { - "providers": [ - "LaravelLang\\Publisher\\ServiceProvider" + "phpstan": { + "includes": [ + "extension.neon" ] + }, + "branch-alias": { + "dev-master": "3.0-dev" } }, "autoload": { - "files": [ - "helper.php" - ], "psr-4": { - "LaravelLang\\Publisher\\": "src" + "Larastan\\Larastan\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -9944,61 +8302,186 @@ ], "authors": [ { - "name": "Andrey Helldar", - "email": "helldar@dragon-code.pro" - }, - { - "name": "Laravel-Lang Team", - "homepage": "https://github.com/Laravel-Lang" + "name": "Can Vural", + "email": "can9119@gmail.com" } ], - "description": "Publisher lang files for the Laravel and Lumen Frameworks, Jetstream, Fortify, Cashier, Spark and Nova from Laravel-Lang/lang", + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", "keywords": [ - "breeze", - "cashier", - "fortify", - "framework", - "i18n", - "jetstream", - "lang", - "languages", + "PHPStan", + "code analyse", + "code analysis", + "larastan", "laravel", - "locale", - "locales", - "localization", - "lpm", - "lumen", - "nova", - "publisher", - "spark", - "trans", - "translations", - "validations" + "package", + "php", + "static analysis" ], "support": { - "issues": "https://github.com/Laravel-Lang/publisher/issues", - "source": "https://github.com/Laravel-Lang/publisher" + "issues": "https://github.com/larastan/larastan/issues", + "source": "https://github.com/larastan/larastan/tree/v3.9.6" }, "funding": [ { - "url": "https://opencollective.com/laravel-lang", - "type": "open_collective" + "url": "https://github.com/canvural", + "type": "github" } ], - "time": "2023-10-29T21:03:27+00:00" + "time": "2026-04-16T10:02:43+00:00" + }, + { + "name": "laravel/breeze", + "version": "v2.4.1", + "source": { + "type": "git", + "url": "https://github.com/laravel/breeze.git", + "reference": "28cefeaf6af20177ddf5cc7b93e87e4ad79d533f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/breeze/zipball/28cefeaf6af20177ddf5cc7b93e87e4ad79d533f", + "reference": "28cefeaf6af20177ddf5cc7b93e87e4ad79d533f", + "shasum": "" + }, + "require": { + "illuminate/console": "^11.0|^12.0|^13.0", + "illuminate/filesystem": "^11.0|^12.0|^13.0", + "illuminate/support": "^11.0|^12.0|^13.0", + "illuminate/validation": "^11.0|^12.0|^13.0", + "php": "^8.2.0", + "symfony/console": "^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^11.0|^12.0|^13.0", + "orchestra/testbench-core": "^9.0|^10.0|^11.0", + "phpstan/phpstan": "^2.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Breeze\\BreezeServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Laravel\\Breeze\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "Minimal Laravel authentication scaffolding with Blade and Tailwind.", + "keywords": [ + "auth", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/breeze/issues", + "source": "https://github.com/laravel/breeze" + }, + "time": "2026-03-10T19:59:01+00:00" + }, + { + "name": "laravel/pail", + "version": "v1.2.6", + "source": { + "type": "git", + "url": "https://github.com/laravel/pail.git", + "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/pail/zipball/aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf", + "reference": "aa71a01c309e7f66bc2ec4fb1a59291b82eb4abf", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/console": "^10.24|^11.0|^12.0|^13.0", + "illuminate/contracts": "^10.24|^11.0|^12.0|^13.0", + "illuminate/log": "^10.24|^11.0|^12.0|^13.0", + "illuminate/process": "^10.24|^11.0|^12.0|^13.0", + "illuminate/support": "^10.24|^11.0|^12.0|^13.0", + "nunomaduro/termwind": "^1.15|^2.0", + "php": "^8.2", + "symfony/console": "^6.0|^7.0|^8.0" + }, + "require-dev": { + "laravel/framework": "^10.24|^11.0|^12.0|^13.0", + "laravel/pint": "^1.13", + "orchestra/testbench-core": "^8.13|^9.17|^10.8|^11.0", + "pestphp/pest": "^2.20|^3.0|^4.0", + "pestphp/pest-plugin-type-coverage": "^2.3|^3.0|^4.0", + "phpstan/phpstan": "^1.12.27", + "symfony/var-dumper": "^6.3|^7.0|^8.0", + "symfony/yaml": "^6.3|^7.0|^8.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Laravel\\Pail\\PailServiceProvider" + ] + }, + "branch-alias": { + "dev-main": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\Pail\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Easily delve into your Laravel application's log files directly from the command line.", + "homepage": "https://github.com/laravel/pail", + "keywords": [ + "dev", + "laravel", + "logs", + "php", + "tail" + ], + "support": { + "issues": "https://github.com/laravel/pail/issues", + "source": "https://github.com/laravel/pail" + }, + "time": "2026-02-09T13:44:54+00:00" }, { "name": "laravel/pint", - "version": "v1.21.0", + "version": "v1.29.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425" + "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/531fa0871fbde719c51b12afa3a443b8f4e4b425", - "reference": "531fa0871fbde719c51b12afa3a443b8f4e4b425", + "url": "https://api.github.com/repos/laravel/pint/zipball/0770e9b7fafd50d4586881d456d6eb41c9247a80", + "reference": "0770e9b7fafd50d4586881d456d6eb41c9247a80", "shasum": "" }, "require": { @@ -10009,13 +8492,14 @@ "php": "^8.2.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.68.5", - "illuminate/view": "^11.42.0", - "larastan/larastan": "^3.0.4", - "laravel-zero/framework": "^11.36.1", + "friendsofphp/php-cs-fixer": "^3.95.1", + "illuminate/view": "^12.56.0", + "larastan/larastan": "^3.9.6", + "laravel-zero/framework": "^12.1.0", "mockery/mockery": "^1.6.12", - "nunomaduro/termwind": "^2.3", - "pestphp/pest": "^2.36.0" + "nunomaduro/termwind": "^2.4.0", + "pestphp/pest": "^3.8.6", + "shipfastlabs/agent-detector": "^1.1.3" }, "bin": [ "builds/pint" @@ -10041,6 +8525,7 @@ "description": "An opinionated code formatter for PHP.", "homepage": "https://laravel.com", "keywords": [ + "dev", "format", "formatter", "lint", @@ -10051,70 +8536,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2025-02-18T03:18:57+00:00" - }, - { - "name": "laravel/sail", - "version": "v1.41.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/sail.git", - "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", - "reference": "fe1a4ada0abb5e4bd99eb4e4b0d87906c00cdeec", - "shasum": "" - }, - "require": { - "illuminate/console": "^9.52.16|^10.0|^11.0|^12.0", - "illuminate/contracts": "^9.52.16|^10.0|^11.0|^12.0", - "illuminate/support": "^9.52.16|^10.0|^11.0|^12.0", - "php": "^8.0", - "symfony/console": "^6.0|^7.0", - "symfony/yaml": "^6.0|^7.0" - }, - "require-dev": { - "orchestra/testbench": "^7.0|^8.0|^9.0|^10.0", - "phpstan/phpstan": "^1.10" - }, - "bin": [ - "bin/sail" - ], - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Laravel\\Sail\\SailServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Laravel\\Sail\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "Docker files for running a basic Laravel application.", - "keywords": [ - "docker", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/sail/issues", - "source": "https://github.com/laravel/sail" - }, - "time": "2025-01-24T15:45:36+00:00" + "time": "2026-04-20T15:26:14+00:00" }, { "name": "mockery/mockery", @@ -10200,39 +8622,97 @@ "time": "2024-05-16T03:13:13+00:00" }, { - "name": "nunomaduro/collision", - "version": "v8.5.0", + "name": "myclabs/deep-copy", + "version": "1.13.4", "source": { "type": "git", - "url": "https://github.com/nunomaduro/collision.git", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5" + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/f5c101b929c958e849a633283adff296ed5f38f5", - "reference": "f5c101b929c958e849a633283adff296ed5f38f5", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/07d290f0c47959fd5eed98c95ee5602db07e0b6a", + "reference": "07d290f0c47959fd5eed98c95ee5602db07e0b6a", "shasum": "" }, "require": { - "filp/whoops": "^2.16.0", - "nunomaduro/termwind": "^2.1.0", - "php": "^8.2.0", - "symfony/console": "^7.1.5" + "php": "^7.1 || ^8.0" }, "conflict": { - "laravel/framework": "<11.0.0 || >=12.0.0", - "phpunit/phpunit": "<10.5.1 || >=12.0.0" + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { - "larastan/larastan": "^2.9.8", - "laravel/framework": "^11.28.0", - "laravel/pint": "^1.18.1", - "laravel/sail": "^1.36.0", - "laravel/sanctum": "^4.0.3", - "laravel/tinker": "^2.10.0", - "orchestra/testbench-core": "^9.5.3", - "pestphp/pest": "^2.36.0 || ^3.4.0", - "sebastian/environment": "^6.1.0 || ^7.2.0" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.4" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2025-08-01T08:46:24+00:00" + }, + { + "name": "nunomaduro/collision", + "version": "v8.9.4", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/collision.git", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/716af8f95a470e9094cfca09ed897b023be191a5", + "reference": "716af8f95a470e9094cfca09ed897b023be191a5", + "shasum": "" + }, + "require": { + "filp/whoops": "^2.18.4", + "nunomaduro/termwind": "^2.4.0", + "php": "^8.2.0", + "symfony/console": "^7.4.8 || ^8.0.8" + }, + "conflict": { + "laravel/framework": "<11.48.0 || >=14.0.0", + "phpunit/phpunit": "<11.5.50 || >=14.0.0" + }, + "require-dev": { + "brianium/paratest": "^7.8.5", + "larastan/larastan": "^3.9.6", + "laravel/framework": "^11.48.0 || ^12.56.0 || ^13.5.0", + "laravel/pint": "^1.29.1", + "orchestra/testbench-core": "^9.12.0 || ^10.12.1 || ^11.2.1", + "pestphp/pest": "^3.8.5 || ^4.4.3 || ^5.0.0", + "sebastian/environment": "^7.2.1 || ^8.0.4 || ^9.3.0" }, "type": "library", "extra": { @@ -10269,6 +8749,7 @@ "cli", "command-line", "console", + "dev", "error", "handling", "laravel", @@ -10294,7 +8775,7 @@ "type": "patreon" } ], - "time": "2024-10-15T16:06:32+00:00" + "time": "2026-04-21T14:04:20+00:00" }, { "name": "phar-io/manifest", @@ -10416,16 +8897,16 @@ }, { "name": "phpstan/phpdoc-parser", - "version": "2.1.0", + "version": "2.3.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", - "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/a004701b11273a26cd7955a61d67a7f1e525a45a", + "reference": "a004701b11273a26cd7955a61d67a7f1e525a45a", "shasum": "" }, "require": { @@ -10457,41 +8938,92 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.3.2" }, - "time": "2025-02-19T13:28:12+00:00" + "time": "2026-01-25T14:56:51+00:00" + }, + { + "name": "phpstan/phpstan", + "version": "2.1.51", + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/dc3b523c45e714c70de2ac5113b958223b55dc59", + "reference": "dc3b523c45e714c70de2ac5113b958223b55dc59", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0" + }, + "conflict": { + "phpstan/phpstan-shim": "*" + }, + "bin": [ + "phpstan", + "phpstan.phar" + ], + "type": "library", + "autoload": { + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" + ], + "support": { + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" + }, + "funding": [ + { + "url": "https://github.com/ondrejmirtes", + "type": "github" + }, + { + "url": "https://github.com/phpstan", + "type": "github" + } + ], + "time": "2026-04-21T18:22:01+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.1.16", + "version": "12.5.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77" + "reference": "876099a072646c7745f673d7aeab5382c4439691" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/7e308268858ed6baedc8704a304727d20bc07c77", - "reference": "7e308268858ed6baedc8704a304727d20bc07c77", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/876099a072646c7745f673d7aeab5382c4439691", + "reference": "876099a072646c7745f673d7aeab5382c4439691", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-text-template": "^3.0.1", - "sebastian/code-unit-reverse-lookup": "^3.0.0", - "sebastian/complexity": "^3.2.0", - "sebastian/environment": "^6.1.0", - "sebastian/lines-of-code": "^2.0.2", - "sebastian/version": "^4.0.1", - "theseer/tokenizer": "^1.2.3" + "nikic/php-parser": "^5.7.0", + "php": ">=8.3", + "phpunit/php-text-template": "^5.0", + "sebastian/complexity": "^5.0", + "sebastian/environment": "^8.0.3", + "sebastian/lines-of-code": "^4.0", + "sebastian/version": "^6.0", + "theseer/tokenizer": "^2.0.1" }, "require-dev": { - "phpunit/phpunit": "^10.1" + "phpunit/phpunit": "^12.5.1" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10500,7 +9032,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.1.x-dev" + "dev-main": "12.5.x-dev" } }, "autoload": { @@ -10529,40 +9061,52 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.16" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/12.5.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-code-coverage", + "type": "tidelift" } ], - "time": "2024-08-22T04:31:57+00:00" + "time": "2026-04-15T08:23:17+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.1.0", + "version": "6.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c" + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/a95037b6d9e608ba092da1b23931e537cadc3c3c", - "reference": "a95037b6d9e608ba092da1b23931e537cadc3c3c", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", + "reference": "3d1cd096ef6bea4bf2762ba586e35dbd317cbfd5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10590,36 +9134,48 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", "security": "https://github.com/sebastianbergmann/php-file-iterator/security/policy", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.1.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/6.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/php-file-iterator", + "type": "tidelift" } ], - "time": "2023-08-31T06:24:48+00:00" + "time": "2026-02-02T14:04:18+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/12b54e689b07a25a9b41e57736dfab6ec9ae5406", + "reference": "12b54e689b07a25a9b41e57736dfab6ec9ae5406", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-pcntl": "*" @@ -10627,7 +9183,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -10653,7 +9209,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/php-invoker/security/policy", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/6.0.0" }, "funding": [ { @@ -10661,32 +9218,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2025-02-07T04:58:58+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.1", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748" + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/0c7b06ff49e3d5072f057eb1fa59258bf287a748", - "reference": "0c7b06ff49e3d5072f057eb1fa59258bf287a748", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/e1367a453f0eda562eedb4f659e13aa900d66c53", + "reference": "e1367a453f0eda562eedb4f659e13aa900d66c53", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -10713,7 +9270,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", "security": "https://github.com/sebastianbergmann/php-text-template/security/policy", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/5.0.0" }, "funding": [ { @@ -10721,32 +9278,32 @@ "type": "github" } ], - "time": "2023-08-31T14:07:24+00:00" + "time": "2025-02-07T04:59:16+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "8.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", + "reference": "f258ce36aa457f3aa3339f9ed4c81fc66dc8c2cc", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -10772,7 +9329,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "security": "https://github.com/sebastianbergmann/php-timer/security/policy", + "source": "https://github.com/sebastianbergmann/php-timer/tree/8.0.0" }, "funding": [ { @@ -10780,20 +9338,20 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2025-02-07T04:59:38+00:00" }, { "name": "phpunit/phpunit", - "version": "10.5.45", + "version": "12.5.23", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8" + "reference": "c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/bd68a781d8e30348bc297449f5234b3458267ae8", - "reference": "bd68a781d8e30348bc297449f5234b3458267ae8", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969", + "reference": "c54fcf3d6bcb6e96ac2f7e40097dc37b5f139969", "shasum": "" }, "require": { @@ -10803,29 +9361,26 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.1", + "myclabs/deep-copy": "^1.13.4", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.1.16", - "phpunit/php-file-iterator": "^4.1.0", - "phpunit/php-invoker": "^4.0.0", - "phpunit/php-text-template": "^3.0.1", - "phpunit/php-timer": "^6.0.0", - "sebastian/cli-parser": "^2.0.1", - "sebastian/code-unit": "^2.0.0", - "sebastian/comparator": "^5.0.3", - "sebastian/diff": "^5.1.1", - "sebastian/environment": "^6.1.0", - "sebastian/exporter": "^5.1.2", - "sebastian/global-state": "^6.0.2", - "sebastian/object-enumerator": "^5.0.0", - "sebastian/recursion-context": "^5.0.0", - "sebastian/type": "^4.0.0", - "sebastian/version": "^4.0.1" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files" + "php": ">=8.3", + "phpunit/php-code-coverage": "^12.5.6", + "phpunit/php-file-iterator": "^6.0.1", + "phpunit/php-invoker": "^6.0.0", + "phpunit/php-text-template": "^5.0.0", + "phpunit/php-timer": "^8.0.0", + "sebastian/cli-parser": "^4.2.0", + "sebastian/comparator": "^7.1.6", + "sebastian/diff": "^7.0.0", + "sebastian/environment": "^8.1.0", + "sebastian/exporter": "^7.0.2", + "sebastian/global-state": "^8.0.2", + "sebastian/object-enumerator": "^7.0.0", + "sebastian/recursion-context": "^7.0.1", + "sebastian/type": "^6.0.3", + "sebastian/version": "^6.0.0", + "staabm/side-effects-detector": "^1.0.5" }, "bin": [ "phpunit" @@ -10833,7 +9388,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.5-dev" + "dev-main": "12.5-dev" } }, "autoload": { @@ -10865,48 +9420,40 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.45" + "source": "https://github.com/sebastianbergmann/phpunit/tree/12.5.23" }, "funding": [ { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" + "url": "https://phpunit.de/sponsoring.html", + "type": "other" } ], - "time": "2025-02-06T16:08:12+00:00" + "time": "2026-04-18T06:12:49+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.1", + "version": "4.2.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084" + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/c34583b87e7b7a8055bf6c450c2c77ce32a24084", - "reference": "c34583b87e7b7a8055bf6c450c2c77ce32a24084", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/90f41072d220e5c40df6e8635f5dafba2d9d4d04", + "reference": "90f41072d220e5c40df6e8635f5dafba2d9d4d04", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.2-dev" } }, "autoload": { @@ -10930,155 +9477,59 @@ "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", "security": "https://github.com/sebastianbergmann/cli-parser/security/policy", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/4.2.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" - } - ], - "time": "2024-03-02T07:12:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" - }, - "funding": [ + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:58:43+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "phpunit/phpunit": "^10.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "url": "https://tidelift.com/funding/github/packagist/sebastian/cli-parser", + "type": "tidelift" } ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2025-09-14T09:36:45+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.3", + "version": "7.1.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e" + "reference": "c769009dee98f494e0edc3fd4f4087501688f11e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", - "reference": "a18251eb0b7a2dcd2f7aa3d6078b18545ef0558e", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/c769009dee98f494e0edc3fd4f4087501688f11e", + "reference": "c769009dee98f494e0edc3fd4f4087501688f11e", "shasum": "" }, "require": { "ext-dom": "*", "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=8.3", + "sebastian/diff": "^7.0", + "sebastian/exporter": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.5" + "phpunit/phpunit": "^12.2" + }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.1-dev" } }, "autoload": { @@ -11118,41 +9569,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/comparator/tree/7.1.6" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/comparator", + "type": "tidelift" } ], - "time": "2024-10-18T14:56:07+00:00" + "time": "2026-04-14T08:23:15+00:00" }, { "name": "sebastian/complexity", - "version": "3.2.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "68ff824baeae169ec9f2137158ee529584553799" + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/68ff824baeae169ec9f2137158ee529584553799", - "reference": "68ff824baeae169ec9f2137158ee529584553799", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/bad4316aba5303d0221f43f8cee37eb58d384bbb", + "reference": "bad4316aba5303d0221f43f8cee37eb58d384bbb", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.2-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11176,7 +9639,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", "security": "https://github.com/sebastianbergmann/complexity/security/policy", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/5.0.0" }, "funding": [ { @@ -11184,33 +9647,33 @@ "type": "github" } ], - "time": "2023-12-21T08:37:17+00:00" + "time": "2025-02-07T04:55:25+00:00" }, { "name": "sebastian/diff", - "version": "5.1.1", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e" + "reference": "7ab1ea946c012266ca32390913653d844ecd085f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/c41e007b4b62af48218231d6c2275e4c9b975b2e", - "reference": "c41e007b4b62af48218231d6c2275e4c9b975b2e", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7ab1ea946c012266ca32390913653d844ecd085f", + "reference": "7ab1ea946c012266ca32390913653d844ecd085f", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0", - "symfony/process": "^6.4" + "phpunit/phpunit": "^12.0", + "symfony/process": "^7.2" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11243,7 +9706,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", "security": "https://github.com/sebastianbergmann/diff/security/policy", - "source": "https://github.com/sebastianbergmann/diff/tree/5.1.1" + "source": "https://github.com/sebastianbergmann/diff/tree/7.0.0" }, "funding": [ { @@ -11251,27 +9714,27 @@ "type": "github" } ], - "time": "2024-03-02T07:15:17+00:00" + "time": "2025-02-07T04:55:46+00:00" }, { "name": "sebastian/environment", - "version": "6.1.0", + "version": "8.1.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984" + "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/8074dbcd93529b357029f5cc5058fd3e43666984", - "reference": "8074dbcd93529b357029f5cc5058fd3e43666984", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b121608b28a13f721e76ffbbd386d08eff58f3f6", + "reference": "b121608b28a13f721e76ffbbd386d08eff58f3f6", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "suggest": { "ext-posix": "*" @@ -11279,7 +9742,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.1-dev" + "dev-main": "8.1-dev" } }, "autoload": { @@ -11307,42 +9770,54 @@ "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", "security": "https://github.com/sebastianbergmann/environment/security/policy", - "source": "https://github.com/sebastianbergmann/environment/tree/6.1.0" + "source": "https://github.com/sebastianbergmann/environment/tree/8.1.0" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/environment", + "type": "tidelift" } ], - "time": "2024-03-23T08:47:14+00:00" + "time": "2026-04-15T12:13:01+00:00" }, { "name": "sebastian/exporter", - "version": "5.1.2", + "version": "7.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf" + "reference": "016951ae10980765e4e7aee491eb288c64e505b7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/955288482d97c19a372d3f31006ab3f37da47adf", - "reference": "955288482d97c19a372d3f31006ab3f37da47adf", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/016951ae10980765e4e7aee491eb288c64e505b7", + "reference": "016951ae10980765e4e7aee491eb288c64e505b7", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.1-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11385,43 +9860,55 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.1.2" + "source": "https://github.com/sebastianbergmann/exporter/tree/7.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/exporter", + "type": "tidelift" } ], - "time": "2024-03-02T07:17:12+00:00" + "time": "2025-09-24T06:16:11+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.2", + "version": "8.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9" + "reference": "ef1377171613d09edd25b7816f05be8313f9115d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", - "reference": "987bafff24ecc4c9ac418cab1145b96dd6e9cbd9", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/ef1377171613d09edd25b7816f05be8313f9115d", + "reference": "ef1377171613d09edd25b7816f05be8313f9115d", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-main": "8.0-dev" } }, "autoload": { @@ -11447,41 +9934,53 @@ "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", "security": "https://github.com/sebastianbergmann/global-state/security/policy", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.2" + "source": "https://github.com/sebastianbergmann/global-state/tree/8.0.2" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/global-state", + "type": "tidelift" } ], - "time": "2024-03-02T07:19:19+00:00" + "time": "2025-08-29T11:29:25+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0" + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/856e7f6a75a84e339195d48c556f23be2ebf75d0", - "reference": "856e7f6a75a84e339195d48c556f23be2ebf75d0", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/97ffee3bcfb5805568d6af7f0f893678fc076d2f", + "reference": "97ffee3bcfb5805568d6af7f0f893678fc076d2f", "shasum": "" }, "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=8.1" + "nikic/php-parser": "^5.0", + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -11505,7 +10004,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", "security": "https://github.com/sebastianbergmann/lines-of-code/security/policy", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/4.0.0" }, "funding": [ { @@ -11513,34 +10012,34 @@ "type": "github" } ], - "time": "2023-12-21T08:38:20+00:00" + "time": "2025-02-07T04:57:28+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "7.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/1effe8e9b8e068e9ae228e542d5d11b5d16db894", + "reference": "1effe8e9b8e068e9ae228e542d5d11b5d16db894", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=8.3", + "sebastian/object-reflector": "^5.0", + "sebastian/recursion-context": "^7.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11562,7 +10061,8 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/object-enumerator/security/policy", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/7.0.0" }, "funding": [ { @@ -11570,32 +10070,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2025-02-07T04:57:48+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "4bfa827c969c98be1e527abd576533293c634f6a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/4bfa827c969c98be1e527abd576533293c634f6a", + "reference": "4bfa827c969c98be1e527abd576533293c634f6a", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -11617,7 +10117,8 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "security": "https://github.com/sebastianbergmann/object-reflector/security/policy", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/5.0.0" }, "funding": [ { @@ -11625,32 +10126,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2025-02-07T04:58:17+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "7.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", + "reference": "0b01998a7d5b1f122911a66bebcb8d46f0c82d8c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-main": "7.0-dev" } }, "autoload": { @@ -11680,40 +10181,53 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "security": "https://github.com/sebastianbergmann/recursion-context/security/policy", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/7.0.1" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/recursion-context", + "type": "tidelift" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2025-08-13T04:44:59+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "6.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/e549163b9760b8f71f191651d22acf32d56d6d4d", + "reference": "e549163b9760b8f71f191651d22acf32d56d6d4d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^12.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11736,37 +10250,50 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "security": "https://github.com/sebastianbergmann/type/security/policy", + "source": "https://github.com/sebastianbergmann/type/tree/6.0.3" }, "funding": [ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, + { + "url": "https://tidelift.com/funding/github/packagist/sebastian/type", + "type": "tidelift" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2025-08-09T06:57:12+00:00" }, { "name": "sebastian/version", - "version": "4.0.1", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17" + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c51fa83a5d8f43f1402e3f32a005e6262244ef17", - "reference": "c51fa83a5d8f43f1402e3f32a005e6262244ef17", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/3e6ccf7657d4f0a59200564b08cead899313b53c", + "reference": "3e6ccf7657d4f0a59200564b08cead899313b53c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -11789,7 +10316,8 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.1" + "security": "https://github.com/sebastianbergmann/version/security/policy", + "source": "https://github.com/sebastianbergmann/version/tree/6.0.0" }, "funding": [ { @@ -11797,36 +10325,36 @@ "type": "github" } ], - "time": "2023-02-07T11:34:05+00:00" + "time": "2025-02-07T05:00:38+00:00" }, { "name": "slevomat/coding-standard", - "version": "8.16.0", + "version": "8.28.1", "source": { "type": "git", "url": "https://github.com/slevomat/coding-standard.git", - "reference": "7748a4282df19daf966fda1d8c60a8aec803c83a" + "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/7748a4282df19daf966fda1d8c60a8aec803c83a", - "reference": "7748a4282df19daf966fda1d8c60a8aec803c83a", + "url": "https://api.github.com/repos/slevomat/coding-standard/zipball/66151cfbd25b50e8becd9f809fb704f01fd4d6f2", + "reference": "66151cfbd25b50e8becd9f809fb704f01fd4d6f2", "shasum": "" }, "require": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6.2 || ^0.7 || ^1.0", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || ^1.2.0", "php": "^7.4 || ^8.0", - "phpstan/phpdoc-parser": "^2.1.0", - "squizlabs/php_codesniffer": "^3.11.3" + "phpstan/phpdoc-parser": "^2.3.2", + "squizlabs/php_codesniffer": "^4.0.1" }, "require-dev": { - "phing/phing": "3.0.1", + "phing/phing": "3.0.1|3.1.2", "php-parallel-lint/php-parallel-lint": "1.4.0", - "phpstan/phpstan": "2.1.6", - "phpstan/phpstan-deprecation-rules": "2.0.1", - "phpstan/phpstan-phpunit": "2.0.4", - "phpstan/phpstan-strict-rules": "2.0.3", - "phpunit/phpunit": "9.6.8|10.5.45|11.4.4|11.5.9|12.0.4" + "phpstan/phpstan": "2.1.42", + "phpstan/phpstan-deprecation-rules": "2.0.4", + "phpstan/phpstan-phpunit": "2.0.16", + "phpstan/phpstan-strict-rules": "2.0.10", + "phpunit/phpunit": "9.6.34|10.5.63|11.4.4|11.5.50|12.5.14" }, "type": "phpcodesniffer-standard", "extra": { @@ -11850,7 +10378,7 @@ ], "support": { "issues": "https://github.com/slevomat/coding-standard/issues", - "source": "https://github.com/slevomat/coding-standard/tree/8.16.0" + "source": "https://github.com/slevomat/coding-standard/tree/8.28.1" }, "funding": [ { @@ -11862,421 +10390,36 @@ "type": "tidelift" } ], - "time": "2025-02-23T18:12:49+00:00" - }, - { - "name": "spatie/backtrace", - "version": "1.7.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", - "reference": "0f2477c520e3729de58e061b8192f161c99f770b", - "shasum": "" - }, - "require": { - "php": "^7.3 || ^8.0" - }, - "require-dev": { - "ext-json": "*", - "laravel/serializable-closure": "^1.3 || ^2.0", - "phpunit/phpunit": "^9.3 || ^11.4.3", - "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", - "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "source": "https://github.com/spatie/backtrace/tree/1.7.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2024-12-02T13:28:15+00:00" - }, - { - "name": "spatie/error-solutions", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/spatie/error-solutions.git", - "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", - "reference": "e495d7178ca524f2dd0fe6a1d99a1e608e1c9936", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "illuminate/broadcasting": "^10.0|^11.0|^12.0", - "illuminate/cache": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "livewire/livewire": "^2.11|^3.5.20", - "openai-php/client": "^0.10.1", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.20|^3.0", - "phpstan/phpstan": "^2.1", - "psr/simple-cache": "^3.0", - "psr/simple-cache-implementation": "^3.0", - "spatie/ray": "^1.28", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "legacy/ignition", - "Spatie\\ErrorSolutions\\": "src", - "Spatie\\LaravelIgnition\\": "legacy/laravel-ignition" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ruben Van Assche", - "email": "ruben@spatie.be", - "role": "Developer" - } - ], - "description": "This is my package error-solutions", - "homepage": "https://github.com/spatie/error-solutions", - "keywords": [ - "error-solutions", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.3" - }, - "funding": [ - { - "url": "https://github.com/Spatie", - "type": "github" - } - ], - "time": "2025-02-14T12:29:50+00:00" - }, - { - "name": "spatie/flare-client-php", - "version": "1.10.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/flare-client-php.git", - "reference": "bf1716eb98bd689451b071548ae9e70738dce62f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/bf1716eb98bd689451b071548ae9e70738dce62f", - "reference": "bf1716eb98bd689451b071548ae9e70738dce62f", - "shasum": "" - }, - "require": { - "illuminate/pipeline": "^8.0|^9.0|^10.0|^11.0|^12.0", - "php": "^8.0", - "spatie/backtrace": "^1.6.1", - "symfony/http-foundation": "^5.2|^6.0|^7.0", - "symfony/mime": "^5.2|^6.0|^7.0", - "symfony/process": "^5.2|^6.0|^7.0", - "symfony/var-dumper": "^5.2|^6.0|^7.0" - }, - "require-dev": { - "dms/phpunit-arraysubset-asserts": "^0.5.0", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "spatie/pest-plugin-snapshots": "^1.0|^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.3.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\FlareClient\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Send PHP errors to Flare", - "homepage": "https://github.com/spatie/flare-client-php", - "keywords": [ - "exception", - "flare", - "reporting", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.10.1" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-14T13:42:06+00:00" - }, - { - "name": "spatie/ignition", - "version": "1.15.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/ignition.git", - "reference": "31f314153020aee5af3537e507fef892ffbf8c85" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ignition/zipball/31f314153020aee5af3537e507fef892ffbf8c85", - "reference": "31f314153020aee5af3537e507fef892ffbf8c85", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^8.0", - "spatie/error-solutions": "^1.0", - "spatie/flare-client-php": "^1.7", - "symfony/console": "^5.4|^6.0|^7.0", - "symfony/var-dumper": "^5.4|^6.0|^7.0" - }, - "require-dev": { - "illuminate/cache": "^9.52|^10.0|^11.0|^12.0", - "mockery/mockery": "^1.4", - "pestphp/pest": "^1.20|^2.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-phpunit": "^1.0", - "psr/simple-cache-implementation": "*", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|^6.0|^7.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "simple-cache-implementation": "To cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.5.x-dev" - } - }, - "autoload": { - "psr-4": { - "Spatie\\Ignition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for PHP applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/ignition/issues", - "source": "https://github.com/spatie/ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-21T14:31:39+00:00" - }, - { - "name": "spatie/laravel-ignition", - "version": "2.9.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/1baee07216d6748ebd3a65ba97381b051838707a", - "reference": "1baee07216d6748ebd3a65ba97381b051838707a", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "ext-mbstring": "*", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.1", - "spatie/ignition": "^1.15", - "symfony/console": "^6.2.3|^7.0", - "symfony/var-dumper": "^6.2.3|^7.0" - }, - "require-dev": { - "livewire/livewire": "^2.11|^3.3.5", - "mockery/mockery": "^1.5.1", - "openai-php/client": "^0.8.1|^0.10", - "orchestra/testbench": "8.22.3|^9.0|^10.0", - "pestphp/pest": "^2.34|^3.7", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan-deprecation-rules": "^1.1.1|^2.0", - "phpstan/phpstan-phpunit": "^1.3.16|^2.0", - "vlucas/phpdotenv": "^5.5" - }, - "suggest": { - "openai-php/client": "Require get solutions from OpenAI", - "psr/simple-cache-implementation": "Needed to cache solutions from OpenAI" - }, - "type": "library", - "extra": { - "laravel": { - "aliases": { - "Flare": "Spatie\\LaravelIgnition\\Facades\\Flare" - }, - "providers": [ - "Spatie\\LaravelIgnition\\IgnitionServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\LaravelIgnition\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Spatie", - "email": "info@spatie.be", - "role": "Developer" - } - ], - "description": "A beautiful error page for Laravel applications.", - "homepage": "https://flareapp.io/ignition", - "keywords": [ - "error", - "flare", - "laravel", - "page" - ], - "support": { - "docs": "https://flareapp.io/docs/ignition-for-laravel/introduction", - "forum": "https://twitter.com/flareappio", - "issues": "https://github.com/spatie/laravel-ignition/issues", - "source": "https://github.com/spatie/laravel-ignition" - }, - "funding": [ - { - "url": "https://github.com/spatie", - "type": "github" - } - ], - "time": "2025-02-20T13:13:55+00:00" + "time": "2026-03-22T17:22:38+00:00" }, { "name": "squizlabs/php_codesniffer", - "version": "3.11.3", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10" + "reference": "0525c73950de35ded110cffafb9892946d7771b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", - "reference": "ba05f990e79cbe69b9f35c8c1ac8dca7eecc3a10", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/0525c73950de35ded110cffafb9892946d7771b5", + "reference": "0525c73950de35ded110cffafb9892946d7771b5", "shasum": "" }, "require": { "ext-simplexml": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": ">=5.4.0" + "php": ">=7.2.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" + "phpunit/phpunit": "^8.4.0 || ^9.3.4 || ^10.5.32 || 11.3.3 - 11.5.28 || ^11.5.31" }, "bin": [ "bin/phpcbf", "bin/phpcs" ], "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, "notification-url": "https://packagist.org/downloads/", "license": [ "BSD-3-Clause" @@ -12295,7 +10438,7 @@ "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "description": "PHP_CodeSniffer tokenizes PHP files and detects violations of a defined set of coding standards.", "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ "phpcs", @@ -12322,240 +10465,83 @@ "type": "open_collective" }, { - "url": "https://thanks.dev/phpcsstandards", + "url": "https://thanks.dev/u/gh/phpcsstandards", "type": "thanks_dev" } ], - "time": "2025-01-23T17:04:15+00:00" + "time": "2025-11-10T16:43:36+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.31.0", + "name": "staabm/side-effects-detector", + "version": "1.0.5", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c" + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", - "reference": "4a4cfc2d253c21a5ad0e53071df248ed48c6ce5c", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", "shasum": "" }, "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "url": "https://github.com/symfony/polyfill", - "name": "symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/yaml", - "version": "v7.2.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/ac238f173df0c9c1120f862d0f599e17535a87ec", - "reference": "ac238f173df0c9c1120f862d0f599e17535a87ec", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" }, "require-dev": { - "symfony/console": "^6.4|^7.0" + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" }, - "bin": [ - "Resources/bin/yaml-lint" - ], "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "lib/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.2.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2025-01-07T12:55:42+00:00" - }, - { - "name": "thedoctor0/laravel-factory-generator", - "version": "1.4.4", - "source": { - "type": "git", - "url": "https://github.com/TheDoctor0/laravel-factory-generator.git", - "reference": "adfff0e5444d3113e9c7b376fa32d3e589cc0ec9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/TheDoctor0/laravel-factory-generator/zipball/adfff0e5444d3113e9c7b376fa32d3e589cc0ec9", - "reference": "adfff0e5444d3113e9c7b376fa32d3e589cc0ec9", - "shasum": "" - }, - "require": { - "illuminate/console": "^10.0|^11.0|^12.0", - "illuminate/filesystem": "^10.0|^11.0|^12.0", - "illuminate/support": "^10.0|^11.0|^12.0", - "php": "^8.1" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "TheDoctor0\\LaravelFactoryGenerator\\FactoryGeneratorServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "TheDoctor0\\LaravelFactoryGenerator\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Automatically generate Laravel factories for your models.", + "description": "A static analysis tool to detect side effects in PHP code", "keywords": [ - "factories", - "factory", - "generator", - "laravel", - "tests" + "static analysis" ], "support": { - "issues": "https://github.com/TheDoctor0/laravel-factory-generator/issues", - "source": "https://github.com/TheDoctor0/laravel-factory-generator/tree/1.4.4" + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" }, "funding": [ { - "url": "https://www.paypal.me/thedoctor0", - "type": "custom" - }, - { - "url": "https://github.com/thedoctor0", + "url": "https://github.com/staabm", "type": "github" } ], - "time": "2025-02-22T18:52:08+00:00" + "time": "2024-10-20T05:08:20+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/7989e43bf381af0eac72e4f0ca5bcbfa81658be4", + "reference": "7989e43bf381af0eac72e4f0ca5bcbfa81658be4", "shasum": "" }, "require": { "ext-dom": "*", "ext-tokenizer": "*", "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "type": "library", "autoload": { @@ -12577,7 +10563,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" + "source": "https://github.com/theseer/tokenizer/tree/2.0.1" }, "funding": [ { @@ -12585,17 +10571,17 @@ "type": "github" } ], - "time": "2024-03-03T12:36:25+00:00" + "time": "2025-12-08T11:19:18+00:00" } ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": true, "prefer-lowest": false, "platform": { - "php": "^8.3" + "php": "^8.5" }, - "platform-dev": [], - "plugin-api-version": "2.3.0" + "platform-dev": {}, + "plugin-api-version": "2.9.0" } diff --git a/config/app.php b/config/app.php index ad0b01c..cda0231 100644 --- a/config/app.php +++ b/config/app.php @@ -1,215 +1,126 @@ 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. - | - */ + /** + *-------------------------------------------------------------------------- + * 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. - | - */ + /** + *-------------------------------------------------------------------------- + * 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), + 'debug' => (bool) env('APP_DEBUG', false), - /* - |-------------------------------------------------------------------------- - | 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. - | - */ + /** + *-------------------------------------------------------------------------- + * 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 + * the application so that it's available within Artisan commands. + * + */ 'url' => env('APP_URL', 'http://localhost'), - 'asset_url' => env('ASSET_URL'), + /** + *-------------------------------------------------------------------------- + * Application Timezone + *-------------------------------------------------------------------------- + * + * Here you may specify the default timezone for your application, which + * will be used by the PHP date and date-time functions. The timezone + * is set to "UTC" by default as it is suitable for most use cases. + * + */ - /* - |-------------------------------------------------------------------------- - | 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', 'Europe/Paris'), - 'timezone' => 'Europe/Paris', + /** + *-------------------------------------------------------------------------- + * Application Locale Configuration + *-------------------------------------------------------------------------- + * + * The application locale determines the default locale that will be used + * by Laravel's translation / localization methods. This option can be + * set to any locale for which you plan to have translation strings. + * + */ - /* - |-------------------------------------------------------------------------- - | 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' => env('APP_LOCALE', 'fr'), - 'locale' => 'fr', + 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'fr'), - /* - |-------------------------------------------------------------------------- - | 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. - | - */ + 'faker_locale' => env('APP_FAKER_LOCALE', 'fr_FR'), - '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' => 'fr_FR', - - /* - |-------------------------------------------------------------------------- - | 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'), + /** + *-------------------------------------------------------------------------- + * Encryption Key + *-------------------------------------------------------------------------- + * + * This key is utilized by Laravel's encryption services and should be set + * to a random, 32 character string to ensure that all encrypted values + * are secure. You should do this prior to deploying the application. + * + */ 'cipher' => 'AES-256-CBC', - /* - |-------------------------------------------------------------------------- - | Maintenance Mode Driver - |-------------------------------------------------------------------------- - | - | These configuration options determine the driver used to determine and - | manage Laravel's "maintenance mode" status. The "cache" driver will - | allow maintenance mode to be controlled across multiple machines. - | - | Supported drivers: "file", "cache" - | - */ + 'key' => env('APP_KEY'), + + 'previous_keys' => [ + ...array_filter( + explode(',', env('APP_PREVIOUS_KEYS', '')) + ), + ], + + /** + *-------------------------------------------------------------------------- + * Maintenance Mode Driver + *-------------------------------------------------------------------------- + * + * These configuration options determine the driver used to determine and + * manage Laravel's "maintenance mode" status. The "cache" driver will + * allow maintenance mode to be controlled across multiple machines. + * + * Supported drivers: "file", "cache" + * + */ 'maintenance' => [ - 'driver' => 'file' + 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), + 'store' => env('APP_MAINTENANCE_STORE', 'database'), ], - /* - |-------------------------------------------------------------------------- - | 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... - */ - - /* - * Application Service Providers... - */ - - App\Providers\AppServiceProvider::class, - App\Providers\AuthServiceProvider::class, - App\Providers\EventServiceProvider::class, - App\Providers\RouteServiceProvider::class, - App\Providers\TranslationServiceProvider::class, - App\Providers\ViewServiceProvider::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' => Facade::defaultAliases()->toArray() - ]; diff --git a/config/auth.php b/config/auth.php index c21299e..5cb5e72 100644 --- a/config/auth.php +++ b/config/auth.php @@ -2,111 +2,114 @@ return [ - /* - |-------------------------------------------------------------------------- - | Authentication Defaults - |-------------------------------------------------------------------------- - | - | This option controls the default authentication "guard" and password - | reset options for your application. You may change these defaults - | as required, but they're a perfect start for most applications. - | - */ + /** + *-------------------------------------------------------------------------- + * Authentication Defaults + *-------------------------------------------------------------------------- + * + * This option defines the default authentication "guard" and password + * reset "broker" for your application. You may change these values + * as required, but they're a perfect start for most applications. + * + */ 'defaults' => [ - 'guard' => 'backend', - 'passwords' => 'users', + 'guard' => env('AUTH_GUARD', 'web'), + 'passwords' => env('AUTH_PASSWORD_BROKER', '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" - | - */ + /** + *-------------------------------------------------------------------------- + * Authentication Guards + *-------------------------------------------------------------------------- + * + * Next, you may define every authentication guard for your application. + * Of course, a great default configuration has been defined for you + * which utilizes session storage plus the Eloquent user provider. + * + * All authentication guards have a user provider, which defines how the + * users are actually retrieved out of your database or other storage + * system used by the application. Typically, Eloquent is utilized. + * + * Supported: "session" + * + */ 'guards' => [ 'backend' => [ - 'driver' => 'session', + 'driver' => 'session', 'provider' => 'users', ], 'frontend' => [ - 'driver' => 'session', - // ! Remplacer "users" par le model authenticable voulu - 'provider' => 'users', + 'driver' => 'session', + 'provider' => 'customers', ], ], - /* - |-------------------------------------------------------------------------- - | 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" - | - */ + /** + *-------------------------------------------------------------------------- + * User Providers + *-------------------------------------------------------------------------- + * + * All authentication guards have a user provider, which defines how the + * users are actually retrieved out of your database or other storage + * system used by the application. Typically, Eloquent is utilized. + * + * If you have multiple user tables or models you may configure multiple + * providers to represent the model / table. These providers may then + * be assigned to any extra authentication guards you have defined. + * + * Supported: "database", "eloquent" + * + */ 'providers' => [ 'users' => [ 'driver' => 'eloquent', - 'model' => App\Models\User::class, - ] + 'model' => env('AUTH_MODEL', Uwil\LaravelBackend\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. - | - */ + /** + *-------------------------------------------------------------------------- + * Resetting Passwords + *-------------------------------------------------------------------------- + * + * These configuration options specify the behavior of Laravel's password + * reset functionality, including the table utilized for token storage + * and the user provider that is invoked to actually retrieve users. + * + * The expiry time is the number of minutes that each reset token will be + * considered valid. This security feature keeps tokens short-lived so + * they have less time to be guessed. You may change this as needed. + * + * The throttle setting is the number of seconds a user must wait before + * generating more password reset tokens. This prevents the user from + * quickly generating a very large amount of password reset tokens. + * + */ 'passwords' => [ 'users' => [ 'provider' => 'users', - 'table' => 'password_resets', + 'table' => env('AUTH_PASSWORD_RESET_TOKEN_TABLE', 'password_reset_tokens'), 'expire' => 60, 'throttle' => 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 Confirmation Timeout + *-------------------------------------------------------------------------- + * + * Here you may define the amount of seconds before a password confirmation + * window expires and users are asked to re-enter their password via the + * confirmation screen. By default, the timeout lasts for three hours. + * + */ - 'password_timeout' => 10800, + 'password_timeout' => env('AUTH_PASSWORD_TIMEOUT', 10800), ]; diff --git a/config/breadcrumbs.php b/config/breadcrumbs.php index f3eab6a..550b8ad 100644 --- a/config/breadcrumbs.php +++ b/config/breadcrumbs.php @@ -2,53 +2,53 @@ return [ - /* - |-------------------------------------------------------------------------- - | View Name - |-------------------------------------------------------------------------- - | - | Choose a view to display when Breadcrumbs::render() is called. - | Built in templates are: - | - | - 'breadcrumbs::bootstrap5' - Bootstrap 5 - | - 'breadcrumbs::bootstrap4' - Bootstrap 4 - | - 'breadcrumbs::bulma' - Bulma - | - 'breadcrumbs::foundation6' - Foundation 6 - | - 'breadcrumbs::json-ld' - JSON-LD Structured Data - | - 'breadcrumbs::materialize' - Materialize - | - 'breadcrumbs::tailwind' - Tailwind CSS - | - 'breadcrumbs::uikit' - UIkit - | - | Or a custom view, e.g. '_partials/breadcrumbs'. - | - */ + /** + *-------------------------------------------------------------------------- + * View Name + *-------------------------------------------------------------------------- + * + * Choose a view to display when Breadcrumbs::render() is called. + * Built in templates are: + * + * - 'breadcrumbs::bootstrap5' - Bootstrap 5 + * - 'breadcrumbs::bootstrap4' - Bootstrap 4 + * - 'breadcrumbs::bulma' - Bulma + * - 'breadcrumbs::foundation6' - Foundation 6 + * - 'breadcrumbs::json-ld' - JSON-LD Structured Data + * - 'breadcrumbs::materialize' - Materialize + * - 'breadcrumbs::tailwind' - Tailwind CSS + * - 'breadcrumbs::uikit' - UIkit + * + * Or a custom view, e.g. '_partials/breadcrumbs'. + * + */ - 'view' => 'breadcrumbs/breadcrumb-layout', + 'view' => null, - /* - |-------------------------------------------------------------------------- - | Breadcrumbs File(s) - |-------------------------------------------------------------------------- - | - | The file(s) where breadcrumbs are defined. e.g. - | - | - base_path('routes/breadcrumbs.php') - | - glob(base_path('breadcrumbs/*.php')) - | - */ + /** + *-------------------------------------------------------------------------- + * 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-bo.php'), - ], + 'files' => array_filter([ + ...glob(base_path('routes/breadcrumbs/*.php')) ?: [], + ]), - /* - |-------------------------------------------------------------------------- - | Exceptions - |-------------------------------------------------------------------------- - | - | Determine when to throw an exception. - | - */ + /** + *-------------------------------------------------------------------------- + * 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, @@ -59,14 +59,14 @@ return [ // * 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. - | - */ + /** + *-------------------------------------------------------------------------- + * Classes + *-------------------------------------------------------------------------- + * + * Subclass the default classes for more advanced customisations. + * + */ // * Manager 'manager-class' => Diglactic\Breadcrumbs\Manager::class, diff --git a/config/broadcasting.php b/config/broadcasting.php deleted file mode 100644 index 3e45d82..0000000 --- a/config/broadcasting.php +++ /dev/null @@ -1,70 +0,0 @@ - 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' => [ - 'host' => env('PUSHER_HOST') ?: 'api-' . env('PUSHER_APP_CLUSTER', 'mt1') . '.pusher.com', - 'port' => env('PUSHER_PORT', 443), - 'scheme' => env('PUSHER_SCHEME', 'https'), - 'encrypted' => true, - 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', - ], - 'client_options' => [ - // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html . - ], - ], - - '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 index 0441464..28f84a4 100644 --- a/config/cache.php +++ b/config/cache.php @@ -5,38 +5,35 @@ use Illuminate\Support\Str; return [ /* - |-------------------------------------------------------------------------- - | Default Cache Store - |-------------------------------------------------------------------------- - | - | This option controls the default cache connection that gets used while - | using this caching library. This connection is used when another is - | not explicitly specified when executing a given caching function. - | - | Supported: "apc", "array", "database", "file", - | "memcached", "redis", "dynamodb" - | - */ + *-------------------------------------------------------------------------- + * Default Cache Store + *-------------------------------------------------------------------------- + * + * This option controls the default cache store that will be used by the + * framework. This connection is utilized if another isn't explicitly + * specified when running a cache operation inside the application. + * + */ - 'default' => env('CACHE_DRIVER', 'file'), + 'default' => env('CACHE_STORE', 'database'), /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * 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: "array", "database", "file", "memcached", + * "redis", "dynamodb", "octane", + * "failover", "null" + * + */ 'stores' => [ - 'apc' => [ - 'driver' => 'apc', - ], - 'array' => [ 'driver' => 'array', 'serialize' => false, @@ -44,14 +41,16 @@ return [ 'database' => [ 'driver' => 'database', - 'table' => 'cache', - 'connection' => null, - 'lock_connection' => null, + 'connection' => env('DB_CACHE_CONNECTION'), + 'table' => env('DB_CACHE_TABLE', 'cache'), + 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), + 'lock_table' => env('DB_CACHE_LOCK_TABLE'), ], 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), + 'lock_path' => storage_path('framework/cache/data'), ], 'memcached' => [ @@ -61,9 +60,7 @@ return [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], - 'options' => [ - // Memcached::OPT_CONNECT_TIMEOUT => 2000, . - ], + 'options' => [], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), @@ -75,8 +72,8 @@ return [ 'redis' => [ 'driver' => 'redis', - 'connection' => 'cache', - 'lock_connection' => 'default', + 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), + 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), ], 'dynamodb' => [ @@ -92,19 +89,27 @@ return [ 'driver' => 'octane', ], + 'failover' => [ + 'driver' => 'failover', + 'stores' => [ + 'database', + 'array', + ], + ], + ], /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * Cache Key Prefix + *-------------------------------------------------------------------------- + * + * When utilizing the APC, database, memcached, Redis, and DynamoDB cache + * stores, there might be other applications using the same cache. For + * that reason, you may prefix every cache key to avoid collisions. + * + */ - 'prefix' => env('CACHE_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_cache'), + 'prefix' => env('CACHE_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-cache-'), ]; diff --git a/config/cors.php b/config/cors.php deleted file mode 100644 index caccf68..0000000 --- a/config/cors.php +++ /dev/null @@ -1,34 +0,0 @@ - ['api/*'], - - 'allowed_methods' => ['*'], - - 'allowed_origins' => ['*'], - - 'allowed_origins_patterns' => [], - - 'allowed_headers' => ['*'], - - 'exposed_headers' => [], - - 'max_age' => 0, - - 'supports_credentials' => false, - -]; diff --git a/config/database.php b/config/database.php index 9dfe93d..8342fc8 100644 --- a/config/database.php +++ b/config/database.php @@ -5,88 +5,114 @@ use Illuminate\Support\Str; return [ /* - |-------------------------------------------------------------------------- - | Default Database Connection Name - |-------------------------------------------------------------------------- - | - | Here you may specify which of the database connections below you wish - | to use as your default connection for all database work. Of course - | you may use many connections at once using the Database library. - | - */ + *-------------------------------------------------------------------------- + * Default Database Connection Name + *-------------------------------------------------------------------------- + * + * Here you may specify which of the database connections below you wish + * to use as your default connection for database operations. This is + * the connection which will be utilized unless another connection + * is explicitly specified when you execute a query / statement. + * + */ - 'default' => env('DB_CONNECTION', 'mysql'), + 'default' => env('DB_CONNECTION', 'sqlite'), /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * Database Connections + *-------------------------------------------------------------------------- + * + * Below are all of the database connections defined for your application. + * An example configuration is provided for each database system which + * is supported by Laravel. You're free to add / remove connections. + * + */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), + 'busy_timeout' => null, + 'journal_mode' => null, + 'synchronous' => null, + 'transaction_mode' => 'DEFERRED', ], 'mysql' => [ 'driver' => 'mysql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), - 'charset' => 'utf8mb4', - 'collation' => 'utf8mb4_unicode_ci', + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ - PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), + (PHP_VERSION_ID >= 80500 + ? \Pdo\Mysql::ATTR_SSL_CA + : \PDO::MYSQL_ATTR_SSL_CA + ) => env('MYSQL_ATTR_SSL_CA'), + ]) : [], + ], + + 'mariadb' => [ + 'driver' => 'mariadb', + 'url' => env('DB_URL'), + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => env('DB_CHARSET', 'utf8mb4'), + 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), + 'prefix' => '', + 'prefix_indexes' => true, + 'strict' => true, + 'engine' => null, + 'options' => extension_loaded('pdo_mysql') ? array_filter([ + (PHP_VERSION_ID >= 80500 + ? \Pdo\Mysql::ATTR_SSL_CA + : \PDO::MYSQL_ATTR_SSL_CA + ) => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, 'search_path' => 'public', - 'sslmode' => 'prefer', + 'sslmode' => env('DB_SSLMODE', 'prefer'), ], 'sqlsrv' => [ 'driver' => 'sqlsrv', - 'url' => env('DATABASE_URL'), + 'url' => env('DB_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), - 'database' => env('DB_DATABASE', 'forge'), - 'username' => env('DB_USERNAME', 'forge'), + 'database' => env('DB_DATABASE', 'laravel'), + 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), - 'charset' => 'utf8', + 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, ], @@ -94,28 +120,31 @@ return [ ], /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * 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 on the database. + * + */ - 'migrations' => 'migrations', + 'migrations' => [ + 'table' => 'migrations', + 'update_date_on_publish' => true, + ], /* - |-------------------------------------------------------------------------- - | 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 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 Memcached. You may define your connection settings here. + * + */ 'redis' => [ @@ -123,7 +152,8 @@ return [ 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), - 'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_') . '_database_'), + 'prefix' => env('REDIS_PREFIX', Str::slug((string) env('APP_NAME', 'laravel')) . '-database-'), + 'persistent' => env('REDIS_PERSISTENT', false), ], 'default' => [ @@ -133,6 +163,10 @@ return [ 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), ], 'cache' => [ @@ -142,6 +176,10 @@ return [ 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), + 'max_retries' => env('REDIS_MAX_RETRIES', 3), + 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), + 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), + 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), ], ], diff --git a/config/filesystems.php b/config/filesystems.php index 679fdfc..c04e9ba 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -2,38 +2,40 @@ return [ - /* - |-------------------------------------------------------------------------- - | Default Filesystem Disk - |-------------------------------------------------------------------------- - | - | Here you may specify the default filesystem disk that should be used - | by the framework. The "local" disk, as well as a variety of cloud - | based disks are available to your application. Just store away! - | - */ + /** + *-------------------------------------------------------------------------- + * Default Filesystem Disk + *-------------------------------------------------------------------------- + * + * Here you may specify the default filesystem disk that should be used + * by the framework. The "local" disk, as well as a variety of cloud + * based disks are available to your application for file storage. + * + */ - 'default' => env('FILESYSTEM_DRIVER', 'local'), + 'default' => env('FILESYSTEM_DISK', 'local'), - /* - |-------------------------------------------------------------------------- - | 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" - | - */ + /** + *-------------------------------------------------------------------------- + * Filesystem Disks + *-------------------------------------------------------------------------- + * + * Below you may configure as many filesystem disks as necessary, and you + * may even configure multiple disks for the same driver. Examples for + * most supported storage drivers are configured here for reference. + * + * Supported drivers: "local", "ftp", "sftp", "s3" + * + */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app'), + 'serve' => true, 'throw' => false, + 'report' => false, ], 'public' => [ @@ -42,13 +44,7 @@ return [ 'url' => env('APP_URL') . '/storage', 'visibility' => 'public', 'throw' => false, - ], - - 'private' => [ - 'driver' => 'local', - 'root' => storage_path('app/private'), - 'visibility' => 'private', - 'throw' => false, + 'report' => false, ], 's3' => [ @@ -61,25 +57,21 @@ return [ 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, - ], - - 'samlidp' => [ - 'driver' => 'local', - 'root' => storage_path() . '/samlidp', + 'report' => false, ], ], - /* - |-------------------------------------------------------------------------- - | 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. - | - */ + /** + *-------------------------------------------------------------------------- + * 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/gitlab.php b/config/gitlab.php deleted file mode 100644 index 6f8f388..0000000 --- a/config/gitlab.php +++ /dev/null @@ -1,74 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -return [ - - /** - *-------------------------------------------------------------------------- - * Default Connection Name - *-------------------------------------------------------------------------- - * - * Here you may specify which of the connections below you wish to use as - * your default connection for all work. Of course, you may use many - * connections at once using the manager class. - * - */ - - 'default' => 'main', - - /** - *-------------------------------------------------------------------------- - * GitLab Connections - *-------------------------------------------------------------------------- - * - * Here are each of the connections setup for your application. Example - * configuration has been included, but you may add as many connections as - * you would like. Note that the 4 supported authentication methods are: - * "none", "oauth", "job_token", and "token". - * - */ - - 'connections' => [ - 'main' => [ - 'token' => env('GITLAB_TOKEN'), - 'method' => 'token', - 'url' => env('GITLAB_URL'), - ], - ], - - /** - *-------------------------------------------------------------------------- - * HTTP Cache - *-------------------------------------------------------------------------- - * - * Here are each of the cache configurations setup for your application. - * Only the "illuminate" driver is provided out of the box. Example - * configuration has been included. - * - */ - - 'cache' => [ - - 'main' => [ - 'driver' => 'illuminate', - 'connector' => null, - ], - - 'bar' => [ - 'driver' => 'illuminate', - 'connector' => 'redis', - ], - - ], - -]; diff --git a/config/hashing.php b/config/hashing.php deleted file mode 100644 index db3d9dd..0000000 --- a/config/hashing.php +++ /dev/null @@ -1,52 +0,0 @@ - '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' => 65536, - 'threads' => 1, - 'time' => 4, - ], - -]; diff --git a/config/inertia.php b/config/inertia.php new file mode 100644 index 0000000..a33e426 --- /dev/null +++ b/config/inertia.php @@ -0,0 +1,64 @@ + [ + + 'enabled' => false, + + 'url' => env('APP_URL', 'https://localhost'), + + ], + + /** + *-------------------------------------------------------------------------- + * Testing + *-------------------------------------------------------------------------- + * + * The values described here are used to locate Inertia components on the + * filesystem. For instance, when using `assertInertia`, the assertion + * attempts to locate the component as a file relative to any of the + * paths AND with any of the extensions specified here. + * + */ + + 'testing' => [ + + 'ensure_pages_exist' => true, + + 'page_paths' => [ + resource_path('ts/front/Pages'), + ], + + 'page_extensions' => [ + 'js', + 'jsx', + 'svelte', + 'ts', + 'tsx', + 'vue', + ], + ], + + 'history' => [ + 'encrypt' => false, + ], + +]; diff --git a/config/laravellocalization.php b/config/laravellocalization.php new file mode 100644 index 0000000..40e2e5b --- /dev/null +++ b/config/laravellocalization.php @@ -0,0 +1,354 @@ + [ + //'ace' => ['name' => 'Achinese', 'script' => 'Latn', 'native' => 'Aceh', 'regional' => ''], + //'af' => ['name' => 'Afrikaans', 'script' => 'Latn', 'native' => 'Afrikaans', 'regional' => 'af_ZA'], + //'agq' => ['name' => 'Aghem', 'script' => 'Latn', 'native' => 'Aghem', 'regional' => ''], + //'ak' => ['name' => 'Akan', 'script' => 'Latn', 'native' => 'Akan', 'regional' => 'ak_GH'], + //'an' => ['name' => 'Aragonese', 'script' => 'Latn', 'native' => 'aragonés', 'regional' => 'an_ES'], + //'cch' => ['name' => 'Atsam', 'script' => 'Latn', 'native' => 'Atsam', 'regional' => ''], + //'gn' => ['name' => 'Guaraní', 'script' => 'Latn', 'native' => 'Avañe’ẽ', 'regional' => ''], + //'ae' => ['name' => 'Avestan', 'script' => 'Latn', 'native' => 'avesta', 'regional' => ''], + //'ay' => ['name' => 'Aymara', 'script' => 'Latn', 'native' => 'aymar aru', 'regional' => 'ay_PE'], + //'az' => ['name' => 'Azerbaijani (Latin)', 'script' => 'Latn', 'native' => 'azərbaycanca', 'regional' => 'az_AZ'], + //'id' => ['name' => 'Indonesian', 'script' => 'Latn', 'native' => 'Bahasa Indonesia', 'regional' => 'id_ID'], + //'ms' => ['name' => 'Malay', 'script' => 'Latn', 'native' => 'Bahasa Melayu', 'regional' => 'ms_MY'], + //'bm' => ['name' => 'Bambara', 'script' => 'Latn', 'native' => 'bamanakan', 'regional' => ''], + //'jv' => ['name' => 'Javanese (Latin)', 'script' => 'Latn', 'native' => 'Basa Jawa', 'regional' => ''], + //'su' => ['name' => 'Sundanese', 'script' => 'Latn', 'native' => 'Basa Sunda', 'regional' => ''], + //'bh' => ['name' => 'Bihari', 'script' => 'Latn', 'native' => 'Bihari', 'regional' => ''], + //'bi' => ['name' => 'Bislama', 'script' => 'Latn', 'native' => 'Bislama', 'regional' => ''], + //'nb' => ['name' => 'Norwegian Bokmål', 'script' => 'Latn', 'native' => 'Bokmål', 'regional' => 'nb_NO'], + //'bs' => ['name' => 'Bosnian', 'script' => 'Latn', 'native' => 'bosanski', 'regional' => 'bs_BA'], + //'br' => ['name' => 'Breton', 'script' => 'Latn', 'native' => 'brezhoneg', 'regional' => 'br_FR'], + //'ca' => ['name' => 'Catalan', 'script' => 'Latn', 'native' => 'català', 'regional' => 'ca_ES'], + //'ch' => ['name' => 'Chamorro', 'script' => 'Latn', 'native' => 'Chamoru', 'regional' => ''], + //'ny' => ['name' => 'Chewa', 'script' => 'Latn', 'native' => 'chiCheŵa', 'regional' => ''], + //'kde' => ['name' => 'Makonde', 'script' => 'Latn', 'native' => 'Chimakonde', 'regional' => ''], + //'sn' => ['name' => 'Shona', 'script' => 'Latn', 'native' => 'chiShona', 'regional' => ''], + //'co' => ['name' => 'Corsican', 'script' => 'Latn', 'native' => 'corsu', 'regional' => ''], + //'cy' => ['name' => 'Welsh', 'script' => 'Latn', 'native' => 'Cymraeg', 'regional' => 'cy_GB'], + //'da' => ['name' => 'Danish', 'script' => 'Latn', 'native' => 'dansk', 'regional' => 'da_DK'], + //'se' => ['name' => 'Northern Sami', 'script' => 'Latn', 'native' => 'davvisámegiella', 'regional' => 'se_NO'], + 'de' => ['name' => 'German', 'script' => 'Latn', 'native' => 'Deutsch', 'regional' => 'de_DE'], + //'luo' => ['name' => 'Luo', 'script' => 'Latn', 'native' => 'Dholuo', 'regional' => ''], + //'nv' => ['name' => 'Navajo', 'script' => 'Latn', 'native' => 'Diné bizaad', 'regional' => ''], + //'dua' => ['name' => 'Duala', 'script' => 'Latn', 'native' => 'duálá', 'regional' => ''], + //'et' => ['name' => 'Estonian', 'script' => 'Latn', 'native' => 'eesti', 'regional' => 'et_EE'], + //'na' => ['name' => 'Nauru', 'script' => 'Latn', 'native' => 'Ekakairũ Naoero', 'regional' => ''], + //'guz' => ['name' => 'Ekegusii', 'script' => 'Latn', 'native' => 'Ekegusii', 'regional' => ''], + 'en' => ['name' => 'English', 'script' => 'Latn', 'native' => 'English', 'regional' => 'en_GB'], + //'en-AU' => ['name' => 'Australian English', 'script' => 'Latn', 'native' => 'Australian English', 'regional' => 'en_AU'], + //'en-GB' => ['name' => 'British English', 'script' => 'Latn', 'native' => 'British English', 'regional' => 'en_GB'], + //'en-CA' => ['name' => 'Canadian English', 'script' => 'Latn', 'native' => 'Canadian English', 'regional' => 'en_CA'], + //'en-US' => ['name' => 'U.S. English', 'script' => 'Latn', 'native' => 'U.S. English', 'regional' => 'en_US'], + 'es' => ['name' => 'Spanish', 'script' => 'Latn', 'native' => 'español', 'regional' => 'es_ES'], + //'eo' => ['name' => 'Esperanto', 'script' => 'Latn', 'native' => 'esperanto', 'regional' => ''], + //'eu' => ['name' => 'Basque', 'script' => 'Latn', 'native' => 'euskara', 'regional' => 'eu_ES'], + //'ewo' => ['name' => 'Ewondo', 'script' => 'Latn', 'native' => 'ewondo', 'regional' => ''], + //'ee' => ['name' => 'Ewe', 'script' => 'Latn', 'native' => 'eʋegbe', 'regional' => ''], + //'fil' => ['name' => 'Filipino', 'script' => 'Latn', 'native' => 'Filipino', 'regional' => 'fil_PH'], + 'fr' => ['name' => 'French', 'script' => 'Latn', 'native' => 'français', 'regional' => 'fr_FR'], + //'fr-CA' => ['name' => 'Canadian French', 'script' => 'Latn', 'native' => 'français canadien', 'regional' => 'fr_CA'], + //'fy' => ['name' => 'Western Frisian', 'script' => 'Latn', 'native' => 'frysk', 'regional' => 'fy_DE'], + //'fur' => ['name' => 'Friulian', 'script' => 'Latn', 'native' => 'furlan', 'regional' => 'fur_IT'], + //'fo' => ['name' => 'Faroese', 'script' => 'Latn', 'native' => 'føroyskt', 'regional' => 'fo_FO'], + //'gaa' => ['name' => 'Ga', 'script' => 'Latn', 'native' => 'Ga', 'regional' => ''], + //'ga' => ['name' => 'Irish', 'script' => 'Latn', 'native' => 'Gaeilge', 'regional' => 'ga_IE'], + //'gv' => ['name' => 'Manx', 'script' => 'Latn', 'native' => 'Gaelg', 'regional' => 'gv_GB'], + //'sm' => ['name' => 'Samoan', 'script' => 'Latn', 'native' => 'Gagana fa’a Sāmoa', 'regional' => ''], + //'gl' => ['name' => 'Galician', 'script' => 'Latn', 'native' => 'galego', 'regional' => 'gl_ES'], + //'ki' => ['name' => 'Kikuyu', 'script' => 'Latn', 'native' => 'Gikuyu', 'regional' => ''], + //'gd' => ['name' => 'Scottish Gaelic', 'script' => 'Latn', 'native' => 'Gàidhlig', 'regional' => 'gd_GB'], + //'ha' => ['name' => 'Hausa', 'script' => 'Latn', 'native' => 'Hausa', 'regional' => 'ha_NG'], + //'bez' => ['name' => 'Bena', 'script' => 'Latn', 'native' => 'Hibena', 'regional' => ''], + //'ho' => ['name' => 'Hiri Motu', 'script' => 'Latn', 'native' => 'Hiri Motu', 'regional' => ''], + //'hr' => ['name' => 'Croatian', 'script' => 'Latn', 'native' => 'hrvatski', 'regional' => 'hr_HR'], + //'bem' => ['name' => 'Bemba', 'script' => 'Latn', 'native' => 'Ichibemba', 'regional' => 'bem_ZM'], + //'io' => ['name' => 'Ido', 'script' => 'Latn', 'native' => 'Ido', 'regional' => ''], + //'ig' => ['name' => 'Igbo', 'script' => 'Latn', 'native' => 'Igbo', 'regional' => 'ig_NG'], + //'rn' => ['name' => 'Rundi', 'script' => 'Latn', 'native' => 'Ikirundi', 'regional' => ''], + //'ia' => ['name' => 'Interlingua', 'script' => 'Latn', 'native' => 'interlingua', 'regional' => 'ia_FR'], + //'iu-Latn' => ['name' => 'Inuktitut (Latin)', 'script' => 'Latn', 'native' => 'Inuktitut', 'regional' => 'iu_CA'], + //'sbp' => ['name' => 'Sileibi', 'script' => 'Latn', 'native' => 'Ishisangu', 'regional' => ''], + //'nd' => ['name' => 'North Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => ''], + //'nr' => ['name' => 'South Ndebele', 'script' => 'Latn', 'native' => 'isiNdebele', 'regional' => 'nr_ZA'], + //'xh' => ['name' => 'Xhosa', 'script' => 'Latn', 'native' => 'isiXhosa', 'regional' => 'xh_ZA'], + //'zu' => ['name' => 'Zulu', 'script' => 'Latn', 'native' => 'isiZulu', 'regional' => 'zu_ZA'], + //'it' => ['name' => 'Italian', 'script' => 'Latn', 'native' => 'italiano', 'regional' => 'it_IT'], + //'ik' => ['name' => 'Inupiaq', 'script' => 'Latn', 'native' => 'Iñupiaq', 'regional' => 'ik_CA'], + //'dyo' => ['name' => 'Jola-Fonyi', 'script' => 'Latn', 'native' => 'joola', 'regional' => ''], + //'kea' => ['name' => 'Kabuverdianu', 'script' => 'Latn', 'native' => 'kabuverdianu', 'regional' => ''], + //'kaj' => ['name' => 'Jju', 'script' => 'Latn', 'native' => 'Kaje', 'regional' => ''], + //'mh' => ['name' => 'Marshallese', 'script' => 'Latn', 'native' => 'Kajin M̧ajeļ', 'regional' => 'mh_MH'], + //'kl' => ['name' => 'Kalaallisut', 'script' => 'Latn', 'native' => 'kalaallisut', 'regional' => 'kl_GL'], + //'kln' => ['name' => 'Kalenjin', 'script' => 'Latn', 'native' => 'Kalenjin', 'regional' => ''], + //'kr' => ['name' => 'Kanuri', 'script' => 'Latn', 'native' => 'Kanuri', 'regional' => ''], + //'kcg' => ['name' => 'Tyap', 'script' => 'Latn', 'native' => 'Katab', 'regional' => ''], + //'kw' => ['name' => 'Cornish', 'script' => 'Latn', 'native' => 'kernewek', 'regional' => 'kw_GB'], + //'naq' => ['name' => 'Nama', 'script' => 'Latn', 'native' => 'Khoekhoegowab', 'regional' => ''], + //'rof' => ['name' => 'Rombo', 'script' => 'Latn', 'native' => 'Kihorombo', 'regional' => ''], + //'kam' => ['name' => 'Kamba', 'script' => 'Latn', 'native' => 'Kikamba', 'regional' => ''], + //'kg' => ['name' => 'Kongo', 'script' => 'Latn', 'native' => 'Kikongo', 'regional' => ''], + //'jmc' => ['name' => 'Machame', 'script' => 'Latn', 'native' => 'Kimachame', 'regional' => ''], + //'rw' => ['name' => 'Kinyarwanda', 'script' => 'Latn', 'native' => 'Kinyarwanda', 'regional' => 'rw_RW'], + //'asa' => ['name' => 'Kipare', 'script' => 'Latn', 'native' => 'Kipare', 'regional' => ''], + //'rwk' => ['name' => 'Rwa', 'script' => 'Latn', 'native' => 'Kiruwa', 'regional' => ''], + //'saq' => ['name' => 'Samburu', 'script' => 'Latn', 'native' => 'Kisampur', 'regional' => ''], + //'ksb' => ['name' => 'Shambala', 'script' => 'Latn', 'native' => 'Kishambaa', 'regional' => ''], + //'swc' => ['name' => 'Congo Swahili', 'script' => 'Latn', 'native' => 'Kiswahili ya Kongo', 'regional' => ''], + //'sw' => ['name' => 'Swahili', 'script' => 'Latn', 'native' => 'Kiswahili', 'regional' => 'sw_KE'], + //'dav' => ['name' => 'Dawida', 'script' => 'Latn', 'native' => 'Kitaita', 'regional' => ''], + //'teo' => ['name' => 'Teso', 'script' => 'Latn', 'native' => 'Kiteso', 'regional' => ''], + //'khq' => ['name' => 'Koyra Chiini', 'script' => 'Latn', 'native' => 'Koyra ciini', 'regional' => ''], + //'ses' => ['name' => 'Songhay', 'script' => 'Latn', 'native' => 'Koyraboro senni', 'regional' => ''], + //'mfe' => ['name' => 'Morisyen', 'script' => 'Latn', 'native' => 'kreol morisien', 'regional' => ''], + //'ht' => ['name' => 'Haitian', 'script' => 'Latn', 'native' => 'Kreyòl ayisyen', 'regional' => 'ht_HT'], + //'kj' => ['name' => 'Kuanyama', 'script' => 'Latn', 'native' => 'Kwanyama', 'regional' => ''], + //'ksh' => ['name' => 'Kölsch', 'script' => 'Latn', 'native' => 'Kölsch', 'regional' => ''], + //'ebu' => ['name' => 'Kiembu', 'script' => 'Latn', 'native' => 'Kĩembu', 'regional' => ''], + //'mer' => ['name' => 'Kimîîru', 'script' => 'Latn', 'native' => 'Kĩmĩrũ', 'regional' => ''], + //'lag' => ['name' => 'Langi', 'script' => 'Latn', 'native' => 'Kɨlaangi', 'regional' => ''], + //'lah' => ['name' => 'Lahnda', 'script' => 'Latn', 'native' => 'Lahnda', 'regional' => ''], + //'la' => ['name' => 'Latin', 'script' => 'Latn', 'native' => 'latine', 'regional' => ''], + //'lv' => ['name' => 'Latvian', 'script' => 'Latn', 'native' => 'latviešu', 'regional' => 'lv_LV'], + //'to' => ['name' => 'Tongan', 'script' => 'Latn', 'native' => 'lea fakatonga', 'regional' => ''], + //'lt' => ['name' => 'Lithuanian', 'script' => 'Latn', 'native' => 'lietuvių', 'regional' => 'lt_LT'], + //'li' => ['name' => 'Limburgish', 'script' => 'Latn', 'native' => 'Limburgs', 'regional' => 'li_BE'], + //'ln' => ['name' => 'Lingala', 'script' => 'Latn', 'native' => 'lingála', 'regional' => ''], + //'lg' => ['name' => 'Ganda', 'script' => 'Latn', 'native' => 'Luganda', 'regional' => 'lg_UG'], + //'luy' => ['name' => 'Oluluyia', 'script' => 'Latn', 'native' => 'Luluhia', 'regional' => ''], + //'lb' => ['name' => 'Luxembourgish', 'script' => 'Latn', 'native' => 'Lëtzebuergesch', 'regional' => 'lb_LU'], + //'hu' => ['name' => 'Hungarian', 'script' => 'Latn', 'native' => 'magyar', 'regional' => 'hu_HU'], + //'mgh' => ['name' => 'Makhuwa-Meetto', 'script' => 'Latn', 'native' => 'Makua', 'regional' => ''], + //'mg' => ['name' => 'Malagasy', 'script' => 'Latn', 'native' => 'Malagasy', 'regional' => 'mg_MG'], + //'mt' => ['name' => 'Maltese', 'script' => 'Latn', 'native' => 'Malti', 'regional' => 'mt_MT'], + //'mtr' => ['name' => 'Mewari', 'script' => 'Latn', 'native' => 'Mewari', 'regional' => ''], + //'mua' => ['name' => 'Mundang', 'script' => 'Latn', 'native' => 'Mundang', 'regional' => ''], + //'mi' => ['name' => 'Māori', 'script' => 'Latn', 'native' => 'Māori', 'regional' => 'mi_NZ'], + 'nl' => ['name' => 'Dutch', 'script' => 'Latn', 'native' => 'Nederlands', 'regional' => 'nl_NL'], + //'nmg' => ['name' => 'Kwasio', 'script' => 'Latn', 'native' => 'ngumba', 'regional' => ''], + //'yav' => ['name' => 'Yangben', 'script' => 'Latn', 'native' => 'nuasue', 'regional' => ''], + //'nn' => ['name' => 'Norwegian Nynorsk', 'script' => 'Latn', 'native' => 'nynorsk', 'regional' => 'nn_NO'], + //'oc' => ['name' => 'Occitan', 'script' => 'Latn', 'native' => 'occitan', 'regional' => 'oc_FR'], + //'ang' => ['name' => 'Old English', 'script' => 'Runr', 'native' => 'Old English', 'regional' => ''], + //'xog' => ['name' => 'Soga', 'script' => 'Latn', 'native' => 'Olusoga', 'regional' => ''], + //'om' => ['name' => 'Oromo', 'script' => 'Latn', 'native' => 'Oromoo', 'regional' => 'om_ET'], + //'ng' => ['name' => 'Ndonga', 'script' => 'Latn', 'native' => 'OshiNdonga', 'regional' => ''], + //'hz' => ['name' => 'Herero', 'script' => 'Latn', 'native' => 'Otjiherero', 'regional' => ''], + //'uz-Latn' => ['name' => 'Uzbek (Latin)', 'script' => 'Latn', 'native' => 'oʼzbekcha', 'regional' => 'uz_UZ'], + //'nds' => ['name' => 'Low German', 'script' => 'Latn', 'native' => 'Plattdüütsch', 'regional' => 'nds_DE'], + 'pl' => ['name' => 'Polish', 'script' => 'Latn', 'native' => 'polski', 'regional' => 'pl_PL'], + //'pt' => ['name' => 'Portuguese', 'script' => 'Latn', 'native' => 'português', 'regional' => 'pt_PT'], + //'pt-BR' => ['name' => 'Brazilian Portuguese', 'script' => 'Latn', 'native' => 'português do Brasil', 'regional' => 'pt_BR'], + //'ff' => ['name' => 'Fulah', 'script' => 'Latn', 'native' => 'Pulaar', 'regional' => 'ff_SN'], + //'pi' => ['name' => 'Pahari-Potwari', 'script' => 'Latn', 'native' => 'Pāli', 'regional' => ''], + //'aa' => ['name' => 'Afar', 'script' => 'Latn', 'native' => 'Qafar', 'regional' => 'aa_ER'], + //'ty' => ['name' => 'Tahitian', 'script' => 'Latn', 'native' => 'Reo Māohi', 'regional' => ''], + //'ksf' => ['name' => 'Bafia', 'script' => 'Latn', 'native' => 'rikpa', 'regional' => ''], + //'ro' => ['name' => 'Romanian', 'script' => 'Latn', 'native' => 'română', 'regional' => 'ro_RO'], + //'cgg' => ['name' => 'Chiga', 'script' => 'Latn', 'native' => 'Rukiga', 'regional' => ''], + //'rm' => ['name' => 'Romansh', 'script' => 'Latn', 'native' => 'rumantsch', 'regional' => ''], + //'qu' => ['name' => 'Quechua', 'script' => 'Latn', 'native' => 'Runa Simi', 'regional' => ''], + //'nyn' => ['name' => 'Nyankole', 'script' => 'Latn', 'native' => 'Runyankore', 'regional' => ''], + //'ssy' => ['name' => 'Saho', 'script' => 'Latn', 'native' => 'Saho', 'regional' => ''], + //'sc' => ['name' => 'Sardinian', 'script' => 'Latn', 'native' => 'sardu', 'regional' => 'sc_IT'], + //'de-CH' => ['name' => 'Swiss High German', 'script' => 'Latn', 'native' => 'Schweizer Hochdeutsch', 'regional' => 'de_CH'], + //'gsw' => ['name' => 'Swiss German', 'script' => 'Latn', 'native' => 'Schwiizertüütsch', 'regional' => ''], + //'trv' => ['name' => 'Taroko', 'script' => 'Latn', 'native' => 'Seediq', 'regional' => ''], + //'seh' => ['name' => 'Sena', 'script' => 'Latn', 'native' => 'sena', 'regional' => ''], + //'nso' => ['name' => 'Northern Sotho', 'script' => 'Latn', 'native' => 'Sesotho sa Leboa', 'regional' => 'nso_ZA'], + //'st' => ['name' => 'Southern Sotho', 'script' => 'Latn', 'native' => 'Sesotho', 'regional' => 'st_ZA'], + //'tn' => ['name' => 'Tswana', 'script' => 'Latn', 'native' => 'Setswana', 'regional' => 'tn_ZA'], + //'sq' => ['name' => 'Albanian', 'script' => 'Latn', 'native' => 'shqip', 'regional' => 'sq_AL'], + //'sid' => ['name' => 'Sidamo', 'script' => 'Latn', 'native' => 'Sidaamu Afo', 'regional' => 'sid_ET'], + //'ss' => ['name' => 'Swati', 'script' => 'Latn', 'native' => 'Siswati', 'regional' => 'ss_ZA'], + //'sk' => ['name' => 'Slovak', 'script' => 'Latn', 'native' => 'slovenčina', 'regional' => 'sk_SK'], + //'sl' => ['name' => 'Slovene', 'script' => 'Latn', 'native' => 'slovenščina', 'regional' => 'sl_SI'], + //'so' => ['name' => 'Somali', 'script' => 'Latn', 'native' => 'Soomaali', 'regional' => 'so_SO'], + //'sr-Latn' => ['name' => 'Serbian (Latin)', 'script' => 'Latn', 'native' => 'Srpski', 'regional' => 'sr_RS'], + //'sh' => ['name' => 'Serbo-Croatian', 'script' => 'Latn', 'native' => 'srpskohrvatski', 'regional' => ''], + //'fi' => ['name' => 'Finnish', 'script' => 'Latn', 'native' => 'suomi', 'regional' => 'fi_FI'], + //'sv' => ['name' => 'Swedish', 'script' => 'Latn', 'native' => 'svenska', 'regional' => 'sv_SE'], + //'sg' => ['name' => 'Sango', 'script' => 'Latn', 'native' => 'Sängö', 'regional' => ''], + //'tl' => ['name' => 'Tagalog', 'script' => 'Latn', 'native' => 'Tagalog', 'regional' => 'tl_PH'], + //'tzm-Latn' => ['name' => 'Central Atlas Tamazight (Latin)', 'script' => 'Latn', 'native' => 'Tamazight', 'regional' => ''], + //'kab' => ['name' => 'Kabyle', 'script' => 'Latn', 'native' => 'Taqbaylit', 'regional' => 'kab_DZ'], + //'twq' => ['name' => 'Tasawaq', 'script' => 'Latn', 'native' => 'Tasawaq senni', 'regional' => ''], + //'shi' => ['name' => 'Tachelhit (Latin)', 'script' => 'Latn', 'native' => 'Tashelhit', 'regional' => ''], + //'nus' => ['name' => 'Nuer', 'script' => 'Latn', 'native' => 'Thok Nath', 'regional' => ''], + //'vi' => ['name' => 'Vietnamese', 'script' => 'Latn', 'native' => 'Tiếng Việt', 'regional' => 'vi_VN'], + //'tg-Latn' => ['name' => 'Tajik (Latin)', 'script' => 'Latn', 'native' => 'tojikī', 'regional' => 'tg_TJ'], + //'lu' => ['name' => 'Luba-Katanga', 'script' => 'Latn', 'native' => 'Tshiluba', 'regional' => 've_ZA'], + //'ve' => ['name' => 'Venda', 'script' => 'Latn', 'native' => 'Tshivenḓa', 'regional' => ''], + //'tw' => ['name' => 'Twi', 'script' => 'Latn', 'native' => 'Twi', 'regional' => ''], + //'tr' => ['name' => 'Turkish', 'script' => 'Latn', 'native' => 'Türkçe', 'regional' => 'tr_TR'], + //'ale' => ['name' => 'Aleut', 'script' => 'Latn', 'native' => 'Unangax tunuu', 'regional' => ''], + //'ca-valencia' => ['name' => 'Valencian', 'script' => 'Latn', 'native' => 'valencià', 'regional' => ''], + //'vai-Latn' => ['name' => 'Vai (Latin)', 'script' => 'Latn', 'native' => 'Viyamíĩ', 'regional' => ''], + //'vo' => ['name' => 'Volapük', 'script' => 'Latn', 'native' => 'Volapük', 'regional' => ''], + //'fj' => ['name' => 'Fijian', 'script' => 'Latn', 'native' => 'vosa Vakaviti', 'regional' => ''], + //'wa' => ['name' => 'Walloon', 'script' => 'Latn', 'native' => 'Walon', 'regional' => 'wa_BE'], + //'wae' => ['name' => 'Walser', 'script' => 'Latn', 'native' => 'Walser', 'regional' => 'wae_CH'], + //'wen' => ['name' => 'Sorbian', 'script' => 'Latn', 'native' => 'Wendic', 'regional' => ''], + //'wo' => ['name' => 'Wolof', 'script' => 'Latn', 'native' => 'Wolof', 'regional' => 'wo_SN'], + //'ts' => ['name' => 'Tsonga', 'script' => 'Latn', 'native' => 'Xitsonga', 'regional' => 'ts_ZA'], + //'dje' => ['name' => 'Zarma', 'script' => 'Latn', 'native' => 'Zarmaciine', 'regional' => ''], + //'yo' => ['name' => 'Yoruba', 'script' => 'Latn', 'native' => 'Èdè Yorùbá', 'regional' => 'yo_NG'], + // 'de-AT' => ['name' => 'Austrian German', 'script' => 'Latn', 'native' => 'Österreichisches Deutsch', 'regional' => 'de_AT'], + //'is' => ['name' => 'Icelandic', 'script' => 'Latn', 'native' => 'íslenska', 'regional' => 'is_IS'], + //'cs' => ['name' => 'Czech', 'script' => 'Latn', 'native' => 'čeština', 'regional' => 'cs_CZ'], + //'bas' => ['name' => 'Basa', 'script' => 'Latn', 'native' => 'Ɓàsàa', 'regional' => ''], + //'mas' => ['name' => 'Masai', 'script' => 'Latn', 'native' => 'ɔl-Maa', 'regional' => ''], + //'haw' => ['name' => 'Hawaiian', 'script' => 'Latn', 'native' => 'ʻŌlelo Hawaiʻi', 'regional' => ''], + //'el' => ['name' => 'Greek', 'script' => 'Grek', 'native' => 'Ελληνικά', 'regional' => 'el_GR'], + //'uz' => ['name' => 'Uzbek (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Ўзбек', 'regional' => 'uz_UZ'], + //'az-Cyrl' => ['name' => 'Azerbaijani (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Азәрбајҹан', 'regional' => 'uz_UZ'], + //'ab' => ['name' => 'Abkhazian', 'script' => 'Cyrl', 'native' => 'Аҧсуа', 'regional' => ''], + //'os' => ['name' => 'Ossetic', 'script' => 'Cyrl', 'native' => 'Ирон', 'regional' => 'os_RU'], + //'ky' => ['name' => 'Kyrgyz', 'script' => 'Cyrl', 'native' => 'Кыргыз', 'regional' => 'ky_KG'], + //'sr' => ['name' => 'Serbian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'Српски', 'regional' => 'sr_RS'], + //'av' => ['name' => 'Avaric', 'script' => 'Cyrl', 'native' => 'авар мацӀ', 'regional' => ''], + //'ady' => ['name' => 'Adyghe', 'script' => 'Cyrl', 'native' => 'адыгэбзэ', 'regional' => ''], + //'ba' => ['name' => 'Bashkir', 'script' => 'Cyrl', 'native' => 'башҡорт теле', 'regional' => ''], + //'be' => ['name' => 'Belarusian', 'script' => 'Cyrl', 'native' => 'беларуская', 'regional' => 'be_BY'], + //'bg' => ['name' => 'Bulgarian', 'script' => 'Cyrl', 'native' => 'български', 'regional' => 'bg_BG'], + //'kv' => ['name' => 'Komi', 'script' => 'Cyrl', 'native' => 'коми кыв', 'regional' => ''], + //'mk' => ['name' => 'Macedonian', 'script' => 'Cyrl', 'native' => 'македонски', 'regional' => 'mk_MK'], + //'mn' => ['name' => 'Mongolian (Cyrillic)', 'script' => 'Cyrl', 'native' => 'монгол', 'regional' => 'mn_MN'], + //'ce' => ['name' => 'Chechen', 'script' => 'Cyrl', 'native' => 'нохчийн мотт', 'regional' => 'ce_RU'], + //'ru' => ['name' => 'Russian', 'script' => 'Cyrl', 'native' => 'русский', 'regional' => 'ru_RU'], + //'sah' => ['name' => 'Yakut', 'script' => 'Cyrl', 'native' => 'саха тыла', 'regional' => ''], + //'tt' => ['name' => 'Tatar', 'script' => 'Cyrl', 'native' => 'татар теле', 'regional' => 'tt_RU'], + //'tg' => ['name' => 'Tajik (Cyrillic)', 'script' => 'Cyrl', 'native' => 'тоҷикӣ', 'regional' => 'tg_TJ'], + //'tk' => ['name' => 'Turkmen', 'script' => 'Cyrl', 'native' => 'түркменче', 'regional' => 'tk_TM'], + //'uk' => ['name' => 'Ukrainian', 'script' => 'Cyrl', 'native' => 'українська', 'regional' => 'uk_UA'], + //'cv' => ['name' => 'Chuvash', 'script' => 'Cyrl', 'native' => 'чӑваш чӗлхи', 'regional' => 'cv_RU'], + //'cu' => ['name' => 'Church Slavic', 'script' => 'Cyrl', 'native' => 'ѩзыкъ словѣньскъ', 'regional' => ''], + //'kk' => ['name' => 'Kazakh', 'script' => 'Cyrl', 'native' => 'қазақ тілі', 'regional' => 'kk_KZ'], + //'hy' => ['name' => 'Armenian', 'script' => 'Armn', 'native' => 'Հայերեն', 'regional' => 'hy_AM'], + //'yi' => ['name' => 'Yiddish', 'script' => 'Hebr', 'native' => 'ייִדיש', 'regional' => 'yi_US'], + //'he' => ['name' => 'Hebrew', 'script' => 'Hebr', 'native' => 'עברית', 'regional' => 'he_IL'], + //'ug' => ['name' => 'Uyghur', 'script' => 'Arab', 'native' => 'ئۇيغۇرچە', 'regional' => 'ug_CN'], + //'ur' => ['name' => 'Urdu', 'script' => 'Arab', 'native' => 'اردو', 'regional' => 'ur_PK'], + //'ar' => ['name' => 'Arabic', 'script' => 'Arab', 'native' => 'العربية', 'regional' => 'ar_AE'], + //'uz-Arab' => ['name' => 'Uzbek (Arabic)', 'script' => 'Arab', 'native' => 'اۉزبېک', 'regional' => ''], + //'tg-Arab' => ['name' => 'Tajik (Arabic)', 'script' => 'Arab', 'native' => 'تاجیکی', 'regional' => 'tg_TJ'], + //'sd' => ['name' => 'Sindhi', 'script' => 'Arab', 'native' => 'سنڌي', 'regional' => 'sd_IN'], + //'fa' => ['name' => 'Persian', 'script' => 'Arab', 'native' => 'فارسی', 'regional' => 'fa_IR'], + //'pa-Arab' => ['name' => 'Punjabi (Arabic)', 'script' => 'Arab', 'native' => 'پنجاب', 'regional' => 'pa_IN'], + //'ps' => ['name' => 'Pashto', 'script' => 'Arab', 'native' => 'پښتو', 'regional' => 'ps_AF'], + //'ks' => ['name' => 'Kashmiri (Arabic)', 'script' => 'Arab', 'native' => 'کأشُر', 'regional' => 'ks_IN'], + //'ku' => ['name' => 'Kurdish', 'script' => 'Arab', 'native' => 'کوردی', 'regional' => 'ku_TR'], + //'dv' => ['name' => 'Divehi', 'script' => 'Thaa', 'native' => 'ދިވެހިބަސް', 'regional' => 'dv_MV'], + //'ks-Deva' => ['name' => 'Kashmiri (Devaganari)', 'script' => 'Deva', 'native' => 'कॉशुर', 'regional' => 'ks_IN'], + //'kok' => ['name' => 'Konkani', 'script' => 'Deva', 'native' => 'कोंकणी', 'regional' => 'kok_IN'], + //'doi' => ['name' => 'Dogri', 'script' => 'Deva', 'native' => 'डोगरी', 'regional' => 'doi_IN'], + //'ne' => ['name' => 'Nepali', 'script' => 'Deva', 'native' => 'नेपाली', 'regional' => ''], + //'pra' => ['name' => 'Prakrit', 'script' => 'Deva', 'native' => 'प्राकृत', 'regional' => ''], + //'brx' => ['name' => 'Bodo', 'script' => 'Deva', 'native' => 'बड़ो', 'regional' => 'brx_IN'], + //'bra' => ['name' => 'Braj', 'script' => 'Deva', 'native' => 'ब्रज भाषा', 'regional' => ''], + //'mr' => ['name' => 'Marathi', 'script' => 'Deva', 'native' => 'मराठी', 'regional' => 'mr_IN'], + //'mai' => ['name' => 'Maithili', 'script' => 'Tirh', 'native' => 'मैथिली', 'regional' => 'mai_IN'], + //'raj' => ['name' => 'Rajasthani', 'script' => 'Deva', 'native' => 'राजस्थानी', 'regional' => ''], + //'sa' => ['name' => 'Sanskrit', 'script' => 'Deva', 'native' => 'संस्कृतम्', 'regional' => 'sa_IN'], + //'hi' => ['name' => 'Hindi', 'script' => 'Deva', 'native' => 'हिन्दी', 'regional' => 'hi_IN'], + //'as' => ['name' => 'Assamese', 'script' => 'Beng', 'native' => 'অসমীয়া', 'regional' => 'as_IN'], + //'bn' => ['name' => 'Bengali', 'script' => 'Beng', 'native' => 'বাংলা', 'regional' => 'bn_BD'], + //'mni' => ['name' => 'Manipuri', 'script' => 'Beng', 'native' => 'মৈতৈ', 'regional' => 'mni_IN'], + //'pa' => ['name' => 'Punjabi (Gurmukhi)', 'script' => 'Guru', 'native' => 'ਪੰਜਾਬੀ', 'regional' => 'pa_IN'], + //'gu' => ['name' => 'Gujarati', 'script' => 'Gujr', 'native' => 'ગુજરાતી', 'regional' => 'gu_IN'], + //'or' => ['name' => 'Oriya', 'script' => 'Orya', 'native' => 'ଓଡ଼ିଆ', 'regional' => 'or_IN'], + //'ta' => ['name' => 'Tamil', 'script' => 'Taml', 'native' => 'தமிழ்', 'regional' => 'ta_IN'], + //'te' => ['name' => 'Telugu', 'script' => 'Telu', 'native' => 'తెలుగు', 'regional' => 'te_IN'], + //'kn' => ['name' => 'Kannada', 'script' => 'Knda', 'native' => 'ಕನ್ನಡ', 'regional' => 'kn_IN'], + //'ml' => ['name' => 'Malayalam', 'script' => 'Mlym', 'native' => 'മലയാളം', 'regional' => 'ml_IN'], + //'si' => ['name' => 'Sinhala', 'script' => 'Sinh', 'native' => 'සිංහල', 'regional' => 'si_LK'], + //'th' => ['name' => 'Thai', 'script' => 'Thai', 'native' => 'ไทย', 'regional' => 'th_TH'], + //'lo' => ['name' => 'Lao', 'script' => 'Laoo', 'native' => 'ລາວ', 'regional' => 'lo_LA'], + //'bo' => ['name' => 'Tibetan', 'script' => 'Tibt', 'native' => 'པོད་སྐད་', 'regional' => 'bo_IN'], + //'dz' => ['name' => 'Dzongkha', 'script' => 'Tibt', 'native' => 'རྫོང་ཁ', 'regional' => 'dz_BT'], + //'my' => ['name' => 'Burmese', 'script' => 'Mymr', 'native' => 'မြန်မာဘာသာ', 'regional' => 'my_MM'], + //'ka' => ['name' => 'Georgian', 'script' => 'Geor', 'native' => 'ქართული', 'regional' => 'ka_GE'], + //'byn' => ['name' => 'Blin', 'script' => 'Ethi', 'native' => 'ብሊን', 'regional' => 'byn_ER'], + //'tig' => ['name' => 'Tigre', 'script' => 'Ethi', 'native' => 'ትግረ', 'regional' => 'tig_ER'], + //'ti' => ['name' => 'Tigrinya', 'script' => 'Ethi', 'native' => 'ትግርኛ', 'regional' => 'ti_ET'], + //'am' => ['name' => 'Amharic', 'script' => 'Ethi', 'native' => 'አማርኛ', 'regional' => 'am_ET'], + //'wal' => ['name' => 'Wolaytta', 'script' => 'Ethi', 'native' => 'ወላይታቱ', 'regional' => 'wal_ET'], + //'chr' => ['name' => 'Cherokee', 'script' => 'Cher', 'native' => 'ᏣᎳᎩ', 'regional' => ''], + //'iu' => ['name' => 'Inuktitut (Canadian Aboriginal Syllabics)', 'script' => 'Cans', 'native' => 'ᐃᓄᒃᑎᑐᑦ', 'regional' => 'iu_CA'], + //'oj' => ['name' => 'Ojibwa', 'script' => 'Cans', 'native' => 'ᐊᓂᔑᓈᐯᒧᐎᓐ', 'regional' => ''], + //'cr' => ['name' => 'Cree', 'script' => 'Cans', 'native' => 'ᓀᐦᐃᔭᐍᐏᐣ', 'regional' => ''], + //'km' => ['name' => 'Khmer', 'script' => 'Khmr', 'native' => 'ភាសាខ្មែរ', 'regional' => 'km_KH'], + //'mn-Mong' => ['name' => 'Mongolian (Mongolian)', 'script' => 'Mong', 'native' => 'ᠮᠣᠨᠭᠭᠣᠯ ᠬᠡᠯᠡ', 'regional' => 'mn_MN'], + //'shi-Tfng' => ['name' => 'Tachelhit (Tifinagh)', 'script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''], + //'tzm' => ['name' => 'Central Atlas Tamazight (Tifinagh)','script' => 'Tfng', 'native' => 'ⵜⴰⵎⴰⵣⵉⵖⵜ', 'regional' => ''], + //'yue' => ['name' => 'Yue', 'script' => 'Hant', 'native' => '廣州話', 'regional' => 'yue_HK'], + //'ja' => ['name' => 'Japanese', 'script' => 'Jpan', 'native' => '日本語', 'regional' => 'ja_JP'], + //'zh' => ['name' => 'Chinese (Simplified)', 'script' => 'Hans', 'native' => '简体中文', 'regional' => 'zh_CN'], + //'zh-Hant' => ['name' => 'Chinese (Traditional)', 'script' => 'Hant', 'native' => '繁體中文', 'regional' => 'zh_CN'], + //'ii' => ['name' => 'Sichuan Yi', 'script' => 'Yiii', 'native' => 'ꆈꌠꉙ', 'regional' => ''], + //'vai' => ['name' => 'Vai (Vai)', 'script' => 'Vaii', 'native' => 'ꕙꔤ', 'regional' => ''], + //'jv-Java' => ['name' => 'Javanese (Javanese)', 'script' => 'Java', 'native' => 'ꦧꦱꦗꦮ', 'regional' => ''], + //'ko' => ['name' => 'Korean', 'script' => 'Hang', 'native' => '한국어', 'regional' => 'ko_KR'], + ], + // @phpcs:enable + + // Requires middleware `LaravelSessionRedirect.php`. + // + // Automatically determine locale from browser + // (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) + // on first call if it's not defined in the URL. Redirect user to computed localized url. + // For example, if users browser language is `de`, and `de` is active in the array `supportedLocales`, + // the `/about` would be redirected to `/de/about`. + // + // The locale will be stored in session and only be computed from browser + // again if the session expires. + // + // If false, system will take app.php locale attribute. + 'useAcceptLanguageHeader' => false, + + // If `hideDefaultLocaleInURL` is true, then a url without locale + // is identical with the same url with default locale. + // For example, if `en` is default locale, then `/en/about` and `/about` + // would be identical. + // + // If in addition the middleware `LaravelLocalizationRedirectFilter` is active, then + // every url with default locale is redirected to url without locale. + // For example, `/en/about` would be redirected to `/about`. + // It is recommended to use `hideDefaultLocaleInURL` only in + // combination with the middleware `LaravelLocalizationRedirectFilter` + // to avoid duplicate content (SEO). + // + // If `useAcceptLanguageHeader` is true, then the first time + // the locale will be determined from browser and redirect to that language. + // After that, `hideDefaultLocaleInURL` behaves as usual. + 'hideDefaultLocaleInURL' => true, + + // If you want to display the locales in particular order in the language selector you should write the order here. + // CAUTION: Please consider using the appropriate locale code otherwise it will not work + // Example: 'localesOrder' => ['es','en']. + 'localesOrder' => ['fr', 'en'], + + // If you want to use custom language URL segments like 'at' instead of 'de-AT', you can map them to allow the + // LanguageNegotiator to assign the desired locales based on HTTP Accept Language Header. For example, if you want + // to use 'at' instead of 'de-AT', you would map 'de-AT' to 'at' (ie. ['de-AT' => 'at']). + 'localesMapping' => [], + + // Locale suffix for LC_TIME and LC_MONETARY + // Defaults to most common ".UTF-8". Set to blank on Windows systems, change to ".utf8" on CentOS and similar. + 'utf8suffix' => env('LARAVELLOCALIZATION_UTF8SUFFIX', '.UTF-8'), + + // URLs which should not be processed, e.g. '/nova', '/nova/*', '/nova-api/*' or specific application URLs + // Defaults to []. + 'urlsIgnored' => ['/skipped'], + + 'httpMethodsIgnored' => ['POST', 'PUT', 'PATCH', 'DELETE'], +]; diff --git a/config/logging.php b/config/logging.php index a94301e..eaa3ced 100644 --- a/config/logging.php +++ b/config/logging.php @@ -3,57 +3,58 @@ use Monolog\Handler\NullHandler; use Monolog\Handler\StreamHandler; use Monolog\Handler\SyslogUdpHandler; +use Monolog\Processor\PsrLogMessageProcessor; return [ /* - |-------------------------------------------------------------------------- - | Default Log Channel - |-------------------------------------------------------------------------- - | - | This option defines the default log channel that gets used when writing - | messages to the logs. The name specified in this option should match - | one of the channels defined in the "channels" configuration array. - | - */ + *-------------------------------------------------------------------------- + * Default Log Channel + *-------------------------------------------------------------------------- + * + * This option defines the default log channel that is utilized to write + * messages to your logs. The value provided here should match one of + * the channels present in the list of "channels" configured below. + * + */ 'default' => env('LOG_CHANNEL', 'stack'), /* - |-------------------------------------------------------------------------- - | Deprecations Log Channel - |-------------------------------------------------------------------------- - | - | This option controls the log channel that should be used to log warnings - | regarding deprecated PHP and library features. This allows you to get - | your application ready for upcoming major versions of dependencies. - | - */ + *-------------------------------------------------------------------------- + * Deprecations Log Channel + *-------------------------------------------------------------------------- + * + * This option controls the log channel that should be used to log warnings + * regarding deprecated PHP and library features. This allows you to get + * your application ready for upcoming major versions of dependencies. + * + */ 'deprecations' => [ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), - 'trace' => false, + 'trace' => env('LOG_DEPRECATIONS_TRACE', false), ], /* - |-------------------------------------------------------------------------- - | 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" - | - */ + *-------------------------------------------------------------------------- + * Log Channels + *-------------------------------------------------------------------------- + * + * Here you may configure the log channels for your application. Laravel + * utilizes the Monolog PHP logging library, which includes a variety + * of powerful log handlers and formatters that you're free to use. + * + * Available drivers: "single", "daily", "slack", "syslog", + * "errorlog", "monolog", "custom", "stack" + * + */ 'channels' => [ + 'stack' => [ 'driver' => 'stack', - 'channels' => ['single'], + 'channels' => explode(',', (string) env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], @@ -68,15 +69,15 @@ return [ 'driver' => 'daily', 'path' => storage_path('logs/laravel.log'), 'level' => env('LOG_LEVEL', 'debug'), - 'days' => 14, + 'days' => env('LOG_DAILY_DAYS', 14), 'replace_placeholders' => true, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), - 'username' => 'Laravel Log', - 'emoji' => ':boom:', + 'username' => env('LOG_SLACK_USERNAME', 'Laravel Log'), + 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 'level' => env('LOG_LEVEL', 'critical'), 'replace_placeholders' => true, ], @@ -97,17 +98,17 @@ return [ 'driver' => 'monolog', 'level' => env('LOG_LEVEL', 'debug'), 'handler' => StreamHandler::class, - 'formatter' => env('LOG_STDERR_FORMATTER'), - 'with' => [ + 'handler_with' => [ 'stream' => 'php://stderr', ], + 'formatter' => env('LOG_STDERR_FORMATTER'), 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ 'driver' => 'syslog', 'level' => env('LOG_LEVEL', 'debug'), - 'facility' => LOG_USER, + 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), 'replace_placeholders' => true, ], diff --git a/config/macroschedule.php b/config/macroschedule.php deleted file mode 100644 index 54f70e5..0000000 --- a/config/macroschedule.php +++ /dev/null @@ -1,8 +0,0 @@ - 3, - 'totalAvailableDevs' => 6, - // * En pourcentage - 'loadDevThreshold' => 0.5, -]; diff --git a/config/mail.php b/config/mail.php index 030c464..dc53168 100644 --- a/config/mail.php +++ b/config/mail.php @@ -3,63 +3,67 @@ return [ /* - |-------------------------------------------------------------------------- - | Default Mailer - |-------------------------------------------------------------------------- - | - | This option controls the default mailer that is used to send any email - | messages sent by your application. Alternative mailers may be setup - | and used as needed; however, this mailer will be used by default. - | - */ + *-------------------------------------------------------------------------- + * Default Mailer + *-------------------------------------------------------------------------- + * + * This option controls the default mailer that is used to send all email + * messages unless another mailer is explicitly specified when sending + * the message. All additional mailers can be configured within the + * "mailers" array. Examples of each type of mailer are provided. + * + */ - 'default' => env('MAIL_MAILER', 'smtp'), - - // * Mail admin - 'MAIL_ADMIN' => env('MAIL_ADMIN', 'digital@ldc.fr'), + 'default' => env('MAIL_MAILER', 'log'), /* - |-------------------------------------------------------------------------- - | 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" - | - */ + *-------------------------------------------------------------------------- + * 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 that can be used + * when delivering an email. You may specify which one you're using for + * your mailers below. You may also add additional mailers if needed. + * + * Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", + * "postmark", "resend", "log", "array", + * "failover", "roundrobin" + * + */ 'mailers' => [ + 'smtp' => [ 'transport' => 'smtp', - 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), - 'port' => env('MAIL_PORT', 587), - 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + 'scheme' => env('MAIL_SCHEME'), + 'url' => env('MAIL_URL'), + 'host' => env('MAIL_HOST', '127.0.0.1'), + 'port' => env('MAIL_PORT', 2525), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, - 'local_domain' => env('MAIL_EHLO_DOMAIN'), + 'local_domain' => env( + 'MAIL_EHLO_DOMAIN', + parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST) + ), ], 'ses' => [ 'transport' => 'ses', ], - 'mailgun' => [ - 'transport' => 'mailgun', - ], - 'postmark' => [ 'transport' => 'postmark', ], + 'resend' => [ + 'transport' => 'resend', + ], + 'sendmail' => [ 'transport' => 'sendmail', 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -bs -i'), @@ -80,46 +84,34 @@ return [ 'smtp', 'log', ], + 'retry_after' => 60, ], + + 'roundrobin' => [ + 'transport' => 'roundrobin', + 'mailers' => [ + 'ses', + 'postmark', + ], + 'retry_after' => 60, + ], + ], /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * Global "From" Address + *-------------------------------------------------------------------------- + * + * You may wish for all emails 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 emails that are sent by your application. + * + */ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), 'name' => env('MAIL_FROM_NAME', 'Example'), ], - 'contactsList' => [ - 'serviceweb' => env('MAIL_LIST_SERVICEWEB', 'digital@ldc.fr') - ], - - /* - |-------------------------------------------------------------------------- - | 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'), - ], - ], - ]; diff --git a/config/pagination.php b/config/pagination.php deleted file mode 100644 index 87ad521..0000000 --- a/config/pagination.php +++ /dev/null @@ -1,18 +0,0 @@ - env('DEFAULT_PAGINATION', 12), -]; diff --git a/config/purifier.php b/config/purifier.php deleted file mode 100644 index d74b7a6..0000000 --- a/config/purifier.php +++ /dev/null @@ -1,132 +0,0 @@ -set('Core.Encoding', $this->config->get('purifier.encoding')); - * $config->set('Cache.SerializerPath', $this->config->get('purifier.cachePath')); - * if ( ! $this->config->get('purifier.finalize')) { - * $config->autoFinalize = false; - * } - * $config->load [$this->getConfig()); - * - * You must NOT delete the default settings - * anything in settings should be compacted with params that needed to instance HTMLPurifier_Config. - * - * @link http://htmlpurifier.org/live/configdoc/plain.html - */ - -// phpcs:disable Generic.Files.LineLength.TooLong -return [ - 'encoding' => 'UTF-8', - 'finalize' => true, - 'cachePath' => storage_path('app/purifier'), - 'cacheFileMode' => 0755, - 'settings' => [ - 'default' => [ - 'HTML.SafeIframe' => true, - // * For iframes - 'URI.SafeIframeRegexp' => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%", - 'HTML.Doctype' => 'HTML 4.01 Transitional', - // * Legacy filter en full avec safe legacy. - // 'HTML.Allowed' => 'h1[style|id],h2[style|id],h3[style|id],h4[style|id],h5[style|id],h6[style|id],figure[class|style],oembed[url],div[style],b,strong,i,em,u,s,pre,code[class],a[href|title|target|rel|id],ul[style],ol[style],dl[style],li,p[style],br,span[style|class],img[width|height|alt|src|style|class|title],iframe[src|width|height|class|frameborder|style],table[style|align|border|cellspacing|cellpadding|width],thead,tbody,th[colspan|align|valign|style],tr[align|valign|style],td[style|colspan|rowspan|scope|align|valign],hr,dl,dt,mark[class]', - // * Restricted basics. - 'HTML.Allowed' => 'br,p[style],b[style],u[style],i[style],a[href|title|target|rel],strong[style],span[class],ul[style],ol[style],li[style],h2[style],h3[style],h4[style],hr,blockquote[style]', - // * Legacy filter en full avec safe legacy. - // 'CSS.AllowedProperties' => 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align,list-style-type,float,width,height,vertical-align,border,border-color,margin-left', - // * Restricted basics. - 'CSS.AllowedProperties' => 'text-align,margin-left', - 'AutoFormat.AutoParagraph' => false, - 'AutoFormat.RemoveEmpty' => false, - 'AutoFormat.RemoveEmpty.RemoveNbsp' => false, - ], - "youtube" => [ - "HTML.SafeIframe" => 'true', - "URI.SafeIframeRegexp" => "%^(http://|https://|//)(www.youtube.com/embed/|player.vimeo.com/video/|vimeo.com/)%", - ], - 'custom_definition' => [ - 'id' => 'html5-definitions', - 'rev' => 1, - 'debug' => true, - 'elements' => [ - // * http://developers.whatwg.org/sections.html - ['section', 'Block', 'Flow', 'Common'], - ['nav', 'Block', 'Flow', 'Common'], - ['article', 'Block', 'Flow', 'Common'], - ['aside', 'Block', 'Flow', 'Common'], - ['header', 'Block', 'Flow', 'Common'], - ['footer', 'Block', 'Flow', 'Common'], - - // * Content model actually excludes several tags, not modelled here - ['address', 'Block', 'Flow', 'Common'], - ['hgroup', 'Block', 'Required: h1 | h2 | h3 | h4 | h5 | h6', 'Common'], - - // * http://developers.whatwg.org/grouping-content.html - ['figure', 'Block', 'Optional: (figcaption, Flow) | (Flow, figcaption) | Flow', 'Common'], - ['figcaption', 'Inline', 'Flow', 'Common'], - ['oembed', 'Inline', 'Flow', 'Common'], - - // * http://developers.whatwg.org/the-video-element.html#the-video-element - ['video', 'Block', 'Optional: (source, Flow) | (Flow, source) | Flow', 'Common', [ - 'src' => 'URI', - 'type' => 'Text', - 'width' => 'Length', - 'height' => 'Length', - 'poster' => 'URI', - 'preload' => 'Enum#auto,metadata,none', - 'controls' => 'Bool', - ]], - ['source', 'Block', 'Flow', 'Common', [ - 'src' => 'URI', - 'type' => 'Text', - ]], - - // * http://developers.whatwg.org/text-level-semantics.html - ['s', 'Inline', 'Inline', 'Common'], - ['var', 'Inline', 'Inline', 'Common'], - ['sub', 'Inline', 'Inline', 'Common'], - ['sup', 'Inline', 'Inline', 'Common'], - ['mark', 'Inline', 'Inline', 'Common'], - ['wbr', 'Inline', 'Empty', 'Core'], - - // * http://developers.whatwg.org/edits.html - ['ins', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']], - ['del', 'Block', 'Flow', 'Common', ['cite' => 'URI', 'datetime' => 'CDATA']], - ], - 'attributes' => [ - ['iframe', 'allowfullscreen', 'Bool'], - ['table', 'height', 'Text'], - ['td', 'border', 'Text'], - ['th', 'border', 'Text'], - ['tr', 'width', 'Text'], - ['tr', 'height', 'Text'], - ['tr', 'border', 'Text'], - ['figure', 'class', 'Text'], - ['figure', 'style', 'Text'], - ['oembed', 'url', 'Text'], - ['span', 'style', 'Text'], - ['img', 'style', 'Text'], - ], - ], - 'custom_attributes' => [ - ['a', 'target', 'Enum#_blank,_self,_target,_top'], - ['a', 'id', 'Text'], - ['ol', 'style', 'Text'], - ['figure', 'style', 'Text'], - ['img', 'style', 'Text'], - ['span', 'style', 'Text'], - ['oembed', 'url', 'Text'], - ['h1', 'id', 'Text'], - ['h2', 'id', 'Text'], - ['h3', 'id', 'Text'], - ['h4', 'id', 'Text'], - ['h5', 'id', 'Text'], - ['h6', 'id', 'Text'], - ], - 'custom_elements' => [ - ['u', 'Inline', 'Inline', 'Common'], - ['oembed', 'Inline', 'Inline', 'Common'], - ], - ], -]; diff --git a/config/queue.php b/config/queue.php index f5a66b9..5259aa1 100644 --- a/config/queue.php +++ b/config/queue.php @@ -3,30 +3,31 @@ return [ /* - |-------------------------------------------------------------------------- - | Default Queue Connection Name - |-------------------------------------------------------------------------- - | - | Laravel's queue API supports an assortment of back-ends via a single - | API, giving you convenient access to each back-end using the same - | syntax for every one. Here you may define a default connection. - | - */ + *-------------------------------------------------------------------------- + * Default Queue Connection Name + *-------------------------------------------------------------------------- + * + * Laravel's queue supports a variety of backends via a single, unified + * API, giving you convenient access to each backend using identical + * syntax for each. The default queue connection is defined below. + * + */ - 'default' => env('QUEUE_CONNECTION', 'sync'), + 'default' => env('QUEUE_CONNECTION', 'database'), /* - |-------------------------------------------------------------------------- - | 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" - | - */ + *-------------------------------------------------------------------------- + * Queue Connections + *-------------------------------------------------------------------------- + * + * Here you may configure the connection options for every queue backend + * used by your application. An example configuration is provided for + * each backend supported by Laravel. You're also free to add more. + * + * Drivers: "sync", "database", "beanstalkd", "sqs", "redis", + * "deferred", "background", "failover", "null" + * + */ 'connections' => [ @@ -36,17 +37,18 @@ return [ 'database' => [ 'driver' => 'database', - 'table' => 'jobs', - 'queue' => 'default', - 'retry_after' => 90, + 'connection' => env('DB_QUEUE_CONNECTION'), + 'table' => env('DB_QUEUE_TABLE', 'jobs'), + 'queue' => env('DB_QUEUE', 'default'), + 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 'after_commit' => false, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', - 'host' => 'localhost', - 'queue' => 'default', - 'retry_after' => 90, + 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), + 'queue' => env('BEANSTALKD_QUEUE', 'default'), + 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 'block_for' => 0, 'after_commit' => false, ], @@ -64,45 +66,63 @@ return [ 'redis' => [ 'driver' => 'redis', - 'connection' => 'default', + 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), - 'retry_after' => 90, + 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 'block_for' => null, 'after_commit' => false, ], + 'deferred' => [ + 'driver' => 'deferred', + ], + + 'background' => [ + 'driver' => 'background', + ], + + 'failover' => [ + 'driver' => 'failover', + 'connections' => [ + 'database', + 'deferred', + ], + ], + ], /* - |-------------------------------------------------------------------------- - | Job Batching - |-------------------------------------------------------------------------- - | - | The following options configure the database and table that store job - | batching information. These options can be updated to any database - | connection and table which has been defined by your application. - | - */ + *-------------------------------------------------------------------------- + * Job Batching + *-------------------------------------------------------------------------- + * + * The following options configure the database and table that store job + * batching information. These options can be updated to any database + * connection and table which has been defined by your application. + * + */ 'batching' => [ - 'database' => env('DB_CONNECTION', 'mysql'), + 'database' => env('DB_CONNECTION', 'sqlite'), 'table' => 'job_batches', ], /* - |-------------------------------------------------------------------------- - | 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 Queue Jobs + *-------------------------------------------------------------------------- + * + * These options configure the behavior of failed queue job logging so you + * can control how and where failed jobs are stored. Laravel ships with + * support for storing failed jobs in a simple file or in a database. + * + * Supported drivers: "database-uuids", "dynamodb", "file", "null" + * + */ 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database-uuids'), - 'database' => env('DB_CONNECTION', 'mysql'), + 'database' => env('DB_CONNECTION', 'sqlite'), 'table' => 'failed_jobs', ], diff --git a/config/saml2.php b/config/saml2.php new file mode 100644 index 0000000..f84b2e4 --- /dev/null +++ b/config/saml2.php @@ -0,0 +1,397 @@ + \Slides\Saml2\Models\Tenant::class, + + /** + *-------------------------------------------------------------------------- + * Use built-in routes + *-------------------------------------------------------------------------- + * + * If "useRoutes" set to true, the package defines five new routes: + * + * Method | URI | Name + * -------|---------------------------------|------------------ + * POST | {routesPrefix}/{uuid}/acs | saml.acs + * GET | {routesPrefix}/{uuid}/login | saml.login + * GET | {routesPrefix}/{uuid}/logout | saml.logout + * GET | {routesPrefix}/{uuid}/metadata | saml.metadata + * GET | {routesPrefix}/{uuid}/sls | saml.sls + * + */ + + 'useRoutes' => true, + + /** + *-------------------------------------------------------------------------- + * Built-in routes prefix + *-------------------------------------------------------------------------- + * + * Here you may define the prefix for built-in routes. + * + */ + + 'routesPrefix' => '/saml2', + + /** + *-------------------------------------------------------------------------- + * Middle groups to use for the SAML routes + *-------------------------------------------------------------------------- + * + * Note, Laravel 5.2 requires a group which includes StartSession + * + */ + + 'routesMiddleware' => ['saml'], + + /** + *-------------------------------------------------------------------------- + * Signature validation + *-------------------------------------------------------------------------- + * + * Set to true if you want to use parameters from $_SERVER to validate the signature. + * + */ + + 'retrieveParametersFromServer' => false, + + /** + *-------------------------------------------------------------------------- + * Login redirection URL. + *-------------------------------------------------------------------------- + * + * The redirection URL after successful login. + * + */ + + 'loginRoute' => '/admin/login', + + /** + *-------------------------------------------------------------------------- + * Logout redirection URL. + *-------------------------------------------------------------------------- + * + * The redirection URL after successful logout. + * + */ + + 'logoutRoute' => '/admin/login', + + /** + *-------------------------------------------------------------------------- + * Login error redirection URL. + *-------------------------------------------------------------------------- + * + * The redirection URL after login failing. + * + */ + + 'errorRoute' => '/admin/login', + + /** + *-------------------------------------------------------------------------- + * Strict mode. + *-------------------------------------------------------------------------- + * + * If 'strict' is True, then the PHP Toolkit will reject unsigned + * or unencrypted messages if it expects them signed or encrypted + * Also will reject the messages if not strictly follow the SAML + * standard: Destination, NameId, Conditions... are validated too. + * + */ + + 'strict' => true, + + /** + *-------------------------------------------------------------------------- + * Debug mode. + *-------------------------------------------------------------------------- + * + * When enabled, errors must be printed. + * + */ + + 'debug' => env('SAML2_DEBUG', env('APP_DEBUG', false)), + + /** + *-------------------------------------------------------------------------- + * Whether to use `X-Forwarded-*` headers to determine port/domain/protocol. + *-------------------------------------------------------------------------- + * + * If 'proxyVars' is True, then the Saml lib will trust proxy headers + * e.g X-Forwarded-Proto / HTTP_X_FORWARDED_PROTO. This is useful if + * your application is running behind a load balancer which terminates SSL. + * + */ + + 'proxyVars' => true, + + /** + *-------------------------------------------------------------------------- + * Service Provider configuration. + *-------------------------------------------------------------------------- + * + * General setting of the service provider. + * + */ + + 'sp' => [ + + /** + *-------------------------------------------------------------------------- + * NameID format. + *-------------------------------------------------------------------------- + * + * Specifies constraints on the name identifier to be used to + * represent the requested subject. + * + */ + + 'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress', + + /** + *-------------------------------------------------------------------------- + * SP Certificates. + *-------------------------------------------------------------------------- + * + * Usually x509cert and privateKey of the SP are provided by files placed at + * the certs folder. But we can also provide them with the following parameters. + * + */ + + 'x509cert' => env('SAML2_SP_CERT_x509', ''), + 'privateKey' => env('SAML2_SP_CERT_PRIVATEKEY', ''), + + /** + *-------------------------------------------------------------------------- + * Identifier (URI) of the SP entity. + *-------------------------------------------------------------------------- + * + * Leave blank to use the 'saml.metadata' route. + * + */ + + 'entityId' => env('SAML2_SP_ENTITYID', ''), + + /** + *-------------------------------------------------------------------------- + * The Assertion Consumer Service (ACS) URL. + *-------------------------------------------------------------------------- + * + * URL Location where the from the IdP will be returned, using HTTP-POST binding. + * Leave blank to use the 'saml.acs' route. + * + */ + + 'assertionConsumerService' => [ + 'url' => '', + ], + + /** + *-------------------------------------------------------------------------- + * The Single Logout Service URL. + *-------------------------------------------------------------------------- + * + * Specifies info about where and how the message MUST be + * returned to the requester, in this case our SP. + * + * URL Location where the from the IdP will be returned, using HTTP-Redirect binding. + * Leave blank to use the 'saml.sls' route. + * + */ + + 'singleLogoutService' => [ + 'url' => '' + ], + ], + + /** + *-------------------------------------------------------------------------- + * OneLogin security settings. + *-------------------------------------------------------------------------- + */ + + 'security' => [ + + 'signatureAlgorithm' => 'http://www.w3.org/2001/04/xmldsig-more#rsa-sha256', + 'digestAlgorithm' => 'http://www.w3.org/2001/04/xmlenc#sha256', + + /** + *-------------------------------------------------------------------------- + * NameId encryption + *-------------------------------------------------------------------------- + * + * Indicates that the nameID of the sent by this SP + * will be encrypted. + * + */ + + 'nameIdEncrypted' => true, + + /** + *-------------------------------------------------------------------------- + * AuthnRequest signage + *-------------------------------------------------------------------------- + * + * Indicates whether the messages sent by + * this SP will be signed. The Metadata of the SP will offer this info + * + */ + + 'authnRequestsSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Logout request signage + *-------------------------------------------------------------------------- + * + * Indicates whether the messages sent by this SP + * will be signed. + * + */ + + 'logoutRequestSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Logout response signage + *-------------------------------------------------------------------------- + * + * Indicates whether the messages sent by this SP + * will be signed. + * + */ + + 'logoutResponseSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Whether need to sign metadata. + *-------------------------------------------------------------------------- + * + * The possible values: + * - false + * - true (use certs) + * - array: + * ``` + * [ + * 'keyFileName' => 'metadata.key', + * 'certFileName' => 'metadata.crt' + * ] + * ``` + * + */ + + 'signMetadata' => true, + + /** + *-------------------------------------------------------------------------- + * Requirement to sign messages. + *-------------------------------------------------------------------------- + * + * Indicates a requirement for the , and + * elements received by this SP to be signed. + * + */ + + 'wantMessagesSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Requirement to sign assertion elements. + *-------------------------------------------------------------------------- + * + * Indicates a requirement for the elements received by + * this SP to be signed. + * + */ + + 'wantAssertionsSigned' => true, + + /** + *-------------------------------------------------------------------------- + * Requirement to encrypt NameID. + *-------------------------------------------------------------------------- + * + * Indicates a requirement for the NameID received by this SP to be encrypted. + * + */ + + 'wantNameIdEncrypted' => false, + + /** + *-------------------------------------------------------------------------- + * Authentication context. + *-------------------------------------------------------------------------- + * + * Set to false and no AuthContext will be sent in the AuthNRequest, + * + * Set true or don't present this parameter and you will get an + * AuthContext 'exact' 'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport' + * + * Set an array with the possible auth context values: + * ['urn:oasis:names:tc:SAML:2.0:ac:classes:Password', 'urn:oasis:names:tc:SAML:2.0:ac:classes:X509'] + * + */ + + 'requestedAuthnContext' => true, + ], + + /** + *-------------------------------------------------------------------------- + * Contact information. + *-------------------------------------------------------------------------- + * + * It is recommended to supply a technical and support contacts. + * + */ + + 'contactPerson' => [ + 'technical' => [ + 'givenName' => env('SAML2_CONTACT_TECHNICAL_NAME', env('APP_NAME', 'Technical')), + 'emailAddress' => env('SAML2_CONTACT_TECHNICAL_EMAIL', 'no@reply.com') + ], + 'support' => [ + 'givenName' => env('SAML2_CONTACT_SUPPORT_NAME', env('APP_NAME', 'Support')), + 'emailAddress' => env('SAML2_CONTACT_SUPPORT_EMAIL', 'no@reply.com') + ], + ], + + /** + *-------------------------------------------------------------------------- + * Organization information. + *-------------------------------------------------------------------------- + * + * The info in en_US lang is recommended, add more if required. + * + */ + + 'organization' => [ + 'en-US' => [ + 'name' => env('SAML2_ORGANIZATION_NAME', env('APP_NAME', 'Name')), + 'displayname' => env('SAML2_ORGANIZATION_NAME', env('APP_NAME', 'Name')), + 'url' => env('SAML2_ORGANIZATION_URL', env('APP_URL', 'http://url')) + ], + ], + + /** + * Default tenant UUID. + */ + + 'default_tenant_uuid' => env('SAML2_DEFAULT_TENANT_UUID', null), + + /** + * Target domain. + */ + 'domain' => env('SAML2_DOMAIN', "") +]; diff --git a/config/samlidp.php b/config/samlidp.php deleted file mode 100644 index b26958d..0000000 --- a/config/samlidp.php +++ /dev/null @@ -1,80 +0,0 @@ -url()] = $sp->url(); - $sp_configs[$sp->acsBase64()] = [ - 'destination' => $sp->destination(), - 'logout' => $sp->logout(), - 'certificate' => $sp->certificate() - ]; -} - -return [ - /** - |-------------------------------------------------------------------------- - | SAML idP configuration file - |-------------------------------------------------------------------------- - | - | Use this file to configure the service providers you want to use. - | - */ - // Outputs data to your laravel.log file for debugging. - 'debug' => (bool)env('APP_DEBUG', false), - // Define the email address field name in the users table. - 'email_field' => 'email', - // Define the name field in the users table. - 'name_field' => 'name', - // The URI to your login page. - 'login_uri' => 'login', - // Log out of the IdP after SLO. - 'logout_after_slo' => env('LOGOUT_AFTER_SLO', false), - // The URI to the saml metadata file, this describes your idP. - 'issuer_uri' => 'saml/metadata', - // The certificate. - 'cert' => env('SAMLIDP_CERT'), - // Name of the certificate PEM file, ignored if cert is used. - 'certname' => 'cert.pem', - // The certificate key. - 'key' => env('SAMLIDP_KEY'), - // Name of the certificate key PEM file, ignored if key is used. - 'keyname' => 'key.pem', - // Encrypt requests and responses. - 'encrypt_assertion' => true, - // Make sure messages are signed. - 'messages_signed' => true, - // Defind what digital algorithm you want to use. - 'digest_algorithm' => \RobRichards\XMLSecLibs\XMLSecurityDSig::SHA256, - // List of all service providers. - // 'sp' => [ - // Base64 encoded ACS URL - // 'aHR0cHM6Ly9teWZhY2Vib29rd29ya3BsYWNlLmZhY2Vib29rLmNvbS93b3JrL3NhbWwucGhw' => [ - // Your destination is the ACS URL of the Service Provider - // 'destination' => 'https://myfacebookworkplace.facebook.com/work/saml.php', - // 'logout' => 'https://myfacebookworkplace.facebook.com/work/sls.php', - // SP certificate - // 'certificate' => '', - // Turn off auto appending of the idp query param - // 'query_params' => false, - // Turn off the encryption of the assertion per SP - // 'encrypt_assertion' => false - // ]. - // ],. - 'sp' => $sp_configs, - - // If you need to redirect after SLO depending on SLO initiator - // Key is beginning of HTTP_REFERER value from SERVER, value is redirect path. - 'sp_slo_redirects' => $sp_slo_redirects, - - // All of the Laravel SAML IdP event / listener mappings. - 'events' => [ - 'CodeGreenCreative\SamlIdp\Events\Assertion' => [], - 'Illuminate\Auth\Events\Logout' => ['CodeGreenCreative\SamlIdp\Listeners\SamlLogout'], - 'Illuminate\Auth\Events\Authenticated' => ['CodeGreenCreative\SamlIdp\Listeners\SamlAuthenticated'], - 'Illuminate\Auth\Events\Login' => ['CodeGreenCreative\SamlIdp\Listeners\SamlLogin'], - ], - - // List of guards saml idp will catch Authenticated, Login and Logout events. - 'guards' => ['backend'], -]; diff --git a/config/schedules.php b/config/schedules.php deleted file mode 100644 index 3930479..0000000 --- a/config/schedules.php +++ /dev/null @@ -1,6 +0,0 @@ - 2, - 'daySlots' => 8, -]; diff --git a/config/sentry.php b/config/sentry.php deleted file mode 100644 index 0234010..0000000 --- a/config/sentry.php +++ /dev/null @@ -1,61 +0,0 @@ - env('SENTRY_LARAVEL_DSN', env('SENTRY_DSN')), - - // The release version of your application - // Example with dynamic git hash: trim(exec('git --git-dir ' . base_path('.git') . ' log --pretty="%h" -n1 HEAD')). - 'release' => env('SENTRY_RELEASE'), - - // When left empty or `null` the Laravel environment will be used. - 'environment' => env('SENTRY_ENVIRONMENT'), - - 'breadcrumbs' => [ - // Capture Laravel logs in breadcrumbs. - 'logs' => true, - - // Capture SQL queries in breadcrumbs. - 'sql_queries' => true, - - // Capture bindings on SQL queries logged in breadcrumbs. - 'sql_bindings' => false, - - // Capture queue job information in breadcrumbs. - 'queue_info' => true, - - // Capture command information in breadcrumbs. - 'command_info' => true, - ], - - 'tracing' => [ - // Trace queue jobs as their own transactions. - 'queue_job_transactions' => env('SENTRY_TRACE_QUEUE_ENABLED', false), - - // Capture queue jobs as spans when executed on the sync driver. - 'queue_jobs' => true, - - // Capture SQL queries as spans. - 'sql_queries' => true, - - // Try to find out where the SQL query originated from and add it to the query spans. - 'sql_origin' => true, - - // Capture views as spans. - 'views' => true, - - // Indicates if the tracing integrations supplied by Sentry should be loaded. - 'default_integrations' => true, - - // Indicates that requests without a matching route should be traced. - 'missing_routes' => false, - ], - - // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#send-default-pii - 'send_default_pii' => env('SENTRY_SEND_DEFAULT_PII', false), - - // @see: https://docs.sentry.io/platforms/php/guides/laravel/configuration/options/#traces-sample-rate - 'traces_sample_rate' => env('SENTRY_TRACES_SAMPLE_RATE') === null ? null : (float)env('SENTRY_TRACES_SAMPLE_RATE'), - - 'before_send' => [\App\Lib\Helpers\ExceptionsHelper::class, 'sentryEventHandler'], -]; diff --git a/config/services.php b/config/services.php index 88b9614..db17a96 100644 --- a/config/services.php +++ b/config/services.php @@ -3,26 +3,23 @@ return [ /* - |-------------------------------------------------------------------------- - | Third Party Services - |-------------------------------------------------------------------------- - | - | This file is for storing the credentials for third party services such - | as Mailgun, Postmark, AWS and more. This file provides the de facto - | location for this type of information, allowing packages to have - | a conventional file to locate the various service credentials. - | - */ - - 'mailgun' => [ - 'domain' => env('MAILGUN_DOMAIN'), - 'secret' => env('MAILGUN_SECRET'), - 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'), - 'scheme' => 'https', - ], + *-------------------------------------------------------------------------- + * Third Party Services + *-------------------------------------------------------------------------- + * + * This file is for storing the credentials for third party services such + * as Mailgun, Postmark, AWS and more. This file provides the de facto + * location for this type of information, allowing packages to have + * a conventional file to locate the various service credentials. + * + */ 'postmark' => [ - 'token' => env('POSTMARK_TOKEN'), + 'key' => env('POSTMARK_API_KEY'), + ], + + 'resend' => [ + 'key' => env('RESEND_API_KEY'), ], 'ses' => [ @@ -31,4 +28,11 @@ return [ 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], + 'slack' => [ + 'notifications' => [ + 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), + 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), + ], + ], + ]; diff --git a/config/session.php b/config/session.php index 6f41017..2504484 100644 --- a/config/session.php +++ b/config/session.php @@ -5,197 +5,213 @@ use Illuminate\Support\Str; return [ /* - |-------------------------------------------------------------------------- - | Default Session Driver - |-------------------------------------------------------------------------- - | - | This option controls the default session "driver" that will be used on - | requests. By default, we will use the lightweight native driver but - | you may specify any of the other wonderful drivers provided here. - | - | Supported: "file", "cookie", "database", "apc", - | "memcached", "redis", "dynamodb", "array" - | - */ + *-------------------------------------------------------------------------- + * Default Session Driver + *-------------------------------------------------------------------------- + * + * This option determines the default session driver that is utilized for + * incoming requests. Laravel supports a variety of storage options to + * persist session data. Database storage is a great default choice. + * + * Supported: "file", "cookie", "database", "memcached", + * "redis", "dynamodb", "array" + * + */ - 'driver' => env('SESSION_DRIVER', 'file'), + 'driver' => env('SESSION_DRIVER', 'database'), /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * 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 expire immediately when the browser is closed then you may + * indicate that via the expire_on_close configuration option. + * + */ - 'lifetime' => env('SESSION_LIFETIME', 120), + 'lifetime' => (int) env('SESSION_LIFETIME', 120), - 'expire_on_close' => false, + 'expire_on_close' => env('SESSION_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. - | - */ + *-------------------------------------------------------------------------- + * Session Encryption + *-------------------------------------------------------------------------- + * + * This option allows you to easily specify that all of your session data + * should be encrypted before it's stored. All encryption is performed + * automatically by Laravel and you may use the session like normal. + * + */ - 'encrypt' => false, + 'encrypt' => env('SESSION_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. - | - */ + *-------------------------------------------------------------------------- + * Session File Location + *-------------------------------------------------------------------------- + * + * When utilizing the "file" session driver, the session files are placed + * on disk. The default storage location is defined here; however, you + * are free to provide another location where they should be stored. + * + */ '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. - | - */ + *-------------------------------------------------------------------------- + * 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'), /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * Session Database Table + *-------------------------------------------------------------------------- + * + * When using the "database" session driver, you may specify the table to + * be used to store sessions. Of course, a sensible default is defined + * for you; however, you're welcome to change this to another table. + * + */ - 'table' => 'sessions', + 'table' => env('SESSION_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" - | - */ + *-------------------------------------------------------------------------- + * Session Cache Store + *-------------------------------------------------------------------------- + * + * When using one of the framework's cache driven session backends, you may + * define the cache store which should be used to store the session data + * between requests. This must match one of your defined cache stores. + * + * Affects: "dynamodb", "memcached", "redis" + * + */ 'store' => env('SESSION_STORE'), /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * 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. - | - */ + *-------------------------------------------------------------------------- + * Session Cookie Name + *-------------------------------------------------------------------------- + * + * Here you may change the name of the session cookie that is created by + * the framework. Typically, you should not need to change this value + * since doing so does not grant a meaningful security improvement. + * + */ 'cookie' => env( 'SESSION_COOKIE', - Str::slug(env('APP_NAME', 'laravel'), '_') . '_session' + Str::slug((string) 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. - | - */ + *-------------------------------------------------------------------------- + * 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're free to change this when necessary. + * + */ - 'path' => '/', + 'path' => env('SESSION_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. - | - */ + *-------------------------------------------------------------------------- + * Session Cookie Domain + *-------------------------------------------------------------------------- + * + * This value determines the domain and subdomains the session cookie is + * available to. By default, the cookie will be available to the root + * domain without subdomains. Typically, this shouldn't be changed. + * + */ 'domain' => env('SESSION_DOMAIN'), /* - |-------------------------------------------------------------------------- - | 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. - | - */ + *-------------------------------------------------------------------------- + * 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 when it can't 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 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. It's unlikely you should disable this option. + * + */ - 'http_only' => true, + 'http_only' => env('SESSION_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 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" to permit secure cross-site requests. + * + * See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value + * + * Supported: "lax", "strict", "none", null + * + */ - 'same_site' => 'lax', + 'same_site' => env('SESSION_SAME_SITE', 'lax'), + + /* + *-------------------------------------------------------------------------- + * Partitioned Cookies + *-------------------------------------------------------------------------- + * + * Setting this value to true will tie the cookie to the top-level site for + * a cross-site context. Partitioned cookies are accepted by the browser + * when flagged "secure" and the Same-Site attribute is set to "none". + * + */ + + 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), ]; diff --git a/config/telescope.php b/config/telescope.php new file mode 100644 index 0000000..3d4c080 --- /dev/null +++ b/config/telescope.php @@ -0,0 +1,184 @@ + env('TELESCOPE_ENABLED', true), + + /** + *-------------------------------------------------------------------------- + * Telescope Domain + *-------------------------------------------------------------------------- + * + * This is the subdomain where Telescope will be accessible from. If the + * setting is null, Telescope will reside under the same domain as the + * application. Otherwise, this value will be used as the subdomain. + * + */ + + 'domain' => env('TELESCOPE_DOMAIN'), + + /** + *-------------------------------------------------------------------------- + * Telescope Path + *-------------------------------------------------------------------------- + * + * This is the URI path where Telescope will be accessible from. Feel free + * to change this path to anything you like. Note that the URI will not + * affect the paths of its internal API that aren't exposed to users. + * + */ + + 'path' => env('TELESCOPE_PATH', 'admin/telescope'), + + /** + *-------------------------------------------------------------------------- + * Telescope Storage Driver + *-------------------------------------------------------------------------- + * + * This configuration options determines the storage driver that will + * be used to store Telescope's data. In addition, you may set any + * custom options as needed by the particular driver you choose. + * + */ + + 'driver' => env('TELESCOPE_DRIVER', 'database'), + + 'storage' => [ + 'database' => [ + 'connection' => env('DB_CONNECTION', 'mysql'), + 'chunk' => 1000, + ], + ], + + /** + *-------------------------------------------------------------------------- + * Telescope Queue + *-------------------------------------------------------------------------- + * + * This configuration options determines the queue connection and queue + * which will be used to process ProcessPendingUpdate jobs. This can + * be changed if you would prefer to use a non-default connection. + * + */ + + 'queue' => [ + 'connection' => env('TELESCOPE_QUEUE_CONNECTION', null), + 'queue' => env('TELESCOPE_QUEUE', null), + ], + + /** + *-------------------------------------------------------------------------- + * Telescope Route Middleware + *-------------------------------------------------------------------------- + * + * These middleware will be assigned to every Telescope route, giving you + * the chance to add your own middleware to this list or change any of + * the existing middleware. Or, you can simply stick with this list. + * + */ + + 'middleware' => [ + Authorize::class, + ], + + /** + *-------------------------------------------------------------------------- + * Allowed / Ignored Paths & Commands + *-------------------------------------------------------------------------- + * + * The following array lists the URI paths and Artisan commands that will + * not be watched by Telescope. In addition to this list, some Laravel + * commands, like migrations and queue commands, are always ignored. + * + */ + + 'only_paths' => [], + + 'ignore_paths' => [ + 'livewire*', + 'nova-api*', + 'pulse*', + ], + + 'ignore_commands' => [], + + /** + *-------------------------------------------------------------------------- + * Telescope Watchers + *-------------------------------------------------------------------------- + * + * The following array lists the "watchers" that will be registered with + * Telescope. The watchers gather the application's profile data when + * a request or task is executed. Feel free to customize this list. + * + */ + + 'watchers' => [ + Watchers\BatchWatcher::class => env('TELESCOPE_BATCH_WATCHER', true), + Watchers\CacheWatcher::class => [ + 'enabled' => env('TELESCOPE_CACHE_WATCHER', true), + 'hidden' => [], + ], + Watchers\ClientRequestWatcher::class => env('TELESCOPE_CLIENT_REQUEST_WATCHER', true), + Watchers\CommandWatcher::class => [ + 'enabled' => env('TELESCOPE_COMMAND_WATCHER', true), + 'ignore' => [], + ], + Watchers\DumpWatcher::class => [ + 'enabled' => env('TELESCOPE_DUMP_WATCHER', true), + 'always' => env('TELESCOPE_DUMP_WATCHER_ALWAYS', false), + ], + Watchers\EventWatcher::class => [ + 'enabled' => env('TELESCOPE_EVENT_WATCHER', true), + 'ignore' => [], + ], + Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true), + Watchers\GateWatcher::class => [ + 'enabled' => env('TELESCOPE_GATE_WATCHER', true), + 'ignore_abilities' => [], + 'ignore_packages' => true, + 'ignore_paths' => [], + ], + Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true), + Watchers\LogWatcher::class => [ + 'enabled' => env('TELESCOPE_LOG_WATCHER', true), + 'level' => 'error', + ], + Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true), + Watchers\ModelWatcher::class => [ + 'enabled' => env('TELESCOPE_MODEL_WATCHER', true), + 'events' => ['eloquent.*'], + 'hydrations' => true, + ], + Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true), + Watchers\QueryWatcher::class => [ + 'enabled' => env('TELESCOPE_QUERY_WATCHER', true), + 'ignore_packages' => true, + 'ignore_paths' => [], + 'slow' => 100, + ], + Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true), + Watchers\RequestWatcher::class => [ + 'enabled' => env('TELESCOPE_REQUEST_WATCHER', true), + 'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64), + 'ignore_http_methods' => [], + 'ignore_status_codes' => [], + ], + Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true), + Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true), + ], +]; diff --git a/config/tickets.php b/config/tickets.php deleted file mode 100644 index 09ddda7..0000000 --- a/config/tickets.php +++ /dev/null @@ -1,9 +0,0 @@ - 37, - 'workedDaysInAWeek' => 5, - 'workingDevsPerWeek' => 2, - 'avgTimeForTicket' => 0.95, -// 0.95 heure -]; diff --git a/config/trustedproxy.php b/config/trustedproxy.php deleted file mode 100644 index ee9fc90..0000000 --- a/config/trustedproxy.php +++ /dev/null @@ -1,52 +0,0 @@ - '*', - - /* - * To trust one or more specific proxies that connect - * directly to your server, use an array or a string separated by comma of IP addresses: - */ - - /* - * Or, to trust all proxies that connect - * directly to your server, use a "*" - */ - - /* - * Which headers to use to detect proxy related data (For, Host, Proto, Port) - * - * Options include: - * - * - Illuminate\Http\Request::HEADER_X_FORWARDED_ALL (use all x-forwarded-* headers to establish trust) - * - Illuminate\Http\Request::HEADER_FORWARDED (use the FORWARDED header to establish trust) - * - Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB (If you are using AWS Elastic Load Balancer) - * - * - 'HEADER_X_FORWARDED_ALL' (use all x-forwarded-* headers to establish trust) - * - 'HEADER_FORWARDED' (use the FORWARDED header to establish trust) - * - 'HEADER_X_FORWARDED_AWS_ELB' (If you are using AWS Elastic Load Balancer) - * - * @link https://symfony.com/doc/current/deployment/proxies.html - */ - - 'headers' => Illuminate\Http\Request::HEADER_X_FORWARDED_FOR | - Illuminate\Http\Request::HEADER_X_FORWARDED_HOST | - Illuminate\Http\Request::HEADER_X_FORWARDED_PORT | - Illuminate\Http\Request::HEADER_X_FORWARDED_PROTO, - -]; diff --git a/config/view.php b/config/view.php deleted file mode 100644 index d8b71b1..0000000 --- a/config/view.php +++ /dev/null @@ -1,38 +0,0 @@ - [ - resource_path('views'), - // ! for vendor publish (mail notifications par ex) - resource_path('views/vendor'), - ], - - /* - |-------------------------------------------------------------------------- - | 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 deleted file mode 100644 index 97fc976..0000000 --- a/database/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.sqlite -*.sqlite-journal diff --git a/resources/ts/libs/.gitkeep b/database/factories/.gitkeep similarity index 100% rename from resources/ts/libs/.gitkeep rename to database/factories/.gitkeep diff --git a/database/factories/CompanyFactory.php b/database/factories/CompanyFactory.php deleted file mode 100644 index aefb175..0000000 --- a/database/factories/CompanyFactory.php +++ /dev/null @@ -1,28 +0,0 @@ - $this->faker->name, - ]; - } -} diff --git a/database/factories/InvoiceFactory.php b/database/factories/InvoiceFactory.php deleted file mode 100644 index cb1f232..0000000 --- a/database/factories/InvoiceFactory.php +++ /dev/null @@ -1,141 +0,0 @@ -faker->numberBetween(1, 4); - $type = \collect(TaskTypeEnum::cases())->random(); - $amount = 0; - switch ($type) { - case TaskTypeEnum::web: - $amount = $days * $type->price; - break; - case TaskTypeEnum::seo: - $amount = $days * $type->price; - break; - case TaskTypeEnum::package: - $amount = $days * (\optional(Package::query()->inRandomOrder()->first())->amount ?? - $this->faker->randomFloat(null, 150, 650)); - break; - case TaskTypeEnum::package: - $amount = $days * $this->faker->randomFloat(null, 150, 650); - break; - } - $this->totalDays += $days; - $this->total += $amount; - /** @var \App\Enums\Invoices\TaskTypeEnum */ - $this->tasks[] = \array_merge(Invoice::getTaskStructure(), [ - 'desc' => $this->faker->words(9, true), - 'days' => $days, - 'type' => \collect(TaskTypeEnum::cases())->random()->value, - 'amount' => $amount, - 'package' => 1 - ]); - /** Dates */ - $this->signedDateBoolean = $this->faker->boolean(25); - $this->sentClientDateBoolean = $this->faker->boolean(25); - $this->sentAccountingDateBoolean = $this->faker->boolean(25); - } //end for - } - - /** - * Define the model's default state. - * - * @return array - */ - public function definition() - { - $this->customData(); - return [ - 'firstname' => $this->faker->firstName, - 'lastname' => $this->faker->lastName, - 'object' => $this->faker->words(3, true), - // * constructed object - 'tasks' => $this->tasks, - // * constructed object result - 'total' => $this->total, - // * constructed object result - 'total_days' => $this->totalDays, - 'comment' => $this->faker->text(\rand(20, 40)), - 'show_days' => $this->faker->boolean(75), - 'signed_date' => - $this->signedDateBoolean ? - $this->faker->dateTimeBetween('-1 year', '+1 year') : null, - 'sent_client_date' => - $this->signedDateBoolean && $this->sentClientDateBoolean ? - $this->faker->dateTimeBetween('-1 year', '+1 year') : null, - 'sent_accounting_date' => - $this->signedDateBoolean && $this->sentClientDateBoolean && $this->sentAccountingDateBoolean ? - $this->faker->dateTimeBetween('-1 year', '+1 year') : null, - 'status' => $this->signedDateBoolean && $this->sentClientDateBoolean && $this->sentAccountingDateBoolean ? - InvoiceStatusEnum::archived : InvoiceStatusEnum::opened, - ]; - } -} diff --git a/database/factories/PackageFactory.php b/database/factories/PackageFactory.php deleted file mode 100644 index 85ce43e..0000000 --- a/database/factories/PackageFactory.php +++ /dev/null @@ -1,29 +0,0 @@ - $this->faker->name, - 'amount' => $this->faker->unique()->randomFloat(2, 120, 850) - ]; - } -} diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php deleted file mode 100644 index 7b01f11..0000000 --- a/database/factories/UserFactory.php +++ /dev/null @@ -1,34 +0,0 @@ - $this->faker->name, - 'email' => $this->faker->unique()->safeEmail, - 'email_verified_at' => now(), - // * password - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', - 'remember_token' => Str::random(10), - ]; - } -} diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/migrations/2022_05_24_104346_assign_user_to_tickets.php b/database/migrations/2022_05_24_104346_assign_user_to_tickets.php deleted file mode 100644 index 542f53b..0000000 --- a/database/migrations/2022_05_24_104346_assign_user_to_tickets.php +++ /dev/null @@ -1,38 +0,0 @@ -foreignId('assigned_to') - ->comment('La personne a qui est assigné le ticket.') - ->nullable() - ->after('created_by') - ->constrained('users') - ->nullOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropForeign(['assigned_to']); - $table->dropColumn('assigned_to'); - }); - } -} diff --git a/database/migrations/2022_05_24_122728_move_images_to_storage.php b/database/migrations/2022_05_24_122728_move_images_to_storage.php deleted file mode 100644 index c404e2d..0000000 --- a/database/migrations/2022_05_24_122728_move_images_to_storage.php +++ /dev/null @@ -1,59 +0,0 @@ -map(function (Ticket $ticket) { - if ($ticket->file) { - $ticket->file = "storage/{$ticket->file}"; - } - if ($ticket->file2) { - $ticket->file2 = "storage/{$ticket->file2}"; - } - $ticket->saveQuietly(); - }); - Message::all()->map(function (Message $message) { - if ($message->file) { - $message->file = "storage/{$message->file}"; - } - $message->saveQuietly(); - }); - ModelsFile::all()->map(function (ModelsFile $fichier) { - if ($fichier->file) { - $fichier->file = "storage/{$fichier->file}"; - } - $fichier->saveQuietly(); - }); - } //end if - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('storage', function (Blueprint $table) { - }); - } -} diff --git a/database/migrations/2022_05_25_120339_create_labels_table.php b/database/migrations/2022_05_25_120339_create_labels_table.php deleted file mode 100644 index 94e75bb..0000000 --- a/database/migrations/2022_05_25_120339_create_labels_table.php +++ /dev/null @@ -1,44 +0,0 @@ -id(); - $table->string('name')->unique()->comment('Un ou deux mot désignant le label'); - $table->unsignedInteger('color')->comment('Cast HTML color'); - }); - - $defaultLabels = [ - ['name' => 'urgent', 'color' => '#ebb734'], - ['name' => 'bloquant', 'color' => '#851400'] - ]; - collect($defaultLabels)->map(function (array $defaultLabel) { - $label = new Label(); - $label->name = $defaultLabel['name']; - $label->color = $defaultLabel['color']; - $label->saveOrFail(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('labels'); - } -} diff --git a/database/migrations/2022_05_25_121407_create_label_ticket_table.php b/database/migrations/2022_05_25_121407_create_label_ticket_table.php deleted file mode 100644 index 29bd99d..0000000 --- a/database/migrations/2022_05_25_121407_create_label_ticket_table.php +++ /dev/null @@ -1,35 +0,0 @@ -foreignIdFor(Ticket::class) - ->constrained()->cascadeOnDelete(); - $table->foreignIdFor(Label::class) - ->constrained()->cascadeOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('label_ticket'); - } -} diff --git a/database/migrations/2022_05_30_091333_create_brands_table.php b/database/migrations/2022_05_30_091333_create_brands_table.php deleted file mode 100644 index 48fa439..0000000 --- a/database/migrations/2022_05_30_091333_create_brands_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id()->comment('Doit correspondre aux ids marques de la CRM'); - - $table->string('name')->comment('Nom de la marque'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('brands'); - } -} diff --git a/database/migrations/2022_05_30_091340_add_brand_id_to_sites.php b/database/migrations/2022_05_30_091340_add_brand_id_to_sites.php deleted file mode 100644 index 8dfd1f2..0000000 --- a/database/migrations/2022_05_30_091340_add_brand_id_to_sites.php +++ /dev/null @@ -1,38 +0,0 @@ -foreignIdFor(Brand::class) - ->nullable() - ->comment('Relation is nullable, since not all site would be affiliate with a brand.') - ->after('todo') - ->constrained(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('sites', function (Blueprint $table) { - $table->dropForeign(['brand_id']); - $table->dropColumn('brand_id'); - }); - } -} diff --git a/database/migrations/2022_05_30_091401_create_credit_accounts_table.php b/database/migrations/2022_05_30_091401_create_credit_accounts_table.php deleted file mode 100644 index eb4e732..0000000 --- a/database/migrations/2022_05_30_091401_create_credit_accounts_table.php +++ /dev/null @@ -1,41 +0,0 @@ -id(); - - $table->unsignedTinyInteger('type')->comment('Enum Credit\\AccountTypeEnum'); - - $table->string('label')->comment('Custom account label'); - $table->float('balance')->comment('Account balance'); - - $table->foreignIdFor(Brand::class) - ->constrained(); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_accounts'); - } -} diff --git a/database/migrations/2022_05_30_091412_create_credit_logs_table.php b/database/migrations/2022_05_30_091412_create_credit_logs_table.php deleted file mode 100644 index 3caeb08..0000000 --- a/database/migrations/2022_05_30_091412_create_credit_logs_table.php +++ /dev/null @@ -1,39 +0,0 @@ -id(); - - $table->unsignedTinyInteger('type')->comment('Enum Credit\\BalanceOperationEnum'); - $table->unsignedFloat('amount')->comment('Montant de l\'opération'); - - $table->foreignId('credit_account_id') - ->constrained('credit_accounts') - ->cascadeOnDelete(); - - $table->timestamp('created_at'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_logs'); - } -} diff --git a/database/migrations/2022_05_30_091438_create_credit_estimations_table.php b/database/migrations/2022_05_30_091438_create_credit_estimations_table.php deleted file mode 100644 index 6100458..0000000 --- a/database/migrations/2022_05_30_091438_create_credit_estimations_table.php +++ /dev/null @@ -1,53 +0,0 @@ -id(); - - $table->unsignedTinyInteger('status')->default(EstimationStatusEnum::pending) - ->comment('Enum Credit\\EstimationStatusEnum'); - - $table->unsignedFloat('amount')->comment('Estimation amount'); - - $table->foreignIdFor(Ticket::class) - ->constrained(); - - $table->foreignId('credit_account_id') - ->comment('The account to debit.') - ->constrained('credit_accounts'); - $table->foreignId('estimator_id') - ->comment('The person who has done the estimate.') - ->constrained('users'); - $table->foreignId('validator_id') - ->nullable() - ->comment('The person who has validate the estimate.') - ->constrained('users'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_estimations'); - } -} diff --git a/database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php b/database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php deleted file mode 100644 index b9758b5..0000000 --- a/database/migrations/2022_05_30_091453_create_credit_estimation_log_table.php +++ /dev/null @@ -1,40 +0,0 @@ -id(); - - $table->foreignId('credit_log_id') - ->constrained('credit_logs') - ->cascadeOnDelete(); - - $table->foreignId('credit_estimation_id') - ->constrained('credit_estimations') - ->cascadeOnDelete(); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('credit_estimation_log'); - } -} diff --git a/database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php b/database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php deleted file mode 100644 index e60f793..0000000 --- a/database/migrations/2022_06_15_182442_change_amout_floating_point_on_credit_estimations.php +++ /dev/null @@ -1,33 +0,0 @@ -unsignedFloat('amount', 8, 3) - ->comment('Estimation amount')->change(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('credit_estimations', function ($table) { - $table->unsignedFloat('amount') - ->comment('Estimation amount')->change(); - }); - } -} diff --git a/database/migrations/2022_08_22_154457_create_packages_table.php b/database/migrations/2022_08_22_154457_create_packages_table.php deleted file mode 100644 index 65d1bbb..0000000 --- a/database/migrations/2022_08_22_154457_create_packages_table.php +++ /dev/null @@ -1,33 +0,0 @@ -id(); - - $table->string('name'); - $table->unsignedFloat('amount')->comment('The cost per day'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('packages'); - } -} diff --git a/database/migrations/2022_08_23_085321_create_companies_table.php b/database/migrations/2022_08_23_085321_create_companies_table.php deleted file mode 100644 index 1de59aa..0000000 --- a/database/migrations/2022_08_23_085321_create_companies_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - - $table->string('name'); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('companies'); - } -} diff --git a/database/migrations/2022_08_23_085833_create_invoices_table.php b/database/migrations/2022_08_23_085833_create_invoices_table.php deleted file mode 100644 index c079c23..0000000 --- a/database/migrations/2022_08_23_085833_create_invoices_table.php +++ /dev/null @@ -1,73 +0,0 @@ -id(); - $table->string('ref') - ->comment(sprintf( - '%s. %s. %s. %s.', - 'The invoice reference built as YYYY_MM_INCREMENT_USER', - 'INCREMENT is the N invoice of the month', - 'USER is the first two letters of the user who last edited the invoice', - 'This field has to generated only on create' - )); - - $table->string('firstname')->comment('The person to which the invoice is addressed.'); - $table->string('lastname')->comment('The person to which the invoice is addressed.'); - - $table->string('object')->comment('The invoice object.'); - - $table->text('tasks') - ->comment( - // phpcs:ignore Generic.Files.LineLength.TooLong - 'A JSON object, each line has to be contructed using these fields description, days, type Invoices\TaskTypeEnum, amount' - ); - - $table->unsignedFloat('total')->comment('The total calculated using all tasks'); - $table->unsignedFloat('total_days')->comment('The total days calculated using all tasks'); - - $table->text('comment')->nullable() - ->comment('Any comment joined to the invoice'); - - $table->boolean('show_days')->comment('Show days on the printed invoice'); - - $table->timestamp('signed_date')->nullable() - ->comment('The date the invoice was signed'); - $table->timestamp('sent_client_date')->nullable() - ->comment('The date the invoice was send to the client'); - $table->timestamp('sent_accounting_date')->nullable() - ->comment('The date the invoice was send to the client'); - - $table->foreignIdFor(Site::class)->constrained(); - $table->foreignIdFor(Company::class)->constrained(); - $table->foreignId('invoiced_to_id') - ->constrained((new Company())->getTable()); - - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('invoices'); - } -} diff --git a/database/migrations/2022_08_26_112109_change_sites_projets_relation.php b/database/migrations/2022_08_26_112109_change_sites_projets_relation.php deleted file mode 100644 index e2b55d2..0000000 --- a/database/migrations/2022_08_26_112109_change_sites_projets_relation.php +++ /dev/null @@ -1,44 +0,0 @@ -get(); - Schema::table('projects', function (Blueprint $table) { - $table->foreignId('site_id')->nullable()->after('todo'); - }); - collect($project_siteIds)->map(function (object $project_site) { - DB::table('projects')->where('id', $project_site->project_id) - ->update(['site_id' => $project_site->site_id]); - }); - Schema::table('projects', function (Blueprint $table) { - $table->foreignId('site_id')->nullable(false)->change(); - $table->foreign('site_id')->on('sites')->references('id'); - }); - Schema::drop('project_site'); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('projects', function (Blueprint $table) { - $table->dropForeign('admins_post_id_foreign'); - $table->dropColumn('post_id'); - }); - } -} diff --git a/database/migrations/2023_04_06_101917_change_tickets_status.php b/database/migrations/2023_04_06_101917_change_tickets_status.php deleted file mode 100644 index 5b2aa0d..0000000 --- a/database/migrations/2023_04_06_101917_change_tickets_status.php +++ /dev/null @@ -1,49 +0,0 @@ -update(['status' => 3]); - Ticket::where('status', 9) - ->update(['status' => 4]); - Ticket::where('status', 17) - ->update(['status' => 5]); - Ticket::where('status', 12) - ->update(['status' => 6]); - Ticket::where('status', 13) - ->update(['status' => 7]); - Ticket::where('status', 15) - ->update(['status' => 8]); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Ticket::where('status', 3) - ->update(['status' => 10]); - Ticket::where('status', 4) - ->update(['status' => 9]); - Ticket::where('status', 5) - ->update(['status' => 17]); - Ticket::where('status', 6) - ->update(['status' => 12]); - Ticket::where('status', 7) - ->update(['status' => 13]); - Ticket::where('status', 8) - ->update(['status' => 15]); - } -} diff --git a/database/migrations/2023_04_06_122125_add_message_type.php b/database/migrations/2023_04_06_122125_add_message_type.php deleted file mode 100644 index f7233b5..0000000 --- a/database/migrations/2023_04_06_122125_add_message_type.php +++ /dev/null @@ -1,42 +0,0 @@ -unsignedTinyInteger('type') - ->comment('Message Type defined by an enum.') - ->after('message'); - }); - // Set all existing messages as public. - $messages = DB::table('messages')->get(); - collect($messages)->map(function (object $message) { - DB::table('messages')->where('id', $message->id) - ->update(['type' => MessageTypeEnum::public]); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('messages', function (Blueprint $table) { - $table->dropColumn('type'); - }); - } -} diff --git a/database/migrations/2023_04_18_123853_create_dutyhours_table.php b/database/migrations/2023_04_18_123853_create_dutyhours_table.php deleted file mode 100644 index 1d8ccb9..0000000 --- a/database/migrations/2023_04_18_123853_create_dutyhours_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->date('date')->unique(); - $table->string('person'); - $table->string('place'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('dutyhours'); - } -} diff --git a/database/migrations/2023_04_18_150623_create_informations_table.php b/database/migrations/2023_04_18_150623_create_informations_table.php deleted file mode 100644 index ae4165b..0000000 --- a/database/migrations/2023_04_18_150623_create_informations_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->string('title'); - $table->string('message'); - $table->unsignedTinyInteger('type')->comment('Defined by the InfoColorsEnum enum.'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('informations'); - } -} diff --git a/database/migrations/2023_04_19_160127_create_ticket_types_table.php b/database/migrations/2023_04_19_160127_create_ticket_types_table.php deleted file mode 100644 index d77f578..0000000 --- a/database/migrations/2023_04_19_160127_create_ticket_types_table.php +++ /dev/null @@ -1,44 +0,0 @@ -id(); - - $table->unsignedTinyInteger('type')->unique()->comment('TicketType Enum'); - $table->text('template')->comment('Le template du type de ticket'); - - $table->timestamps(); - }); - - foreach (TicketTypeEnum::cases() as $ticketType) { - (new TicketType([ - 'type' => $ticketType, - 'template' => "Cordialement.", - ]))->saveQuietly(); - }; - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('ticket_types'); - } -} diff --git a/database/migrations/2023_08_01_125540_drop_macro_activities_table.php b/database/migrations/2023_08_01_125540_drop_macro_activities_table.php deleted file mode 100644 index 039d4c9..0000000 --- a/database/migrations/2023_08_01_125540_drop_macro_activities_table.php +++ /dev/null @@ -1,39 +0,0 @@ -id(); - $table->dateTime('start')->comment('La date de début de l\'activité.'); - $table->dateTime('end')->comment('La date de fin de l\'activité.'); - $table->unsignedSmallInteger('activity')->comment('Enum MacroSchedule/Activity'); - $table->unsignedSmallInteger('load')->comment('Le nombre d\'hommes qui vont être mobilisé pour la tâche'); - $table->string('comment')->comment('Commentaire sur la tâche, (255 chars max)'); - - $table->foreignIdFor(Project::class)->constrained() - ->onUpdate('cascade')->onDelete('cascade'); - }); - } -}; diff --git a/database/migrations/2023_08_01_130046_drop_macro_markers_table.php b/database/migrations/2023_08_01_130046_drop_macro_markers_table.php deleted file mode 100644 index 98b1d4b..0000000 --- a/database/migrations/2023_08_01_130046_drop_macro_markers_table.php +++ /dev/null @@ -1,37 +0,0 @@ -id(); - - $table->string('label')->comment('Le libellé du marqueur.'); - $table->dateTime('marker')->comment('Le point dans le temps du marqueur.'); - - $table->foreignIdFor(Project::class)->constrained() - ->onUpdate('cascade')->onDelete('cascade'); - }); - } -}; diff --git a/database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php b/database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php deleted file mode 100644 index 5e31dce..0000000 --- a/database/migrations/2023_08_08_101912_remove_description_and_todo_fields_in_projects.php +++ /dev/null @@ -1,34 +0,0 @@ -dropColumn('description'); - $table->dropColumn('todo'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('projects', function (Blueprint $table) { - $table->text('description')->after('status'); - $table->text('todo')->after('description')->nullable(); - }); - } -}; diff --git a/database/migrations/2023_08_08_122708_drop_data_sites_table.php b/database/migrations/2023_08_08_122708_drop_data_sites_table.php deleted file mode 100644 index a41bbd4..0000000 --- a/database/migrations/2023_08_08_122708_drop_data_sites_table.php +++ /dev/null @@ -1,36 +0,0 @@ -dropColumn('status'); - $table->dropColumn('description'); - $table->dropColumn('todo'); - }); - } - - /** - * Run the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->string('status')->after('name'); - $table->text('description')->after('status'); - $table->text('todo')->nullable()->after('description'); - }); - } -}; diff --git a/database/migrations/2023_08_11_093937_drop_files_table.php b/database/migrations/2023_08_11_093937_drop_files_table.php deleted file mode 100644 index 4871010..0000000 --- a/database/migrations/2023_08_11_093937_drop_files_table.php +++ /dev/null @@ -1,37 +0,0 @@ -id(); - $table->string('name'); - $table->string('uri', 2000)->nullable(); - $table->string('file')->nullable(); - $table->smallInteger('type'); - $table->smallInteger('category'); - $table->morphs('parent'); - $table->timestamps(); - }); - } -}; diff --git a/database/migrations/2023_08_11_094518_drop_logs_table.php b/database/migrations/2023_08_11_094518_drop_logs_table.php deleted file mode 100644 index 44dd7f7..0000000 --- a/database/migrations/2023_08_11_094518_drop_logs_table.php +++ /dev/null @@ -1,34 +0,0 @@ -id(); - $table->text('entry'); - $table->foreignId('user_id')->constrained('users'); - $table->morphs('parent'); - $table->timestamps(); - }); - } -}; diff --git a/database/migrations/2023_08_14_100506_add_status_invoices_table.php b/database/migrations/2023_08_14_100506_add_status_invoices_table.php deleted file mode 100644 index 025fe31..0000000 --- a/database/migrations/2023_08_14_100506_add_status_invoices_table.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedTinyInteger('status') - ->default(InvoiceStatusEnum::opened->value) - ->comment('Status of the invoice.') - ->after('invoiced_to_id'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('invoices', function (Blueprint $table) { - $table->dropColumn('status'); - }); - } -}; diff --git a/database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php b/database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php deleted file mode 100644 index 43f46f5..0000000 --- a/database/migrations/2023_08_14_134026_add_gitlab_id_to_sites_table.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedInteger('gitlab_project_id') - ->unique() - ->nullable() - ->comment("ID du dépôt Gitlab") - ->after('name'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->dropColumn('gitlab_project_id'); - }); - } -}; diff --git a/database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php b/database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php deleted file mode 100644 index e4b1128..0000000 --- a/database/migrations/2023_08_14_142748_add_last_activity_tickets_table.php +++ /dev/null @@ -1,43 +0,0 @@ -timestamp('last_activity') - ->default(Carbon::now()) - ->comment('Last activity on the ticket.') - ->after('is_internal'); - }); - Ticket::get()->map(function (object $ticket) { - $lastMessage = $ticket->messages->whereNotNull('user_id')->sortByDesc('updated_at')->first(); - $ticket->last_activity = - $lastMessage->updated_at ?? $ticket->updated_at; - $ticket->saveQuietly(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('last_activity'); - }); - } -}; diff --git a/database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php b/database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php deleted file mode 100644 index cbb42db..0000000 --- a/database/migrations/2023_08_14_151531_add_gitlab_issue_to_tickets_table.php +++ /dev/null @@ -1,35 +0,0 @@ -string('gitlab_issue') - ->nullable() - ->comment("URL de l'issue Gitlab") - ->after('is_internal'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('gitlab_issue'); - }); - } -}; diff --git a/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php b/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php deleted file mode 100644 index ec5427d..0000000 --- a/database/migrations/2023_08_14_171640_add_urls_to_sites_table.php +++ /dev/null @@ -1,33 +0,0 @@ -string('url_re7')->nullable()->after('name'); - $table->string('url_prod')->nullable()->after('url_re7'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->dropColumn(['url_re7', 'url_prod']); - }); - } -}; diff --git a/database/migrations/2023_08_17_164511_remove_status_from_projects_table.php b/database/migrations/2023_08_17_164511_remove_status_from_projects_table.php deleted file mode 100644 index ee77e6e..0000000 --- a/database/migrations/2023_08_17_164511_remove_status_from_projects_table.php +++ /dev/null @@ -1,32 +0,0 @@ -dropColumn('status'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('projects', function (Blueprint $table) { - $table->unsignedSmallInteger('status')->default(0)->comment('Enum ProjectStatus')->after('name'); - }); - } -}; diff --git a/database/migrations/2023_08_18_091917_drop_schedules_table.php b/database/migrations/2023_08_18_091917_drop_schedules_table.php deleted file mode 100644 index 1920eba..0000000 --- a/database/migrations/2023_08_18_091917_drop_schedules_table.php +++ /dev/null @@ -1,40 +0,0 @@ -id(); - $table->foreignId('user_id')->unique(); - $table->foreign('user_id')->on('sites')->references('id'); - $table->date('date')->unique(); - $table->tinyInteger('slot')->unique(); - $table->string('activity')->nullable(); - $table->text('description'); - $table->bigInteger('id_lie'); - $table->string('model_lie'); - - $table->timestamps(); - }); - } -} diff --git a/database/migrations/2023_11_13_144755_add_title_to_tickets_table.php b/database/migrations/2023_11_13_144755_add_title_to_tickets_table.php deleted file mode 100644 index 548d20d..0000000 --- a/database/migrations/2023_11_13_144755_add_title_to_tickets_table.php +++ /dev/null @@ -1,44 +0,0 @@ -string('title') - ->after('type') - ->comment('Titre du ticket'); - }); - - DB::transaction(function () { - $tickets = Ticket::all(); - foreach ($tickets as $ticket) { - $ticket->title = 'ts-' . $ticket->id; - $ticket->saveQuietly(); - } - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('title'); - }); - } -}; diff --git a/database/migrations/2024_07_19_150414_add_files_to_tickets_table.php b/database/migrations/2024_07_19_150414_add_files_to_tickets_table.php deleted file mode 100644 index a3e3ace..0000000 --- a/database/migrations/2024_07_19_150414_add_files_to_tickets_table.php +++ /dev/null @@ -1,36 +0,0 @@ -string('file3')->after('file2')->nullable()->comment('Pièce jointes n°3'); - $table->string('file4')->after('file3')->nullable()->comment('Pièce jointes n°4'); - $table->string('file5')->after('file4')->nullable()->comment('Pièce jointes n°5'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('file3'); - $table->dropColumn('file4'); - $table->dropColumn('file5'); - }); - } -}; diff --git a/database/migrations/2024_07_19_151553_add_files_to_messages_table.php b/database/migrations/2024_07_19_151553_add_files_to_messages_table.php deleted file mode 100644 index f3ec4c1..0000000 --- a/database/migrations/2024_07_19_151553_add_files_to_messages_table.php +++ /dev/null @@ -1,34 +0,0 @@ -string('file2')->after('file')->nullable()->comment('Pièce jointes n°2'); - $table->string('file3')->after('file2')->nullable()->comment('Pièce jointes n°3'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('messages', function (Blueprint $table) { - $table->dropColumn('file2'); - $table->dropColumn('file3'); - }); - } -}; diff --git a/database/migrations/2025_02_14_122301_rebase_tickets_type.php b/database/migrations/2025_02_14_122301_rebase_tickets_type.php deleted file mode 100644 index 6c8fcf1..0000000 --- a/database/migrations/2025_02_14_122301_rebase_tickets_type.php +++ /dev/null @@ -1,42 +0,0 @@ -get()->map(function (Ticket $model) { - $model->type = $model->getRawOriginal('type') + 1; - $model->saveQuietly(); - }); - TicketType::query()->orderBy('type', 'DESC')->get()->map(function (TicketType $model) { - $model->type = $model->getRawOriginal('type') + 1; - $model->saveQuietly(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Ticket::query()->get()->map(function (Ticket $model) { - $model->type = $model->getRawOriginal('type') - 1; - $model->saveQuietly(); - }); - TicketType::query()->orderBy('type', 'DESC')->get()->map(function (TicketType $model) { - $model->type = $model->getRawOriginal('type') - 1; - $model->saveQuietly(); - }); - } -}; diff --git a/database/migrations/2025_02_19_154440_rebase_tickets_status.php b/database/migrations/2025_02_19_154440_rebase_tickets_status.php deleted file mode 100644 index cc26af3..0000000 --- a/database/migrations/2025_02_19_154440_rebase_tickets_status.php +++ /dev/null @@ -1,33 +0,0 @@ -where('status', '>', 6)->get()->map(function (Ticket $model) { - $model->status = $model->getRawOriginal('status') + 1; - $model->saveQuietly(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Ticket::query()->where('status', '>', 6)->get()->map(function (Ticket $model) { - $model->status = $model->getRawOriginal('status') - 1; - $model->saveQuietly(); - }); - } -}; diff --git a/database/migrations/2025_03_12_102925_change_order_to_tickets.php b/database/migrations/2025_03_12_102925_change_order_to_tickets.php deleted file mode 100644 index 3483b0a..0000000 --- a/database/migrations/2025_03_12_102925_change_order_to_tickets.php +++ /dev/null @@ -1,40 +0,0 @@ -integer('order')->after('status')->comment('Ticket order.'); - }); - - Site::query()->get()->map(function ($site) { - $site->tickets->map(function ($ticket, $ticketIndex) { - $ticket->order = $ticketIndex + 1; - $ticket->saveQuietly(); - }); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('order'); - }); - } -}; diff --git a/database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php b/database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php deleted file mode 100644 index deb9c5b..0000000 --- a/database/migrations/2025_03_13_094420_add_mep_date_on_tickets.php +++ /dev/null @@ -1,32 +0,0 @@ -date('date_mep')->nullable()->after('gitlab_issue')->comment('Date MEP souhaitée'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('date_mep'); - }); - } -}; diff --git a/database/migrations/2025_03_13_151503_tickets_linking.php b/database/migrations/2025_03_13_151503_tickets_linking.php deleted file mode 100644 index 801bbb3..0000000 --- a/database/migrations/2025_03_13_151503_tickets_linking.php +++ /dev/null @@ -1,35 +0,0 @@ -unsignedBigInteger('ticket_id') - ->constrained()->cascadeOnDelete(); - $table->unsignedBigInteger('linked_ticket_id') - ->constrained()->cascadeOnDelete(); - $table->foreign('ticket_id')->references('id')->on('tickets'); - $table->foreign('linked_ticket_id')->references('id')->on('tickets'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::dropIfExists('linked_tickets'); - } -}; diff --git a/database/migrations/2025_04_11_183728_delete_dutyhours_table.php b/database/migrations/2025_04_11_183728_delete_dutyhours_table.php deleted file mode 100644 index 77d5818..0000000 --- a/database/migrations/2025_04_11_183728_delete_dutyhours_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->date('date')->unique(); - $table->string('person'); - $table->string('place'); - $table->timestamps(); - }); - } -}; diff --git a/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php b/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php deleted file mode 100644 index 3712c0d..0000000 --- a/database/migrations/2025_04_17_112713_add_users_relation_on_sites_table.php +++ /dev/null @@ -1,38 +0,0 @@ -unsignedBigInteger('project_manager_id') - ->nullable() - ->after('brand_id') - ->comment('Project manager relationship'); - - $table->foreign('project_manager_id')->references('id')->on('users')->nullOnDelete(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->dropForeign(['project_manager_id']); - $table->dropColumn('project_manager_id'); - }); - } -}; diff --git a/database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php b/database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php deleted file mode 100644 index f096889..0000000 --- a/database/migrations/2025_04_17_162711_add_gitlab_id_to_users_table.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedInteger('gitlab_id') - ->unique() - ->nullable() - ->comment("ID du user Gitlab") - ->after('remember_token'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('users', function (Blueprint $table) { - $table->dropColumn('gitlab_id'); - }); - } -}; diff --git a/database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php b/database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php deleted file mode 100644 index c34330b..0000000 --- a/database/migrations/2025_06_17_145213_add_deleted_at_to_invoices_table.php +++ /dev/null @@ -1,32 +0,0 @@ -softDeletes(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('invoices', function (Blueprint $table) { - $table->dropColumn('deleted_at'); - }); - } -}; diff --git a/database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php b/database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php deleted file mode 100644 index efdad61..0000000 --- a/database/migrations/2025_06_17_150855_add_deleted_at_to_tickets_table.php +++ /dev/null @@ -1,32 +0,0 @@ -softDeletes(); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('tickets', function (Blueprint $table) { - $table->dropColumn('deleted_at'); - }); - } -}; diff --git a/database/migrations/2025_07_10_103249_add_favourite_site_to_user.php b/database/migrations/2025_07_10_103249_add_favourite_site_to_user.php deleted file mode 100644 index 7eda1af..0000000 --- a/database/migrations/2025_07_10_103249_add_favourite_site_to_user.php +++ /dev/null @@ -1,37 +0,0 @@ -foreignId('favourite_site_id') - ->nullable() - ->after('gitlab_id') - ->constrained('sites') - ->onDelete('set null'); - }); - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down(): void - { - Schema::table('users', function (Blueprint $table) { - $table->dropForeign(['favourite_site_id']); - $table->dropColumn('favourite_site_id'); - }); - } -}; diff --git a/database/migrations/2025_08_21_120157_delete_projects_table.php b/database/migrations/2025_08_21_120157_delete_projects_table.php deleted file mode 100644 index f784842..0000000 --- a/database/migrations/2025_08_21_120157_delete_projects_table.php +++ /dev/null @@ -1,23 +0,0 @@ -unsignedInteger('gitlab_project_id') - ->unique(false) - ->nullable() - ->change(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('sites', function (Blueprint $table) { - $table->unsignedInteger('gitlab_project_id') - ->unique(true) - ->nullable() - ->change(); - }); - } -}; diff --git a/database/migrations/2025_11_19_142520_reorder_all_tickets.php b/database/migrations/2025_11_19_142520_reorder_all_tickets.php deleted file mode 100644 index 56fb9e2..0000000 --- a/database/migrations/2025_11_19_142520_reorder_all_tickets.php +++ /dev/null @@ -1,36 +0,0 @@ -each(function (Site $site) { - $tickets = $site->tickets()->whereNot('status', TicketStatusEnum::archived)->orderBy('order')->get(); - $order = 1; - foreach ($tickets as $ticket) { - $ticket->order = $order; - $ticket->saveOrFail(); - $order++; - } - }); - Ticket::query()->where('status', TicketStatusEnum::archived)->update([ - 'order' => 0 - ]); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - // Nothing to revert. - } -}; diff --git a/database/migrations/2026_01_02_101346_create_gitlab_projects_table.php b/database/migrations/2026_01_02_101346_create_gitlab_projects_table.php deleted file mode 100644 index 82ce049..0000000 --- a/database/migrations/2026_01_02_101346_create_gitlab_projects_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('name')->comment("Gitlab project name"); - $table->string('url')->comment("Gitlab URL"); - $table->boolean('is_archived')->comment("Gitlab archive status"); - $table->integer('gitlab_id')->unique()->comment("Gitlab unique ID"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_projects'); - } -}; diff --git a/database/migrations/2026_01_02_111055_create_gitlab_issues_table.php b/database/migrations/2026_01_02_111055_create_gitlab_issues_table.php deleted file mode 100644 index c4496f0..0000000 --- a/database/migrations/2026_01_02_111055_create_gitlab_issues_table.php +++ /dev/null @@ -1,42 +0,0 @@ -id(); - $table->string('title')->comment("Gitlab issue title"); - $table->string('url')->comment("Gitlab URL"); - $table->integer('estimate_time')->default(0)->comment("Gitlab issue estimate time in seconds"); - $table->integer('spent_time')->default(0)->comment("Gitlab issue spent time in seconds"); - $table->boolean('is_closed')->comment("Gitlab issue status"); - $table->integer('gitlab_id')->comment("Gitlab issue id"); - $table->integer('gitlab_iid')->comment("Gitlab issue iid in project"); - $table->integer('milestone_iid')->nullable()->comment("Gitlab issue linked milestone iid in project"); - $table->integer('gitlab_project_id')->comment("Gitlab project id"); - $table->date('g_created_at')->comment("Gitlab issue created at"); - $table->date('g_updated_at')->comment("Gitlab issue updated at"); - $table->date('g_closed_at')->nullable()->comment("Gitlab issue closed at"); - $table->date('g_due_date')->nullable()->comment("Gitlab issue due date"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_issues'); - } -}; - -//"labels" : ["foo", "bar"], \ No newline at end of file diff --git a/database/migrations/2026_01_02_121235_create_gitlab_labels_table.php b/database/migrations/2026_01_02_121235_create_gitlab_labels_table.php deleted file mode 100644 index 8da813b..0000000 --- a/database/migrations/2026_01_02_121235_create_gitlab_labels_table.php +++ /dev/null @@ -1,29 +0,0 @@ -id(); - $table->string('name')->unique()->comment("Label name"); - $table->integer('gitlab_id')->comment("Label Gitlab id"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_labels'); - } -}; diff --git a/database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php b/database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php deleted file mode 100644 index bc593a0..0000000 --- a/database/migrations/2026_01_02_124727_create_gitlab_milestones_table.php +++ /dev/null @@ -1,37 +0,0 @@ -id(); - $table->string('title')->comment("Milestone title"); - $table->string('url')->comment("Gitlab URL"); - $table->boolean('is_closed')->comment("Gitlab milestone status"); - $table->integer('gitlab_id')->comment("Gitlab milestone id"); - $table->integer('gitlab_iid')->comment("Gitlab milestone iid in project"); - $table->integer('gitlab_project_id')->comment("Gitlab project id"); - $table->date('g_created_at')->comment("Gitlab milestone created at"); - $table->date('g_updated_at')->comment("Gitlab milestone updated at"); - $table->date('g_start_date')->nullable()->comment("Gitlab milestone start date"); - $table->date('g_due_date')->nullable()->comment("Gitlab milestone due date"); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_milestones'); - } -}; diff --git a/database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php b/database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php deleted file mode 100644 index 0b7d793..0000000 --- a/database/migrations/2026_01_02_142743_create_pivot_gitlab_issues_labels.php +++ /dev/null @@ -1,30 +0,0 @@ -foreignId('issue_id')->constrained('gitlab_issues')->cascadeOnDelete(); - $table->foreignId('label_id')->constrained('gitlab_labels')->cascadeOnDelete(); - $table->timestamps(); - - $table->primary(['issue_id', 'label_id']); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('gitlab_issues_labels'); - } -}; diff --git a/database/migrations/2026_02_25_171152_alter_packages_table.php b/database/migrations/2026_02_25_171152_alter_packages_table.php deleted file mode 100644 index 9d534fd..0000000 --- a/database/migrations/2026_02_25_171152_alter_packages_table.php +++ /dev/null @@ -1,28 +0,0 @@ -boolean('published')->after('amount'); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('packages', function (Blueprint $table) { - $table->dropColumn('published'); - }); - } -}; diff --git a/database/schema/mysql-schema.dump b/database/schema/mysql-schema.dump deleted file mode 100644 index 92c5495..0000000 --- a/database/schema/mysql-schema.dump +++ /dev/null @@ -1,266 +0,0 @@ -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -DROP TABLE IF EXISTS `files`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `files` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `uri` varchar(2000) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `file` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `type` smallint(6) NOT NULL, - `category` smallint(6) NOT NULL, - `parent_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `parent_id` bigint(20) unsigned NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `files_parent_type_parent_id_index` (`parent_type`,`parent_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `logs`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `logs` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `entry` text COLLATE utf8mb4_unicode_ci NOT NULL, - `user_id` bigint(20) unsigned NOT NULL, - `parent_type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `parent_id` bigint(20) unsigned NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `logs_user_id_foreign` (`user_id`), - KEY `logs_parent_type_parent_id_index` (`parent_type`,`parent_id`), - CONSTRAINT `logs_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `macro_activities`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `macro_activities` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `start` datetime NOT NULL COMMENT 'La date de début de l''activité.', - `end` datetime NOT NULL COMMENT 'La date de fin de l''activité.', - `activity` smallint(5) unsigned NOT NULL COMMENT 'Enum MacroSchedule/Activity', - `load` smallint(5) unsigned NOT NULL COMMENT 'Le nombre d''hommes qui vont être mobilisé pour la tâche', - `comment` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Commentaire sur la tâche, (255 chars max)', - `project_id` bigint(20) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `macro_activities_project_id_foreign` (`project_id`), - CONSTRAINT `macro_activities_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `macro_markers`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `macro_markers` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `label` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'Le libellé du marqueur.', - `marker` datetime NOT NULL COMMENT 'Le point dans le temps du marqueur.', - `project_id` bigint(20) unsigned NOT NULL, - PRIMARY KEY (`id`), - KEY `macro_markers_project_id_foreign` (`project_id`), - CONSTRAINT `macro_markers_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE ON UPDATE CASCADE -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `messages` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `ticket_id` bigint(20) unsigned NOT NULL, - `user_id` bigint(20) unsigned DEFAULT NULL, - `message` text COLLATE utf8mb4_unicode_ci NOT NULL, - `file` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `messages_ticket_id_foreign` (`ticket_id`), - KEY `messages_user_id_foreign` (`user_id`), - CONSTRAINT `messages_ticket_id_foreign` FOREIGN KEY (`ticket_id`) REFERENCES `tickets` (`id`), - CONSTRAINT `messages_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `migrations`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `migrations` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `migration` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `batch` int(11) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `password_resets`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `password_resets` ( - `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `token` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `created_at` timestamp NULL DEFAULT NULL, - KEY `password_resets_email_index` (`email`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `project_site`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `project_site` ( - `project_id` bigint(20) unsigned NOT NULL, - `site_id` bigint(20) unsigned NOT NULL, - UNIQUE KEY `project_site_project_id_site_id_unique` (`project_id`,`site_id`), - KEY `project_site_site_id_foreign` (`site_id`), - CONSTRAINT `project_site_project_id_foreign` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE CASCADE, - CONSTRAINT `project_site_site_id_foreign` FOREIGN KEY (`site_id`) REFERENCES `sites` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `projects`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `projects` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `status` smallint(5) unsigned NOT NULL DEFAULT 0 COMMENT 'Enum ProjectStatus', - `description` text COLLATE utf8mb4_unicode_ci NOT NULL, - `todo` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `schedules`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `schedules` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `user_id` bigint(20) unsigned NOT NULL, - `date` date NOT NULL, - `slot` smallint(6) NOT NULL, - `activity` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `description` text COLLATE utf8mb4_unicode_ci NOT NULL, - `id_lie` bigint(20) DEFAULT NULL, - `model_lie` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `user_day_slot_unique` (`user_id`,`date`,`slot`), - CONSTRAINT `schedules_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `site_user`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `site_user` ( - `site_id` bigint(20) unsigned NOT NULL, - `user_id` bigint(20) unsigned NOT NULL, - UNIQUE KEY `site_user_site_id_user_id_unique` (`site_id`,`user_id`), - KEY `project_user_user_id_foreign` (`user_id`), - CONSTRAINT `project_user_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE, - CONSTRAINT `site_user_site_id_foreign` FOREIGN KEY (`site_id`) REFERENCES `sites` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `sites`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `sites` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `status` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `description` text COLLATE utf8mb4_unicode_ci NOT NULL, - `todo` text COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - `deleted_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `subscriptions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `subscriptions` ( - `ticket_id` bigint(20) unsigned NOT NULL, - `user_id` bigint(20) unsigned NOT NULL, - PRIMARY KEY (`ticket_id`,`user_id`), - KEY `subscriptions_user_id_foreign` (`user_id`), - CONSTRAINT `subscriptions_ticket_id_foreign` FOREIGN KEY (`ticket_id`) REFERENCES `tickets` (`id`), - CONSTRAINT `subscriptions_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `tickets`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `tickets` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `created_by` bigint(20) unsigned NOT NULL, - `site_id` bigint(20) unsigned NOT NULL, - `type` int(11) NOT NULL, - `text` text COLLATE utf8mb4_unicode_ci NOT NULL, - `file` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `file2` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `status` int(11) NOT NULL DEFAULT 1, - `is_internal` tinyint(4) NOT NULL DEFAULT 0, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - KEY `tickets_created_by_foreign` (`created_by`), - KEY `tickets_project_id_foreign` (`site_id`), - CONSTRAINT `tickets_created_by_foreign` FOREIGN KEY (`created_by`) REFERENCES `users` (`id`), - CONSTRAINT `tickets_site_id_foreign` FOREIGN KEY (`site_id`) REFERENCES `sites` (`id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -DROP TABLE IF EXISTS `users`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!50503 SET character_set_client = utf8mb4 */; -CREATE TABLE `users` ( - `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `email` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `password` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, - `role` int(11) NOT NULL DEFAULT 2, - `remember_token` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL, - `created_at` timestamp NULL DEFAULT NULL, - `updated_at` timestamp NULL DEFAULT NULL, - `deleted_at` timestamp NULL DEFAULT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `users_email_unique` (`email`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - -INSERT INTO `migrations` VALUES (1,'2014_10_12_000000_create_users_table',1); -INSERT INTO `migrations` VALUES (2,'2020_11_13_152248_create_projects',1); -INSERT INTO `migrations` VALUES (3,'2020_11_13_152321_create_tickets',1); -INSERT INTO `migrations` VALUES (4,'2020_11_17_140637_update_users',1); -INSERT INTO `migrations` VALUES (5,'2020_11_25_104931_create_messages',2); -INSERT INTO `migrations` VALUES (6,'2020_11_25_141438_alter_tickets',2); -INSERT INTO `migrations` VALUES (7,'2020_11_26_132557_create_subscriptions',3); -INSERT INTO `migrations` VALUES (8,'2021_04_21_132132_update_tickets_status_with_enum_status',4); -INSERT INTO `migrations` VALUES (9,'2021_04_21_132140_update_tickets_status_with_enum_status2',5); -INSERT INTO `migrations` VALUES (10,'2021_04_21_132140_update_tickets_status_with_enum_status3',6); -INSERT INTO `migrations` VALUES (11,'2021_06_17_173912_create_project_user_table',7); -INSERT INTO `migrations` VALUES (12,'2021_06_28_163754_add_soft_delete_on_users',8); -INSERT INTO `migrations` VALUES (13,'2021_06_28_163755_add_soft_delete_on_projects',9); -INSERT INTO `migrations` VALUES (14,'2021_07_23_111336_rename_projects_table_into_sites_table',10); -INSERT INTO `migrations` VALUES (15,'2021_07_23_150120_create_projects_table',11); -INSERT INTO `migrations` VALUES (16,'2021_07_23_152102_create_project_site_table',12); -INSERT INTO `migrations` VALUES (17,'2021_07_23_152810_create_logs_table',13); -INSERT INTO `migrations` VALUES (18,'2021_07_23_153446_create_files_table',14); -INSERT INTO `migrations` VALUES (19,'2021_07_27_144557_add_todo_on_sites_table',15); -INSERT INTO `migrations` VALUES (20,'2021_08_01_140823_create_password_resets_table',16); -INSERT INTO `migrations` VALUES (21,'2021_10_01_090053_create_week_plannings_table',17); -INSERT INTO `migrations` VALUES (22,'2021_12_03_195755_create_schedules_table',18); -INSERT INTO `migrations` VALUES (23,'2022_02_23_121545_add_is_internal_on_tickets_table',19); -INSERT INTO `migrations` VALUES (24,'2022_03_08_101614_migrate_schedules_to_eight_slots_per_day',20); -INSERT INTO `migrations` VALUES (25,'2022_03_15_164122_drop_week_plannings_table',21); -INSERT INTO `migrations` VALUES (26,'2022_04_26_095605_create_markers_table',22); -INSERT INTO `migrations` VALUES (27,'2022_04_26_095636_create_activities_table',23); -INSERT INTO `migrations` VALUES (28,'2022_04_26_102155_change_status_on_projects_table',24); diff --git a/database/seeders/Classic/.gitkeep b/database/seeders/Classic/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index cac798a..e29c5fc 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,6 +3,8 @@ namespace Database\Seeders; use Illuminate\Database\Seeder; +use Uwil\LaravelCommon\Enums\SeederCategoryEnum; +use Uwil\LaravelCommon\Support\SeederRegistry; class DatabaseSeeder extends Seeder { @@ -11,7 +13,8 @@ class DatabaseSeeder extends Seeder * * @return void */ - public function run() + public function run(): void { + SeederRegistry::runAll(SeederCategoryEnum::classic); } } diff --git a/database/seeders/InvoicingSeeder.php b/database/seeders/InvoicingSeeder.php deleted file mode 100644 index 166c42e..0000000 --- a/database/seeders/InvoicingSeeder.php +++ /dev/null @@ -1,54 +0,0 @@ -getTable())->truncate(); - - /** Reset all packages (forfaits) */ - Package::all()->map(function (Package $model) { - $model->deleteOrFail(); - }); - Package::factory(6)->create(); - - /** Reset all companies */ - Company::all()->map(function (Company $model) { - $model->deleteOrFail(); - }); - Company::factory(6)->create(); - - Invoice::factory(45)->make()->each(function (Invoice $model) { - $model->ref = \sprintf( - '%s_%s_%s', - Carbon::now()->isoFormat('YYYY-MM'), - Str::padLeft((Invoice::whereYear('created_at', Carbon::now()->isoFormat('YYYY')) - ->whereMonth('created_at', Carbon::now()->isoFormat('MM')) - ->count() + 1) ?: 1, 4, '0'), - Str::substr(Str::upper(Str::slug(User::query()->inRandomOrder()->first()->name)), 0, 1) - ); - $model->site()->associate(Site::query()->inRandomOrder()->first()); - $model->company()->associate(Company::query()->inRandomOrder()->first()); - $model->companyInvoiced()->associate(Company::query()->inRandomOrder()->first()); - $model->saveQuietly(); - }); - } -} diff --git a/database/seeders/Mandatory/.gitkeep b/database/seeders/Mandatory/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/database/seeders/MandatorySeeder.php b/database/seeders/MandatorySeeder.php new file mode 100644 index 0000000..0c19304 --- /dev/null +++ b/database/seeders/MandatorySeeder.php @@ -0,0 +1,20 @@ + "Tableau de bord", +]; diff --git a/lang/de/enums.php b/lang/de/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/de/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/de/errors.php b/lang/de/errors.php new file mode 100644 index 0000000..b2f9363 --- /dev/null +++ b/lang/de/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Ungültige Anfrage", + "description" => "Der Server konnte Ihre Anfrage nicht verstehen. Bitte überprüfen Sie sie und versuchen Sie es erneut.", + ], + "401" => [ + "title" => "Nicht autorisiert", + "description" => "Sie müssen angemeldet sein, um auf diese Seite zuzugreifen.", + ], + "403" => [ + "title" => "Zugriff verweigert", + "description" => "Entschuldigung, Sie haben keine Berechtigung, auf diese Seite zuzugreifen.", + ], + "404" => [ + "title" => "Seite nicht gefunden", + "description" => "Entschuldigung, die von Ihnen gesuchte Seite konnte nicht gefunden werden.", + ], + "405" => [ + "title" => "Methode nicht erlaubt", + "description" => "Die für diese Anfrage verwendete Methode ist nicht erlaubt.", + ], + "408" => [ + "title" => "Zeitüberschreitung", + "description" => "Der Server hat zu lange gebraucht, um zu antworten. Bitte versuchen Sie es erneut.", + ], + "419" => [ + "title" => "Seite abgelaufen", + "description" => "Ihre Sitzung ist abgelaufen. Bitte aktualisieren Sie die Seite und versuchen Sie es erneut.", + ], + "422" => [ + "title" => "Nicht verarbeitbare Entität", + "description" => "Die bereitgestellten Daten sind ungültig. Bitte überprüfen Sie sie und versuchen Sie es erneut.", + ], + "429" => [ + "title" => "Zu viele Anfragen", + "description" => "Sie haben zu viele Anfragen in kurzer Zeit gesendet. Bitte warten Sie einen Moment und versuchen Sie es erneut.", + ], + "500" => [ + "title" => "Serverfehler", + "description" => "Ups, es ist ein Fehler auf unseren Servern aufgetreten.", + ], + "502" => [ + "title" => "Fehlerhafte Gateway-Antwort", + "description" => "Der Server hat eine ungültige Antwort erhalten. Bitte versuchen Sie es später erneut.", + ], + "503" => [ + "title" => "Dienst nicht verfügbar", + "description" => "Entschuldigung, wir führen gerade Wartungsarbeiten durch. Bitte versuchen Sie es später erneut.", + ], + "504" => [ + "title" => "Gateway-Zeitüberschreitung", + "description" => "Der Server hat zu lange gebraucht, um zu antworten. Bitte versuchen Sie es später erneut.", + ], +]; diff --git a/lang/de/front.php b/lang/de/front.php new file mode 100644 index 0000000..f28dc82 --- /dev/null +++ b/lang/de/front.php @@ -0,0 +1,6 @@ + "Hallo Welt", + "back_to_your_website" => "Zurück zur Startseite", +]; diff --git a/lang/de/models.php b/lang/de/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/de/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/de/validation.php b/lang/de/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/de/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/en/back.php b/lang/en/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/en/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/en/enums.php b/lang/en/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/en/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/en/errors.php b/lang/en/errors.php new file mode 100644 index 0000000..f716b76 --- /dev/null +++ b/lang/en/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Bad Request", + "description" => "The server could not understand your request. Please check and try again.", + ], + "401" => [ + "title" => "Unauthorized", + "description" => "You must be logged in to access this page.", + ], + "403" => [ + "title" => "Forbidden", + "description" => "Sorry, you are forbidden from accessing this page.", + ], + "404" => [ + "title" => "Page Not Found", + "description" => "Sorry, the page you are looking for could not be found.", + ], + "405" => [ + "title" => "Method Not Allowed", + "description" => "The method used for this request is not allowed.", + ], + "408" => [ + "title" => "Request Timeout", + "description" => "The server took too long to respond. Please try again.", + ], + "419" => [ + "title" => "Page Expired", + "description" => "Your session has expired. Please refresh and try again.", + ], + "422" => [ + "title" => "Unprocessable Entity", + "description" => "The data provided was invalid. Please check and try again.", + ], + "429" => [ + "title" => "Too Many Requests", + "description" => "You have made too many requests in a short time. Please slow down.", + ], + "500" => [ + "title" => "Server Error", + "description" => "Whoops, something went wrong on our servers.", + ], + "502" => [ + "title" => "Bad Gateway", + "description" => "The server received an invalid response. Please try again later.", + ], + "503" => [ + "title" => "Service Unavailable", + "description" => "Sorry, we are doing some maintenance. Please check back soon.", + ], + "504" => [ + "title" => "Gateway Timeout", + "description" => "The server took too long to respond. Please try again later.", + ], +]; diff --git a/lang/en/front.php b/lang/en/front.php new file mode 100644 index 0000000..a9c94a1 --- /dev/null +++ b/lang/en/front.php @@ -0,0 +1,6 @@ + "Hello World", + "back_to_your_website" => "Return to the home page", +]; diff --git a/lang/en/models.php b/lang/en/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/en/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/en/validation.php b/lang/en/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/en/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/es/back.php b/lang/es/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/es/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/es/enums.php b/lang/es/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/es/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/es/errors.php b/lang/es/errors.php new file mode 100644 index 0000000..d5e2344 --- /dev/null +++ b/lang/es/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Solicitud incorrecta", + "description" => "El servidor no pudo entender su solicitud. Por favor, verifique e intente nuevamente.", + ], + "401" => [ + "title" => "No autorizado", + "description" => "Debe iniciar sesión para acceder a esta página.", + ], + "403" => [ + "title" => "Acceso prohibido", + "description" => "Lo sentimos, no está autorizado para acceder a esta página.", + ], + "404" => [ + "title" => "Página no encontrada", + "description" => "Lo sentimos, la página que busca no se encuentra.", + ], + "405" => [ + "title" => "Método no permitido", + "description" => "El método utilizado para esta solicitud no está permitido.", + ], + "408" => [ + "title" => "Tiempo de espera agotado", + "description" => "El servidor tardó demasiado en responder. Por favor, intente nuevamente.", + ], + "419" => [ + "title" => "Página expirada", + "description" => "Su sesión ha expirado. Por favor, actualice y vuelva a intentarlo.", + ], + "422" => [ + "title" => "Entidad no procesable", + "description" => "Los datos proporcionados no son válidos. Por favor, verifique e intente nuevamente.", + ], + "429" => [ + "title" => "Demasiadas solicitudes", + "description" => "Ha realizado demasiadas solicitudes en poco tiempo. Por favor, espere antes de intentar nuevamente.", + ], + "500" => [ + "title" => "Error del servidor", + "description" => "Ups, ocurrió un error en nuestros servidores.", + ], + "502" => [ + "title" => "Puerta de enlace incorrecta", + "description" => "El servidor recibió una respuesta inválida. Por favor, intente nuevamente más tarde.", + ], + "503" => [ + "title" => "Servicio no disponible", + "description" => "Lo sentimos, estamos realizando mantenimiento. Por favor, vuelva más tarde.", + ], + "504" => [ + "title" => "Tiempo de espera de la puerta de enlace agotado", + "description" => "El servidor tardó demasiado en responder. Por favor, intente nuevamente más tarde.", + ], +]; diff --git a/lang/es/front.php b/lang/es/front.php new file mode 100644 index 0000000..17a9360 --- /dev/null +++ b/lang/es/front.php @@ -0,0 +1,6 @@ + "Hola Mundo", + "back_to_your_website" => "Volver a la página de inicio", +]; diff --git a/lang/es/models.php b/lang/es/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/es/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/es/validation.php b/lang/es/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/es/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/fr/back.php b/lang/fr/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/fr/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/fr/enums.php b/lang/fr/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/fr/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/fr/errors.php b/lang/fr/errors.php new file mode 100644 index 0000000..789db6c --- /dev/null +++ b/lang/fr/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Requête invalide", + "description" => "Le serveur n’a pas pu comprendre votre requête. Veuillez vérifier et réessayer.", + ], + "401" => [ + "title" => "Non autorisé", + "description" => "Vous devez être connecté pour accéder à cette page.", + ], + "403" => [ + "title" => "Accès interdit", + "description" => "Désolé, vous n’êtes pas autorisé à accéder à cette page.", + ], + "404" => [ + "title" => "Page introuvable", + "description" => "Désolé, la page que vous recherchez est introuvable.", + ], + "405" => [ + "title" => "Méthode non autorisée", + "description" => "La méthode utilisée pour cette requête n’est pas autorisée.", + ], + "408" => [ + "title" => "Délai d’attente dépassé", + "description" => "Le serveur a mis trop de temps à répondre. Veuillez réessayer.", + ], + "419" => [ + "title" => "Page expirée", + "description" => "Votre session a expiré. Veuillez actualiser et réessayer.", + ], + "422" => [ + "title" => "Entité non traitable", + "description" => "Les données fournies ne sont pas valides. Veuillez vérifier et réessayer.", + ], + "429" => [ + "title" => "Trop de requêtes", + "description" => "Vous avez effectué trop de requêtes en peu de temps. Veuillez patienter avant de réessayer.", + ], + "500" => [ + "title" => "Erreur serveur", + "description" => "Oups, une erreur est survenue sur nos serveurs.", + ], + "502" => [ + "title" => "Mauvaise passerelle", + "description" => "Le serveur a reçu une réponse invalide. Veuillez réessayer plus tard.", + ], + "503" => [ + "title" => "Service indisponible", + "description" => "Désolé, nous effectuons une maintenance. Merci de revenir plus tard.", + ], + "504" => [ + "title" => "Délai d’attente de la passerelle dépassé", + "description" => "Le serveur a mis trop de temps à répondre. Veuillez réessayer plus tard.", + ], +]; diff --git a/lang/fr/front.php b/lang/fr/front.php new file mode 100644 index 0000000..13f78de --- /dev/null +++ b/lang/fr/front.php @@ -0,0 +1,6 @@ + "Bonjour Monde", + "back_to_your_website" => "Revenir à la page d'accueil", +]; diff --git a/lang/fr/models.php b/lang/fr/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/fr/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/fr/validation.php b/lang/fr/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/fr/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/nl/back.php b/lang/nl/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/nl/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/nl/enums.php b/lang/nl/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/nl/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/nl/errors.php b/lang/nl/errors.php new file mode 100644 index 0000000..0ec4fa4 --- /dev/null +++ b/lang/nl/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Ongeldig verzoek", + "description" => "De server kon je verzoek niet begrijpen. Controleer het en probeer het opnieuw.", + ], + "401" => [ + "title" => "Niet geautoriseerd", + "description" => "Je moet ingelogd zijn om deze pagina te bekijken.", + ], + "403" => [ + "title" => "Toegang geweigerd", + "description" => "Sorry, je hebt geen toestemming om deze pagina te bekijken.", + ], + "404" => [ + "title" => "Pagina niet gevonden", + "description" => "Sorry, de door jou gezochte pagina bestaat niet.", + ], + "405" => [ + "title" => "Methode niet toegestaan", + "description" => "De gebruikte methode voor dit verzoek is niet toegestaan.", + ], + "408" => [ + "title" => "Time-out", + "description" => "De server deed er te lang over om te reageren. Probeer het opnieuw.", + ], + "419" => [ + "title" => "Pagina verlopen", + "description" => "Je sessie is verlopen. Vernieuw de pagina en probeer het opnieuw.", + ], + "422" => [ + "title" => "Niet verwerkbare entiteit", + "description" => "De opgegeven gegevens zijn ongeldig. Controleer ze en probeer het opnieuw.", + ], + "429" => [ + "title" => "Te veel verzoeken", + "description" => "Je hebt te veel verzoeken in korte tijd gedaan. Wacht even en probeer het opnieuw.", + ], + "500" => [ + "title" => "Serverfout", + "description" => "Oeps, er is een fout op onze servers opgetreden.", + ], + "502" => [ + "title" => "Ongeldige gateway", + "description" => "De server heeft een ongeldig antwoord ontvangen. Probeer het later opnieuw.", + ], + "503" => [ + "title" => "Dienst niet beschikbaar", + "description" => "Sorry, we voeren onderhoud uit. Probeer het later opnieuw.", + ], + "504" => [ + "title" => "Gateway Time-out", + "description" => "De server deed er te lang over om te reageren. Probeer het later opnieuw.", + ], +]; \ No newline at end of file diff --git a/lang/nl/front.php b/lang/nl/front.php new file mode 100644 index 0000000..6397686 --- /dev/null +++ b/lang/nl/front.php @@ -0,0 +1,6 @@ + "Hallo wereld", + "back_to_your_website" => "Terug naar de startpagina", +]; diff --git a/lang/nl/models.php b/lang/nl/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/nl/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/nl/validation.php b/lang/nl/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/nl/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/lang/pl/back.php b/lang/pl/back.php new file mode 100644 index 0000000..7570e5e --- /dev/null +++ b/lang/pl/back.php @@ -0,0 +1,7 @@ + "Tableau de bord", +]; diff --git a/lang/pl/enums.php b/lang/pl/enums.php new file mode 100644 index 0000000..a4a2520 --- /dev/null +++ b/lang/pl/enums.php @@ -0,0 +1,11 @@ + [ + // "conceptor" => "Concepteur", + // "admin" => "Administrateur", + // "visitor" => "Visiteur", + // ], +]; diff --git a/lang/pl/errors.php b/lang/pl/errors.php new file mode 100644 index 0000000..26618bf --- /dev/null +++ b/lang/pl/errors.php @@ -0,0 +1,56 @@ + [ + "title" => "Nieprawidłowe żądanie", + "description" => "Serwer nie mógł zrozumieć Twojego żądania. Sprawdź je i spróbuj ponownie.", + ], + "401" => [ + "title" => "Nieautoryzowany", + "description" => "Musisz być zalogowany, aby uzyskać dostęp do tej strony.", + ], + "403" => [ + "title" => "Dostęp zabroniony", + "description" => "Przepraszamy, nie masz uprawnień do tej strony.", + ], + "404" => [ + "title" => "Strona nie znaleziona", + "description" => "Przepraszamy, strona, której szukasz, nie istnieje.", + ], + "405" => [ + "title" => "Metoda niedozwolona", + "description" => "Użyta metoda żądania nie jest dozwolona.", + ], + "408" => [ + "title" => "Przekroczono czas oczekiwania", + "description" => "Serwer potrzebował zbyt dużo czasu, aby odpowiedzieć. Spróbuj ponownie.", + ], + "419" => [ + "title" => "Strona wygasła", + "description" => "Twoja sesja wygasła. Odśwież stronę i spróbuj ponownie.", + ], + "422" => [ + "title" => "Nieprzetwarzalna jednostka", + "description" => "Dostarczone dane są nieprawidłowe. Sprawdź je i spróbuj ponownie.", + ], + "429" => [ + "title" => "Za dużo żądań", + "description" => "Wysłano zbyt wiele żądań w krótkim czasie. Poczekaj chwilę i spróbuj ponownie.", + ], + "500" => [ + "title" => "Błąd serwera", + "description" => "Ups, wystąpił błąd po stronie serwera.", + ], + "502" => [ + "title" => "Zła brama", + "description" => "Serwer otrzymał nieprawidłową odpowiedź. Spróbuj ponownie później.", + ], + "503" => [ + "title" => "Usługa niedostępna", + "description" => "Przepraszamy, trwa konserwacja. Spróbuj ponownie później.", + ], + "504" => [ + "title" => "Przekroczono czas oczekiwania bramy", + "description" => "Serwer potrzebował zbyt dużo czasu, aby odpowiedzieć. Spróbuj ponownie później.", + ], +]; diff --git a/lang/pl/front.php b/lang/pl/front.php new file mode 100644 index 0000000..e8cf5ac --- /dev/null +++ b/lang/pl/front.php @@ -0,0 +1,6 @@ + "Witaj świecie", + "back_to_your_website" => "Powrót do strony głównej", +]; diff --git a/lang/pl/models.php b/lang/pl/models.php new file mode 100644 index 0000000..690ae38 --- /dev/null +++ b/lang/pl/models.php @@ -0,0 +1,9 @@ + [ + // "users" => "utilisateur|utilisateurs", + ], +]; diff --git a/lang/pl/validation.php b/lang/pl/validation.php new file mode 100644 index 0000000..b72159a --- /dev/null +++ b/lang/pl/validation.php @@ -0,0 +1,9 @@ + [ + // "published" => "publié", + ], +]; \ No newline at end of file diff --git a/manifest.yaml b/manifest.yaml index 3ab6e6c..2eb7bba 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -1,4 +1,3 @@ ---- apiVersion: v1 kind: ConfigMap metadata: @@ -8,11 +7,14 @@ data: APP_ENV: "${APP_APP_ENV}" APP_KEY: "${APP_APP_KEY}" APP_DEBUG: "${APP_APP_DEBUG}" + SESSION_DRIVER: "${APP_SESSION_DRIVER}" APP_URL: "https://${APP_DOMAIN}" LOG_CHANNEL: "k8s" + CACHE_STORE: "${APP_CACHE_STORE}" DB_HOST: "${APP_DB_HOST}" DB_PORT: "${APP_DB_PORT}" DB_DATABASE: "${APP_DB_DATABASE}" + DB_CONNECTION: "mysql" DB_USERNAME: "${APP_DB_USERNAME}" DB_PASSWORD: "${APP_DB_PASSWORD}" MAIL_HOST: "${APP_MAIL_HOST}" @@ -22,12 +24,26 @@ data: MAIL_ENCRYPTION: "${APP_MAIL_ENCRYPTION}" MAIL_FROM_ADDRESS: "${APP_MAIL_FROM_ADDRESS}" MAIL_FROM_NAME: "${APP_APP_NAME}" - LDC_WEB_API_KEY: "${APP_LDC_WEB_API_KEY}" SENTRY_LARAVEL_DSN: "${APP_SENTRY_LARAVEL_DSN}" - GITLAB_URL: "https://${CI_SERVER_HOST}" - GITLAB_TOKEN: "${APP_GITLAB_TOKEN}" + TELESCOPE_ENABLED: "${APP_TELESCOPE_ENABLED}" + CRM_ENDPOINT: "${APP_CRM_ENDPOINT}" + CRM_TOKEN: "${APP_CRM_TOKEN}" + CRM_PASSWORD: "${APP_CRM_PASSWORD}" + MATOMO_SITE_ID: "${APP_MATOMO_SITE_ID}" + GOOGLE_RECAPTCHA_PRIVATE: "${APP_GOOGLE_RECAPTCHA_PRIVATE}" + GOOGLE_RECAPTCHA_PUBLIC: "${APP_GOOGLE_RECAPTCHA_PUBLIC}" + GOOGLE_RECAPTCHA_VERSION: "${APP_GOOGLE_RECAPTCHA_VERSION}" + GOOGLE_MAPS_KEY: "${APP_GOOGLE_MAPS_KEY}" + SCOUT_PREFIX: "${APP_SCOUT_PREFIX}" + SCOUT_QUEUE: "${APP_SCOUT_QUEUE}" + MEILISEARCH_HOST: "meilisearch.common-services:7700" + MEILISEARCH_KEY: "${APP_MEILISEARCH_KEY}" + SAML2_SP_CERT_x509: "${APP_SAML2_SP_CERT_x509}" + SAML2_SP_CERT_PRIVATEKEY: "${APP_SAML2_SP_CERT_PRIVATEKEY}" + SAML2_CONTACT_TECHNICAL_EMAIL: "${APP_SAML2_CONTACT_TECHNICAL_EMAIL}" + SAML2_CONTACT_SUPPORT_EMAIL: "${APP_SAML2_CONTACT_SUPPORT_EMAIL}" + SAML2_DEFAULT_TENANT_UUID: "${APP_SAML2_DEFAULT_TENANT_UUID}" UWIL_ADMIN_SECURE_CIDR_LIST: "${APP_GLOBAL_UWIL_ADMIN_SECURE_CIDR_LIST}" - --- apiVersion: v1 kind: PersistentVolumeClaim @@ -40,7 +56,6 @@ spec: resources: requests: storage: $APP_PVC_SIZE - --- apiVersion: apps/v1 kind: Deployment @@ -72,6 +87,29 @@ spec: volumeMounts: - name: storage mountPath: /app/srcs/storage + - name: ${CI_PROJECT_PATH_SLUG}-queue-worker + image: $IMAGE_TAG + lifecycle: + preStop: + exec: + command: [ "/bin/sh", "-c", "kill -s TERM 1; while test $(ps ax | grep -v grep | grep bash | wc -l) -gt 0; do sleep 2s; done" ] + resources: + limits: + cpu: "${APP_CI_CPU_LIMIT}" + memory: "${APP_CI_MEMORY_LIMIT}" + requests: + cpu: "${APP_CI_CPU_REQUEST}" + memory: "${APP_CI_MEMORY_REQUEST}" + command: + - "bash" + args: + - "k8s-queues.sh" + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: + - name: storage + mountPath: /app/srcs/storage imagePullSecrets: - name: docker-registry-credentials securityContext: @@ -83,7 +121,6 @@ spec: - name: storage persistentVolumeClaim: claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage - --- apiVersion: v1 kind: Service @@ -95,7 +132,6 @@ spec: ports: - port: 80 targetPort: 80 - --- apiVersion: traefik.io/v1alpha1 kind: IngressRoute @@ -113,7 +149,6 @@ spec: port: 80 tls: secretName: ${CRT_TLS_NAME} - --- apiVersion: batch/v1 kind: CronJob @@ -131,35 +166,35 @@ spec: affinity: podAffinity: requiredDuringSchedulingIgnoredDuringExecution: - - labelSelector: - matchExpressions: - - key: app - operator: In - values: - - ${CI_PROJECT_PATH_SLUG}-app - topologyKey: "kubernetes.io/hostname" - namespaces: [$KUBE_NAMESPACE] + - labelSelector: + matchExpressions: + - key: app + operator: In + values: + - ${CI_PROJECT_PATH_SLUG}-app + topologyKey: "kubernetes.io/hostname" + namespaces: [ $KUBE_NAMESPACE ] containers: - - name: ${CI_PROJECT_PATH_SLUG}-scheduled - image: $IMAGE_TAG - imagePullPolicy: IfNotPresent - command: - - "php" - args: - - "artisan" - - "schedule:run" - envFrom: - - configMapRef: - name: ${CI_PROJECT_PATH_SLUG}-config-map - volumeMounts: - - name: storage - mountPath: /app/srcs/storage - imagePullSecrets: - - name: docker-registry-credentials - volumes: + - name: ${CI_PROJECT_PATH_SLUG}-scheduled + image: $IMAGE_TAG + imagePullPolicy: IfNotPresent + command: + - "php" + args: + - "artisan" + - "schedule:run" + envFrom: + - configMapRef: + name: ${CI_PROJECT_PATH_SLUG}-config-map + volumeMounts: - name: storage - persistentVolumeClaim: - claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage + mountPath: /app/srcs/storage + imagePullSecrets: + - name: docker-registry-credentials + volumes: + - name: storage + persistentVolumeClaim: + claimName: ${CI_PROJECT_PATH_SLUG}-pvc-storage securityContext: runAsUser: 33 runAsGroup: 33 diff --git a/package-lock.json b/package-lock.json index 572ab94..57db0e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,112 +4,171 @@ "requires": true, "packages": { "": { - "devDependencies": { - "@eastdesire/jscolor": "^2.5.1", - "@fortawesome/fontawesome-svg-core": "latest", - "@fortawesome/free-brands-svg-icons": "latest", - "@fortawesome/free-regular-svg-icons": "latest", - "@fortawesome/free-solid-svg-icons": "latest", - "@fortawesome/vue-fontawesome": "^3.0.3", - "@sipec/vue3-tags-input": "^3.0.4", - "@types/bootstrap": "^5.2.7", - "@types/node": "^20.8.2", - "@types/toastify-js": "^1.12.1", - "@types/vue-select": "^3.16.5", - "@vitejs/plugin-legacy": "latest", - "@vitejs/plugin-vue": "latest", - "@vue/compiler-sfc": "latest", - "@vue/eslint-config-typescript": "latest", - "@vue/tsconfig": "latest", - "axios": "^1.5.1", - "bootstrap": "^5.3.2", - "chart.js": "^4.4.0", - "cropperjs": "^1.6.1", - "eslint": "latest", - "eslint-plugin-vue": "latest", - "glightbox": "^3.2.0", - "laravel-vite-plugin": "latest", - "moment": "^2.29.4", - "postcss-discard-comments": "^6.0.0", - "prettier": "latest", - "print-js": "^1.6.0", - "sass": "latest", - "slugify": "^1.6.6", - "stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order", - "stylelint-config-sass-guidelines": "latest", - "stylelint-config-standard-scss": "latest", - "sweetalert2": "^11.7.31", - "terser": "latest", - "toastify-js": "^1.12.0", - "typescript": "latest", - "vite-plugin-checker": "latest", - "vite-plugin-eslint": "latest", - "vite-plugin-stylelint": "latest", - "vue": "latest", - "vue-select": "^4.0.0-beta.6", - "vue-tsc": "1.6.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", + "@dnd-kit/utilities": "^3.2.2", + "@inertiajs/core": "^2.1.5", + "@inertiajs/react": "^2.3.21", + "@tanstack/react-table": "^8.21.3", + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-color": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-history": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-image": "^3.22.4", + "@tiptap/extension-invisible-characters": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-placeholder": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-subscript": "^3.22.4", + "@tiptap/extension-superscript": "^3.22.4", + "@tiptap/extension-table": "^3.22.4", + "@tiptap/extension-table-cell": "^3.22.4", + "@tiptap/extension-table-header": "^3.22.4", + "@tiptap/extension-table-row": "^3.22.4", + "@tiptap/extension-text-align": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/react": "^3.22.4", + "@tiptap/starter-kit": "^3.22.4", + "@types/pluralize": "^0.0.33", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "axios": "^1.15.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "json-edit-react": "^1.29.0", + "laravel-vite-plugin": "^1.3.0", + "lucide-react": "^0.503.0", + "motion": "^12.38.0", + "prosemirror-state": "^1.4.4", + "react-color": "^2.19.3", + "react-dropzone": "^14.4.1", + "react-image-crop": "^11.0.10", + "slugify": "^1.6.9", + "tailwind-merge": "^3.5.0", + "ziggy-js": "^2.6.2", + "zod": "^4.3.6", + "zustand": "^5.0.12" }, + "devDependencies": { + "@headlessui/react": "^2.2.10", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.0.0", + "@types/react-color": "^3.0.13", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", + "@uwil/husky-config": "^1.0.1", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "^10.5.0", + "concurrently": "^9.2.1", + "eslint": "^8.57.1", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^4.6.2", + "flag-icons": "^7.5.0", + "pluralize": "^8.0.0", + "prettier": "^3.8.3", + "react": "^19.2.5", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.5", + "rollup-plugin-copy": "^3.5.0", + "sass-embedded": "^1.99.0", + "stylelint": "^16.26.1", + "stylelint-config-idiomatic-order": "^10.0.0", + "stylelint-config-sass-guidelines": "^12.1.0", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-scss": "^6.14.0", + "tailwindcss": "^3.4.19", + "tailwindcss-animate": "^1.0.7", + "vite": "^6.4.2" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=6.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", - "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz", - "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz", - "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, + "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helpers": "^7.23.2", - "@babel/parser": "^7.23.0", - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0", + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -124,54 +183,43 @@ "url": "https://opencollective.com/babel" } }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/generator": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", - "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", - "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", - "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.15" + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", - "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.15", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -179,131 +227,50 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz", - "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==", + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", - "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "regexpu-core": "^5.3.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", - "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-plugin-utils": "^7.22.5", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", - "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", - "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", - "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.23.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", - "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.22.15" + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz", - "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-module-imports": "^7.22.15", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.20" + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" }, "engines": { "node": ">=6.9.0" @@ -312,171 +279,69 @@ "@babel/core": "^7.0.0" } }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", - "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", - "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-wrap-function": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", - "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-member-expression-to-functions": "^7.22.15", - "@babel/helper-optimise-call-expression": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", - "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz", - "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==", + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", - "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", - "dev": true, - "dependencies": { - "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.15", - "@babel/types": "^7.22.19" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz", - "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/template": "^7.22.15", - "@babel/traverse": "^7.23.2", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, "bin": { "parser": "bin/babel-parser.js" }, @@ -484,81 +349,14 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz", - "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==", + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", + "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz", - "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -567,37 +365,14 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", + "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -606,1120 +381,409 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-unicode-sets-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", - "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz", - "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.20", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz", - "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz", - "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz", - "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.9", - "@babel/helper-split-export-declaration": "^7.22.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz", - "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz", - "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", - "dev": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz", - "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz", - "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", - "dev": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz", - "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz", - "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz", - "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz", - "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz", - "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==", - "dev": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.23.0", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", - "dev": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", - "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz", - "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz", - "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz", - "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.15" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz", - "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz", - "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz", - "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", - "dev": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz", - "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.11", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", - "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", - "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", - "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz", - "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.23.2", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.15", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.23.2", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.23.0", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.11", - "@babel/plugin-transform-classes": "^7.22.15", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.23.0", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.11", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.11", - "@babel/plugin-transform-for-of": "^7.22.15", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.11", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.11", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.23.0", - "@babel/plugin-transform-modules-commonjs": "^7.23.0", - "@babel/plugin-transform-modules-systemjs": "^7.23.0", - "@babel/plugin-transform-modules-umd": "^7.22.5", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11", - "@babel/plugin-transform-numeric-separator": "^7.22.11", - "@babel/plugin-transform-object-rest-spread": "^7.22.15", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.11", - "@babel/plugin-transform-optional-chaining": "^7.23.0", - "@babel/plugin-transform-parameters": "^7.22.15", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.11", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.10", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.10", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "@babel/types": "^7.23.0", - "babel-plugin-polyfill-corejs2": "^0.4.6", - "babel-plugin-polyfill-corejs3": "^0.8.5", - "babel-plugin-polyfill-regenerator": "^0.5.3", - "core-js-compat": "^3.31.0", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.6-no-external-plugins", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", - "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, - "node_modules/@babel/runtime": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", - "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", - "dev": true, - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime/node_modules/regenerator-runtime": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", - "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", - "dev": true - }, "node_modules/@babel/template": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", - "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", - "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", - "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.12.0.tgz", + "integrity": "sha512-B/XlCaFIP8LOwzo+bz5uFzATYokcwCKQcghqnlfwSmM5eX/qTkvDBnDPs+gXtX/RyjxJ4DRikECcPJbyALA8FA==", + "devOptional": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@cacheable/memory": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.8.tgz", + "integrity": "sha512-FvEb29x5wVwu/Kf93IWwsOOEuhHh6dYCJF3vcKLzXc0KXIW181AOzv6ceT4ZpBHDvAfG60eqb+ekmrnLHIy+jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/utils": "^2.4.0", + "@keyv/bigmap": "^1.3.1", + "hookified": "^1.15.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/@keyv/bigmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz", + "integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.4.0", + "hookified": "^1.15.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/memory/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@cacheable/utils": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz", + "integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hashery": "^1.5.1", + "keyv": "^5.6.0" + } + }, + "node_modules/@cacheable/utils/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/@commitlint/cli": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-20.5.0.tgz", + "integrity": "sha512-yNkyN/tuKTJS3wdVfsZ2tXDM4G4Gi7z+jW54Cki8N8tZqwKBltbIvUUrSbT4hz1bhW/h0CdR+5sCSpXD+wMKaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/format": "^20.5.0", + "@commitlint/lint": "^20.5.0", + "@commitlint/load": "^20.5.0", + "@commitlint/read": "^20.5.0", + "@commitlint/types": "^20.5.0", + "tinyexec": "^1.0.0", + "yargs": "^17.0.0" + }, + "bin": { + "commitlint": "cli.js" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-conventional": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-20.5.0.tgz", + "integrity": "sha512-t3Ni88rFw1XMa4nZHgOKJ8fIAT9M2j5TnKyTqJzsxea7FUetlNdYFus9dz+MhIRZmc16P0PPyEfh6X2d/qw8SA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "conventional-changelog-conventionalcommits": "^9.2.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/config-validator": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-20.5.0.tgz", + "integrity": "sha512-T/Uh6iJUzyx7j35GmHWdIiGRQB+ouZDk0pwAaYq4SXgB54KZhFdJ0vYmxiW6AMYICTIWuyMxDBl1jK74oFp/Gw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "ajv": "^8.11.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/ensure": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-20.5.0.tgz", + "integrity": "sha512-IpHqAUesBeW1EDDdjzJeaOxU9tnogLAyXLRBn03SHlj1SGENn2JGZqSWGkFvBJkJzfXAuCNtsoYzax+ZPS+puw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "lodash.camelcase": "^4.3.0", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", + "lodash.startcase": "^4.4.0", + "lodash.upperfirst": "^4.3.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/execute-rule": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-20.0.0.tgz", + "integrity": "sha512-xyCoOShoPuPL44gVa+5EdZsBVao/pNzpQhkzq3RdtlFdKZtjWcLlUFQHSWBuhk5utKYykeJPSz2i8ABHQA+ZZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/format": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-20.5.0.tgz", + "integrity": "sha512-TI9EwFU/qZWSK7a5qyXMpKPPv3qta7FO4tKW+Wt2al7sgMbLWTsAcDpX1cU8k16TRdsiiet9aOw0zpvRXNJu7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/is-ignored": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-20.5.0.tgz", + "integrity": "sha512-JWLarAsurHJhPozbuAH6GbP4p/hdOCoqS9zJMfqwswne+/GPs5V0+rrsfOkP68Y8PSLphwtFXV0EzJ+GTXTTGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "semver": "^7.6.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/lint": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-20.5.0.tgz", + "integrity": "sha512-jiM3hNUdu04jFBf1VgPdjtIPvbuVfDTBAc6L98AWcoLjF5sYqkulBHBzlVWll4rMF1T5zeQFB6r//a+s+BBKlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/is-ignored": "^20.5.0", + "@commitlint/parse": "^20.5.0", + "@commitlint/rules": "^20.5.0", + "@commitlint/types": "^20.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/load": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-20.5.0.tgz", + "integrity": "sha512-sLhhYTL/KxeOTZjjabKDhwidGZan84XKK1+XFkwDYL/4883kIajcz/dZFAhBJmZPtL8+nBx6bnkzA95YxPeDPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.5.0", + "@commitlint/execute-rule": "^20.0.0", + "@commitlint/resolve-extends": "^20.5.0", + "@commitlint/types": "^20.5.0", + "cosmiconfig": "^9.0.1", + "cosmiconfig-typescript-loader": "^6.1.0", + "is-plain-obj": "^4.1.0", + "lodash.mergewith": "^4.6.2", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/message": { + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-20.4.3.tgz", + "integrity": "sha512-6akwCYrzcrFcTYz9GyUaWlhisY4lmQ3KvrnabmhoeAV8nRH4dXJAh4+EUQ3uArtxxKQkvxJS78hNX2EU3USgxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/parse": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-20.5.0.tgz", + "integrity": "sha512-SeKWHBMk7YOTnnEWUhx+d1a9vHsjjuo6Uo1xRfPNfeY4bdYFasCH1dDpAv13Lyn+dDPOels+jP6D2GRZqzc5fA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/types": "^20.5.0", + "conventional-changelog-angular": "^8.2.0", + "conventional-commits-parser": "^6.3.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/read": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-20.5.0.tgz", + "integrity": "sha512-JDEIJ2+GnWpK8QqwfmW7O42h0aycJEWNqcdkJnyzLD11nf9dW2dWLTVEa8Wtlo4IZFGLPATjR5neA5QlOvIH1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/top-level": "^20.4.3", + "@commitlint/types": "^20.5.0", + "git-raw-commits": "^5.0.0", + "minimist": "^1.2.8", + "tinyexec": "^1.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/resolve-extends": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-20.5.0.tgz", + "integrity": "sha512-3SHPWUW2v0tyspCTcfSsYml0gses92l6TlogwzvM2cbxDgmhSRc+fldDjvGkCXJrjSM87BBaWYTPWwwyASZRrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/config-validator": "^20.5.0", + "@commitlint/types": "^20.5.0", + "global-directory": "^4.0.1", + "import-meta-resolve": "^4.0.0", + "lodash.mergewith": "^4.6.2", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/rules": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-20.5.0.tgz", + "integrity": "sha512-5NdQXQEdnDPT5pK8O39ZA7HohzPRHEsDGU23cyVCNPQy4WegAbAwrQk3nIu7p2sl3dutPk8RZd91yKTrMTnRkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@commitlint/ensure": "^20.5.0", + "@commitlint/message": "^20.4.3", + "@commitlint/to-lines": "^20.0.0", + "@commitlint/types": "^20.5.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/to-lines": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-20.0.0.tgz", + "integrity": "sha512-2l9gmwiCRqZNWgV+pX1X7z4yP0b3ex/86UmUFgoRt672Ez6cAM2lOQeHFRUTuE6sPpi8XBCGnd8Kh3bMoyHwJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/top-level": { + "version": "20.4.3", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-20.4.3.tgz", + "integrity": "sha512-qD9xfP6dFg5jQ3NMrOhG0/w5y3bBUsVGyJvXxdWEwBm8hyx4WOk3kKXw28T5czBYvyeCVJgJJ6aoJZUWDpaacQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@commitlint/types": { + "version": "20.5.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-20.5.0.tgz", + "integrity": "sha512-ZJoS8oSq2CAZEpc/YI9SulLrdiIyXeHb/OGqGrkUP6Q7YV+0ouNAa7GjqRdXeQPncHQIDz/jbCTlHScvYvO/gA==", + "dev": true, + "license": "MIT", + "dependencies": { + "conventional-commits-parser": "^6.3.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=v18" + } + }, + "node_modules/@conventional-changelog/git-client": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@conventional-changelog/git-client/-/git-client-2.7.0.tgz", + "integrity": "sha512-j7A8/LBEQ+3rugMzPXoKYzyUPpw/0CBQCyvtTR7Lmu4olG4yRC/Tfkq79Mr3yuPs0SUitlO2HwGP3gitMJnRFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/child-process-utils": "^1.0.0", + "@simple-libs/stream-utils": "^1.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "conventional-commits-filter": "^5.0.0", + "conventional-commits-parser": "^6.4.0" + }, + "peerDependenciesMeta": { + "conventional-commits-filter": { + "optional": true + }, + "conventional-commits-parser": { + "optional": true + } + } + }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz", - "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", "dev": true, "funding": [ { @@ -1731,18 +795,43 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-syntax-patches-for-csstree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.3.tgz", + "integrity": "sha512-SH60bMfrRCJF3morcdk57WklujF4Jr/EsQUzqkarfHXEFcAR1gg7fS/chAE922Sehgzc1/+Tz5H3Ypa1HiEKrg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peerDependencies": { + "css-tree": "^3.2.1" + }, + "peerDependenciesMeta": { + "css-tree": { + "optional": true + } } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz", - "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", "dev": true, "funding": [ { @@ -1754,15 +843,15 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz", - "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.3.tgz", + "integrity": "sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==", "dev": true, "funding": [ { @@ -1774,447 +863,571 @@ "url": "https://opencollective.com/csstools" } ], - "peer": true, + "license": "MIT", "engines": { - "node": "^14 || ^16 || >=18" + "node": ">=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.3.2", - "@csstools/css-tokenizer": "^2.2.1" + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" } }, - "node_modules/@csstools/selector-specificity": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz", - "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==", + "node_modules/@date-fns/tz": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz", + "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "peer": true, - "engines": { - "node": "^14 || ^16 || >=18" + "license": "MIT" + }, + "node_modules/@dnd-kit/accessibility": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/accessibility/-/accessibility-3.1.1.tgz", + "integrity": "sha512-2P+YgaXF+gRsIihwwY1gCsQSYnu9Zyj2py8kY5fFvUM1qm2WA2u639R6YNVfU4GWr+ZM5mqEsfHZZLoRONbemw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" }, "peerDependencies": { - "postcss-selector-parser": "^6.0.13" + "react": ">=16.8.0" } }, - "node_modules/@eastdesire/jscolor": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/@eastdesire/jscolor/-/jscolor-2.5.1.tgz", - "integrity": "sha512-+D7Xz2f1Zxpc438q0s7wwKHwWal596dcAGcWp+pxfHlYtt0LVdynMFrf0PYdmwHt8idKfeglyU2h2LdkATFcbQ==", - "dev": true + "node_modules/@dnd-kit/core": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", + "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", + "license": "MIT", + "dependencies": { + "@dnd-kit/accessibility": "^3.1.1", + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } }, - "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "cpu": [ - "arm" - ], + "node_modules/@dnd-kit/sortable": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@dnd-kit/sortable/-/sortable-10.0.0.tgz", + "integrity": "sha512-+xqhmIIzvAYMGfBYYnbKuNicfSsk4RksY2XdmJhT+HAC01nix6fHCztU68jooFiMUB01Ky3F0FyOvhG/BZrWkg==", + "license": "MIT", + "dependencies": { + "@dnd-kit/utilities": "^3.2.2", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@dnd-kit/core": "^6.3.0", + "react": ">=16.8.0" + } + }, + "node_modules/@dnd-kit/utilities": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@dnd-kit/utilities/-/utilities-3.2.2.tgz", + "integrity": "sha512-+MKAJEOfaBe5SmV6t34p80MMKhjvUz0vRrvVJbPT0WElzaOJ/1xs+D+KDv+tD/NE5ujfrChEcshd4fLn0wpiqg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.2.1.tgz", + "integrity": "sha512-id+7YRUgoUX6CgV0DtuhirQWodeeA7Lf4i2x71JS/vtA5pRb/hIGWlw+G6MeXvsM+MXrz0VAydTGElX1rAfgPg==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/JounQin" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "cpu": [ - "arm64" - ], + "node_modules/@emnapi/core": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.10.0.tgz", + "integrity": "sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "cpu": [ - "x64" - ], + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "android" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", "dev": true, + "license": "MIT", "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "peer": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", "cpu": [ "ppc64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "cpu": [ + "arm" + ], + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", "cpu": [ "riscv64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", "cpu": [ "s390x" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", "cpu": [ - "x64" + "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "cpu": [ + "arm64" + ], + "license": "MIT", "optional": true, "os": [ "openbsd" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "cpu": [ + "x64" + ], + "license": "MIT", "optional": true, "os": [ "sunos" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", "cpu": [ "ia32" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], - "peer": true, "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, + "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", - "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", - "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2233,133 +1446,213 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@eslint/eslintrc/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 4" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "*" } }, "node_modules/@eslint/js": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", - "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@fortawesome/fontawesome-common-types": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz", - "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==", - "dev": true, - "hasInstallScript": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/fontawesome-svg-core": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz", - "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==", - "dev": true, - "hasInstallScript": true, + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@fortawesome/free-brands-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.2.tgz", - "integrity": "sha512-LKOwJX0I7+mR/cvvf6qIiqcERbdnY+24zgpUSouySml+5w8B4BJOx8EhDR/FTKAu06W12fmUIcv6lzPSwYKGGg==", - "dev": true, - "hasInstallScript": true, + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@fortawesome/free-regular-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.4.2.tgz", - "integrity": "sha512-0+sIUWnkgTVVXVAPQmW4vxb9ZTHv0WstOa3rBx9iPxrrrDH6bNLsDYuwXF9b6fGm+iR7DKQvQshUH/FJm3ed9Q==", + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", "dev": true, - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/free-solid-svg-icons": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz", - "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@fortawesome/fontawesome-common-types": "6.4.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@fortawesome/vue-fontawesome": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.3.tgz", - "integrity": "sha512-KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==", - "dev": true, "peerDependencies": { - "@fortawesome/fontawesome-svg-core": "~1 || ~6", - "vue": ">= 3.0.0 < 4" + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/@headlessui/react": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.10.tgz", + "integrity": "sha512-5pVLNK9wlpxTUTy9GpgbX/SdcRh+HBnPktjM2wbiLTH4p+2EPHBO1aoSryUCuKUIItdDWO9ITlhUL8UnUN/oIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.20.2", + "@react-aria/interactions": "^3.25.0", + "@tanstack/react-virtual": "^3.13.9", + "use-sync-external-store": "^1.5.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.11", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", - "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { "node": ">=10.10.0" } }, + "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -2369,80 +1662,175 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@icons/material": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@icons/material/-/material-0.2.4.tgz", + "integrity": "sha512-QPcGmICAPbGLGb6F/yNf/KzKqvFx8z5qx3D1yFqVAjoFmXK35EgyW+cJ57Te3CNsmzblwtzakLGFqHPqrfb4Tw==", + "license": "MIT", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/@inertiajs/core": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.1.5.tgz", + "integrity": "sha512-bVApSgzooJ7Wl+x1ZFEvkKRcjpuRHN85l4rVzjbjvqSsy2fXSlsGpHAB4wtLE7Dum+6pdweN1lSMXkaqfjHC+Q==", + "license": "MIT", + "dependencies": { + "@types/lodash-es": "^4.17.12", + "axios": "^1.11.0", + "lodash-es": "^4.17.21", + "qs": "^6.9.0" + } + }, + "node_modules/@inertiajs/react": { + "version": "2.3.21", + "resolved": "https://registry.npmjs.org/@inertiajs/react/-/react-2.3.21.tgz", + "integrity": "sha512-puyk610JRni/ex8T3Di3dyz2c1eYU/u5bmef2BdKhMnn2nrC2hITXtpcFf0emk1yR8Q3+rdO6aaq68Lwk+P3Rw==", + "license": "MIT", + "dependencies": { + "@inertiajs/core": "2.3.21", + "@types/lodash-es": "^4.17.12", + "laravel-precognition": "^1.0.2", + "lodash-es": "^4.18.1" + }, + "peerDependencies": { + "react": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.9.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@inertiajs/react/node_modules/@inertiajs/core": { + "version": "2.3.21", + "resolved": "https://registry.npmjs.org/@inertiajs/core/-/core-2.3.21.tgz", + "integrity": "sha512-grHSCUiWDBWqpRxaobyxUJu0FV6HLkkuJwvoNLVkHwkexLvoaLhb9BmtoQydlIYL5pk2O3jcKaGtWJ83JwTB4A==", + "license": "MIT", + "dependencies": { + "@types/lodash-es": "^4.17.12", + "axios": "^1.13.5", + "laravel-precognition": "^1.0.2", + "lodash-es": "^4.18.1", + "qs": "^6.15.0" + } + }, + "node_modules/@internationalized/date": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.12.1.tgz", + "integrity": "sha512-6IedsVWXyq4P9Tj+TxuU8WGWM70hYLl12nbYU8jkikVpa6WXapFazPUcHUMDMoWftIDE2ILDkFFte6W2nFCkRQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/number": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/@internationalized/number/-/number-3.6.6.tgz", + "integrity": "sha512-iFgmQaXHE0vytNfpLZWOC2mEJCBRzcUxt53Xf/yCXG93lRvqas237i3r7X4RKMwO3txiyZD4mQjKAByFv6UGSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@internationalized/string": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@internationalized/string/-/string-3.2.8.tgz", + "integrity": "sha512-NdbMQUSfXLYIQol5VyMtinm9pZDciiMfN7RtmSuSB78io1hqwJ0naYfxyW6vgxWBkzWymQa/3uLDlbfmshtCaA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", - "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@kurkle/color": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", - "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", - "dev": true + "node_modules/@keyv/serialize": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz", + "integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -2456,6 +1844,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } @@ -2465,6 +1854,7 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -2473,284 +1863,4132 @@ "node": ">= 8" } }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", - "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", - "dev": true, + "node_modules/@parcel/watcher": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.6.tgz", + "integrity": "sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "detect-libc": "^2.0.3", + "is-glob": "^4.0.3", + "node-addon-api": "^7.0.0", + "picomatch": "^4.0.3" }, "engines": { - "node": ">= 8.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.6", + "@parcel/watcher-darwin-arm64": "2.5.6", + "@parcel/watcher-darwin-x64": "2.5.6", + "@parcel/watcher-freebsd-x64": "2.5.6", + "@parcel/watcher-linux-arm-glibc": "2.5.6", + "@parcel/watcher-linux-arm-musl": "2.5.6", + "@parcel/watcher-linux-arm64-glibc": "2.5.6", + "@parcel/watcher-linux-arm64-musl": "2.5.6", + "@parcel/watcher-linux-x64-glibc": "2.5.6", + "@parcel/watcher-linux-x64-musl": "2.5.6", + "@parcel/watcher-win32-arm64": "2.5.6", + "@parcel/watcher-win32-ia32": "2.5.6", + "@parcel/watcher-win32-x64": "2.5.6" } }, - "node_modules/@sipec/vue3-tags-input": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@sipec/vue3-tags-input/-/vue3-tags-input-3.0.4.tgz", - "integrity": "sha512-zE4OiFkWvlvvGT3FZQ9hRrvJW935VPW0fe4K03SxM5Q/UQZMqph763UHXTuyK1orWNQMTbDx9tKPLIMZTiDXLA==", + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.6.tgz", + "integrity": "sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.6.tgz", + "integrity": "sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.6.tgz", + "integrity": "sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.6.tgz", + "integrity": "sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.6.tgz", + "integrity": "sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.6.tgz", + "integrity": "sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.6.tgz", + "integrity": "sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.6.tgz", + "integrity": "sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.6.tgz", + "integrity": "sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.6.tgz", + "integrity": "sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.6.tgz", + "integrity": "sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.6.tgz", + "integrity": "sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.6.tgz", + "integrity": "sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgr/core": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.9.tgz", + "integrity": "sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==", "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", + "integrity": "sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.3.tgz", + "integrity": "sha512-JTF99U/6XIjCBo0wqkU5sK10glYe27MRRsfwoiq5zzOEZLHU3A3KCMa5X/azekYRCJ0HlwI0crAXS/5dEHTzDg==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-accordion": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz", + "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==", + "dev": true, + "license": "MIT", "dependencies": { - "vue": "^3.0.0-beta.1" + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collapsible": "1.1.12", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" }, "peerDependencies": { - "vue": "3.x" + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@types/bootstrap": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/bootstrap/-/bootstrap-5.2.7.tgz", - "integrity": "sha512-vWs0HzobIB8Af2F0B1GXpaVLSVn1NWULDYgTIWp08Et/r2B3aAwwhFBeOs/rRFWJA38EZTXkWP3tepIjpQkpLg==", + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@popperjs/core": "^2.9.2" + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } } }, - "node_modules/@types/eslint": { - "version": "8.44.4", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.4.tgz", - "integrity": "sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==", + "node_modules/@radix-ui/react-accordion/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-arrow/-/react-arrow-1.1.7.tgz", + "integrity": "sha512-F+M1tLhO+mlQaOWspE8Wstg+z6PwxwRd8oQ8IXceWz92kfAmalTRf0EjrouQeo7QssEPfCn05B4Ihs1K9WQ/7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-arrow/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz", + "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-checkbox/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz", + "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collapsible/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.7.tgz", + "integrity": "sha512-Fh9rGN0MoI4ZFUNyfFVNU4y9LUz93u9/0K+yLgA2bwRojxM8JU1DyvvMBabnZPBgMWREAJvU2jjVzq+LrFUglw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.2.tgz", + "integrity": "sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.2.tgz", + "integrity": "sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.15.tgz", + "integrity": "sha512-TCglVRtzlffRNxRMEyR36DGBLJpeusFcgMVD9PZEzAKnUs1lKCgX5u9BmC2Yg+LL9MgZDugFFs1Vl+Jp4t/PGw==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.1.tgz", + "integrity": "sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.11.tgz", + "integrity": "sha512-Nqcp+t5cTB8BinFkZgXiMJniQH0PsUt2k51FUhbdfeKvc4ACcG2uQniY/8+h1Yv6Kza4Q7lD7PQV0z0oicE0Mg==", + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-escape-keydown": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dropdown-menu/-/react-dropdown-menu-2.1.16.tgz", + "integrity": "sha512-1PLGQEynI/3OX/ftV54COn+3Sud/Mn8vALg2rWnBLnRaGtJDduNW/22XjlGgPdpcIbiQxjKtb7BkcjP00nqfJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-menu": "2.1.16", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dropdown-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.3.tgz", + "integrity": "sha512-0rFg/Rj2Q62NCm62jZw0QX7a3sz6QCQU0LpZdNrJX8byRGaGVTqbrW9jAoIAHyMQqsNpeZ81YgSizOt5WXq0Pw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.7.tgz", + "integrity": "sha512-t2ODlkXBQyn7jkl6TNaw/MtVEVvIGelJDCG41Okq/KwUsJBwQ4XVZsHAVUkK4mBv3ewiAS3PGuUWuY2BoK4ZUw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.1.tgz", + "integrity": "sha512-kGkGegYIdQsOb4XjsfM97rXsiHaBwco+hFI66oO4s9LU+PLAC5oJ7khdOVFxkhsmlbpUqDAvXw11CluXP+jkHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-label": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.8.tgz", + "integrity": "sha512-FmXs37I6hSBVDlO4y764TNz1rLgKwjJMQ0EGte6F3Cb3f4bIuHB/iLa/8I9VKkmOy+gNHq8rql3j686ACVV21A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu": { + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@radix-ui/react-menu/-/react-menu-2.1.16.tgz", + "integrity": "sha512-72F2T+PLlphrqLcAotYPp0uJMr5SjP5SL01wfEspJbru5Zs5vQaSHb4VB3ZMJPimgHHCHG7gMOeOB9H3Hdmtxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-roving-focus": "1.1.11", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz", + "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-popper/-/react-popper-1.2.8.tgz", + "integrity": "sha512-0NJQ4LFFUuWkE7Oxf0htBKS6zLkkjBH+hM1uk7Ng705ReR8m/uelduy1DBo0PyBXPKVnBA6YBlU94MBGXrSBCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/react-dom": "^2.0.0", + "@radix-ui/react-arrow": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-rect": "1.1.1", + "@radix-ui/react-use-size": "1.1.1", + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-popper/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.9.tgz", + "integrity": "sha512-bpIxvq03if6UNwXZ+HTK71JLh4APvnXntDc6XOX8UVq4XQOVl7lwok0AvIl+b8zgCw3fSaVTZMpAPPagXbKmHQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.5.tgz", + "integrity": "sha512-/jfEwNDdQVBCNvjkGit4h6pMOzq8bHkopq458dPt2lMjx+eBQUohZNG9A7DtO/O5ukSbxuaNGXMjHicgwy6rQQ==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.4.tgz", + "integrity": "sha512-9hQc4+GNVtJAIEPEqlYqW5RiYdrr8ea5XQ0ZOnD6fgru+83kqT15mq2OCcbe8KnjRZl5vF3ks69AKz3kh1jrhg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.8.tgz", + "integrity": "sha512-+gISHcSPUJ7ktBy9RnTqbdKW78bcGke3t6taawyZ71pio1JewwGSJizycs7rLhGTvMJYCQB1DBK4KQsxs7U8dA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-context": "1.1.3", + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-progress/node_modules/@radix-ui/react-context": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.3.tgz", + "integrity": "sha512-ieIFACdMpYfMEjF0rEf5KLvfVyIkOz6PDGyNnP+u+4xQ6jny3VCgA4OgXOwNx2aUkxn8zx9fiVcM8CfFYv9Lxw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/@radix-ui/react-roving-focus/-/react-roving-focus-1.1.11.tgz", + "integrity": "sha512-7A6S9jSgm/S+7MdtNDSb+IU859vQqJ/QAtcYQcfFC6W8RS4IxIZDldLR0xqCFZ6DCyrQLjLPsxtTNch5jVA4lA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-roving-focus/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.10.tgz", + "integrity": "sha512-tAXIa1g3sM5CGpVT0uIbUx/U3Gs5N8T52IICuCtObaos1S8fzsrPXG5WObkQN3S6NVl6wKgPhAIiBGbWnvc97A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select": { + "version": "2.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-select/-/react-select-2.2.6.tgz", + "integrity": "sha512-I30RydO+bnn2PQztvo25tswPH+wFBjehVGtmagkU78yMdwTwVf12wnAOF+AeP8S2N8xD+5UPbGhkUfPyvT+mwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-focus-guards": "1.1.3", + "@radix-ui/react-focus-scope": "1.1.7", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3", + "aria-hidden": "^1.2.4", + "react-remove-scroll": "^2.6.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-separator": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.8.tgz", + "integrity": "sha512-sDvqVY4itsKwwSMEe0jtKgfTh+72Sy3gPmQpjqcQneqQ4PFmr/1I0YA+2/puilhggCe2gJcx5EBAYFkWkdpa5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.4" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slider/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", + "integrity": "sha512-Jl+bCv8HxKnlTLVrcDE8zTMJ09R9/ukw4qBs/oZClOfoQk/cOTbDn+NceXfV7j09YPVQUryJPHurafcSg6EVKA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz", + "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-switch/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast": { + "version": "1.2.15", + "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz", + "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-callback-ref": "1.1.1", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-toast/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz", + "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-dismissable-layer": "1.1.11", + "@radix-ui/react-id": "1.1.1", + "@radix-ui/react-popper": "1.2.8", + "@radix-ui/react-portal": "1.1.9", + "@radix-ui/react-presence": "1.1.5", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-slot": "1.2.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-visually-hidden": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.1.tgz", + "integrity": "sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.2.2.tgz", + "integrity": "sha512-BjasUjixPFdS+NKkypcyyN5Pmg83Olst0+c6vGov0diwTEo6mgdqVR6hxcEgFuh4QrAs7Rc+9KuGJ9TVCj0Zzg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-effect-event": "0.0.2", + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-effect-event": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-effect-event/-/react-use-effect-event-0.0.2.tgz", + "integrity": "sha512-Qp8WbZOBe+blgpuUT+lw2xheLP8q0oatc9UpmiemEICxGvFLYmHm9QowVZGHtJlGbS6A6yJ3iViad/2cVjnOiA==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.1.tgz", + "integrity": "sha512-Il0+boE7w/XebUHyBjroE+DbByORGR9KKmITzbR7MyQ4akpORYP/ZmbhAr0DG7RmmBqoOnZdy2QlvajJ2QA59g==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.1.tgz", + "integrity": "sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.1.tgz", + "integrity": "sha512-2dHfToCj/pzca2Ck724OZ5L0EVrr3eHRNsG/b3xQJLA2hZpVCS99bLAX+hm1IHXDEnzU6by5z/5MIY794/a8NQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-rect/-/react-use-rect-1.1.1.tgz", + "integrity": "sha512-QTYuDesS0VtuHNNvMh+CjlKJ4LJickCMUAqjlE3+j8w+RlRpwyX3apEQKGFzbZGdo7XNG1tXa+bQqIE7HIXT2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/rect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-size": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-size/-/react-use-size-1.1.1.tgz", + "integrity": "sha512-ewrXRDTAqAXlkl6t/fkXWNAhFX9I+CkKlw6zjEwk86RSPKwZr3xpBRso655aqYafwtnbpHLj6toFzmd6xdVptQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.2.3.tgz", + "integrity": "sha512-pzJq12tEaaIhqjbzpCuv/OypJY/BPavOofm+dbab+MHLajy277+1lLm6JFcGgF5eskJ6mquGirhXY2GD/8u8Ug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-primitive": "2.1.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-primitive": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.1.3.tgz", + "integrity": "sha512-m9gTwRkhy2lvCPe6QJp4d3G1TYEUHn/FzJUtq9MjH46an1wJU+GdoGC5VLof8RX8Ft/DlpshApkhswDLZzHIcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.2.3" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden/node_modules/@radix-ui/react-slot": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz", + "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.2" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/rect": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/rect/-/rect-1.1.1.tgz", + "integrity": "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@react-aria/focus": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.22.0.tgz", + "integrity": "sha512-ZfDOVuVhqDsM9mkNji3QUZ/d40JhlVgXrDkrfXylM1035QCrcTHN7m2DpbE95sU2A8EQb4wikvt5jM6K/73BPg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0", + "react-aria": "3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-aria/interactions": { + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.28.0.tgz", + "integrity": "sha512-OXwdU1EWFdMxmr/K1CXNGJzmNlCClByb+PuCaqUyzBymHPCGVhawirLIon/CrIN5psh3AiWpHSh4H0WeJdVpng==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "react-aria": "3.48.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.34.0.tgz", + "integrity": "sha512-gp6xo/s2lX54AlTjOiqwDnxA7UW79BNvI9dB9pr3LZTzRKCd1ZA+ZbgKw/ReIiWuvvVw/8QFJpnqeeFyLocMcQ==", + "dev": true, + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.27", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", + "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.2.tgz", + "integrity": "sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.2.tgz", + "integrity": "sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.2.tgz", + "integrity": "sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.2.tgz", + "integrity": "sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.2.tgz", + "integrity": "sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.2.tgz", + "integrity": "sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.2.tgz", + "integrity": "sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==", + "cpu": [ + "arm" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.2.tgz", + "integrity": "sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==", + "cpu": [ + "arm" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.2.tgz", + "integrity": "sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.2.tgz", + "integrity": "sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.2.tgz", + "integrity": "sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==", + "cpu": [ + "loong64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.2.tgz", + "integrity": "sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==", + "cpu": [ + "loong64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.2.tgz", + "integrity": "sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==", + "cpu": [ + "ppc64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.2.tgz", + "integrity": "sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==", + "cpu": [ + "ppc64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.2.tgz", + "integrity": "sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==", + "cpu": [ + "riscv64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.2.tgz", + "integrity": "sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==", + "cpu": [ + "riscv64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.2.tgz", + "integrity": "sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==", + "cpu": [ + "s390x" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.2.tgz", + "integrity": "sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.2.tgz", + "integrity": "sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.2.tgz", + "integrity": "sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.2.tgz", + "integrity": "sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.2.tgz", + "integrity": "sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.2.tgz", + "integrity": "sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.2.tgz", + "integrity": "sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.2.tgz", + "integrity": "sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@simple-libs/child-process-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@simple-libs/child-process-utils/-/child-process-utils-1.0.2.tgz", + "integrity": "sha512-/4R8QKnd/8agJynkNdJmNw2MBxuFTRcNFnE5Sg/G+jkSsV8/UBgULMzhizWWW42p8L5H7flImV2ATi79Ove2Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@simple-libs/stream-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@simple-libs/stream-utils/-/stream-utils-1.2.0.tgz", + "integrity": "sha512-KxXvfapcixpz6rVEB6HPjOUZT22yN6v0vI0urQSk1L8MlEWPDFCZkhw2xmkyoTGYeFw7tWTZd7e3lVzRZRN/EA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://ko-fi.com/dangreen" + } + }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.3.tgz", + "integrity": "sha512-85fsmzgsIVmyG3/GFrjuYj6Cz8rAM7IZiPiXCMiSMfoDOC1lOrzrXPDk24WqviAghnPqGpx8b0caK2PuewWGFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1", + "@csstools/media-query-list-parser": "^3.0.1", + "is-plain-object": "^5.0.0", + "postcss": "^8.4.41", + "postcss-selector-parser": "^6.1.2", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.8.0" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/@csstools/media-query-list-parser": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz", + "integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.1", + "@csstools/css-tokenizer": "^3.0.1" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tabby_ai/hijri-converter": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@tabby_ai/hijri-converter/-/hijri-converter-1.0.5.tgz", + "integrity": "sha512-r5bClKrcIusDoo049dSL8CawnHR6mRdDwhlQuIgZRNty68q0x8k3Lf1BtPAMxRf/GgnHBnIO4ujd3+GQdLWzxQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.11", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.11.tgz", + "integrity": "sha512-h9wegbZDPurxG22xZSoWtdzc41/OlNEUQERNqI/0fOwa2aVlWGu7C35E/x6LDyD3lgtztFSSjKZyuVM0hxhbgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.4.tgz", + "integrity": "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.19.0", + "jiti": "^2.6.1", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.2.4" + } + }, + "node_modules/@tailwindcss/node/node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.4.tgz", + "integrity": "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-arm64": "4.2.4", + "@tailwindcss/oxide-darwin-x64": "4.2.4", + "@tailwindcss/oxide-freebsd-x64": "4.2.4", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", + "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", + "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", + "@tailwindcss/oxide-linux-x64-musl": "4.2.4", + "@tailwindcss/oxide-wasm32-wasi": "4.2.4", + "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", + "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.4.tgz", + "integrity": "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.4.tgz", + "integrity": "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.4.tgz", + "integrity": "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.4.tgz", + "integrity": "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.4.tgz", + "integrity": "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.4.tgz", + "integrity": "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.4.tgz", + "integrity": "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.4.tgz", + "integrity": "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.4.tgz", + "integrity": "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.4.tgz", + "integrity": "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.8.1", + "@emnapi/runtime": "^1.8.1", + "@emnapi/wasi-threads": "^1.1.0", + "@napi-rs/wasm-runtime": "^1.1.1", + "@tybys/wasm-util": "^0.10.1", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.4.tgz", + "integrity": "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.4.tgz", + "integrity": "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 20" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.19.tgz", + "integrity": "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/vite": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.4.tgz", + "integrity": "sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tailwindcss/node": "4.2.4", + "@tailwindcss/oxide": "4.2.4", + "tailwindcss": "4.2.4" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" + } + }, + "node_modules/@tailwindcss/vite/node_modules/tailwindcss": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.4.tgz", + "integrity": "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/react-virtual": { + "version": "3.13.24", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.24.tgz", + "integrity": "sha512-aIJvz5OSkhNIhZIpYivrxrPTKYsjW9Uzy+sP/mx0S3sev2HyvPb7xmjbYvokzEpfgYHy/HjzJ2zFAETuUfgCpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.14.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/virtual-core": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.14.0.tgz", + "integrity": "sha512-JLANqGy/D6k4Ujmh8Tr25lGimuOXNiaVyXaCAZS0W+1390sADdGnyUdSWNIfd49gebtIxGMij4IktRVzrdr12Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tiptap/core": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.22.4.tgz", + "integrity": "sha512-vGIGm/HpqLg8EAAQXQ+koV+/S828OEpzocfWcPOwo1u2QUVf9dQG47Yy6JJ8zFFaJwfv4dBcOXli+7BrJwsxDQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-blockquote": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-3.22.4.tgz", + "integrity": "sha512-7/61kNPbGFhMgM//zMknD0pSb69rGdRIkpulXOWS1JBrFHkH6hjZDfrOETNzgKkO+NlmzVl9rXSTv0xauS3lzA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bold": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-3.22.4.tgz", + "integrity": "sha512-jIaPKfNOQu2lhpbLDvtwlQqM+mjF+Kk+auHpzYjBnsuwUli1Cl5ZOau7RH+rru/SQvZe1DtpQlANujDywugZAA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bubble-menu": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-3.22.4.tgz", + "integrity": "sha512-v4pux5Ql3THAEjaLMY4ldtdy/Xy2qU7PJLBkq8ugLp8qicaKC+tpqxp6sGif4vLIjz7Ap5hurRbTNbXzszyyHA==", + "license": "MIT", + "optional": true, + "dependencies": { + "@floating-ui/dom": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-bullet-list": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-3.22.4.tgz", + "integrity": "sha512-TB+d3fGcTixYjO7coKqTr1mGTJuqr8hjDCPUFgzuvKyJnBhqWITmBzQ/8CLq4rr6mihgGURbD3N+xkQuPAKFiw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-code": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-3.22.4.tgz", + "integrity": "sha512-cnbxmVhAcc7X3G81QUYEmKP0ve2hRmvAiFXBuuv9RUtQlBiRnzmhHoJOMgkX0CsMR7+8kMRpTfeDUYq2xp5s5w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-code-block": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-3.22.4.tgz", + "integrity": "sha512-MEurzNXfMET3rhjpoPJYUgMfxTdTqbzT9+ToFrqNGAHocdXVm6m1hhO2frVC7fEtHPnxXKsn0Z3NUbCRkRTLuA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-color": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-color/-/extension-color-3.22.4.tgz", + "integrity": "sha512-1vDuVsrOETshe4j4nZhWalbKYcWfNybRCe30h829ExX06XwFryUYLb/LgTIaGCr9beWZUldsK+vOkBWdDTGMTw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-text-style": "3.22.4" + } + }, + "node_modules/@tiptap/extension-document": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.22.4.tgz", + "integrity": "sha512-XQKla1+703FqQJC48tPDVgt9ucGiFbIEmQdOg5L5o07z9a6/NzuaZAc+1zJ7NxcUZzy+z6wBn1PrVMTiqiSXlw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-dropcursor": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-3.22.4.tgz", + "integrity": "sha512-N9/yMDC35jJp0V/naL0+6gi4gUDUIcPpWEzFdCDWUSYBA8mt41c1kI1ZU7UTKYIBzTClenhYHRc2XKZxxx0+LQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-floating-menu": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-3.22.4.tgz", + "integrity": "sha512-DFuyYxgaZPgxum5z1yvJPbfYCvDdO8geXsdyqt0qYYdiat3aGE4ncJhiLRIFDhSHBhaZg5eCgu/YPYAN6jZnrA==", + "license": "MIT", + "optional": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@floating-ui/dom": "^1.0.0", + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-gapcursor": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-3.22.4.tgz", + "integrity": "sha512-UYBEUj3SFpKINIE7AdzcyeS3xICK+ee+YLBbuqNXyHStYChjJOohzJehqiqhjR16A88KQQ+ZjgyDcItKGygSog==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-hard-break": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-3.22.4.tgz", + "integrity": "sha512-xq+a4dE7T6VwApCkh/yU3p30gn3F8g8Arb9CyEZm58/WIJUIGvHSTjDdHmvU16+kiWSBg+wOOsaFHhYjJjxcKA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-heading": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-3.22.4.tgz", + "integrity": "sha512-TUaj5f0Ir5qy9HKKt2ocnwfXKpZDYeHgbbP9gshKFzdq5PLe1RbIgkjfy6bnoI865cYjmPYWRjcT7XsKyIcb9Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-history": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-3.22.4.tgz", + "integrity": "sha512-yk1RrBJty4F3Os+w6zIS3nOSOKy+iIax3UyXwCKiP+JI4nsTlYvgQTgTtT9Wqa14ZrypasV8gAuQeTNf/spFLg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-horizontal-rule": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-3.22.4.tgz", + "integrity": "sha512-cCI1HekGQwhY/MbgaKQ0R/7HcH5ZM1oFAyI/J72QGLC0XnF403S/OXoHMuBWr1mCu8hNiQWCzeNRJUty0iytNw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-image": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-3.22.4.tgz", + "integrity": "sha512-ZDc+fLaratTQ4IgnKcJJwfUgUgpcHjbZSBi6UQAILJwkflMy1Zxj8mpbma5P934nLSI+uDnR5ret6ZZLNITKhA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-invisible-characters": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-invisible-characters/-/extension-invisible-characters-3.22.4.tgz", + "integrity": "sha512-KfEgd4p2dcw+qQKI+0drj6Q2uqUOdCEEK1WO2DlbmV5JbpG8yOPhZbLI8bnYaPqWW/leAAHdszOwq93yO2HORg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/extension-text-style": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-italic": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-3.22.4.tgz", + "integrity": "sha512-fVSDx5AYXgDI3v2zZIqb7V8EewthwM2NJ/ZCX+XaxRsqNEpnjVhgHs7UlvDqK1wj2OJ6zmUNjPtVlAFRxwT+HQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-link": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-3.22.4.tgz", + "integrity": "sha512-uoP3yus02uwGPVzW2QaEPJWVIrUb/r5nKm6c8DiJv9fNSX1+gykZZMg42c6GwRFLZ/vyfWjVCbAE03VMUqafgA==", + "license": "MIT", + "dependencies": { + "linkifyjs": "^4.3.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list/-/extension-list-3.22.4.tgz", + "integrity": "sha512-Xe8UFvvHmyp/c/TJsFwlwU9CWACYbBirNsluJ3U1+H8BTu1wqdrT/AXR5uIXeyCl5kiWKgX5q71eHWbYFOrqrg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list-item": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-3.22.4.tgz", + "integrity": "sha512-H659KXTvggSypIDWSOJBZ37jh9pKjQriDDvYPYvOZCdfij0D0hsDXN/wXoypArneUkoBdgruHfTtMkFOaQlgkw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-list-keymap": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-list-keymap/-/extension-list-keymap-3.22.4.tgz", + "integrity": "sha512-t/zhker4oIS78AIGYDdFFfZC6zSBlszfD7z/zqFLGCg5PHNNgkZK5hKj6Vyix6D2SapRn/ajnx+8mhbKIUH5eA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-ordered-list": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-3.22.4.tgz", + "integrity": "sha512-w77hPVf7pcHt97vfrybg/l0t5CimCd4y75OJKuHuo3CfgM5xbUP/gaPNMDyLLe7MYole/UHi/XvG3XjgzqTzAw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-list": "3.22.4" + } + }, + "node_modules/@tiptap/extension-paragraph": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.22.4.tgz", + "integrity": "sha512-de6dFkIhigiENESY6rNJ3yTVS/337ybfP30dNPudTwGe9oAu9ZCS+04j6QCvXSjhlI3ULiv7wiSHqrP26Gd+Hw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-placeholder": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-placeholder/-/extension-placeholder-3.22.4.tgz", + "integrity": "sha512-Z3wtWL+KufwkC7CkJge5enAxx4q8C3oOYixme02snY9zfjX3V/1pjAmEfP4wxScgM5GIuTEJ83B9Yz3wRzPA6Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extensions": "3.22.4" + } + }, + "node_modules/@tiptap/extension-strike": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-3.22.4.tgz", + "integrity": "sha512-aRHWQj42HiailXSC9LkKYM3jWMcSeGwOjbqM4PiuxQZmHVDRFmeHkfJItOdn2cSHaO0vuEVK+TvrWUWsBFi3pg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-subscript": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-3.22.4.tgz", + "integrity": "sha512-95Uwi8jEYVr/qil7tGZhG87wR0SNIUBZXSFcDkDeFBzRdccofwD2XL2HU5FqWm2IPNuE21lQWPImVspXR0Kzyw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-superscript": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-3.22.4.tgz", + "integrity": "sha512-VGNR67uTmdTfRC5+1HqtAfA+kK6Lbh9tXitcIs8Scwxlq89PBOUEs11RnzcXfwv5hYq94WjgQJF3A99Jc9Cg2w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table/-/extension-table-3.22.4.tgz", + "integrity": "sha512-kjvLv3Z4JI+1tLDqZKa+bKU8VcxY+ZOyMCKWQA7wYmy8nKWkLJ60W+xy8AcXXpHB2goCIgSFLhsTyswx0GXH4w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table-cell": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-cell/-/extension-table-cell-3.22.4.tgz", + "integrity": "sha512-uvFegCc1UQYK2nfIV2sIHg+hzLIMroJJm00XomzBgC1w/eSO7Ui8APiDh/baBcTPpCSU3SLiQLTgx7AU7oE3pg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-table": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table-header": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-header/-/extension-table-header-3.22.4.tgz", + "integrity": "sha512-V4kLLWeRdc/I+IXiXZZhLAjsaHHiJWuLXTuOtZRDrCxQUiFLi4AgNg1DPQ09JAANkEWDhXq3x6BoUXaFwumbEw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-table": "3.22.4" + } + }, + "node_modules/@tiptap/extension-table-row": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-table-row/-/extension-table-row-3.22.4.tgz", + "integrity": "sha512-9tdS6jgS6DqUu5TpEmNrRoo/DL5Xam0PyrQaUEXUC+ssci+bMRCJ8PAWMcunNsI9NKf/Tb3wYrv6hGFChaT9uA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/extension-table": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.22.4.tgz", + "integrity": "sha512-mM69uUW5cSxIhyEpWXi/YcfyupcJMDLCPEfYi62awH0iOP/LRoCv/nHjJq4Hyj/KxRJbe8HKwIUnqaCUf7m5Pg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text-align": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-3.22.4.tgz", + "integrity": "sha512-W7TnXWSyfDXSatGXp5y/CahE8G4btrQPb0/sy+eG+42FxdzYsqvh1ys3OE9j2XSuTrZ1q/tZA/NLPUkc7vw6Kw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-text-style": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text-style/-/extension-text-style-3.22.4.tgz", + "integrity": "sha512-24DVBdySNKq3ovY+v9ERVxAyHStDa6ftUlyoHuZv0YXQ2amjUNOmqQtGEHBIULpCbBb1jZ+atHhv9MBZ0Ia9Pw==", + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extension-underline": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-3.22.4.tgz", + "integrity": "sha512-08kGdbhIrA6h10GWXqOkqIveaBj5tmxclK208/nUIAlonI9hPd739vu7fmVtpnmqCnSSNpoRtU4u6Gj5at0ZpA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4" + } + }, + "node_modules/@tiptap/extensions": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.22.4.tgz", + "integrity": "sha512-fOe8VptJvLPs32bNdUYo8SRyljwqKNQVXWW056VoXIc5en/59OdJlJQVeHI0jRRciH3MtrqODi/gfJR0VHNZ8A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4" + } + }, + "node_modules/@tiptap/pm": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.22.4.tgz", + "integrity": "sha512-hj8Qka6WcHRllHUdeSjDnq2XaisUo4KsoGJc1WcFpoa1Yd+OeD861zUMnV7DFVGdZRy45Obht0CUYJpXQ4yA4w==", + "license": "MIT", + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-keymap": "^1.2.2", + "prosemirror-model": "^1.24.1", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.38.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tiptap/react": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/react/-/react-3.22.4.tgz", + "integrity": "sha512-XIQZPwLakR1t8+Q1UeCpr+kUHDWxpJzGy9r2xUi3mpPd6Wh8dtNltScBkUlCcr0sqc6J1GF6Is02JJVQGmCZMA==", + "license": "MIT", + "dependencies": { + "@types/use-sync-external-store": "^0.0.6", + "fast-equals": "^5.3.3", + "use-sync-external-store": "^1.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "optionalDependencies": { + "@tiptap/extension-bubble-menu": "^3.22.4", + "@tiptap/extension-floating-menu": "^3.22.4" + }, + "peerDependencies": { + "@tiptap/core": "3.22.4", + "@tiptap/pm": "3.22.4", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "@types/react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/@tiptap/starter-kit": { + "version": "3.22.4", + "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-3.22.4.tgz", + "integrity": "sha512-qWjw+vfdin1rzMRpRU4cC5tLTwMJtUpXeQukv+6mOqqvhptuwuZBjUHImVEJaSPoHXS7+1ut+nTnrLyWyEuE5Q==", + "license": "MIT", + "dependencies": { + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-code": "^3.22.4", + "@tiptap/extension-code-block": "^3.22.4", + "@tiptap/extension-document": "^3.22.4", + "@tiptap/extension-dropcursor": "^3.22.4", + "@tiptap/extension-gapcursor": "^3.22.4", + "@tiptap/extension-hard-break": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-list-item": "^3.22.4", + "@tiptap/extension-list-keymap": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-paragraph": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-text": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/extensions": "^3.22.4", + "@tiptap/pm": "^3.22.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.2" } }, "node_modules/@types/estree": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz", - "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" }, - "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", - "dev": true - }, - "node_modules/@types/minimist": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.3.tgz", - "integrity": "sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==", + "node_modules/@types/fs-extra": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.5.tgz", + "integrity": "sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==", "dev": true, - "peer": true + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.24.tgz", + "integrity": "sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "20.8.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.4.tgz", - "integrity": "sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==", - "dev": true, + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", + "devOptional": true, + "license": "MIT", "dependencies": { - "undici-types": "~5.25.1" + "undici-types": "~7.19.0" } }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.2.tgz", - "integrity": "sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==", - "dev": true, - "peer": true + "node_modules/@types/pluralize": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/@types/pluralize/-/pluralize-0.0.33.tgz", + "integrity": "sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==", + "license": "MIT" }, - "node_modules/@types/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", - "dev": true - }, - "node_modules/@types/toastify-js": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.1.tgz", - "integrity": "sha512-9CTM+LKFmS0+Ii+RH55XPKcmNxCjLticj8kxeCxa7PnSVCZPQurb9XtKQtoMl/fv7WaqUpRezDcFuY8n92CtUg==", - "dev": true - }, - "node_modules/@types/vue-select": { - "version": "3.16.5", - "resolved": "https://registry.npmjs.org/@types/vue-select/-/vue-select-3.16.5.tgz", - "integrity": "sha512-hL0aNZHALvJSPZCNP1Z4uDivQ2uAxOFiPJESajETjUb9HNrCz8+WtkI1LVuowBf4c31JkY5am1OyLGQhiuZseg==", - "dev": true, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", + "license": "MIT", "dependencies": { - "vue": "^2.0.0" + "csstype": "^3.2.2" } }, - "node_modules/@types/vue-select/node_modules/@vue/compiler-sfc": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-2.7.14.tgz", - "integrity": "sha512-aNmNHyLPsw+sVvlQFQ2/8sjNuLtK54TC6cuKnVzAY93ks4ZBrvwQSnkkIh7bsbNhum5hJBS00wSDipQ937f5DA==", + "node_modules/@types/react-color": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/@types/react-color/-/react-color-3.0.13.tgz", + "integrity": "sha512-2c/9FZ4ixC5T3JzN0LP5Cke2Mf0MKOP2Eh0NPDPWmuVH3NjPyhEjqNMQpN1Phr5m74egAy+p2lYNAFrX1z9Yrg==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.18.4", - "postcss": "^8.4.14", - "source-map": "^0.6.1" + "@types/reactcss": "*" + }, + "peerDependencies": { + "@types/react": "*" } }, - "node_modules/@types/vue-select/node_modules/vue": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.14.tgz", - "integrity": "sha512-b2qkFyOM0kwqWFuQmgd4o+uHGU7T+2z3T+WQp8UBjADfEv2n4FEMffzBmCKNP0IGzOEEfYjvtcC62xaSKeQDrQ==", - "dev": true, - "dependencies": { - "@vue/compiler-sfc": "2.7.14", - "csstype": "^3.1.0" + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", + "license": "MIT", + "peerDependencies": { + "@types/react": "^19.2.0" } }, + "node_modules/@types/reactcss": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/@types/reactcss/-/reactcss-1.2.13.tgz", + "integrity": "sha512-gi3S+aUi6kpkF5vdhUsnkwbiSEIU/BEJyD7kBy2SudWBUuKmJk8AQKE0OVcQQeEy40Azh0lV6uynxlikYIJuwg==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/use-sync-external-store": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.6.tgz", + "integrity": "sha512-zFDAD+tlpf2r4asuHEj0XH6pY6i0g5NeAHPn+15wk3BV6JA69eERFXC1gyGThDkVa1zCyKr5jox1+2LbV/AMLg==", + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.7.5.tgz", - "integrity": "sha512-JhtAwTRhOUcP96D0Y6KYnwig/MRQbOoLGXTON2+LlyB/N35SP9j1boai2zzwXb7ypKELXMx3DVk9UTaEq1vHEw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.59.0.tgz", + "integrity": "sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/type-utils": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/type-utils": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "ignore": "^7.0.5", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.59.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/parser": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.7.5.tgz", - "integrity": "sha512-bIZVSGx2UME/lmhLcjdVc7ePBwn7CLqKarUBL4me1C5feOd663liTGjMBGVcGr+BhnSLeP4SgwdvNnnkbIdkCw==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.59.0.tgz", + "integrity": "sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.59.0.tgz", + "integrity": "sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.59.0", + "@typescript-eslint/types": "^8.59.0", + "debug": "^4.4.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.7.5.tgz", - "integrity": "sha512-GAlk3eQIwWOJeb9F7MKQ6Jbah/vx1zETSDw8likab/eFcqkjSD7BI75SDAeC5N2L0MmConMoPvTsmkrg71+B1A==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.59.0.tgz", + "integrity": "sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5" + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.7.5.tgz", - "integrity": "sha512-Gs0qos5wqxnQrvpYv+pf3XfcRXW6jiAn9zE/K+DlmYf6FcpxeNYN0AIETaPR7rHO4K2UY+D0CIbDP9Ut0U4m1g==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.59.0.tgz", + "integrity": "sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==", "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.7.5", - "@typescript-eslint/utils": "6.7.5", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.59.0.tgz", + "integrity": "sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0", + "@typescript-eslint/utils": "8.59.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, "node_modules/@typescript-eslint/types": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.7.5.tgz", - "integrity": "sha512-WboQBlOXtdj1tDFPyIthpKrUb+kZf2VroLZhxKa/VlwLlLyqv/PwUNgL30BlTVZV1Wu4Asu2mMYPqarSO4L5ZQ==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.59.0.tgz", + "integrity": "sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -2758,410 +5996,443 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.7.5.tgz", - "integrity": "sha512-NhJiJ4KdtwBIxrKl0BqG1Ur+uw7FiOnOThcYx9DpOGJ/Abc9z2xNzLeirCG02Ig3vkvrc2qFLmYSSsaITbKjlg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.59.0.tgz", + "integrity": "sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/visitor-keys": "6.7.5", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "@typescript-eslint/project-service": "8.59.0", + "@typescript-eslint/tsconfig-utils": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/visitor-keys": "8.59.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/utils": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.7.5.tgz", - "integrity": "sha512-pfRRrH20thJbzPPlPc4j0UNGvH1PjPlhlCMq4Yx7EGjV7lvEeGX0U6MJYe8+SyFutWgSHsdbJ3BXzZccYggezA==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.59.0.tgz", + "integrity": "sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.7.5", - "@typescript-eslint/types": "6.7.5", - "@typescript-eslint/typescript-estree": "6.7.5", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.59.0", + "@typescript-eslint/types": "8.59.0", + "@typescript-eslint/typescript-estree": "8.59.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.7.5", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.7.5.tgz", - "integrity": "sha512-3MaWdDZtLlsexZzDSdQWsFQ9l9nL8B80Z4fImSpyllFC/KLqWQRdEcB+gGGO+N3Q2uL40EsG66wZLsohPxNXvg==", + "version": "8.59.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.59.0.tgz", + "integrity": "sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.7.5", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.59.0", + "eslint-visitor-keys": "^5.0.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@vitejs/plugin-legacy": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-4.1.1.tgz", - "integrity": "sha512-um3gbVouD2Q/g19C0qpDfHwveXDCAHzs8OC3e9g6aXpKoD1H14himgs7wkMnhAynBJy7QqUoZNAXDuqN8zLR2g==", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", + "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "dev": true, + "license": "ISC" + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.11.1.tgz", + "integrity": "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "glibc" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "libc": [ + "musl" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, "dependencies": { - "@babel/core": "^7.22.9", - "@babel/preset-env": "^7.22.9", - "browserslist": "^4.21.9", - "core-js": "^3.31.1", - "magic-string": "^0.30.1", - "regenerator-runtime": "^0.13.11", - "systemjs": "^6.14.1" + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@uwil/husky-config": { + "version": "1.0.1", + "resolved": "https://lab.s-web.fr/api/v4/projects/259/packages/npm/@uwil/husky-config/-/@uwil/husky-config-1.0.1.tgz", + "integrity": "sha1-VGchal1LcEFXNFsQZxh5pn4495Q=", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@commitlint/cli": "^20.5.0", + "@commitlint/config-conventional": "^20.5.0", + "husky": "^9.1.7" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", + "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.28.0", + "@babel/plugin-transform-react-jsx-self": "^7.27.1", + "@babel/plugin-transform-react-jsx-source": "^7.27.1", + "@rolldown/pluginutils": "1.0.0-beta.27", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.17.0" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, "peerDependencies": { - "terser": "^5.4.0", - "vite": "^4.0.0" + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" } }, - "node_modules/@vitejs/plugin-vue": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", - "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", - "dev": true, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.4.1.tgz", - "integrity": "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ==", - "dev": true, - "dependencies": { - "@volar/source-map": "1.4.1" - } - }, - "node_modules/@volar/source-map": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.4.1.tgz", - "integrity": "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA==", - "dev": true, - "dependencies": { - "muggle-string": "^0.2.2" - } - }, - "node_modules/@volar/typescript": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.4.1.tgz", - "integrity": "sha512-phTy6p9yG6bgMIKQWEeDOi/aeT0njZsb1a/G1mrEuDsLmAn24Le4gDwSsGNhea6Uhu+3gdpUZn2PmZXa+WG2iQ==", - "dev": true, - "dependencies": { - "@volar/language-core": "1.4.1" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/@volar/vue-language-core": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-1.6.0.tgz", - "integrity": "sha512-oyX+A4vclBlDB7UQtfAPraD6tt3nE+y9YNXdH+xjDi//Cokdx65PZnwLaiG+hURI6WgDn1ZQffTE1OeJtr786A==", - "dev": true, - "dependencies": { - "@volar/language-core": "1.4.1", - "@volar/source-map": "1.4.1", - "@vue/compiler-dom": "^3.2.0", - "@vue/compiler-sfc": "^3.2.0", - "@vue/reactivity": "^3.2.0", - "@vue/shared": "^3.2.0", - "minimatch": "^9.0.0", - "muggle-string": "^0.2.2", - "vue-template-compiler": "^2.7.14" - } - }, - "node_modules/@volar/vue-language-core/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@volar/vue-language-core/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@volar/vue-typescript": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-1.6.0.tgz", - "integrity": "sha512-Ob5X/XICtwCFwHDo9zUhQuCIH4QmiDWX7DgQkuPBZkO18mirp27ymRJk2Q5EtHKedGQnTce/NRsoqjn8DnyLKw==", - "deprecated": "WARNING: This project has been renamed to @vue/typescript. Install using @vue/typescript instead.", - "dev": true, - "dependencies": { - "@volar/typescript": "1.4.1", - "@volar/vue-language-core": "1.6.0" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", - "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.21.3", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", - "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", - "dev": true, - "dependencies": { - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", - "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-ssr": "3.3.4", - "@vue/reactivity-transform": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0", - "postcss": "^8.1.10", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", - "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/eslint-config-typescript": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-12.0.0.tgz", - "integrity": "sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.7.0", - "@typescript-eslint/parser": "^6.7.0", - "vue-eslint-parser": "^9.3.1" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", - "eslint-plugin-vue": "^9.0.0", - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", - "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", - "dev": true, - "dependencies": { - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", - "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.15", - "@vue/compiler-core": "3.3.4", - "@vue/shared": "3.3.4", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.0" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", - "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", - "dev": true, - "dependencies": { - "@vue/reactivity": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", - "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", - "dev": true, - "dependencies": { - "@vue/runtime-core": "3.3.4", - "@vue/shared": "3.3.4", - "csstype": "^3.1.1" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", - "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", - "dev": true, - "dependencies": { - "@vue/compiler-ssr": "3.3.4", - "@vue/shared": "3.3.4" - }, - "peerDependencies": { - "vue": "3.3.4" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", - "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==", - "dev": true - }, - "node_modules/@vue/tsconfig": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", - "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", - "dev": true - }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -3174,67 +6445,67 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { "type": "github", "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, + "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -3243,163 +6514,424 @@ "node": ">= 8" } }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true, + "license": "MIT" + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-hidden": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.6.tgz", + "integrity": "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.9.tgz", + "integrity": "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, "node_modules/astral-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "license": "MIT" }, - "node_modules/axios": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", - "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", - "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.3", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz", - "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3", - "core-js-compat": "^3.32.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", - "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", - "dev": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.3" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "node_modules/attr-accept": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.5.tgz", + "integrity": "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "node_modules/bootstrap": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz", - "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "node_modules/autoprefixer": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.0.tgz", + "integrity": "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==", "dev": true, "funding": [ { - "type": "github", - "url": "https://github.com/sponsors/twbs" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" }, { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.28.2", + "caniuse-lite": "^1.0.30001787", + "fraction.js": "^5.3.4", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, "peerDependencies": { - "@popperjs/core": "^2.11.8" + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.11.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.11.3.tgz", + "integrity": "sha512-zBQouZixDTbo3jMGqHKyePxYxr1e5W8UdTmBQ7sNtaA9M2bE32daxxPLS/jojhKOHxQ7LWwPjfiwf/fhaJWzlg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axios": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.21", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.21.tgz", + "integrity": "sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", - "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", "dev": true, "funding": [ { @@ -3415,11 +6947,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001541", - "electron-to-chromium": "^1.4.535", - "node-releases": "^2.0.13", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -3428,55 +6962,102 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "node_modules/cacheable": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.4.tgz", + "integrity": "sha512-djgxybDbw9fL/ZWMI3+CE8ZilNxcwFkVtDc1gJ+IlOSSWkSMPQabhV/XCHTQ6pwwN6aivXPZ43omTooZiX06Ew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cacheable/memory": "^2.0.8", + "@cacheable/utils": "^2.4.0", + "hookified": "^1.15.0", + "keyv": "^5.6.0", + "qified": "^0.9.0" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz", + "integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@keyv/serialize": "^1.1.1" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", "dev": true, - "optional": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 6" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001547", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001547.tgz", - "integrity": "sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==", + "version": "1.0.30001790", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz", + "integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==", "dev": true, "funding": [ { @@ -3491,100 +7072,153 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/chart.js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz", - "integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==", + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { - "@kurkle/color": "^0.3.0" + "has-flag": "^4.0.0" }, "engines": { - "pnpm": ">=7" + "node": ">=8" } }, "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "license": "MIT", + "optional": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "readdirp": "^4.0.1" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 14.16.0" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", "dependencies": { - "is-glob": "^4.0.1" + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 6" + "node": ">=12" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cmdk": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cmdk/-/cmdk-1.1.1.tgz", + "integrity": "sha512-Vsv7kFaXm+ptHDMZ7izaRsP70GgrW9NBNGswt9OZaVBLlE0SNpDq8eu/VGXyF9r7M0azK3Wy7OlYXsuyYLFzHg==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "^1.1.1", + "@radix-ui/react-dialog": "^1.1.6", + "@radix-ui/react-id": "^1.1.0", + "@radix-ui/react-primitive": "^2.0.2" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "devOptional": true, + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -3593,58 +7227,126 @@ } }, "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/concurrently": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-9.2.1.tgz", + "integrity": "sha512-fsfrO0MxV64Znoy8/l1vVIjjHa29SZyyqPgQBwhiDcaW8wJc2W3XWVOGx4M3oJBnv/zdUZIIp1gDeS98GzP8Ng==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "rxjs": "7.8.2", + "shell-quote": "1.8.3", + "supports-color": "8.1.1", + "tree-kill": "1.2.2", + "yargs": "17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz", + "integrity": "sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==", + "dev": true, + "license": "MIT" + }, + "node_modules/conventional-changelog-angular": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-8.3.1.tgz", + "integrity": "sha512-6gfI3otXK5Ph5DfCOI1dblr+kN3FAm5a97hYoQkqNZxOaYa5WKfXH+AnpsmS+iUH2mgVC2Cg2Qw9m5OKcmNrIg==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-changelog-conventionalcommits": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-9.3.1.tgz", + "integrity": "sha512-dTYtpIacRpcZgrvBYvBfArMmK2xvIpv2TaxM0/ZI5CBtNUzvF2x0t15HsbRABWprS6UPmvj+PzHVjSx4qAVKyw==", + "dev": true, + "license": "ISC", + "dependencies": { + "compare-func": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/conventional-commits-parser": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-6.4.0.tgz", + "integrity": "sha512-tvRg7FIBNlyPzjdG8wWRlPHQJJHI7DylhtRGeU9Lq+JuoPh5BKpPRX83ZdLrvXuOSu5Eo/e7SzOQhU4Hd2Miuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@simple-libs/stream-utils": "^1.2.0", + "meow": "^13.0.0" + }, + "bin": { + "conventional-commits-parser": "dist/cli/index.js" + }, + "engines": { + "node": ">=18" + } }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/core-js": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.33.0.tgz", - "integrity": "sha512-HoZr92+ZjFEKar5HS6MC776gYslNOKHt75mEBKWKnPeFDpZ6nH5OeF3S6HFT1mUAUZKrzkez05VboaX8myjSuw==", "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.33.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz", - "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==", - "dev": true, - "dependencies": { - "browserslist": "^4.22.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } + "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz", + "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -3661,17 +7363,30 @@ } } }, - "node_modules/cropperjs": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.1.tgz", - "integrity": "sha512-F4wsi+XkDHCOMrHMYjrTEE4QBOrsHHN5/2VsVAaRq8P7E5z7xQpT75S+f/9WikmBEailas3+yo+6zPIomW+NOA==", - "dev": true + "node_modules/cosmiconfig-typescript-loader": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-6.3.0.tgz", + "integrity": "sha512-Akr82WH1Wfqatyiqpj8HDkO2o2KmJRu1FhKfSNJP3K4IdXwHfEyL7MOb62i1AGQVLtIQM+iCE9CGOtrfhR+mmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "jiti": "2.6.1" + }, + "engines": { + "node": ">=v18" + }, + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=9", + "typescript": ">=5" + } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3682,24 +7397,24 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.0.tgz", - "integrity": "sha512-d/jBMPyYybkkLVypgtGv12R+pIFw4/f/IHtCTxWpZc8ofTYOPigIgmA6vu5rMHartZC+WuXhBUHfnyNUIQSYrg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz", + "integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=12.22" + "node": ">=12" } }, "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz", + "integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "mdn-data": "2.27.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" @@ -3710,6 +7425,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -3718,24 +7434,97 @@ } }, "node_modules/csstype": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", - "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", - "dev": true + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" }, - "node_modules/de-indent": { + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/date-fns-jalali": { + "version": "4.1.0-0", + "resolved": "https://registry.npmjs.org/date-fns-jalali/-/date-fns-jalali-4.1.0-0.tgz", + "integrity": "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg==", + "dev": true, + "license": "MIT" }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3746,63 +7535,87 @@ } } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "peer": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==", + "license": "MIT" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true, + "license": "Apache-2.0" + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -3810,11 +7623,19 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true, + "license": "MIT" + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -3822,98 +7643,334 @@ "node": ">=6.0.0" } }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { - "version": "1.4.551", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.551.tgz", - "integrity": "sha512-/Ng/W/kFv7wdEHYzxdK7Cv0BHEGSkSB3M0Ssl8Ndr1eMiYeas/+Mv4cNaDqamqWx6nd2uQZfPz6g25z25M/sdw==", - "dev": true + "version": "1.5.344", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.344.tgz", + "integrity": "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.21.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.21.0.tgz", + "integrity": "sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "node_modules/es-abstract": { + "version": "1.24.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.2.tgz", + "integrity": "sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==", "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.3.2.tgz", + "integrity": "sha512-HVLACW1TppGYjJ8H6/jqH/pqOtKRw6wMlrB23xfExmFWxFquAIWCmwoLsOyN96K4a5KbmOf5At9ZUO3GZbetAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.1.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.3.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.5", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", "hasInstallScript": true, - "peer": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "@esbuild/aix-ppc64": "0.25.12", + "@esbuild/android-arm": "0.25.12", + "@esbuild/android-arm64": "0.25.12", + "@esbuild/android-x64": "0.25.12", + "@esbuild/darwin-arm64": "0.25.12", + "@esbuild/darwin-x64": "0.25.12", + "@esbuild/freebsd-arm64": "0.25.12", + "@esbuild/freebsd-x64": "0.25.12", + "@esbuild/linux-arm": "0.25.12", + "@esbuild/linux-arm64": "0.25.12", + "@esbuild/linux-ia32": "0.25.12", + "@esbuild/linux-loong64": "0.25.12", + "@esbuild/linux-mips64el": "0.25.12", + "@esbuild/linux-ppc64": "0.25.12", + "@esbuild/linux-riscv64": "0.25.12", + "@esbuild/linux-s390x": "0.25.12", + "@esbuild/linux-x64": "0.25.12", + "@esbuild/netbsd-arm64": "0.25.12", + "@esbuild/netbsd-x64": "0.25.12", + "@esbuild/openbsd-arm64": "0.25.12", + "@esbuild/openbsd-x64": "0.25.12", + "@esbuild/openharmony-arm64": "0.25.12", + "@esbuild/sunos-x64": "0.25.12", + "@esbuild/win32-arm64": "0.25.12", + "@esbuild/win32-ia32": "0.25.12", + "@esbuild/win32-x64": "0.25.12" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint": { - "version": "8.51.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", - "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.51.0", - "@humanwhocodes/config-array": "^0.11.11", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -3955,65 +8012,487 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint-plugin-vue": { - "version": "9.17.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", - "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "node_modules/eslint-config-airbnb": { + "version": "19.0.4", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-19.0.4.tgz", + "integrity": "sha512-T75QYQVQX57jiNgpF9r1KegMICE94VYwoFQyMGhrvc+lB8YF2E/M/PYDaQe1AJcWaEgqLE+ErXV1Og/+6Vyzew==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", - "xml-name-validator": "^4.0.0" + "eslint-config-airbnb-base": "^15.0.0", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5" }, "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.3", + "eslint-plugin-jsx-a11y": "^6.5.1", + "eslint-plugin-react": "^7.28.0", + "eslint-plugin-react-hooks": "^4.3.0" } }, - "node_modules/eslint-plugin-vue/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/eslint-config-airbnb-base": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz", + "integrity": "sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.5", + "semver": "^6.3.0" }, "engines": { - "node": ">=10" + "node": "^10.12.0 || >=12.0.0" + }, + "peerDependencies": { + "eslint": "^7.32.0 || ^8.2.0", + "eslint-plugin-import": "^2.25.2" } }, - "node_modules/eslint-plugin-vue/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/eslint-config-airbnb-base/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/eslint-plugin-vue/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/eslint-config-prettier": { + "version": "10.1.8", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.8.tgz", + "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-context": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/eslint-import-context/-/eslint-import-context-0.1.9.tgz", + "integrity": "sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" + }, + "peerDependencies": { + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.10", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.10.tgz", + "integrity": "sha512-tRrKqFyCaKict5hOd244sL6EQFNycnMQnBe+j8uqGNXYzsImGbGUU4ibtoaBmv5FLwJwcFJNeg1GeVjQfbMrDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.16.1", + "resolve": "^2.0.0-next.6" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-4.4.4.tgz", + "integrity": "sha512-1iM2zeBvrYmUNTj2vSC/90JTHDth+dfOfiNKkxApWRsTJYNrc8rOdxxIf5vazX+BiAXTeOT0UvWpGI/7qIWQOw==", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^16.17.0 || >=18.6.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.1.tgz", + "integrity": "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.32.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", + "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.1", + "hasown": "^2.0.2", + "is-core-module": "^2.16.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.1", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.9", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "5.5.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.5.5.tgz", + "integrity": "sha512-hscXkbqUZ2sPithAuLm5MXL+Wph+U7wHngPBv9OMWwlP8iaflyxpjTYZkmdgB4/vPIhemRlBEoLrH7UC1n7aUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.5.tgz", + "integrity": "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.2.tgz", + "integrity": "sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -4030,6 +8509,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -4037,113 +8517,69 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/eslint/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/globals": { - "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "*" } }, "node_modules/espree": { @@ -4151,6 +8587,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -4164,10 +8601,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -4180,6 +8618,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4192,21 +8631,17 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -4215,19 +8650,37 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.4.0.tgz", + "integrity": "sha512-jt2DW/aNFNwke7AUd+Z+e6pz39KO5rzdbbFCg2sGafS4mk13MI7Z8O5z9cADNn5lhGODIgLwug6TZO2ctf7kcw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -4238,6 +8691,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -4249,38 +8703,76 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } }, "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -4288,11 +8780,24 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-selector": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/file-selector/-/file-selector-2.1.2.tgz", + "integrity": "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig==", + "license": "MIT", + "dependencies": { + "tslib": "^2.7.0" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4305,6 +8810,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4316,37 +8822,46 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/flat-cache": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", - "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "node_modules/flag-icons": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-7.5.0.tgz", + "integrity": "sha512-kd+MNXviFIg5hijH766tt+3x76ele1AXlo4zDdCxIvqWZhKt4T83bOtxUOOMlTx/EcFdUMH5yvQgYlFh1EqqFg==", "dev": true, + "license": "MIT" + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", - "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", - "dev": true, + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -4356,46 +8871,107 @@ } } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, - "node_modules/fs-extra": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", - "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "node_modules/fraction.js": { + "version": "5.3.4", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-5.3.4.tgz", + "integrity": "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==", "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/framer-motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", + "license": "MIT", + "dependencies": { + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=14.14" + "node": ">=6 <7 || >=8" } }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -4404,26 +8980,177 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/glightbox": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/glightbox/-/glightbox-3.2.0.tgz", - "integrity": "sha512-iit1xYixqL4YVL+I2YJLfMeyJwvLi6FE6kY3qNKeZHEJgRIz80QU8Rm7YCyw1wOTgXvmNDnXGVhHOHRCwnDltQ==", - "dev": true + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.14.0.tgz", + "integrity": "sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/git-raw-commits": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-5.0.1.tgz", + "integrity": "sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@conventional-changelog/git-client": "^2.6.0", + "meow": "^13.0.0" + }, + "bin": { + "git-raw-commits": "src/cli.js" + }, + "engines": { + "node": ">=18" + } }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4444,6 +9171,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -4451,12 +9179,59 @@ "node": ">=10.13.0" } }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/global-directory": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/global-directory/-/global-directory-4.0.1.tgz", + "integrity": "sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "4.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -4469,7 +9244,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -4479,12 +9254,19 @@ "node": ">=6" } }, + "node_modules/global-prefix/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, "node_modules/global-prefix/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4493,129 +9275,14 @@ } }, "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "type-fest": "^0.20.2" }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "peer": true - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/has": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", - "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", - "dev": true, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "peer": true - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "peer": true, "engines": { "node": ">=8" }, @@ -4623,26 +9290,249 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", + "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.0.3", + "glob": "^7.1.3", + "ignore": "^5.1.1", + "merge2": "^1.2.3", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashery": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz", + "integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^1.15.0" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/hasown": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz", + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hookified": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz", + "integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/immutable": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", - "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", - "dev": true + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "devOptional": true, + "license": "MIT" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4654,14 +9544,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { + "node_modules/import-fresh/node_modules/resolve-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/imurmurhash": { @@ -4669,26 +9570,18 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4698,27 +9591,101 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", "dev": true, - "peer": true + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, + "license": "MIT", "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4726,13 +9693,92 @@ "node": ">=8" } }, - "node_modules/is-core-module": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", - "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", "dev": true, + "license": "MIT", "dependencies": { - "has": "^1.0.3" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-2.0.0.tgz", + "integrity": "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4742,26 +9788,64 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "devOptional": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "devOptional": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -4769,61 +9853,301 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", "dev": true, - "peer": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", + "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", + "devOptional": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4832,47 +10156,65 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, + "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/json-edit-react": { + "version": "1.29.0", + "resolved": "https://registry.npmjs.org/json-edit-react/-/json-edit-react-1.29.0.tgz", + "integrity": "sha512-qxho/m0w6GCaKLic6XsZgmCrKKwluMvoy92teRBRus1PRHJQiP4pkFQJ90lmrno1KNgSePYIG0mcscS0GjdH3A==", + "license": "MIT", + "dependencies": { + "object-property-assigner": "^1.3.5", + "object-property-extractor": "^1.0.13" + }, + "peerDependencies": { + "react": ">=16.0.0" + } }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -4881,22 +10223,37 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -4906,31 +10263,65 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/known-css-properties": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.28.0.tgz", - "integrity": "sha512-9pSL5XB4J+ifHP0e0jmmC98OGC1nL8/JjS+fi6mnTlIf//yt/MfVLtKg7S6nCtj/8KTcWX7nRlY0XywoYY1ISQ==", - "dev": true - }, - "node_modules/laravel-vite-plugin": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-0.8.1.tgz", - "integrity": "sha512-fxzUDjOA37kOsYq8dP+3oPIlw8/kJVXwu0hOXLun82R1LpV02shGeWGYKx2lbpKffL5I0sfPPjfqbYxuqBluAA==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz", + "integrity": "sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==", "dev": true, + "license": "MIT" + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", "dependencies": { - "picocolors": "^1.0.0", - "vite-plugin-full-reload": "^1.0.5" + "language-subtag-registry": "^0.3.20" }, "engines": { - "node": ">=14" + "node": ">=0.10" + } + }, + "node_modules/laravel-precognition": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/laravel-precognition/-/laravel-precognition-1.0.2.tgz", + "integrity": "sha512-0H08JDdMWONrL/N314fvsO3FATJwGGlFKGkMF3nNmizVFJaWs17816iM+sX7Rp8d5hUjYCx6WLfsehSKfaTxjg==", + "license": "MIT", + "dependencies": { + "axios": "^1.4.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/laravel-vite-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/laravel-vite-plugin/-/laravel-vite-plugin-1.3.0.tgz", + "integrity": "sha512-P5qyG56YbYxM8OuYmK2OkhcKe0AksNVJUjq9LUZ5tOekU9fBn9LujYyctI4t9XoLjuMvHJXXpCoPntY1oKltuA==", + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "vite-plugin-full-reload": "^1.1.0" + }, + "bin": { + "clean-orphaned-assets": "bin/clean.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "vite": "^5.0.0 || ^6.0.0" } }, "node_modules/levn": { @@ -4938,6 +10329,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -4946,18 +10338,300 @@ "node": ">= 0.8.0" } }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "devOptional": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "libc": [ + "glibc" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "libc": [ + "musl" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/linkifyjs": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==", + "license": "MIT" }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -4969,68 +10643,127 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "license": "MIT" }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true + "node_modules/lodash-es": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, - "node_modules/lodash.pick": { + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz", + "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.snakecase": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz", + "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.startcase": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", - "integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==", - "dev": true + "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz", + "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==", + "dev": true, + "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true, - "peer": true + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz", + "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^3.0.2" } }, - "node_modules/magic-string": { - "version": "0.30.4", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.4.tgz", - "integrity": "sha512-Q/TKtsC5BPm0kGqgBIF9oXAs/xEf2vRKiIB4wCRQTJOQIByZ1d+NnUOotvJOvNpi5RNIgVOMC3pOuaP1ZTDlVg==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "node_modules/lucide-react": { + "version": "0.503.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.503.0.tgz", + "integrity": "sha512-HGGkdlPWQ0vTF8jJ5TdIqhQXZi6uh3LnNgfZ8MHiuxFfX3RZeA79r2MW2tHAZKlAVfoNE8esm3p+O6VkIvpj6w==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, "node_modules/mathml-tag-names": { @@ -5038,56 +10771,27 @@ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, - "peer": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz", + "integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==", "dev": true, - "peer": true + "license": "CC0-1.0" }, "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, + "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5098,28 +10802,43 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5128,7 +10847,7 @@ "version": "2.1.35", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -5136,75 +10855,113 @@ "node": ">= 0.6" } }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", "dev": true, - "peer": true, - "engines": { - "node": ">=4" + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "*" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "peer": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" + "node": "18 || 20 || >=22" }, - "engines": { - "node": ">= 6" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "engines": { - "node": "*" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/motion": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion/-/motion-12.38.0.tgz", + "integrity": "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w==", + "license": "MIT", + "dependencies": { + "framer-motion": "^12.38.0", + "tslib": "^2.4.0" + }, + "peerDependencies": { + "@emotion/is-prop-valid": "*", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/is-prop-valid": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", + "license": "MIT", + "dependencies": { + "motion-utils": "^12.36.0" + } + }, + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "license": "MIT" + }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, - "node_modules/muggle-string": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.2.2.tgz", - "integrity": "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg==", - "dev": true + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } }, "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5212,101 +10969,223 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-postinstall": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/napi-postinstall/-/napi-postinstall-0.3.4.tgz", + "integrity": "sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==", + "dev": true, + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", - "dev": true - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, + "node_modules/node-exports-info": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/node-exports-info/-/node-exports-info-1.6.0.tgz", + "integrity": "sha512-pyFS63ptit/P5WqUkt+UUfe+4oevH+bFeIiPPdfb0pFeYEu/1ELnJu5l+5EcTKYL5M7zaAa7S8ddywgXypqKCw==", + "dev": true, + "license": "MIT", "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" + "array.prototype.flatmap": "^1.3.3", + "es-errors": "^1.3.0", + "object.entries": "^1.1.9", + "semver": "^6.3.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/normalize-package-data/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "node_modules/node-exports-info/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, - "peer": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "peer": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, - "node_modules/normalize-package-data/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "node_modules/node-releases": { + "version": "2.0.38", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz", + "integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==", "dev": true, - "peer": true + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, - "dependencies": { - "boolbase": "^1.0.0" + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-property-assigner": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/object-property-assigner/-/object-property-assigner-1.3.5.tgz", + "integrity": "sha512-DIzHzNSTnpoG8QPQCDNrHa6O3vLMhktK3Igirqpk523UYIVe8JNCKcn5C9WyLQxJc58EGsAIiiEu10gqPrud8w==", + "license": "MIT" + }, + "node_modules/object-property-extractor": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/object-property-extractor/-/object-property-extractor-1.0.14.tgz", + "integrity": "sha512-euG3MQwj41DMbfk1keguY+jKQvaf9r26NeECtb28G8jABnhZVqxVEvIFywWC2107cSgx8dimA+JXuCAZFfbsSg==", + "license": "MIT" + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -5314,32 +11193,59 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/orderedmap": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", + "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", + "license": "MIT" + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5355,6 +11261,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -5365,22 +11272,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -5393,7 +11290,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -5412,6 +11309,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5421,6 +11319,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5430,6 +11329,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -5438,40 +11338,81 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "funding": [ { "type": "opencollective", @@ -5486,54 +11427,204 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/postcss-discard-comments": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz", - "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==", + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, "engines": { - "node": "^14 || ^16 || >=18.0" + "node": ">=14.0.0" }, "peerDependencies": { - "postcss": "^8.2.15" + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-import/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/postcss-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.1.0.tgz", + "integrity": "sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } } }, "node_modules/postcss-media-query-parser": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, - "peer": true, + "license": "MIT" + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, "engines": { "node": ">=12.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-scss": { @@ -5555,6 +11646,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -5563,10 +11655,11 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -5580,6 +11673,7 @@ "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", "dev": true, + "license": "MIT", "peerDependencies": { "postcss": "^8.4.20" } @@ -5588,22 +11682,25 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.3.tgz", + "integrity": "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -5614,27 +11711,225 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/print-js": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/print-js/-/print-js-1.6.0.tgz", - "integrity": "sha512-BfnOIzSKbqGRtO4o0rnj/K3681BSd2QUrsIZy/+WdCIugjIswjmx3lDEZpXB2ruGf9d4b3YNINri81+J0FsBWg==", - "dev": true + "node_modules/prettier-linter-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz", + "integrity": "sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prosemirror-changeset": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.1.tgz", + "integrity": "sha512-96WBLhOaYhJ+kPhLg3uW359Tz6I/MfcrQfL4EGv4SrcqKEMC1gmoGrXHecPE8eOwTVCJ4IwgfzM8fFad25wNfw==", + "license": "MIT", + "dependencies": { + "prosemirror-transform": "^1.0.0" + } + }, + "node_modules/prosemirror-commands": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", + "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.10.2" + } + }, + "node_modules/prosemirror-dropcursor": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", + "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0", + "prosemirror-view": "^1.1.0" + } + }, + "node_modules/prosemirror-gapcursor": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz", + "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.0.0", + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-view": "^1.0.0" + } + }, + "node_modules/prosemirror-history": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", + "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.2.2", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.31.0", + "rope-sequence": "^1.3.0" + } + }, + "node_modules/prosemirror-keymap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", + "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", + "license": "MIT", + "dependencies": { + "prosemirror-state": "^1.0.0", + "w3c-keyname": "^2.2.0" + } + }, + "node_modules/prosemirror-model": { + "version": "1.25.4", + "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz", + "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", + "license": "MIT", + "dependencies": { + "orderedmap": "^2.0.0" + } + }, + "node_modules/prosemirror-schema-list": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", + "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.7.3" + } + }, + "node_modules/prosemirror-state": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", + "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.0.0", + "prosemirror-transform": "^1.0.0", + "prosemirror-view": "^1.27.0" + } + }, + "node_modules/prosemirror-tables": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz", + "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==", + "license": "MIT", + "dependencies": { + "prosemirror-keymap": "^1.2.3", + "prosemirror-model": "^1.25.4", + "prosemirror-state": "^1.4.4", + "prosemirror-transform": "^1.10.5", + "prosemirror-view": "^1.41.4" + } + }, + "node_modules/prosemirror-transform": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.0.tgz", + "integrity": "sha512-GxboyN4AMIsoHNtz5uf2r2Ru551i5hWeCMD6E2Ib4Eogqoub0NflniaBPVQ4MrGE5yZ8JV9tUHg9qcZTTrcN4w==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.21.0" + } + }, + "node_modules/prosemirror-view": { + "version": "1.41.8", + "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.8.tgz", + "integrity": "sha512-TnKDdohEatgyZNGCDWIdccOHXhYloJwbwU+phw/a23KBvJIR9lWQWW7WHHK3vBdOLDNuF7TaX98GObUZOWkOnA==", + "license": "MIT", + "dependencies": { + "prosemirror-model": "^1.20.0", + "prosemirror-state": "^1.0.0", + "prosemirror-transform": "^1.1.0" + } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/qified": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/qified/-/qified-0.9.1.tgz", + "integrity": "sha512-n7mar4T0xQ+39dE2vGTAlbxUEpndwPANH0kDef1/MYsB8Bba9wshkybIRx74qgcvKQPEWErf9AqAdYjhzY2Ilg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hookified": "^2.1.1" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/qified/node_modules/hookified": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-2.1.1.tgz", + "integrity": "sha512-AHb76R16GB5EsPBE2J7Ko5kiEyXwviB9P5SMrAKcuAu4vJPZttViAbj9+tZeaQE5zjDme+1vcHP78Yj/WoAveA==", + "dev": true, + "license": "MIT" + }, + "node_modules/qs": { + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-6YHEFRL9mfgcAvql/XhwTvf5jKcOiiupt2FiJxHkiX1z4j7WL8J/jRHYLluORvc1XxB5rV20KoeK00gVJamspg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/qs-esm": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/qs-esm/-/qs-esm-7.0.3.tgz", + "integrity": "sha512-8jbjCR0PPbqoQcv83C2K/zvVeytRPwPpt3WPDbq51qyLAxcWGtXVRjSe6GHtLCoVbg9+NEFkv7GyUxqjcDIJzw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5653,266 +11948,307 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "node_modules/react-aria": { + "version": "3.48.0", + "resolved": "https://registry.npmjs.org/react-aria/-/react-aria-3.48.0.tgz", + "integrity": "sha512-jQjd4rBEIMqecBaAKYJbVGK6EqIHLa5znVQ7jwFyK5vCyljoj6KhgtiahmcIPsG5vG5vEDLw+ba+bEWn6A2P4w==", "dev": true, - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "@internationalized/date": "^3.12.1", + "@internationalized/number": "^3.6.6", + "@internationalized/string": "^3.2.8", + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "aria-hidden": "^1.2.3", + "clsx": "^2.0.0", + "react-stately": "3.46.0", + "use-sync-external-store": "^1.6.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react-color": { + "version": "2.19.3", + "resolved": "https://registry.npmjs.org/react-color/-/react-color-2.19.3.tgz", + "integrity": "sha512-LEeGE/ZzNLIsFWa1TMe8y5VYqr7bibneWmvJwm1pCn/eNmrabWDh659JSPn9BuaMpEfU83WTOJfnCcjDZwNQTA==", + "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "@icons/material": "^0.2.4", + "lodash": "^4.17.15", + "lodash-es": "^4.17.15", + "material-colors": "^1.2.1", + "prop-types": "^15.5.10", + "reactcss": "^1.2.0", + "tinycolor2": "^1.4.1" + }, + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-day-picker": { + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/react-day-picker/-/react-day-picker-9.14.0.tgz", + "integrity": "sha512-tBaoDWjPwe0M5pGrum4H0SR6Lyk+BO9oHnp9JbKpGKW2mlraNPgP9BMfsg5pWpwrssARmeqk7YBl2oXutZTaHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@date-fns/tz": "^1.4.1", + "@tabby_ai/hijri-converter": "1.0.5", + "date-fns": "^4.1.0", + "date-fns-jalali": "4.1.0-0" }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "individual", + "url": "https://github.com/sponsors/gpbl" + }, + "peerDependencies": { + "react": ">=16.8.0" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react-dom": { + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", + "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.5" + } + }, + "node_modules/react-dropzone": { + "version": "14.4.1", + "resolved": "https://registry.npmjs.org/react-dropzone/-/react-dropzone-14.4.1.tgz", + "integrity": "sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g==", + "license": "MIT", + "dependencies": { + "attr-accept": "^2.2.4", + "file-selector": "^2.1.0", + "prop-types": "^15.8.1" }, "engines": { - "node": ">=8" + "node": ">= 10.13" + }, + "peerDependencies": { + "react": ">= 16.8 || 18.0.0" } }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/react-image-crop": { + "version": "11.0.10", + "resolved": "https://registry.npmjs.org/react-image-crop/-/react-image-crop-11.0.10.tgz", + "integrity": "sha512-+5FfDXUgYLLqBh1Y/uQhIycpHCbXkI50a+nbfkB1C0xXXUTwkisHDo2QCB1SQJyHCqIuia4FeyReqXuMDKWQTQ==", + "license": "ISC", + "peerDependencies": { + "react": ">=16.13.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" + }, + "node_modules/react-refresh": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", + "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", "dev": true, - "optional": true, - "peer": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.7.2.tgz", + "integrity": "sha512-Iqb9NjCCTt6Hf+vOdNIZGdTiH1QSqr27H/Ek9sv/a97gfueI/5h1s3yRi1nngzMUaOOToin5dI1dXKdXiF+u0Q==", + "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "react-remove-scroll-bar": "^2.3.7", + "react-style-singleton": "^2.2.3", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.3", + "use-sidecar": "^1.1.3" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz", + "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==", + "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "react-style-singleton": "^2.2.2", + "tslib": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "node_modules/react-stately": { + "version": "3.46.0", + "resolved": "https://registry.npmjs.org/react-stately/-/react-stately-3.46.0.tgz", + "integrity": "sha512-OdxhWvHgs2L4OJGIs7hnuTr5WjjMM6enhNEAMRqiekhF8+ITvA2LRwNftOZwcogaoCslGYq5S2VQTQwnm0GbCA==", "dev": true, - "optional": true, - "peer": true, + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" + "@internationalized/date": "^3.12.1", + "@internationalized/number": "^3.6.6", + "@internationalized/string": "^3.2.8", + "@react-types/shared": "^3.34.0", + "@swc/helpers": "^0.5.0", + "use-sync-external-store": "^1.6.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", + "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==", + "license": "MIT", + "dependencies": { + "get-nonce": "^1.0.0", + "tslib": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "optional": true, - "peer": true - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "optional": true, - "peer": true, + "node_modules/reactcss": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/reactcss/-/reactcss-1.2.3.tgz", + "integrity": "sha512-KiwVUcFu1RErkI97ywr8nvx8dNOpT03rbnma0SSalTYjkrPYaEajR4a/MRt6DZ46K6arDRbWMNHF+xH7G7n/8A==", + "license": "MIT", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "lodash": "^4.0.1" } }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", "dev": true, - "optional": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" } }, "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "license": "MIT", "optional": true, - "peer": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "dev": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", - "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", "dev": true, + "license": "MIT", "dependencies": { - "regenerate": "^1.4.2" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" }, "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "dev": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", - "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", - "dev": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" + "node": ">= 0.4" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dev": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" + "node": ">=0.10.0" } }, "node_modules/require-from-string": { @@ -5920,42 +12256,61 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "peer": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "2.0.0-next.6", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.6.tgz", + "integrity": "sha512-3JmVl5hMGtJ3kMmB3zi3DL25KfkCEyy3Tw7Gmw7z5w8M9WlwoPFnIvwChzu1+cF3iaK3sp18hhPz8ANeimdJfA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "node-exports-info": "^1.6.0", + "object-keys": "^1.1.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5965,7 +12320,9 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -5977,22 +12334,72 @@ } }, "node_modules/rollup": { - "version": "3.29.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", - "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", - "dev": true, - "peer": true, + "version": "4.60.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.2.tgz", + "integrity": "sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, "bin": { "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=14.18.0", + "node": ">=18.0.0", "npm": ">=8.0.0" }, "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.2", + "@rollup/rollup-android-arm64": "4.60.2", + "@rollup/rollup-darwin-arm64": "4.60.2", + "@rollup/rollup-darwin-x64": "4.60.2", + "@rollup/rollup-freebsd-arm64": "4.60.2", + "@rollup/rollup-freebsd-x64": "4.60.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.2", + "@rollup/rollup-linux-arm-musleabihf": "4.60.2", + "@rollup/rollup-linux-arm64-gnu": "4.60.2", + "@rollup/rollup-linux-arm64-musl": "4.60.2", + "@rollup/rollup-linux-loong64-gnu": "4.60.2", + "@rollup/rollup-linux-loong64-musl": "4.60.2", + "@rollup/rollup-linux-ppc64-gnu": "4.60.2", + "@rollup/rollup-linux-ppc64-musl": "4.60.2", + "@rollup/rollup-linux-riscv64-gnu": "4.60.2", + "@rollup/rollup-linux-riscv64-musl": "4.60.2", + "@rollup/rollup-linux-s390x-gnu": "4.60.2", + "@rollup/rollup-linux-x64-gnu": "4.60.2", + "@rollup/rollup-linux-x64-musl": "4.60.2", + "@rollup/rollup-openbsd-x64": "4.60.2", + "@rollup/rollup-openharmony-arm64": "4.60.2", + "@rollup/rollup-win32-arm64-msvc": "4.60.2", + "@rollup/rollup-win32-ia32-msvc": "4.60.2", + "@rollup/rollup-win32-x64-gnu": "4.60.2", + "@rollup/rollup-win32-x64-msvc": "4.60.2", "fsevents": "~2.3.2" } }, + "node_modules/rollup-plugin-copy": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz", + "integrity": "sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/fs-extra": "^8.0.1", + "colorette": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "10.0.1", + "is-plain-object": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/rope-sequence": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", + "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", + "license": "MIT" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -6012,18 +12419,85 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, - "node_modules/sass": { - "version": "1.69.3", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", - "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", - "dev": true, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "devOptional": true, + "license": "Apache-2.0", "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", + "tslib": "^2.1.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.4.tgz", + "integrity": "sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.1.5", "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { @@ -6031,15 +12505,415 @@ }, "engines": { "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" } }, + "node_modules/sass-embedded": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.99.0.tgz", + "integrity": "sha512-gF/juR1aX02lZHkvwxdF80SapkQeg2fetoDF6gIQkNbSw5YEUFspMkyGTjPjgZSgIHuZpy+Wz4PlebKnLXMjdg==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.5.0", + "colorjs.io": "^0.5.0", + "immutable": "^5.1.5", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "sync-child-process": "^1.0.2", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-all-unknown": "1.99.0", + "sass-embedded-android-arm": "1.99.0", + "sass-embedded-android-arm64": "1.99.0", + "sass-embedded-android-riscv64": "1.99.0", + "sass-embedded-android-x64": "1.99.0", + "sass-embedded-darwin-arm64": "1.99.0", + "sass-embedded-darwin-x64": "1.99.0", + "sass-embedded-linux-arm": "1.99.0", + "sass-embedded-linux-arm64": "1.99.0", + "sass-embedded-linux-musl-arm": "1.99.0", + "sass-embedded-linux-musl-arm64": "1.99.0", + "sass-embedded-linux-musl-riscv64": "1.99.0", + "sass-embedded-linux-musl-x64": "1.99.0", + "sass-embedded-linux-riscv64": "1.99.0", + "sass-embedded-linux-x64": "1.99.0", + "sass-embedded-unknown-all": "1.99.0", + "sass-embedded-win32-arm64": "1.99.0", + "sass-embedded-win32-x64": "1.99.0" + } + }, + "node_modules/sass-embedded-all-unknown": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-all-unknown/-/sass-embedded-all-unknown-1.99.0.tgz", + "integrity": "sha512-qPIRG8Uhjo6/OKyAKixTnwMliTz+t9K6Duk0mx5z+K7n0Ts38NSJz2sjDnc7cA/8V9Lb3q09H38dZ1CLwD+ssw==", + "cpu": [ + "!arm", + "!arm64", + "!riscv64", + "!x64" + ], + "license": "MIT", + "optional": true, + "dependencies": { + "sass": "1.99.0" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.99.0.tgz", + "integrity": "sha512-EHvJ0C7/VuP78Qr6f8gIUVUmCqIorEQpw2yp3cs3SMg02ZuumlhjXvkTcFBxHmFdFR23vTNk1WnhY6QSeV1nFQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.99.0.tgz", + "integrity": "sha512-fNHhdnP23yqqieCbAdym4N47AleSwjbNt6OYIYx4DdACGdtERjQB4iOX/TaKsW034MupfF7SjnAAK8w7Ptldtg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-riscv64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.99.0.tgz", + "integrity": "sha512-4zqDFRvgGDTL5vTHuIhRxUpXFoh0Cy7Gm5Ywk19ASd8Settmd14YdPRZPmMxfgS1GH292PofV1fq1ifiSEJWBw==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-android-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.99.0.tgz", + "integrity": "sha512-Uk53k/dGYt04RjOL4gFjZ0Z9DH9DKh8IA8WsXUkNqsxerAygoy3zqRBS2zngfE9K2jiOM87q+1R1p87ory9oQQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.99.0.tgz", + "integrity": "sha512-u61/7U3IGLqoO6gL+AHeiAtlTPFwJK1+964U8gp45ZN0hzh1yrARf5O1mivXv8NnNgJvbG2wWJbiNZP0lG/lTg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-darwin-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.99.0.tgz", + "integrity": "sha512-j/kkk/NcXdIameLezSfXjgCiBkVcA+G60AXrX768/3g0miK1g7M9dj7xOhCb1i7/wQeiEI3rw2LLuO63xRIn4A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.99.0.tgz", + "integrity": "sha512-d4IjJZrX2+AwB2YCy1JySwdptJECNP/WfAQLUl8txI3ka8/d3TUI155GtelnoZUkio211PwIeFvvAeZ9RXPQnw==", + "cpu": [ + "arm" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.99.0.tgz", + "integrity": "sha512-btNcFpItcB56L40n8hDeL7sRSMLDXQ56nB5h2deddJx1n60rpKSElJmkaDGHtpkrY+CTtDRV0FZDjHeTJddYew==", + "cpu": [ + "arm64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.99.0.tgz", + "integrity": "sha512-2gvHOupgIw3ytatXT4nFUow71LFbuOZPEwG+HUzcNQDH8ue4Ez8cr03vsv5MDv3lIjOKcXwDvWD980t18MwkoQ==", + "cpu": [ + "arm" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.99.0.tgz", + "integrity": "sha512-Hi2bt/IrM5P4FBKz6EcHAlniwfpoz9mnTdvSd58y+avA3SANM76upIkAdSayA8ZGwyL3gZokru1AKDPF9lJDNw==", + "cpu": [ + "arm64" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.99.0.tgz", + "integrity": "sha512-mKqGvVaJ9rHMqyZsF0kikQe4NO0f4osb67+X6nLhBiVDKvyazQHJ3zJQreNefIE36yL2sjHIclSB//MprzaQDg==", + "cpu": [ + "riscv64" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.99.0.tgz", + "integrity": "sha512-huhgOMmOc30r7CH7qbRbT9LerSEGSnWuS4CYNOskr9BvNeQp4dIneFufNRGZ7hkOAxUM8DglxIZJN/cyAT95Ew==", + "cpu": [ + "x64" + ], + "libc": "musl", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.99.0.tgz", + "integrity": "sha512-mevFPIFAVhrH90THifxLfOntFmHtcEKOcdWnep2gJ0X4DVva4AiVIRlQe/7w9JFx5+gnDRE1oaJJkzuFUuYZsA==", + "cpu": [ + "riscv64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-linux-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.99.0.tgz", + "integrity": "sha512-9k7IkULqIZdCIVt4Mboryt6vN8Mjmm3EhI1P3mClU5y5i3wLK5ExC3cbVWk047KsID/fvB1RLslqghXJx5BoxA==", + "cpu": [ + "x64" + ], + "libc": "glibc", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-unknown-all": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-unknown-all/-/sass-embedded-unknown-all-1.99.0.tgz", + "integrity": "sha512-P7MxiUtL/XzGo3PX0CaB8lNNEFLQWKikPA8pbKytx9ZCLZSDkt2NJcdAbblB/sqMs4AV3EK2NadV8rI/diq3xg==", + "license": "MIT", + "optional": true, + "os": [ + "!android", + "!darwin", + "!linux", + "!win32" + ], + "dependencies": { + "sass": "1.99.0" + } + }, + "node_modules/sass-embedded-win32-arm64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.99.0.tgz", + "integrity": "sha512-8whpsW7S+uO8QApKfQuc36m3P9EISzbVZOgC79goob4qGy09u8Gz/rYvw8h1prJDSjltpHGhOzBE6LDz7WvzVw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-embedded-win32-x64": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.99.0.tgz", + "integrity": "sha512-ipuOv1R2K4MHeuCEAZGpuUbAgma4gb0sdacyrTjJtMOy/OY9UvWfVlwErdB09KIkp4fPDpQJDJfvYN6bC8jeNg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/shebang-command": { @@ -6047,6 +12921,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6059,16 +12934,102 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "peer": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -6081,6 +13042,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6090,7 +13052,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -6103,121 +13065,54 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "peer": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "peer": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "peer": true - }, "node_modules/slugify": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.6.tgz", - "integrity": "sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==", - "dev": true, + "version": "1.6.9", + "resolved": "https://registry.npmjs.org/slugify/-/slugify-1.6.9.tgz", + "integrity": "sha512-vZ7rfeehZui7wQs438JXBckYLkIIdfHOXsaVEUMyS5fHo1483l1bMdo0EDSWYclY0yZKFOipDy4KHuKs6ssvdg==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/stable-hash-x": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/stable-hash-x/-/stable-hash-x-0.2.0.tgz", + "integrity": "sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==", "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "license": "MIT", + "engines": { + "node": ">=12.0.0" } }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" } }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true, - "peer": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "peer": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", - "dev": true, - "peer": true - }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6227,11 +13122,125 @@ "node": ">=8" } }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6239,18 +13248,14 @@ "node": ">=8" } }, - "node_modules/strip-indent": { + "node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, - "optional": true, - "peer": true, - "dependencies": { - "min-indent": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/strip-json-comments": { @@ -6258,6 +13263,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -6270,70 +13276,76 @@ "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", "dev": true, - "peer": true + "license": "ISC" }, "node_modules/stylelint": { - "version": "15.10.3", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.3.tgz", - "integrity": "sha512-aBQMMxYvFzJJwkmg+BUUg3YfPyeuCuKo2f+LOw7yYbU8AZMblibwzp9OV4srHVeQldxvSFdz0/Xu8blq2AesiA==", + "version": "16.26.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.26.1.tgz", + "integrity": "sha512-v20V59/crfc8sVTAtge0mdafI3AdnzQ2KsWe6v523L4OA1bJO02S7MO2oyXDCS6iWb9ckIPnqAFVItqSBQr7jw==", "dev": true, - "peer": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-syntax-patches-for-csstree": "^1.0.19", + "@csstools/css-tokenizer": "^3.0.4", + "@csstools/media-query-list-parser": "^4.0.3", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.2.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.0", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.4.3", + "fast-glob": "^3.3.3", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^11.1.1", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^7.0.5", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.28.0", + "known-css-properties": "^0.37.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.27", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "picocolors": "^1.1.1", + "postcss": "^8.5.6", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", + "supports-hyperlinks": "^3.2.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.9.0", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-idiomatic-order": { "version": "10.0.0", - "resolved": "git+ssh://git@github.com/ream88/stylelint-config-idiomatic-order.git#2b456525ef46ed343959a664adbff608899f70de", + "resolved": "https://registry.npmjs.org/stylelint-config-idiomatic-order/-/stylelint-config-idiomatic-order-10.0.0.tgz", + "integrity": "sha512-gJjT1nwhgnHS52+mRn+5Iw6keZIPRN4W+vbzct9Elb+tWOo61jC/CzXzAJHvvOYQZqUYItfs2aQ8fU5hnCvuGg==", "dev": true, "license": "MIT", "dependencies": { @@ -6347,30 +13359,45 @@ } }, "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz", + "integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-recommended-scss": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.0.0.tgz", - "integrity": "sha512-7AmMIsHTsuwUQm7I+DD5BGeIgCvqYZ4BpeYJJpb1cUXQwrJAKjA+GBotFZgUEGP8lAM+wmd91ovzOi8xfAyWEw==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-14.1.0.tgz", + "integrity": "sha512-bhaMhh1u5dQqSsf6ri2GVWWQW5iUjBYgcHkh7SgDDn92ijoItC/cfO/W+fpXshgTQWhwFkP1rVcewcv4jaftRg==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-scss": "^4.0.7", - "stylelint-config-recommended": "^13.0.0", - "stylelint-scss": "^5.1.0" + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^14.0.1", + "stylelint-scss": "^6.4.0" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.6.1" }, "peerDependenciesMeta": { "postcss": { @@ -6378,66 +13405,67 @@ } } }, - "node_modules/stylelint-config-recommended-scss/node_modules/stylelint-scss": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.2.1.tgz", - "integrity": "sha512-ZoTJUM85/qqpQHfEppjW/St//8s6p9Qsg8deWlYlr56F9iUgC9vXeIDQvH4odkRRJLTLFQzYMALSOFCQ3MDkgw==", - "dev": true, - "dependencies": { - "known-css-properties": "^0.28.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, "node_modules/stylelint-config-sass-guidelines": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-10.0.0.tgz", - "integrity": "sha512-+Rr2Dd4b72CWA4qoj1Kk+y449nP/WJsrD0nzQAWkmPPIuyVcy2GMIcfNr0Z8JJOLjRvtlkKxa49FCNXMePBikQ==", + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-sass-guidelines/-/stylelint-config-sass-guidelines-12.1.0.tgz", + "integrity": "sha512-NTxEtVT6uNSqRvq+A3ScyKhjUrY/Z845TnpWEwnMgIPZ/+/Waa4+51r6OPuQRMu4XZS3D8DK1UaT4TWFBvuuAw==", "dev": true, + "license": "MIT", "dependencies": { - "postcss-scss": "^4.0.6", - "stylelint-scss": "^4.4.0" + "@stylistic/stylelint-plugin": "^3.0.1", + "postcss-scss": "^4.0.9", + "stylelint-scss": "^6.2.1" }, "engines": { - "node": "^14.13.1 || >=16.13.0 || >=18.0.0" + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.4.21", - "stylelint": "^15.2.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-standard": { - "version": "34.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", - "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", + "version": "36.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-36.0.1.tgz", + "integrity": "sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", "dependencies": { - "stylelint-config-recommended": "^13.0.0" + "stylelint-config-recommended": "^14.0.1" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.1.0" } }, "node_modules/stylelint-config-standard-scss": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.0.0.tgz", - "integrity": "sha512-fGE79NBOLg09a9afqGH/guJulRULCaQWWv4cv1v2bMX92B+fGb0y56WqIguwvFcliPmmUXiAhKrrnXilIeXoHA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-14.0.0.tgz", + "integrity": "sha512-6Pa26D9mHyi4LauJ83ls3ELqCglU6VfCXchovbEqQUiEkezvKdv6VgsIoMy58i00c854wVmOw0k8W5FTpuaVqg==", "dev": true, + "license": "MIT", "dependencies": { - "stylelint-config-recommended-scss": "^13.0.0", - "stylelint-config-standard": "^34.0.0" + "stylelint-config-recommended-scss": "^14.1.0", + "stylelint-config-standard": "^36.0.1" + }, + "engines": { + "node": ">=18.12.0" }, "peerDependencies": { "postcss": "^8.3.3", - "stylelint": "^15.10.0" + "stylelint": "^16.11.0" }, "peerDependenciesMeta": { "postcss": { @@ -6446,31 +13474,87 @@ } }, "node_modules/stylelint-order": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.3.tgz", - "integrity": "sha512-1j1lOb4EU/6w49qZeT2SQVJXm0Ht+Qnq9GMfUa3pMwoyojIWfuA+JUDmoR97Bht1RLn4ei0xtLGy87M7d29B1w==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", "dev": true, + "license": "MIT", "dependencies": { - "postcss": "^8.4.21", + "postcss": "^8.4.32", "postcss-sorting": "^8.0.2" }, "peerDependencies": { - "stylelint": "^14.0.0 || ^15.0.0" + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" } }, "node_modules/stylelint-scss": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", - "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.14.0.tgz", + "integrity": "sha512-ZKmHMZolxeuYsnB+PCYrTpFce0/QWX9i9gh0hPXzp73WjuIMqUpzdQaBCrKoLWh6XtCFSaNDErkMPqdjy1/8aA==", "dev": true, + "license": "MIT", "dependencies": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.37.0", + "mdn-data": "^2.25.0", "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.11", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.1", "postcss-value-parser": "^4.2.0" }, + "engines": { + "node": ">=18.12.0" + }, "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" + "stylelint": "^16.8.2" + } + }, + "node_modules/stylelint-scss/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" } }, "node_modules/stylelint/node_modules/balanced-match": { @@ -6478,46 +13562,44 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true, - "peer": true + "license": "MIT" }, - "node_modules/stylelint/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.2.tgz", + "integrity": "sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==", "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "flat-cache": "^6.1.20" } }, - "node_modules/stylelint/node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.22", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz", + "integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "cacheable": "^2.3.4", + "flatted": "^3.4.2", + "hookified": "^1.15.0" + } + }, + "node_modules/stylelint/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, "engines": { "node": ">=10" }, @@ -6525,199 +13607,94 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/stylelint/node_modules/indent-string": { + "node_modules/stylelint/node_modules/globby/node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/is-plain-object": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "peer": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/stylelint/node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "peer": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "peer": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "peer": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/stylelint/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "peer": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/stylelint/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" }, "engines": { "node": ">=4" } }, - "node_modules/supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { "node": ">=14.18" - } - }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" } }, "node_modules/supports-hyperlinks/node_modules/supports-color": { @@ -6725,7 +13702,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "peer": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -6738,6 +13715,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -6749,31 +13727,60 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true, - "peer": true - }, - "node_modules/sweetalert2": { - "version": "11.7.32", - "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.32.tgz", - "integrity": "sha512-44tNNe2oLe7T94mT6dus4hc9G7qg6jZU/K5qZzpNS6e5HGPrSF6Kie6oZ7B5puIJydB34V2h/8f5EhIFivYo4A==", - "dev": true, - "funding": { - "type": "individual", - "url": "https://github.com/sponsors/limonte" - } - }, - "node_modules/systemjs": { - "version": "6.14.2", - "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.14.2.tgz", - "integrity": "sha512-1TlOwvKWdXxAY9vba+huLu99zrQURDWA8pUTYsRIYDZYQbGyK+pyEP4h4dlySsqo7ozyJBmYD20F+iUHhAltEg==", "dev": true }, - "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "node_modules/sync-child-process": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/sync-child-process/-/sync-child-process-1.0.2.tgz", + "integrity": "sha512-8lD+t2KrrScJ/7KXCSyfhT3/hRq78rC0wBFqNJXv3mZyn6hW2ypM05JmlSvtqRbeq6jqA94oHbxAr2vYsJ8vDA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "sync-message-port": "^1.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/sync-message-port": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/sync-message-port/-/sync-message-port-1.2.0.tgz", + "integrity": "sha512-gAQ9qrUN/UCypHtGFbbe7Rc/f9bzO88IwrG8TDo/aMKAApKyD6E3W4Cm0EfhfBb6Z6SKt59tTCTfD+n1xmAvMg==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/synckit": { + "version": "0.11.12", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.12.tgz", + "integrity": "sha512-Bh7QjT8/SuKUIfObSXNHNSK6WHo6J1tHCqJsuaFDP7gP0fkzSfTxI8y85JrppZ0h8l0maIgc2tfuZQ6/t3GtnQ==", "dev": true, - "peer": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.2.9" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" + } + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "dev": true, + "license": "MIT" + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -6785,67 +13792,248 @@ "node": ">=10.0.0" } }, - "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dev": true, - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, + "node_modules/tailwind-merge": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", + "license": "MIT", "funding": { "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/dcastil" } }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "peer": true - }, - "node_modules/terser": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.21.0.tgz", - "integrity": "sha512-WtnFKrxu9kaoXuiZFSGrcAvvBqAdmKx0SFNmVNYdJamMu9yyN3I/QF0FbH4QcqJQ+y1CJnzxGIKH0cSj+FGYRw==", + "node_modules/tailwindcss": { + "version": "3.4.19", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.19.tgz", + "integrity": "sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.7", + "lilconfig": "^3.1.3", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2 || ^5.0 || ^6.0", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" }, "bin": { - "terser": "bin/terser" + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" }, "engines": { - "node": ">=10" + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/tailwindcss/node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tailwindcss/node_modules/jiti": { + "version": "1.21.7", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.7.tgz", + "integrity": "sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/tailwindcss/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tailwindcss/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/tailwindcss/node_modules/resolve": { + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, "engines": { - "node": ">=4" + "node": ">=0.8" + } + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==", + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.16.tgz", + "integrity": "sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, "node_modules/to-regex-range": { @@ -6853,6 +14041,7 @@ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -6860,40 +14049,74 @@ "node": ">=8.0" } }, - "node_modules/toastify-js": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", - "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==", - "dev": true - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, - "optional": true, - "peer": true, - "engines": { - "node": ">=8" + "license": "MIT", + "bin": { + "tree-kill": "cli.js" } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=16.13.0" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -6902,10 +14125,11 @@ } }, "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -6913,11 +14137,91 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", + "dev": true, + "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6926,65 +14230,81 @@ "node": ">=14.17" } }, - "node_modules/undici-types": { - "version": "5.25.3", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.25.3.tgz", - "integrity": "sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==", - "dev": true - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, + "license": "MIT", "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" }, "engines": { - "node": ">=4" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "dev": true, - "engines": { - "node": ">=4" - } + "node_modules/undici-types": { + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", + "devOptional": true, + "license": "MIT" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 4.0.0" + } + }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.11.1.tgz", + "integrity": "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -7000,9 +14320,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -7016,63 +14337,122 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, + "node_modules/use-callback-ref": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz", + "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.3.tgz", + "integrity": "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ==", + "license": "MIT", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "peer": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } + "license": "MIT" + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "devOptional": true, + "license": "MIT" }, "node_modules/vite": { - "version": "4.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", - "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", - "dev": true, - "peer": true, + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.2.tgz", + "integrity": "sha512-2N/55r4JDJ4gdrCvGgINMy+HH3iRpNIz8K6SFwVsA+JbQScLiC+clmAxBgwiSPgcG9U15QmvqCGWzMbqda5zGQ==", + "license": "MIT", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "esbuild": "^0.25.0", + "fdir": "^6.4.4", + "picomatch": "^4.0.2", + "postcss": "^8.5.3", + "rollup": "^4.34.9", + "tinyglobby": "^0.2.13" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": ">= 14", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -7082,6 +14462,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, @@ -7090,523 +14473,49 @@ }, "terser": { "optional": true - } - } - }, - "node_modules/vite-plugin-checker": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/vite-plugin-checker/-/vite-plugin-checker-0.6.2.tgz", - "integrity": "sha512-YvvvQ+IjY09BX7Ab+1pjxkELQsBd4rPhWNw8WLBeFVxu/E7O+n6VYAqNsKdK/a2luFlX/sMpoWdGFfg4HvwdJQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "ansi-escapes": "^4.3.0", - "chalk": "^4.1.1", - "chokidar": "^3.5.1", - "commander": "^8.0.0", - "fast-glob": "^3.2.7", - "fs-extra": "^11.1.0", - "lodash.debounce": "^4.0.8", - "lodash.pick": "^4.4.0", - "npm-run-path": "^4.0.1", - "semver": "^7.5.0", - "strip-ansi": "^6.0.0", - "tiny-invariant": "^1.1.0", - "vscode-languageclient": "^7.0.0", - "vscode-languageserver": "^7.0.0", - "vscode-languageserver-textdocument": "^1.0.1", - "vscode-uri": "^3.0.2" - }, - "engines": { - "node": ">=14.16" - }, - "peerDependencies": { - "eslint": ">=7", - "meow": "^9.0.0", - "optionator": "^0.9.1", - "stylelint": ">=13", - "typescript": "*", - "vite": ">=2.0.0", - "vls": "*", - "vti": "*", - "vue-tsc": ">=1.3.9" - }, - "peerDependenciesMeta": { - "eslint": { + }, + "tsx": { "optional": true }, - "meow": { - "optional": true - }, - "optionator": { - "optional": true - }, - "stylelint": { - "optional": true - }, - "typescript": { - "optional": true - }, - "vls": { - "optional": true - }, - "vti": { - "optional": true - }, - "vue-tsc": { + "yaml": { "optional": true } } }, - "node_modules/vite-plugin-checker/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/vite-plugin-checker/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/vite-plugin-checker/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/vite-plugin-checker/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/vite-plugin-checker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vite-plugin-checker/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vite-plugin-checker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/vite-plugin-checker/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/vite-plugin-eslint": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/vite-plugin-eslint/-/vite-plugin-eslint-1.8.1.tgz", - "integrity": "sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.2.1", - "@types/eslint": "^8.4.5", - "rollup": "^2.77.2" - }, - "peerDependencies": { - "eslint": ">=7", - "vite": ">=2" - } - }, - "node_modules/vite-plugin-eslint/node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, "node_modules/vite-plugin-full-reload": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.0.5.tgz", - "integrity": "sha512-kVZFDFWr0DxiHn6MuDVTQf7gnWIdETGlZh0hvTiMXzRN80vgF4PKbONSq8U1d0WtHsKaFODTQgJeakLacoPZEQ==", - "dev": true, + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.2.0.tgz", + "integrity": "sha512-kz18NW79x0IHbxRSHm0jttP4zoO9P9gXh+n6UTwlNKnviTTEpOlum6oS9SmecrTtSr+muHEn5TUuC75UovQzcA==", + "license": "MIT", "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" - }, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" } }, - "node_modules/vite-plugin-stylelint": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/vite-plugin-stylelint/-/vite-plugin-stylelint-5.1.1.tgz", - "integrity": "sha512-+BGLJG51Sx5YRg1zZX2MR0rWHzWUcxGSHUcKJW7zz5Lku/WrqGDRlU9atKcg6rhhXZMQgELj2/sFjKRoaNhgLA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.3", - "chokidar": "^3.5.3", - "debug": "^4.3.4" - }, + "node_modules/vite-plugin-full-reload/node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", "engines": { - "node": ">=14.18" - }, - "peerDependencies": { - "@types/stylelint": "^13.0.0", - "postcss": "^7.0.0 || ^8.0.0", - "rollup": "^2.0.0 || ^3.0.0", - "stylelint": "^13.0.0 || ^14.0.0 || ^15.0.0", - "vite": "^2.0.0 || ^3.0.0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@types/stylelint": { - "optional": true - }, - "postcss": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "node_modules/vite-plugin-stylelint/node_modules/@rollup/pluginutils": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.5.tgz", - "integrity": "sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==", - "dev": true, - "engines": { - "node": ">=8.0.0 || >=10.0.0" - } - }, - "node_modules/vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", - "dev": true, - "dependencies": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" - }, - "engines": { - "vscode": "^1.52.0" - } - }, - "node_modules/vscode-languageclient/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vscode-languageclient/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/vscode-languageserver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-7.0.0.tgz", - "integrity": "sha512-60HTx5ID+fLRcgdHfmz0LDZAXYEV68fzwG0JWwEPBode9NuMYTIxuYXPg4ngO8i8+Ou0lM7y6GzaYWbiDL0drw==", - "dev": true, - "dependencies": { - "vscode-languageserver-protocol": "3.16.0" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } - }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", - "dev": true, - "dependencies": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" - } - }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.11.tgz", - "integrity": "sha512-X+8T3GoiwTVlJbicx/sIAF+yuJAqz8VvwJyoMVhwEMoEKE/fkDmrqUgDMyBECcM2A2frVZIUj5HI/ErRXCfOeA==", - "dev": true - }, - "node_modules/vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==", - "dev": true - }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true - }, - "node_modules/vue": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", - "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", - "dev": true, - "dependencies": { - "@vue/compiler-dom": "3.3.4", - "@vue/compiler-sfc": "3.3.4", - "@vue/runtime-dom": "3.3.4", - "@vue/server-renderer": "3.3.4", - "@vue/shared": "3.3.4" - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/vue-eslint-parser/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-eslint-parser/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-eslint-parser/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/vue-select": { - "version": "4.0.0-beta.6", - "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", - "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", - "dev": true, - "peerDependencies": { - "vue": "3.x" - } - }, - "node_modules/vue-template-compiler": { - "version": "2.7.14", - "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", - "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", - "dev": true, - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/vue-tsc": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.6.0.tgz", - "integrity": "sha512-JO8Hmc/ZL8pEXtYsUuMFHIvpu5zqtBLtKBp6CRq2O0JVgrRGqYmVIq9v2R7LMVhMo1LhJEvPBWcE24w30mUvXQ==", - "dev": true, - "dependencies": { - "@volar/vue-language-core": "1.6.0", - "@volar/vue-typescript": "1.6.0", - "semver": "^7.3.8" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/vue-tsc/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-tsc/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/vue-tsc/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -7617,18 +14526,136 @@ "node": ">= 8" } }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, - "peer": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -7637,29 +14664,50 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": ">=10" } }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "peer": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -7667,12 +14715,60 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/ziggy-js": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/ziggy-js/-/ziggy-js-2.6.2.tgz", + "integrity": "sha512-41xc9wRvv5Olh8pZjKSaL5vDAjw4BfTDMFoeLwRpDGc2B+uqcdwIKd81EHs6uwpqahdRrU7uMab0xWj0hBSDjg==", + "license": "MIT", + "dependencies": { + "qs-esm": "^7.0.3" + } + }, + "node_modules/zod": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", + "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", + "integrity": "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g==", + "license": "MIT", + "engines": { + "node": ">=12.20.0" + }, + "peerDependencies": { + "@types/react": ">=18.0.0", + "immer": ">=9.0.6", + "react": ">=18.0.0", + "use-sync-external-store": ">=1.2.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + }, + "use-sync-external-store": { + "optional": true + } + } } } } diff --git a/package.json b/package.json index 9b806c9..9366cae 100644 --- a/package.json +++ b/package.json @@ -1,59 +1,125 @@ { + "$schema": "https://www.schemastore.org/package.json", "private": true, + "type": "module", "scripts": { + "build": "vite build", + "dev": "vite", "prod": "vite build --mode production", - "dev": "NODE_ENV=development vite build -d --mode development", - "watch": "NODE_ENV=development vite build --mode development --watch", - "eslint": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources", - "eslint-fix": "node ./node_modules/.bin/eslint --fix --max-warnings 0 -c .eslintrc.json ./resources", - "eslint-ci": "node ./node_modules/.bin/eslint --max-warnings 0 -c .eslintrc.json ./resources -f junit", - "stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss'", - "stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --fix --max-warnings 0 '**/resources/**/*.scss'", - "stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 '**/resources/**/*.scss' -f json" + "eslint": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}'", + "eslint-fix": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}' --fix", + "eslint-ci": "node ./node_modules/.bin/eslint --config './.eslintrc.cjs' --max-warnings 0 'resources/ts/**/*.{ts,tsx}' -f junit", + "stylelint": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss'", + "stylelint-fix": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' --fix", + "stylelint-ci": "node ./node_modules/.bin/stylelint --config './.stylelintrc.json' --max-warnings 0 'resources/sass/**/*.scss' -f json" }, "devDependencies": { - "@eastdesire/jscolor": "^2.5.1", - "@fortawesome/fontawesome-svg-core": "latest", - "@fortawesome/free-brands-svg-icons": "latest", - "@fortawesome/free-regular-svg-icons": "latest", - "@fortawesome/free-solid-svg-icons": "latest", - "@fortawesome/vue-fontawesome": "^3.0.3", - "@sipec/vue3-tags-input": "^3.0.4", - "@types/bootstrap": "^5.2.7", - "@types/node": "^20.8.2", - "@types/toastify-js": "^1.12.1", - "@types/vue-select": "^3.16.5", - "@vitejs/plugin-legacy": "latest", - "@vitejs/plugin-vue": "latest", - "@vue/compiler-sfc": "latest", - "@vue/eslint-config-typescript": "latest", - "@vue/tsconfig": "latest", - "axios": "^1.5.1", - "bootstrap": "^5.3.2", - "chart.js": "^4.4.0", - "cropperjs": "^1.6.1", - "eslint": "latest", - "eslint-plugin-vue": "latest", - "glightbox": "^3.2.0", - "laravel-vite-plugin": "latest", - "moment": "^2.29.4", - "postcss-discard-comments": "^6.0.0", - "prettier": "latest", - "print-js": "^1.6.0", - "sass": "latest", - "slugify": "^1.6.6", - "stylelint-config-idiomatic-order": "github:ream88/stylelint-config-idiomatic-order", - "stylelint-config-sass-guidelines": "latest", - "stylelint-config-standard-scss": "latest", - "sweetalert2": "^11.7.31", - "terser": "latest", - "toastify-js": "^1.12.0", - "typescript": "latest", - "vite-plugin-checker": "latest", - "vite-plugin-eslint": "latest", - "vite-plugin-stylelint": "latest", - "vue": "latest", - "vue-select": "^4.0.0-beta.6", - "vue-tsc": "1.6.0" + "@headlessui/react": "^2.2.10", + "@radix-ui/react-accordion": "^1.2.12", + "@radix-ui/react-checkbox": "^1.3.3", + "@radix-ui/react-collapsible": "^1.1.12", + "@radix-ui/react-dialog": "^1.1.15", + "@radix-ui/react-dropdown-menu": "^2.1.16", + "@radix-ui/react-label": "^2.1.8", + "@radix-ui/react-popover": "^1.1.15", + "@radix-ui/react-progress": "^1.1.8", + "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-select": "^2.2.6", + "@radix-ui/react-separator": "^1.1.8", + "@radix-ui/react-slider": "^1.3.6", + "@radix-ui/react-slot": "^1.2.4", + "@radix-ui/react-switch": "^1.2.6", + "@radix-ui/react-toast": "^1.2.15", + "@radix-ui/react-tooltip": "^1.2.8", + "@tailwindcss/forms": "^0.5.11", + "@tailwindcss/typography": "^0.5.19", + "@tailwindcss/vite": "^4.0.0", + "@types/react-color": "^3.0.13", + "@typescript-eslint/eslint-plugin": "^8.59.0", + "@typescript-eslint/parser": "^8.59.0", + "@uwil/husky-config": "^1.0.1", + "@vitejs/plugin-react": "^4.7.0", + "autoprefixer": "^10.5.0", + "concurrently": "^9.2.1", + "eslint": "^8.57.1", + "eslint-config-airbnb": "^19.0.4", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-prettier": "^5.5.5", + "eslint-plugin-react": "^7.37.5", + "eslint-plugin-react-hooks": "^4.6.2", + "flag-icons": "^7.5.0", + "pluralize": "^8.0.0", + "prettier": "^3.8.3", + "react": "^19.2.5", + "react-day-picker": "^9.14.0", + "react-dom": "^19.2.5", + "rollup-plugin-copy": "^3.5.0", + "sass-embedded": "^1.99.0", + "stylelint": "^16.26.1", + "stylelint-config-idiomatic-order": "^10.0.0", + "stylelint-config-sass-guidelines": "^12.1.0", + "stylelint-config-standard-scss": "^14.0.0", + "stylelint-scss": "^6.14.0", + "tailwindcss": "^3.4.19", + "tailwindcss-animate": "^1.0.7", + "vite": "^6.4.2" + }, + "dependencies": { + "@dnd-kit/core": "^6.3.1", + "@dnd-kit/sortable": "^10.0.0", + "@dnd-kit/utilities": "^3.2.2", + "@inertiajs/core": "^2.1.5", + "@inertiajs/react": "^2.3.21", + "@tanstack/react-table": "^8.21.3", + "@tiptap/core": "^3.22.4", + "@tiptap/extension-blockquote": "^3.22.4", + "@tiptap/extension-bold": "^3.22.4", + "@tiptap/extension-bullet-list": "^3.22.4", + "@tiptap/extension-color": "^3.22.4", + "@tiptap/extension-heading": "^3.22.4", + "@tiptap/extension-history": "^3.22.4", + "@tiptap/extension-horizontal-rule": "^3.22.4", + "@tiptap/extension-image": "^3.22.4", + "@tiptap/extension-invisible-characters": "^3.22.4", + "@tiptap/extension-italic": "^3.22.4", + "@tiptap/extension-link": "^3.22.4", + "@tiptap/extension-list": "^3.22.4", + "@tiptap/extension-ordered-list": "^3.22.4", + "@tiptap/extension-placeholder": "^3.22.4", + "@tiptap/extension-strike": "^3.22.4", + "@tiptap/extension-subscript": "^3.22.4", + "@tiptap/extension-superscript": "^3.22.4", + "@tiptap/extension-table": "^3.22.4", + "@tiptap/extension-table-cell": "^3.22.4", + "@tiptap/extension-table-header": "^3.22.4", + "@tiptap/extension-table-row": "^3.22.4", + "@tiptap/extension-text-align": "^3.22.4", + "@tiptap/extension-underline": "^3.22.4", + "@tiptap/react": "^3.22.4", + "@tiptap/starter-kit": "^3.22.4", + "@types/pluralize": "^0.0.33", + "@types/react": "^19.2.14", + "@types/react-dom": "^19.2.3", + "axios": "^1.15.2", + "class-variance-authority": "^0.7.1", + "clsx": "^2.1.1", + "cmdk": "^1.1.1", + "date-fns": "^4.1.0", + "json-edit-react": "^1.29.0", + "laravel-vite-plugin": "^1.3.0", + "lucide-react": "^0.503.0", + "motion": "^12.38.0", + "prosemirror-state": "^1.4.4", + "react-color": "^2.19.3", + "react-dropzone": "^14.4.1", + "react-image-crop": "^11.0.10", + "slugify": "^1.6.9", + "tailwind-merge": "^3.5.0", + "ziggy-js": "^2.6.2", + "zod": "^4.3.6", + "zustand": "^5.0.12" } } diff --git a/phpcs.xml b/phpcs.xml index 3e28d83..10dfcd1 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -8,6 +8,7 @@ config/ database/factories routes/ + */vendor/* @@ -29,8 +30,7 @@ - - + @@ -44,9 +44,6 @@ - - - @@ -79,7 +76,7 @@ - + @@ -109,6 +106,7 @@ + diff --git a/phpstan.neon b/phpstan.neon new file mode 100644 index 0000000..4859286 --- /dev/null +++ b/phpstan.neon @@ -0,0 +1,8 @@ +includes: + - vendor/larastan/larastan/extension.neon + +parameters: + paths: + - app/ + + level: 7 diff --git a/phpunit.xml b/phpunit.xml index eb13aff..e7f0a48 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -1,31 +1,36 @@ - ./tests/Unit + tests/Unit - ./tests/Feature + tests/Feature - + - ./app + app - + + - - - + + + + + + + diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..49c0612 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/production-resources.yaml b/production-resources.yaml index d3ac864..f940be0 100644 --- a/production-resources.yaml +++ b/production-resources.yaml @@ -1,12 +1,56 @@ ---- apiVersion: cert-manager.io/v1 kind: Certificate metadata: name: $APP_DOMAIN spec: dnsNames: - - $APP_DOMAIN + - $APP_DOMAIN secretName: $APP_DOMAIN issuerRef: name: $APP_CERT_ISSUER kind: ClusterIssuer +--- +# Redirect with domain replacement +apiVersion: traefik.io/v1alpha1 +kind: Middleware +metadata: + name: redirect-multi-to-ldcfr +spec: + redirectRegex: + regex: ^https://(.*)(corico|volaillesdeblancafort).fr(.*) + replacement: https://${REDIRECT}${APP_DOMAIN} + permanent: true +--- +apiVersion: traefik.io/v1alpha1 +kind: IngressRoute +metadata: + name: redirect-multi-to-ldcfr +spec: + entryPoints: + - websecure + routes: + - match: (Host(`corico.fr`) || Host(`www.corico.fr`) || Host(`volaillesdeblancafort.fr`) || Host(`www.volaillesdeblancafort.fr`)) && !PathPrefix(`/.well-known/acme-challenge/`) + kind: Rule + services: + - name: api@internal + kind: TraefikService + middlewares: + - name: redirect-multi-to-ldcfr + tls: + secretName: redirect-multi-to-ldcfr +--- +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: redirect-multi-to-ldcfr +spec: + dnsNames: + - corico.fr + - www.corico.fr + - volaillesdeblancafort.fr + - www.volaillesdeblancafort.fr + secretName: redirect-multi-to-ldcfr + issuerRef: + name: $APP_CERT_ISSUER + kind: ClusterIssuer + diff --git a/public/.htaccess b/public/.htaccess index 3aec5e2..d4b5cfb 100644 --- a/public/.htaccess +++ b/public/.htaccess @@ -14,8 +14,77 @@ RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] + # Redirect /index.php/anything to /anything + RewriteCond %{THE_REQUEST} /index\.php/([^\s?]*) [NC] + RewriteRule ^index\.php/(.*)$ /$1 [L,R=301,NC] + # Send Requests To Front Controller... RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] + + + ExpiresActive On + + # Images + ExpiresByType image/jpg "access plus 1 year" + ExpiresByType image/jpeg "access plus 1 year" + ExpiresByType image/png "access plus 1 year" + ExpiresByType image/gif "access plus 1 year" + ExpiresByType image/webp "access plus 1 year" + ExpiresByType image/svg+xml "access plus 1 year" + + # CSS / JS + ExpiresByType text/css "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType application/x-javascript "access plus 1 year" + + # WOFF / WOFF2 / Fonts + ExpiresByType application/font-woff "access plus 1 year" + ExpiresByType font/woff "access plus 1 year" + ExpiresByType application/font-woff2 "access plus 1 year" + ExpiresByType font/woff2 "access plus 1 year" + + # Favicon + ExpiresByType image/x-icon "access plus 1 year" + + + + Header set Cache-Control "public, max-age=31536000, immutable" + + + + AddOutputFilterByType BROTLI_COMPRESS text/html text/css text/plain text/xml text/javascript application/javascript application/x-javascript + AddType text/plain .br + + + + AddOutputFilterByType DEFLATE text/html + AddOutputFilterByType DEFLATE text/plain + AddOutputFilterByType DEFLATE text/xml + AddOutputFilterByType DEFLATE text/css + AddOutputFilterByType DEFLATE text/javascript + AddOutputFilterByType DEFLATE application/javascript + AddOutputFilterByType DEFLATE application/x-javascript + AddOutputFilterByType DEFLATE application/xml + AddOutputFilterByType DEFLATE application/xhtml+xml + AddOutputFilterByType DEFLATE application/rss+xml + AddOutputFilterByType DEFLATE image/svg+xml + + + + AddType application/javascript .js + AddType font/woff2 .woff2 + AddType application/font-woff2 .woff2 + AddType application/font-woff .woff + AddType font/woff .woff + AddType image/svg+xml .svg + + + + FileETag None + Header unset ETag + Header unset Set-Cookie + \ No newline at end of file diff --git a/public/android-chrome-192x192.png b/public/android-chrome-192x192.png deleted file mode 100644 index 7daa4442b7f4553934d9dc7b1d7103701a4f7064..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13667 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 diff --git a/public/android-chrome-512x512.png b/public/android-chrome-512x512.png deleted file mode 100644 index 8e4b3dc3d9c92648321a3b7dff75d3f86b32bdbb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49918 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%0A--+73Fu1XvpTnKv;DAGK4 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 W3zmFxGMx&vg2B_(&t;ucLK6V|8=c+& diff --git a/public/android-icon-144x144.png b/public/android-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..c92fc362d3a6c3777b8ef69a2e6e9e971b6054be GIT binary patch literal 10752 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/public/android-icon-192x192.png b/public/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..2d53c6ea91e02180b82474bb4cf1c512190f7ed3 GIT binary patch literal 14197 zcmc&*RaYHNusy&bSa1jgcMtAv!GgQHJHg!{xVyW%y9Jkn9^8VvyIsEf3+~%pYkH<1 zX1aQ+t7`VH>IsvV6-R`}fd>Eph>{Ybil5is{~GL<&$Hs1H4Fg2!7C{$r0lkG*5#h5 z^E2(^qni6*&C^qF_LnfbFq$x0J!P%|sAUQKmOAbMNU zI*jtxAvW{ix&52zl9l+2ZXkd)|IrXa7;C*`p7iHTRJiQSjO$AVbt07ml)`O?w{k99 z6m^V6(`fgm&^8+LnQt|t8MI&pX{qZ_vMN3TL?W0| z_;PpL^C<(g8Kaa%R4V{4Z55k;p$8!>F&AA#97x5j1{=$4EnRQl{T1{Rwh=%*;JNfN zdU^lzq3$6%8gpGF=mAR+BYN4@A$$t`woO*b04H)DmU`eN^&v%=2wy0shSNk5v8CHl zHjeS1|Lhj5o3S0krg~3INRY^M2`@KY4|QPV81C5cJA)AX_ahGI<zQYa@H&>Z$Y22TX_Q>Xrto+ow~K4x6&jMf`Mfuf8Ud5^2L$7=vs?GqU_Eocc6o)L z2P=;G2e1l65RiDD{0hOOGNhQz57DrKd36YmKTzH%gyS*M!LikcI0n0UMMT?D?2Tqi z)7d7b-ta|;A3J_sXVg*D>1gz@QIrU~P4(1H^v$QD*9L-S3d$V9qCnT6T+M!jHUME1 zPlzdG9f}I9ycA0w#VD?}GKO1JgqaEO$MG-1#Xa?8P^w z!4R9v$1&irTD!3_Cvo#$0i#g#u^-73MvhTUg9%-Gviy0qpN&til{@ryn-N4^l(H(o zPUE+>q{UKM%aaz_!av7+s6dGuL1Fsz%@ZhXm)_@D7>6l8o-m&t^TMFvX6N9Zp;e_X zE1iAu&+yk$grX)X$&3Eg(|%BeY?YH=6f}k*4N3jJUU-4~RXfwk-1U$vp6r}PdMefw`QUrVTmH4O*iJbzfGD89=tM< zCbs7K2VtBZkKRmF6AA8xGaGfz?Q34jPAvz#2S2o2246`a<{89VL zf1(rDgt!8+i%|Mmp9O3#B0n@z%~ZJKp_?S@rAUpelcW7)i!`vxgbE1j(0W(yKsvl| zXh@co6Oo2Nv$4O)i6R$6#9dGwOx>Sz@=U!g)r;|m&!3Ye6`GI3G0@SV{bhZmU8(rO*VgM*q zGBUx#-*2>tw6bB$Bgzb!=neGiGi9TO0#=^kAdHdjBfbMdogPnraLnUaV_Of zk$7nRTIl(r9X8)W<#Bk$FaJ*2_PQw=dFwv9YUqRuo-C~^OZBp}ZH?Hme*KdLXl~&$ z@s?-4xA()dLUp1Yo3?hJ>&<}y+$<_MEsqsUMtke7IgfQns%%^ZV8U)?Y{ zpw^Sebw(66@^Y918XmPF=7P~ueofZ^9gk97IfbNV$2%J%b|Jm#Y32fx;2Y!;f$u_o znEcT;EqXjpw!s3?4(5H7nj7}YXni|I^`FJ-LMDY|Q1A`F3}f-G7Nr-dB_gKgpm5ZA z*HLJfnxKYpU%sz;gBNsOr@Q@Vov3=kTgEM9)lZJKW4x3u(()K?;}7}o&KVCb#0ChP zNV3hQRebJjEh-NRS1L3km zE)ms+A!2rJiy9%}U+5YzqW^V55tXgu{6V3*lAuJ-Ld(ZY!=DqG1$%+a$`E>mwUZ72 z&}8mpHMpUb8t4)-O69S-DPA7L0vuf7!Enuu^kFss*t+2-q}rRnw7l?l8wTWlI%GHd z&{bp==(|uVF5w2>MmswNCX=hRIW?j#+*Mb`EtQlxNx){yY>*7k5Z|ke^Z-tr*t(EG zQQq&39^a&EhCu{;F}r}iXzZGhF=EAkT}?wt0r%Fua~%^@xgmYDybWVUQe#Z})9PLQ zwZAObp(zx`TPXm3gxGwClL!>T{DR42d?Ftrf%CD4A5D7QL^BUa`Sa_4r+c)>`%IH+ z!^rY)&hGA8Ckq8XK7J~Qr3&xEf6t~Z+Pbo@^IA(nGmoMKB3Q=nCeqIfeT@~A#mY3? z$p$nlWH-2xkl_~s)ugnk?eYCd$)ginqyIXPMPqQrU)Bgp*%w-HGE1kB*jUDNTZHt> z#bs-aJ>(+z!Y`9rhlJ->qOiXNF(Xn<@7E}>Qenr6fiyVe{pW%q z4__1>H!ha%3D~KVCuzy>UowbUghO|e%!O{(@lq7%i9x7^P=iBLbWxM^>5t%x6=qPC z>~yC65j=*i^o#?J1V9UF^2FaToYV*u?n;I20{N$QxU95_ws*|gxUi?4-69EP#+6z$QD!Qv8;gy1qRU2%bJ#Q+J^13DZ{k6C z$H7`u4|~~yo{kKPN;ZHNML`ai{80FTIHxQ4sltd2NxjBC@PM&oY-i?P+FFB@q^35& z*(VJkul#tEOu#X_N7(eI!(YATa(0C*rqRrhA%>LI>L$E}Y;sN<0a`2w@Xdc#q4d_@ z-ab#naD-HKfSdDAAm?w1lwtQ}V$y4PHOf+#pey*{Tl-*zKz3j_dyz$=;k>-QC>%-| z`#{hP$?Xh)HuQ)(W`|Z=_k2=moAWOlxl3@a&cH8!!y+d!8J$Qfh(@sW(y~l-kVvI| z+Yx1P{73k|%!8SncgSq8y3iP|jmw`n5fsx{UG1#hr)*x80QH7ph{{P?RgYwIQaOKA zQomVKv`0A(fq|?To4k5%AwdVQiPaPJ6qU|ME8g;A#H^cEh0F)*W;BM=0i@4UT~Vg% zZ(9G^0q*NaRZ**8tAtlext7nD*u$7h4?^k0qw;7fR*XbqGygl=x|--`r^5^fJDCn{ zwv)-0Pdv#9D4Qw%)q+GGuIPgNh<#I3gMr-H=o&Q0*N##oTX~zBcsX+NSSbf4tQEIl z4}y>^=%Z#g1lCgYHte^^t0eRySN_`A#f=t&$i09EkCa&6!{!F5v2!nY&1ouabMbbU zMLF>^?k~jAJW>Vpa$eBjjlNpOST{;g5TL>KE?#P*wB$QqVmm-)vbH4$&z+2#zVRP- zPgW4VtC4iI(HE+>3_ERR59-#ilIe_w@OANG6;m+SMS-!#E#omDIse5)$zWf;D_EhR>WO)5gJa2R930W<>Y;g`8w$jY%_1=4~2un0& zZZu4@F$^Mq{e;<574Ee`n_WhnePTeT$<<#2iEJxXa=yoUVn4bHA;COUyqw=@$-hU3 zI@LE&r^~j<*{-<)#WDe^h}=fDERzP;Yps845)}foH)f~0v)5_|*JGfU=ED%m(RPg{ zzAHyI74+h9{{z-)mCIU|>JLtc)h}Z&5Fx^;)pwDOCuFSpU-RY)B+rxChZ-!V11~KB zT^`09v!9FhDLT7hnhX@h^Nn9VeX~dV9v+KSDocHPCO*~xa@|e;4Z<_Yw2KB07cLSW zQl0H^lCmYX{Q43K^M^Xuiad^D_HLcb%V=U(KdLl5dZ`0BrOG$YU?V|^YQe}(H8*9H z-Vnh|-lpg$rQ?y^2`Uuvfq8SqYU7;^-RyN!7fU+NV38n0b=8DO9E;4DYrho8sDJwG zSJ5y9K>$brM%A=W8_m5IO8h~bEc{Ezj(#iVWYzDQx3|As==0s@+t38|vy9PtU8uZ#k`N=X zeHv~{i3JmX7@CsKWmFj5!&}j4k0S82yE)4tLn^2S3af8!#UG1$kqW9;;Y1-+A~>2x ziyGmv0c&-)Lym!VnSB1*^xeB{IQICX?;E_nE3Jf76++)scYl?mD-R`7_xDdhvC}RU ziBkmrCx~fEV+rRaoU3Y5dn?AkUYkp)$=?QrvQWF296y1Je*f$2y5>zhPTJwL!cV~J z7f|M^w1`f8CgG-TgG=0mp6-RQt84QqCcSX3jOby1IgraHS!ze_xiu0ZF=N7}6m_cFQJl(OZsc0s!-Il$f^JQ0XJ9SySVYMpi|9--DWtmTh zU)&DP(y?Az4MfSeMua!mt1X-*{o{~EhT#RtaJbDD8Z8C6^pp9Av!v>TH5qz=8g`Wf ze&2f|p?mQ7*=FyUmqC(QXTQS*?N{rCfUE&?B>W_xpYTP)^X|7l4x}8gu54JBq4osw zF7UWP?suu#PM^of@uN!>6VEt8`%I^L;w7DJq$Z@g)wG6VMp+ee8Tt-dgz6{0)S~R@ z7`FTOYQR!l#rgBgc2N*X~C>J^l157^1|d zf8{_pV#9lQ1hig?sv}dk`CNrxfKNOOk;&EqEkH>0(+lCQ zQ*ZJ9B-BahCqoW4r-9_2hsL0hjOoV3i?P9u7TVa_Leik+e*SXpA9{Yj`&i~w}Ou^~%J zl+l)u7&~jhRdo+vq&@@u!Dm*>@*B@TCi&S(^$H`>Wfv0#OVV9o|U=*8W&#L#; z@8C+9y)Cgww3K)gtXfax?S<9)pZ(b{;-&dXtp0;tMPh*d<_Gw9ln10Banw`!(+{A~ z1QYd2?0FudNsT>|wMg12m-IDRTWgjfmyCKkh+CTFy+&D zGt&KM==9EI8wYu}EJzq$jV?I8QPQ8QA&5(#IS^(AueW@1;9lM%8 z`AOlAocfcY=$CcNATVyT7TwUfQ2T+8#O#dr@Y| zF9mN12ZM6xD+GKQI&La^UVJ5C4o)GJTkxWo?lv=YWn%@tWD!Pbs%yfnzx0F&4hs+^ zkIPBeIUbXeHAHtC8yej`I7+FK7lvP21twc?}o@LRnznrLG zocQRkUH$E!ku87{XgdKHY=fff)dqn$gaKiV%X?F3N}-(bliA@%f`VqkEg8ev`F@hQ z-gaDa@1Y;-Q=@;}=E1|rICF@;YgF30=43!wQ(=Qpr3RihwK?dK7ss|#?H(SN3SV!S zWer;k*qbT>p*m?rjQcl(<&XV|JT4yANy8AzZL4y(Ro6c|L zXttFd=@pEDw=An2OAA>d;lGDq{TdawA)m14#EfvvNIvi8f)p)7FIiw}XbN}Y@5U!* z+mh^?s>YMEV=F@+Zs3|v?xdYAOp?qafH~FF$C4P*E@l!3RD3Do4V^RN_{kM$xH>7G z>cxp{L&FeXw{$@Jo4Y%xO`lE>ZVZTxR&mfmG!QveS0*%OUGcmNmh~8Z>h5>BTuoO3 zGBK#l3$j6DQZ?g?7}1GX|52ozvfgcN$KVpkK9py{u!^tNpL=Hoot=Ies$mUuwKr$_gWx z6NLPZ(ts3=FqXB<&!h3LVRg8ZbkWO#O69J*xDEF}I@Y8EA2F(HD$IoFyTD8cB zXiP{{_h1lzSz2bzzq((m{{^aTiE~dA2B{MV6GX*4Y<6RB-O=a5!aoaNcA=aF=NJ=h zCeQ%zd;{g~lgbpC>RHNCRy2H}X0G>_f5BI6IZGm0Tpmf$Z0}>$P^rK|0A@p*vo$&q zUP_8|%|TGICG!(D$1I>Q$U66NZzYRV=hh&w>AmqKT)^2(QWACbb@_EcW?<$8azuv88^ zWZ~Y**Lvvw>fD#Kp_~0A2_{gsZpU~1$ir09-O5WBv_7lZ#F#hl7LfkPtR$%fsJWTg zR)>&50h(MD{-bxFDIAoH>C-<-8BVPSd)~a=O;FVE30FplG;8&@95xm%`xx0|;Ko1f zY|qlfrTvv$(N@1GBADa=#6T&FbSuS7<^unXOlI9}PD)FIf{zCQ8;TlMMFP(qzy8W# zH?FJ$-&Gc6t^j>(_%i>5&>0ZtJ{%xe_oy?tN}&exSxwMH!u@iJ`g2&GcasN)UbH`KY z%VGkea$JnQ6Pgf|&(b4D(T$hSfKRj8jq;fNEYH{egw)B)Z@*IMtSJ4KuLD4oiOJ}XK06`5NEm|~hQsQ`tISpAeZ$@HK$b&$Z#NSD$kXGc$UDOMcD ze_3=ON#Y25S@il7SSp&&3fqU%w$g3qW4{wTrIG@$v)1AQtj^ujYCi5U(<}HAcZd^` zVDl8xY?bA3+e;9WPS_B2B}7TWlr&=0HiMMr{G?ThAPJM?NaeTMe?}QHLQ2HqsKNi1 zxPHPT%o6aIqfZl^jf0|aD^o6?9*G7d1Ja~Tr#I2VfY}ESwQN}jo?6^)^(-P)2N?BM zOU%JQLF&StEmgH0GBn__F0;+c$oYn3bypNo#uvm{=SxdV3APq_E(f$SI7Ci3$yh|# zS&JYP2@v!jSfU^blz<8)q=tT{6B9^0=%o!8HSzR?P4{pe4VV@)jz{ydNn~sQU04`2NzoZv?7n9UAnJ8M0&QA~$NggHO5A+i=TKHtD@Y7iCZHzo zI%18$qTiZ&IY02_@v>b9OU8ibTan63=}^OhA&DixY`MR`-&eZ_;3IDgZFBt* z;gpqxq$-kNXT2KId;g5%ssUaboe3zg->0I2fO|U&^KlzpQ9at;Ts-e?JzOyU_Js;f zr*FU5vM#l0(J_HD?ko(?0K3k2+<9qh6Fsx^Pcqy&=O`xn(85_;oJXT>4Ry$zgJr;!f+I`mSDg-|7;X%&k`jNhK)`Db!bPs;R$J2M=|u_n-slBkjM zu4&}4J7%Yy_hHRZ+k3KU=(ZFRkJvt__e)cFe@5_L?ZSN$xTFp!8GyqctJb0 z+hDEMlSYpEyD~O9%hD}8)N*suCDUl?&w|8NIBoS-`^h^#=w{-wCZLb@bjvnU6+)PM zch$9SPe4G#V?2VhtX$a6Efv;_kQli6{@}Y)`SFPO(O4Ws$lnquV0~ijEgs_iJx5wU z+hCLkxO)SkDCP5Bq33W?)j~2b1U=^c4EomA7yroPu$M6X(1n@x z5X#w@BB}b<;=at9<3?NN?L3ZRb%Za<1s>%Zs`s-(&_b|X>-LxKyDGcwcKYrMWLv8g zq}-^tO%i1&Cr-%QP;#N^xvBe{cL7sv2h#fd*-TF|RXk!L=-0g$y*#VgA8UkHyw_Smq2eRA4ZS1;-#Y@ZJQs@!M;RYRy?zJ@;*oS?V_A= zGeVougLs6U0}9)JuukoE$|D$d8^sBWnwr>{bz*?gVW_>wuej{iTQ@l$yn==BU#V&n zIcHfpS096&q)F$wD|v%sWhEnmR3Z8uM$eZ<&OJX6(kkgBlSTa7N<=PbLDP4u85Y@$ z{xlZ6jreVTKi0W)EkT#sS`47(yK65kxP2CfOiYmK5W24G z&W$ZC;$6PJu*6aH^!Vlb*+Q1*8JFoLJIbmeTj)+_W?VIG-oG|0R`L0^2?l6xR5E}jo=~iFt*4vX-Z95Qi3+b&V0}=Ko z45!HTb|03%&#SpV`Va((!Af4YE-Oz8B!o2Z_jY^sh#w@l;*9@M^>#L^lG%IaS|RKS z-H}z7i2X$xZM?4R1|pgpFUIYe8r5rq`_Vt*h9BZe8)eT|e`eEp9q0>J!y^n~8KtBk zc|Z$l@IAwElt5&4&1Yjy`pWuOeMEe;xhc+OHFR@MBz6?Vn0eQ;ee~RpvcpbbL8+wfx#z+d3`5UGv4wUVTh+4p zcJ8|SyDk2X9S{2kSesC?`SJb`h{asl>-)A?0Brs_yl&`%KelMabkM}DhWU5M?>*1<3EzAW$Fr<6{nXTARNs52av!}A z`<>;Nzt-1<1QR~FkJ_jPgSMGqs}q*M1tg8SDi z`phw$%y63KjeGC*#Tpi4+T|C*4IWsaZ2qmSwrX};G*Z9@0m~6Vex9X4Gy9nsv-p5Y z2_3`))3C#{m-eExkf*0-O!_GjrcpYenPm2eb$xwZB%8-%EHU2-Se^JN<+wiqx8`;w z4EQa?i58@R+6W)Ja0h!7f|NJSgXaVL1CM5X67^?&B2kQu5w7p8igIyEwHmno2~3!} zDW$F|E$7|JS4zQU5PL?|D8`A@cF*3t=FL+EcW3Tve~^mcWHD(C+Ll5tmP-ZrUA#~g z!3N}lU^q{SdJFuS?4SesY~BYYiWH#`2%E%{<$&t^Z z2CHK{eU6>PHiYAT&cwRw`cHAQ1HZ6paJn(`Xqs8JMYueBAd-MKoKLQXvmtuV;}!|O z%gK$CvA3lXeK!(H7>3M6=NiyeatDVcp~wE65}JD?-*FiNy(>>2_xFj`hTH=!X!dS4 z9U^K~x*M9u$5V@S`E>KKs;X-*vSn*w{^ohT1uxx>=oVrgq$M#4M>*ScmE=!`aDYdX zvU4>qFm?~)JKhO;MVE<44xoke@SOI^e)HG2Fp2lIEY0PfAo+wh8&^}V1ewxey|}!^ zD!Bzvs8evPv@v#D_s9$enj+zE7K99$yI=V5OS4@9Ha@Kf>GiXd?c!M3fuF?ll~Uc! z$FN_tSmznEuU;mrb<$thAj(;<3c(z=`xoQ|r(u}LlX`8nNjWn;a&@3*h?GQBuOVql zCzf&XXm>7fAx+@*(XsR@(1L2r+!__tSK;pIe}r2c7&20dwFM?6upD#u$l=iNl&eV)P}&3tCWs$)5Je zBOV{il+1q}$gH4HPjiQa!>h!WU3|dAPY!=am=;1AE9Y`{Okq6hmy5kP#%6ur?`3TE zX{nFjTYSSB9inhzgoOjB;9ZcCr!BTzJ|cGyP?uznU1OG9R@wO^{LpF^1ry*t^Wmgq zC&Eo5N3)K9;}gHUyOG@$_yB2Zi_fMZ+V9QCE&d1+++!h2k2YF?5imn0I4mF0V|=;j z`6I0=Xm5;K*6(oX*!bhk(fm^arS3_x*X(!IIllg^M z=e61;9rTQwF6*g<;lhUhr$My+-*^f;P4#+H7pw8vBra6?Xyf_MAMEWRATywtS;VI4L4{WgQi214Jn>4onO&KM(QA}#C7iMntENHPX)FDo> z-gcdv|E^4~?vq~F_PpJjFYlWZ38evG{Ls^H3WIuhoZ(%4&6y6SEDK3b5~e~eXX2Xq zYz!@w*=6<`HKbqsGE+#~E9KqI^0 z?jSFp+w-=}C1pu1ZaJ`8t0La^`H@)3LkG9H_v+w01OH?yXP0PWv8o4LqoTCO>Wewo zTNO|TU!+_r6h;Y&8s8(a*!zNDDtop+>*F`u37CHz-*sbjv-3npSyfd`HT&O2H%7QP zH0b8B580>pCzei-BF&gOlOh%R77;O(bZip1)A=6gbMqejdcxI^s+p4iBa8AZ<17s+ z12$mf$mvzQMvOwK)QkRWpM0rTvhfX>?BmFRaLmO_1wShNUo7EibaM}=!T55ZUKW%8 z$Es!@8RiyQ{Oe@L#vs1yTHhzj{_EO(gRfex9hS&^d=`p>nW(sX}W;`SM4q7wyxtS&Kxmu&wT}v5?OHVIk#FZkHTDKH#FlSg` zIdJ%gx!CYgCa^^o75HnfL7MlWi!5DJ;YioWol7`%W|D0542hLmtu~*1u!B;$wvghx zsU4UIkBqzipL7;?(l~ubB*<%@rBbIOS?~29)|$(zjrB(7@)`#oqH@@DxEFuSN&A}p z0Ai;1{j#>(cCdIN_NjzCMK1*7Qh?1OJt~lfZ@wy)(al#xALw@!+X=nW#NVQn1KK>z$vM|HNm zfEMXeeOr_M(}+stM!i(l6XpW3^2BhD*PjvJ>da?Ix^IgZ96q7ub=QS=Oemob=a`>b zIIvl%?fv@gmx04Kkhu4(@3V%gJ|7XPvJV9O`%Raw}u~1 z_qq9quyn#ggM0_>t-nA@#-0;PxRMHINlA$yS$*Nl9Ics6C(w%n(ORO%53<2+tZ5G} zM`7L~7h;dC(H5P~jnfvDmX`j9w+{X@>J86}y-&kt)oQk;mW1SSb$dQ4asO-@-CpjZ zrQ3g7iF@;o)0#O}I$RkJvOVcv?#~9C5h8T0FTl&oqdjk{Jy+YvzSsh=`HeIUR(Sl4 zxk+{sLMV*8#&U-BY!N=I9p3`ZPs=NWds7cnB$e>~PSxT_aK%44QzxsbHRSUTUSSgO z;p1yxpGPcpdQ*mpl4xSsZ7w_O*mhotnNFsw{Jv@@4+L{tF4_6Mth%4p4Xbx~urYMq zDoUa)4NA%JKaq{6Fc8MI^)dao;FlS^g$I2)!pt?{OSJoqSzNL zs1m*V>^_<4q%D&32FY%{K2~$lIi9&%6A5;>JFciTzFdb64m1fP&{7t3w1E;sQa~I2IjYZ@004b4jmVK z=0iY!o*GLB6RAw39yx)&t~V`h{YDmSbeW5IciGE=Gbgkj*WvVfGbb>+i9;>h{E%ph z@xOsd)gnd8cxp-i(0{0OMiT3mK_?8l3uomIscUF_H<>!zl(0!7@Ve|9aq*?{@Zir8 z(0>K_pO-X>m60qc;Xxl5{b9O*sqN>xn^*GpkDB(Ne;L@b3B;>N0c&r9q31D30SZ}t})x{+zCll|zG~~QRvRQ$* z+zFn%eB_@rc5f&e)<|P`g!_X;_6tPSj(5Zpdqz?GsWhb0lA6DXwCeV9T z|7mSLtL8SYFUwB+mod58A^hOP$xc!v$1-!v9-hkLd72L87qzpq8y#yP9l72cPvdqz zhG?P0xqTbxiKYT>W19J^{>%}y3b?E}zFFO7`?7kn2nI9TZFKVQ)l*GvTxLIXhMHx& z7sonresw+kP>_m~AX{p&BV5#WoXiEaFymK3)%k~NeHO+thFdOgU^uROS$Gb|9*3yi zStW9ZITIB%t*ThkBC|Q{vcEJYGFyra5_-PYkJHcbxSpRnb_HL&JV*1KPk&N0>}%cV z9dp5tLvexd>IT>VL942}l_sl#lVB9@YF8aKsOJ@{ngva(EYJb6)|dO`oY!5-m$g-& z(}s-n^xJGc&*#Kd{)g4gcb8GCm+|WIaw*?!1ik6c!1KMH|NZqq;N&w@BGQPw$g;7q z&2&|+!SBJ}9{4_EWqCdPNLS&oZ~#Z8JNlGU>OEV%oeZ;wE>d}uVb3`Ns7gsjjpN4| zdNSp_kCjBY^$HWc9y&Jn_A~7ECs;tnGxn#stj-1l1YPyo`d~P!6w3;J>5wMuuuZ=&m znpD$iG30Q+sFQF%kDcJb01rpZlcH1m3S=9LImOT#k^&Bud9x(JoBEop-<3 zeztR=3y#!mE84qH*?NT0Oz})qE_c|cRT_s56?aS0+W!VbHJ1MwQBUg;AlD+jyWR%Q5*{6X1z`y;6%VB zxVZS(9Z)##sKve1*g)HPez^}d41~y?PRMeam0a_AIr~iJi<42AWYvjMvH9bkzDMuG zf)3ga^CKSbTYC8Nae44$)RTrC@O-W!^lF`sX8!;Kt08ekeZZ;qMBjBij*31lpDoaZ zsH5ZecHkFJixFV>8{bnNhzAh;9a6B*;-;9RE9^goXWI9}J$4iR7~z~Bvh-~G7rdVH zc52qPm#hU(3^xpbu;xlsWaZ$v>4ieRoO10>@Z#Sz+aBLeY)bt4aYgtMmtos(F@j_) zWrUr^x+KJ}dnG!13fCJ4Yos`xo!$7bwD_8gO*qGwq|SK4S2}5d{Q+ zMEc-LjWzFwbp;SI%;Mu&msA-%jAu+>@L3g%C)i&xR_m^&yF0t%ygdTft~2iQ%OdWB z{wpMJcTq2dd##BD7Sa@yJ<0d5Ho(#IG-+OVrsu=6mDyyD=6r|w_@wU_ec_IDyU(># zXj;s!lIFoD%|+k{1d!l2R#!(~_

+-qrZ-q31jTfBg6ncebf&`QOCO{Q0TBkCgsT~@PEMCgMln~11u_4je_h`<=atpfQPTzq>ayzU z;-;pg?<}UZUQfTLcyFZlr?PO5Mqqfhn?yYA>=^XkuTz%W94WI85Mh~Wk9+?OM#Pv$ z5P66R1+7A>{64vBB{` z_CJ}%%o5a+WN7n?i!2tiWS@v+FrNIEdfRVu%1nFV(P!*>X@i>gxlOyRh!);)aMpUP z8Yd=wN%s821AkKhIVG!@YQezZXVwehWc!B+W<6ipg38N-)F6UDG^Y25ygp?|VAAIO zBiK$c{BJ0w2tK>5q}J^`lLT@9=C%a0VI%^i`Vzs&{dAEBiPm;+ zE~W<+h)14iDUQDYJ1~vl#~0e0?KR)h2mYlSq%T5C16UjmMKaU#aksB=(nIJFQhB~t z!$u6gWY|bgNBM4)#GI#acGQuckcmv)4$_+bV^ll(3KW9hcW^#8VlY+zAG;p{Et0^+ V7FAlj&)?|)l0RidtA+Ig{s#aVm2v<8 literal 0 HcmV?d00001 diff --git a/public/android-icon-36x36.png b/public/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..de42461b67b810c4b20c92dc690cfa5b7962a57a GIT binary patch literal 2533 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 Gjei5}7~-@5 literal 0 HcmV?d00001 diff --git a/public/android-icon-72x72.png b/public/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/public/android-icon-96x96.png b/public/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f2732bf543f3495cf358ee83f9a4ad5c4d18f98d GIT binary patch literal 6559 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 D3F$gh literal 0 HcmV?d00001 diff --git a/public/apple-icon-120x120.png b/public/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..86811dc1b5a8942a2f1e423193b6ab2d204619cc GIT binary patch literal 8157 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/public/apple-icon-152x152.png b/public/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ff41715245508dd72d1c66b5a6bc91a77bc86603 GIT binary patch literal 11508 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 UUB7&thSY!@5Vg0JG8Tyc1$BJ7YXATM literal 0 HcmV?d00001 diff --git a/public/apple-icon-180x180.png b/public/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa31604462c87b078efdde730c38c66f26cf9f8 GIT binary patch literal 14509 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 Q8zuoZAga=}AhXc_1>QfvmH+?% literal 0 HcmV?d00001 diff --git a/public/apple-icon-57x57.png b/public/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..1713575f8212e64d3f9c37b47e7670afd4f6ed89 GIT binary patch literal 3888 zcmZ{n2{csw8^}Fd;aJA&ppq5?)^QV=leXr-~F9)@4aq&-a_!uu|og= z2%;@f_H3`WZ@dTD=VZy4IJV>RF|jrQfSNS^9Sk@79)z{Dw+4W42mnOI0>Dr9P}FAt z2!;W`;spTE&jA35fLqOWr`Umm-sdb(z~25*%)FDy9^nhHbPECievy6S7n$7C4XaAC#NPN?c{f-l0(@j>Pv%`IpF!F5zug=BF;rzv|WMtgeBl3f2cE%W?_C zbEVVCncvLqil30qpfkVLn|jtwI60&8)e>)14c~oRf5>Ub(QkY$UC?|fp0mXB*q~pA z^@Y({F%h|kFODa3r1_E4y4I(<7G$vkhqczn3h&ux+vqokUjAk{zw>J2-D<@AlTlL@ z#%4y+&Yn!0U-u-v0Zcg)slq~X+S|Ask*(j_*qv{hLM9I@m?rWiiE@_k#ah}aai49A zeh&1Wr4Am3g4E z=gS-Aw|59pq-umx zQ)%X&-8jcUOG$%KE`i3x^;j((9nBuCrqX)4M{5GPBO-?H<_i}r=}R!!RrgTtS+$u* zu`&79-H9JSKUf%#&`&v>53@eZRmQj;t#grDp)bF&KYt&1H4e4&@y$7E`ia|c%F{s? z+m_EW4$mp3C@_1n!h=;WAM{U*h~aAXxET~84(7<7b~Enwffe+>lvt*7>hq|dUpvfT zcFA+|N6ToZPY~3({pt-E7DW5*+hJjSJ*${;XlmI*>9{3G(wyoEMu2FeKQ-7f5hulP zR2J>w;O7dQWD&JbV~SGrAROw?(ae!Ia{(wR`Tx z^L82hG@;Yh%ep@Dp{Q2Ai7`?GUvVOXidm5{=MFS9ALkHIHOpVJ&o61cB`PvA6g0XS z;}V%7ILFCZaqh;ADVNNFY^7y6dS{P~6AkQ|gRP~2m^OwBjRGnw_~O3g+umLZ-S>+V zN@8DJTgrIoX>Ojh)Ocd)^L#t&>V3fLrf;jsQ~1@Bfub&&G(RbmY_Ux@uL2`~H;K_C z;k9=4)Q~kFF>1X<*;Hj_;u+92d19zmkfM}HI1L@-Bx9Z@W}~vn>XC`RUyu7#6ja{C<1wCMWTUzU4-7mX2jqd=yWSD9Oq>z{y1IKvKUX z)l0z=uaGlwnQKh|qWeyIpsp#oyuHkhuy|KHBIIO8lfVwXlMXI=wi|3#?%wCkmmqZh z2Tn}09Q|!=fmD_cp1~bV8n}TVoKsz0$!`dkHu>JP(^yt?^@u@bap+Hh%cOcmPF;p* z%y=wWncu+VC}_z==?m4@p7mA*hWpKhiZ&TlczH_%r$8Qb6+iE$#O0CX zet9t0^NQ4n!rR-0;#5gpt)3t~MN1W~jZv{#9R*dh2I$JO1uypW{r?zBf)qcalneHg zXHHo)p3J4zS5?T}v>dZye&Fb;K1{8l=>9RsE=DopGnPjxMj@Anz8lb}U12l~B^-ZXm|1*2U^(aC}uOx2j4~c_u2i z6tqCcTXRl1WZ9T>XAa^R!Y39#&wuAKxK@$)pv_+OL0WcZlofw%t#aE`wDF>_O&ja# zk%_YLq{u2g=;*Cs`XLyH{N(<^GIhAorJ|bTrpp)Ce;WZAh#WSo&v(w`xKLW~wQf32 zdmul~$a+zD#@NEBzzybR@ocuytXcOgr{a!m&Pn44(zSb~#xI?m4{f#>yqYWu9gzI~ z@nL_7_LJk>7o%RHYYz;?C&#v^RdjQwPaH9*DrIG!yd18Gcze66d>~}}&Cxr^lnPal zTrtYZO3%*{e4)Q|{NvB$H`5}qmNMw4NA;$WedlCv&24Inmqbpoew>6K?hq++JAIw5 zNrIGFak?sS&7vnnw6@w63j;2G@+tarBt6NpQucbxCms0nEn=jsy=pAP%~tfn8NaA4 zj9}4#jfu&#iz&)x+Q;xjB5%<^LRMz4jYbzyx{fX*tu&HgIF@!}hL1I)ky;#Pov7WR zO+6U&!!I8$_JJ&bh&$3T-=i9nn!{eGn))$8_N4@cOIq0 zcgF3!Ga{EL*lUlx>d90Ze~3A7$EKjPr6Sh=xtnvizg;@<&7Z4F9uwQL?XQZ=o1pKX z%MqrZByQOl_Pa<-o1t*@DhDmP;idJviHV1}m1Av9hr~>kjTdH3b$oWyoOY)p%NG%Q zrd#tPD#lXHRnA7M(Lc8bs_qu}R9C$7DfNB#lcF>U=zOWdFP3af4$I3Huy@L@nvCWW zK#}H&eql=|w>Fm8F^4Ad-ss+W(DU@^X$0kc-}ob+>nORtuo*t+#j}B>^Pjgb91rs_QO)}iCdwo45^@JX0+eDY_yt~oGbf5RW z^H$3+|D9vZ<)`OMzsOxD^1T008@K@}Euei17qo%3bs!rq2&GQP90E%%T=y1SE6atf zj-0k0AC=+uP<5_qZw!bpqbz+`%heJP6im;|)S7kmDet*@l|$RQ>|S$T90MG=_WD%h z+AGq;F`L82Lfzi0V{+-dUe%$4HLr-XP4HE8P)mbmTI<^4j@j79 z3tKxi6n@F3l8Tv~C$C!~n>Us*Gpkq-m*Vfcp7GFvvM(=~X!B99$E5MN{Pav;>n^|a zrM=A0=`m`J+cM6VBXooeSAb9?GVO;!E^hbeO*01AD-w75N@HWJhr@?PUyo0otK2!e zpBq-hr#X!8-cHx6EJ6{HpWIdAv?GQu&-18FY;uY{<}a?kDNk9Nnfx-k`Zz)MQOOISTe~@x8m-;i8hcXU)}lLw;fdMV;vq{D9kuvgNf{YJSE}^d59`9XoO%d9 zKYveeZ&_JcObm~ZNLtsQ+q(inLPLXt&$HFtl~q(`H%1MgNvE4emsS4|m-xB0n#F2Q zZzuD_wTVKnh-fxieb2ud9Aw(E{=3q}AJvGX0tYK7WL$rqj%2(^M1-M}lT%%Ny|MKM(T6{6b#5VgYkAWym8cSlWCbImqHo{)3nSLu)|V!`rkaBE0zYt3T6YnEn3z~B zmAbhsU(mAI*@Yr(jkQGbvC=hKgbUH_L2IAw9(#8jQe>P+as?C_j_0z~?062Jusy3H zmSX;Pka13|Smx4Kc$TF?=i^LEh2h1wm14!tRUQ=w4<2-sOSjcvu4TOJ@0T7$6vqnR ztExKB-2V3DtO^6MI|uHF*(={k`{lS~IGoPB##3BVlm5WHq1JB_@teE*^$u??PL901 zJl6()>8z|QAm?_^J*P@#HMR1lrmgHa)3ZI_S-mxCNoGmnC13R8F%JXh%-Q%@4VFg& z>H$i(6z1h3lF7KGiO0huBb+N2hREv;W-5g&#(JvzhJw~a+!Ri5tUhHu4hI6YK$vM8eaDG-$OpTiHej5?Md)3G*2(9)>X5= z{S|3ut~4BmhS$eZ@oWcZ!ZdZ%VVdf2q$3=z4@2l{B2L0!`Y@Pc^85YYlK&?7QE((e z*#A#(d_!nvC+O~1AYrlkSV}+`mE=RD0cZZc0x4rvKyW=hU63U{l#Hj*)NL`?KQL4r z=nTa#0OKFFdOz~O_iR8jzqMDYiL>@7?|XtOg2xE=zbt_g*^JeaUx!;rsW zKa77c0fVIlQ}I-Q4T6X?T7bTWMrdd#l!V7ZvBVQs04sI|@;@0A9G?6a`X5mc3QxcU zlWCy+YFG-H5=;dJ1z@mvkUD6;1C)bh1zQ5NFA+o`&_Xd(Jg{FVh+T=~hw;I)jfDLJ zN}>9+3`iHSS;>9Ykr?dft*?)wV1xbe{xp4kTQ(X5!0+rm(fA(*y|1FLZ;AhF@!)!z z#-4#rY)0ZAI{#)|NH`i1U?W5K!Mtol>K}+T$q!Ep3%~<^b)^yD?_*T!eExrQtR2}D z07q)+A@yKdx(LI>MJ5{&`iG7KDI5>LOigc;p8m=XIsYT%WRC_2Br={obqzm%8kypw zLBNENuoV9wjsI>e4LBZw)kESjx;hvfLQ_*0L%@4$|@Bjb+ literal 0 HcmV?d00001 diff --git a/public/apple-icon-60x60.png b/public/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..17d0fbf34b56b443552be4fbf33cdd1f51f8458d GIT binary patch literal 4033 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 F{{q&=K8pYV literal 0 HcmV?d00001 diff --git a/public/apple-icon-72x72.png b/public/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/public/apple-icon-76x76.png b/public/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..7248415fc0a921037e0b1dc5c71b545ce2f2487d GIT binary patch literal 5040 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­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 WV|rYPab^6sTPZ84B+(#d681mQbV-8% diff --git a/public/apple-touch-icon-60x60.png b/public/apple-touch-icon-60x60.png deleted file mode 100644 index 0c8549a70340d8397d6b700dfc0803d075fd7c33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3319 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 Dfs>|# diff --git a/public/apple-touch-icon-76x76.png b/public/apple-touch-icon-76x76.png deleted file mode 100644 index e4577cc9dca75471a78dac132150dc34df4a54af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4103 zcmWlcXE+rM6vvN!&Fme@y2j18*1fjuy)$!d*IwZo*?UIzD9Q+-Y*L6a%1auG-XfAD zqip5%e)ymB{J)&%{GM~Z{L@X1b!e$LsQ`dhPgm3YtQ-C>1j$+5(yQh;Yowm)M(O|$ za;Z<8$<91ch`Ejiv`lfYof*nNUE2_VOZ@+fD56$141feo4K1|{@j;-F4st1g%>|@4 zDCL8AFuhs^i1+~}3&er|9Y-eO!K)OYXNB@M)bL^b?q)Uv3R zQ#`!GiIAS>Rl-@(cs8wc0sUkSSv(si6zx#PpqWF9as%~bYB6^zF*hOocrJr{2KChQ zI%#y+>x{ZZG-}yo62UBJJdJuL4LX=y)RR>9I=#3PnREm~Js%Os8{REvR_0<`afQ3ptb!=*5gi~{3skctAG z25?>g!v}EnE!d2MX&+b(gZna=^@H6@uy_oC2S7>%zB_Q`Ihgc-+aegWf!7+4(*xlE z3?G6)D})}xIUxu?1Xg)49{{Tn@LUD^X}Dktxc5Lt3zTdi;sdA#sSI;ME$|y2?*K)zcq-s0saSY zX#$TPhy_5v9$>Q|Am#yXL!gidzH{LI4njVIVkQ{gftYR3se+4_!SWtpW5M$U;AQ|F3cjm=2?nt% z;4ligqj;$Kut|ed`&#jnQDG3(F#z; z?lQ!)z33tN>mGRp?UI6QsyTf>dEPx!tDJCqEw19$@{jDrN3+Kt_J1f<9(`B-c{Yjq zi=L*srOnfd61-{oJC>A<4*Ys(S)D&;ccoih>69B@dbV^bv`%b{k1J0yKW`90silj1 zO+_hyd8VPO@k8TB6TO@ZlVZHH1bf!d9DTq@*v3*!dV8z!zF*|jz<$BtMr#$XN79qc znW(9#pTTooC}yWWu`ctc839jDCYt8Manb3|zT}esktMht?``DXnA<*Ry?VG(kbAo- zdb_mJ(NSaj(p=zji`l+>eeLwEW-FN&3_z|CAmRXU$7BrZH^ z)#O%;H+r4opHsUc0p^T5@uQ|m7j8_lP$fHD5>^_lWThnCo{767!y_Rit8_9r#ruTb zMR`9f>%me#2bFrp4_{hMIr57)QWZ3qh*9~|HN#I2`yX?>P8J^v${DLc^5LZ~Fyh@j zyk$tJGWeGoM?WcQrbRClD= zOT-ipR(%vn7N9gxvn8#y@^r7QulLN;HTg#aSC_JwMyuECi^x0}mrrYREVnfc#|R*h z%g915c6|g8OPHYtN2EB7m~s8FNvQn=iMw|X#x%~cFq7TQW^RAqJj;=dt;CR}k)|#o z{fy_5)1~oI*HdyHBMTU;<=YsM29xgV z&R1SIH@OUu%aq#D)tayEMv{=9Sl-Lh9&x|Ngzlb}G`m@}7ZW#-;mBZQ8%*Zz$4901 zW<}1PCF%a7zK^#lV&V)aKEx>%2~p()r##+6*?gQY(Cwx&Wt&5Y=Os5}u2`{7n$kU+ z&a0iUrd7B@hyP%hOzQQ~kn;iGNoPHVoq=4%ylATNRrh?OIL4i>xQS?ZCGaM#Exo5~ z9TNT8RG!jEMo+sjrA?SVWw;NYUy9>@`1=i?=<`Kyc52cJ`gk?xMCu?mbq6Ys#`uTn zq%$ttepAGaS(J(7vjW6Em+Ph3jj2QFt~d{3RGqxL=M4;2xhjc9tgO&>UqOKC)ulJN zlLtyX%LIh8;%z6ggjt#K-?Z&ktx=yh_RsUu$xO{}{7tx;M*L(TlqWFf0(G^!8(zxn z#y4Fbo6`f8{MG7K`Z;bEa=khOe+R7mRVQxp8SlO0atez19lj4A%A)@45j?B;De!%? zNP9U2&V6MI8=IZst8rRV>}~{3(Yl$8XFf*biM z2HrFq>gX^rUSCb5FyfC!+9AlTMH%^76ZmL8iRLZ*j7D_#3(L3Oe;*K@gGuov&-Zfa z60q)5tE%XEX^@RI#Ldi<)H;M5M9jTy*u1tXPf)V3;4!gy++QykK;OZF6<>*LqPvS< z-U-^-7%zwpj2qG&XTF#Fa9DIgscN*7F|Bh{WN?Mi?sDnMMg7Fa?KQE-pZw$Fiyyp8 z$a7;ddgq1`DXm0_d>1QIwtx5yPi)s7tMZxiq4OKuc<%HntIM=8`8sP{+Z`1uyPnuD zvxNpM%TMjwWA@B88}7HZwtn*+XRdy4W~azrR#iBy{v`V18Us6%wbH$CX6(k^zWw&B zmy^2kiNdzOBW?A{en$rbekF3u;y{SSI>@w-l2sz3AgQ3+NPZH9p*4;Qm{(>#+L}WW zP8Qzu^_A7M`&31XqUtAbvQ3}dtk!P(D3cb{-_YKWw6^C?&ffd_XrbHNUh!|tE*;^~ zUgfU-U6fp}J^7zsu5@FwW39M0`~}gf5N)&HNTCe$zi*eRiU~^OfM9Bl?+Ki^t^V z;^WUGbK|?=J|e!47`*Ftq|wD=r3v=*@#*jBZq_Qy4n5v@al0Sy*VS6LvplZ4*mtmA zxH7SuJGVaT+J@~1pbZT_)Dz z(XgBIM?y;lW8O=+4lho>KJ$7-3zI78Y#Ed4j=o*qn&-D1TAGh*s^&|r9jsRNd(V3$ zm5%3NrNr!9thF;b9p&|oWDes!spj{FDG;acB0rMZOLc1zP+egjSuSa_f&ZHh;xYRMHC-k@({1G8p8~1S^WKle;gWF_;`No znflpW=}6=g-HgfcVXm}4;%$xMHq4qtTMy~A_gGh}jB+Xa)4!9+{=85mxKLf!+h{`C zO(PXqO10lEL!5Zb@gPn=aWWqDJdRQOS1{4Lq*|4KA0-5+IyejcJ}znd`_xfpGA&It zniiL<=gxQEUNgs8l9}=T#87fKeH?#}@F|Z!nig#naoKo-pTZ_Jt5DVDT=Mp!v6zrB z^HqAunM_u}A4@D>J$ks8TP}Vjip0)-Q|ewRNr_H2oU2lP;w;JG=_M!7IKov(Wj%l& z^_TGSw@=>BG`q1DFqM-17S(2V)pTxCL_A-YpJ%XElzPJBP1Df*r9$lHZ85|6ahoQl`Lp`y~*X5-*SU^KIQyNoKl|9 z`cjL8SAsNI)aO2TL`$`+qfnQ?N|AS>zI;1olKrhKpRYtB17{J6PUn1&il{~PzoSiZ zJr~Xu>T&pT`fpiR5-x=bZX4;_+Jn#LIw|XAue^q>u`v;bGWy(ApXVw10bZ?LTgc|! zm>%wO=kFNzCEPnX!Ev0EN%o@FMWg5mwzq^(g^gDuL6U8!tTb53+a0t14L$V<41y#r z8~Ggmx#z#m_EHus^yd!O&`EMOkGVO;N-5VpD^yTg3vD!5{3}>Xkpz>f=~VfcJYK)gUMqZ5GnlhjF9J(M!Prol`?v35~FTGC5_6tm^^d-*T>$0G{v+CN=&h=rpoM*~W& z8Z)oL>4y%sVtDMTHYd?~U+;9*|D$U?SW+*0k~-V!QYIIeciYz0ZQ$kT@f8OZ8%9^Z z2%QxH9Ugy5T#gsdOro}vicK$@T|0+s%c|{4n(Mi$=N0cLc+kK9PRllvHalw04PJBa zH4Rx_B)v@N7ar%<-b(vW_79nm%q8KT)@}ZHX_M*nRbH#fF2rQTL9-d=bINJrKyY^69OF5cC-wP>lYnQo`2_LjK0!I88%n)P;_!rBFe3iB=dEBg60 zcEcH86gH;YZYnwo$))lnV&%o9YJK#?ytfmqe@2r|rVsVrVw73Jrz34M?{``h&bx=4 zXXhr+lm!*uMFu(ItT?^H#AQE)XYl8$D{4rKw6N$HKef@!^>#{C7Kcw^dY9R>mqin&Yfy$Kn8@no56 zZ|3DU%zlx^S#Y=#X=xK`?i|h+7#!e%_jTtBB?P+j;R8cm0U|2C?9d>BtdYnGlgSr) zE9OALPkqUinu(vupn#c#iBB_5=BXPAf4e2$&>aog Q!v9mQo|ds@iv}*?KfetB+5i9m diff --git a/public/apple-touch-icon.png b/public/apple-touch-icon.png deleted file mode 100644 index 9d8e30157fbb9bfa2747581c5a21336ce36eb171..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10856 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­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 WV|rYPab^6sTPZ84B+(#d681mQbV-8% diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png index 5efca53c55757e3b8b22744002d247641f2d4104..8f13f5440942dfd945d560f647a618f0a2c042bc 100644 GIT binary patch literal 1466 zcmZ{i3s4hB7{?bVYKacWw34CtD~)hRzW}!sbUqYARvLDNyw`kr&{VvZ|1x2_S@h8|Lxvx zaq7zCNnvk>0RSeYh=ge{M+9O*2z<|Bgr~#wieia)2>{2p(>z!x93!|WO$YSFonwZ|gVC!-1)rj?vubm(fA%~5)1aCt}H-a*IF z-|mV_eqFQovgt&J`IoMe#_n4-$LWEm>7D&~eNTpbzUDiF@dXWwE$46c*t?x>qU$l% zYrp394%l4_%x5CC-yghm-{tddeK5SL$6n*|7>~4ut51GZ-RAN7j@ulod+fyyx6|*h zYkEL8)Gyd^;l9n;=5S-ZBcC|jkNy6;{ZHbyoSnY;Onpb+<)@<`_KxH`+=G69?%`It zsh+59?;n9`pV#Xhc6&c8)pHEiaQ-sdY);sWxiL!P%*?gfo3~tQY_!>IN~Q8jQ?upZcMG%d z<>s>amvpiV{ibA7BaPX>5wAugwEiw>6 zt+zLLU~xQ^B2F6L8$6jdZpNQhiyfBEqzIQt=xw+ZnMmJVzIxTo4ne|CKbp=4Hxzh+ z&57q`Osveg7ZDS=Gp&_dr=K_+W?3c;B3{pkkEp3Va5Qwv)%KR_AuXfhw!Rm!@WQOa za-{Rtxz?~)sT$86UpWvxb^qDmCT6V$>AZcujTS3?Fwouia9RZYwW*O|Q*7b1?M0=Q zFN(L7d`{o9qr7b2&ON)n`f_*Z0Mt;A4Ct0);p5h$)FU;t@MK}UM0wN;v zR0KsaQZYOi)60;hTD1<-m|R&VKJ=LW+(Skfa6PG`NUa7K(vlOAl%%CRj)2EwaG9K} zn$Bbh&w384F^y4<;gnHN=m7)~B}M5_7Ar3=k4X|Z6IV{%2v$G^|Aj&;BUI1O7p91i zkYh#_g#^0cT9wwQM+`a)ClCe_Sb;EIbQD@30SkjxPUT^G0t6ZvU?)o#~F}` z8sqa1lSRrXC4flVH`6CTvPbf_rMPDKvoKC6Q$%rO5Uc|=2d*h_OND0v7#G023hqrDYz3`L&P5qt-{MhI^qupS&$C4?Q2>Jc@FL<2(ZL;M)0z9DNF z(iaHrfuI?O9wK@avEw+q0t-hJtRQw0NuQxuf&BN==zhBC8#ARi^f0(zr;R9F_XZmUES^q)N$xw)(Bs#ngd%Ff+= z^VVhmOfs& zUmhVXnpx0&nwyy1voOZck7&Y|C;uAM?Y69!hK0o~=E|*Wg0KFwtI6tZWUB;?x4~Vw z?s#BEWha$u2ed{XPLarF(+}@oaSx{t+FKKf!M%-|>qf;}Nq6hKg|;wu(4o}kL3vjL zQ&8RUK4yYeJFS)XRq)$?67x?wgZrd8Bvr1a&8t6E*3MuD{vj>W9R}7cd#z2&j}%Cv zl;RV)WJP9rk}Nfmtjt#=l4S~IJP@8&XIR?2AtTbo<#pK5F!4nUa|($XPqL-hiYn~P xZOME!?RkPZ<$;7eG&S~0Kdg7sTMem$nu4jAx3^I)@%C4lIzR|Q`8r-)@jq(S3zGl< diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png index 2a190d7bbbe09479bced4b4fa1fea857fe8ea7d8..7f21663863244a74555b3fc387e4a30977a5b549 100644 GIT binary patch literal 2310 zcmZ{l2{=@HAIFa+Yr1k&h!6$zTe;P{LgvLNp^9zm61}A z0suh9-p+=CWRxHz#E>&LGI9w?qBOD-831b1q&KMB1Vzw};sgMZngGC$2Y@wXiT@e^ zcsKxf6953DYyjBHzTDtyiWI~G9c^uZEx}RHT#}BgNV4sGxBwt6CkUb6M`JdSMRC~P z>5%xG@J?y50~47kivX~#*4~Ef?)~6x7K6EKV0U}$GTvkz$GG{nPA1r|{e#HJ3VHkO zlVsA?N3$o=d z)FWAO#qC-PZH#)x`$(1L&v7a*tJ^wDqC(R2FXfnUUv0d)%-!PJdNVNjSD*9{Rh z`>4PXw@1>{q(pSkn7D|7nrhKlrG)2e`ALbrq!7?U09>oIsGqj z?*Z@DPkkCj4pS$R=h42E?7Dk;CfC*dF*}9L|V&4ak}cH=-Hxt^;P(Q+b%v(wM@DZ0U0qcB~nq#dorg! zHxLvJqJ12U_Fb81u1zki?S0*sLC0q$+)ns$K$!gpPt`NNDLZG?G^cB^=fYHH^?fy; znPz<@q3+?i7_`(x1Dl_ltDW8AYZRkuuibd(##2L#XqSJp<@Fws^sLd}(0tFcJeirK z9Fn$>?bekbG|9f^RR>)uyG|eHp#xYRE6$*_#MM1dl|Kqa(1Mym0ESP&>oUuG<-#K_ z`-{yeDLGnkb?k+xixpa7yTfDhM31489>rn+4gapJO9ypFbwuNeB*l7kMt>=}&S^@2 ziaQ>~koB#)=2(@~-=F2Gz^y zzvv~6igH~$lah!(D#@nGP6d;Tig4q~SpJuetS)-k;O*r8zH)nYxu#nzmFpa1mEWqs zt#w;@lO^JGtqy}Z(S38NcOSZu!1ueqw!Z$hW9aAoCwv&AYdgw2%b1&BOHJLe*Z`r% zs#*W_rK_%uo29drMa8KjjeTK}yxzp2{+A!?o%heJmU+zV{#^4@zRt>qhFCkhFQud+OPa2IcF%udX|zDW6ZUBzU2G}g7D zEIq){L^Dg{&YGB&-|^|k+#Xql%_P?N-Q;&~qrF72Ws)=}AiT0{dax^WWT57vc8dtb zHDY)({{3nG(7H;in@_4iBD;&DJi2K*zSXbBUNBozj>)!YS~<{`%@9XxX{jowr8}1- zKMGvl9-SI^AM3_f*AF0I{OGri(? zOWu3)528a}9m%zl{X|b$N%8BB>lRz#8^;+aiw`_h`xWGit^ptNhJ&auL;^Vwk^lmZ zV1U69FnB|EJf4Ijk_g0uI2;Lw)A(gf@U!__5XuUo2S@yWf%~)I21H;a=s*WS63Ajl zaOkuU7_k0!g+hZ`D7>+;5y}n31Rw(;J)yV3_?5XAh7{$+}?fr6<#CX5nv16fQKkAvc}sUU>Hpac`xxY?B= z7AS!QmlX_$Q#lYIXv9T2(L<>;2njmK&}DIGO+8A2J(m}-?jgL;KoZG@1@c0nFqlMg zK~OG$FWG9u{)4d>xR6M8(AUkw8xt)3PI@5B-tT<=$9U0$;1B>oo>!-L literal 1512 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/public/favicon-back/android-icon-192x192.png b/public/favicon-back/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..2d53c6ea91e02180b82474bb4cf1c512190f7ed3 GIT binary patch literal 14197 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 V7FAlj&)?|)l0RidtA+Ig{s#aVm2v<8 literal 0 HcmV?d00001 diff --git a/public/favicon-back/android-icon-36x36.png b/public/favicon-back/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..de42461b67b810c4b20c92dc690cfa5b7962a57a GIT binary patch literal 2533 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 Gjei5}7~-@5 literal 0 HcmV?d00001 diff --git a/public/favicon-back/android-icon-72x72.png b/public/favicon-back/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/public/favicon-back/android-icon-96x96.png b/public/favicon-back/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f2732bf543f3495cf358ee83f9a4ad5c4d18f98d GIT binary patch literal 6559 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 D3F$gh literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-120x120.png b/public/favicon-back/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..86811dc1b5a8942a2f1e423193b6ab2d204619cc GIT binary patch literal 8157 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-152x152.png b/public/favicon-back/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ff41715245508dd72d1c66b5a6bc91a77bc86603 GIT binary patch literal 11508 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 UUB7&thSY!@5Vg0JG8Tyc1$BJ7YXATM literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-180x180.png b/public/favicon-back/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa31604462c87b078efdde730c38c66f26cf9f8 GIT binary patch literal 14509 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 Q8zuoZAga=}AhXc_1>QfvmH+?% literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-57x57.png b/public/favicon-back/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..1713575f8212e64d3f9c37b47e7670afd4f6ed89 GIT binary patch literal 3888 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 literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-60x60.png b/public/favicon-back/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..17d0fbf34b56b443552be4fbf33cdd1f51f8458d GIT binary patch literal 4033 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 F{{q&=K8pYV literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-72x72.png b/public/favicon-back/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/public/favicon-back/apple-icon-76x76.png b/public/favicon-back/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..7248415fc0a921037e0b1dc5c71b545ce2f2487d GIT binary patch literal 5040 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 literal 0 HcmV?d00001 diff --git a/public/favicon-back/favicon.ico b/public/favicon-back/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..467711c2328e4e5a1acf14f73cc865d9c40ef007 GIT binary patch literal 1150 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/public/favicon-back/ms-icon-150x150.png b/public/favicon-back/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..78c8cd00ccc9308179074a3d5c3b2c6101e833ca GIT binary patch literal 11255 zcmcI~byQnH)Muc$6?b=ccXudIw80@jfDjx4#T{CpxJ&UChXO^5x40E|iWYZg)9>sj zXV31Rd-CSZ8&~#{d8T*lMbZdhk5$UqVBH-z5>;HsKkPy_}XD z08p2J`Dld<|4(b9s;312_%QJv=;B>!`Dp@?q!Gv9uyiXJlnC&kCN0f~~a}c>aGCC!W|H zOeJ^w%bkRFFyrr&iYgW=zWAh(j2fAZqjcg88)EpAwkeLi92{mJKRM_0N+V&gA@%G^ zlmaArIr+}f?dcQfCI*ZoX`=ZEG}xl_Yh0k9UWqDIvmHV6VB9f(1bMWw*RC@DyJ-6z zUY!IjBGV6tD<(J0{%fE(T-t_RbUT`S2Cq358{`VpHr#%bd|F`Q1Vfzka?74Z1Pu%s%1 zN{OHvlNe9fZp3CrkG_$|k~l?F`ZJKF1VASjnu3EF?m6`7*uU7-kMPD%-a|Ufb=80F zdTjEisY2^qI{!n*TU7pht@Y9!_p}rhG>7N%qM;}M29EAHmit_HkD9MyCnYIke3?Lz zm_#g@wSeei+_zE2tFM9r71%t!V9w9YMhP~4(D~T`ret%{!QQb97{k~x9(#i0L z6VDwQYDDaEx8S6n;ClScZ8()*BhRXM2$uTeI3D5Mz1|2H#vQ#YLZ9caq|dlD-dF|U zK>N(pxC__suQQg8M;>y_)psrz(}Fv|aV>g^kJN4Bh@GPt_NhvuLE3yxMUn+6@@zNg z1{fuT^DTq=JHM_rK?05uH*Iu&ksj5+*~FWLwF;|)n6jZifysAAiTAK=zf=NQjiA^7 zGxRlN84+t8@`+k9Q~Meh^CQ#%kw04626#UT8%O!3uRE&kU#&$Om=jvxJz@xI?Wp`R zd>-@DHZx4y(?h#|ODwUtRSem7YOqtmf?q~4H)T?}X``PilsOSNvw`wjR*4n(-+00W z_!hiB=f^89idb_L$fl1ZAoCyWW&FipBsx?xVPp<@3=m4>&N1uDIY8v>qVA1}L^Q*= z_F)lQOh3oDGZ4hY3{?~gp$RBd8H2aMu^MfVMT}4bXHWfro?yND(|0Un2l`NocBcL-W&X@p4VsvCbjS|lLJwZFr;&u+i87ZElLF>rq6Q8IRP#EQZYL}Edma+aDr zS;{IGp%hkrrH?GgDdbHrsvy#sAsnSe5rlHw5LP3ehKOZ$UKl~Nw@7GdpxvekJiCqw z)XewalsB6q#k_U!#_dbBP6vPNDsW%ts6#^3!r;!c&~~#Dwc*UgNc=H2hVX9dIg9FZ ztF10)F!v(`4pFTLB>A+EL=t$b!P!joZCiKjE0=ucTN_a%`>TE9pjflqSHUt0A4Di; zRj|~t_Lp2)Ll{c6;)L7=^wy}JQbIQ!g5!46i;&*hd9#KW$W+ZwN(UcZu*+)c*n7|a z;2}pV&|t&KAYggF7Q=*ug#9bFlwbXGqyVLMjQKFxm(`Zr(Y!qA9ox8=wrQm zuck1rvxQ^OHw{-!le6szCya>{v`!o6-l(q2zDY`ZPN~_(C}4BMoh+`YZb8+|_V%}q z>}|($(pE}gx+ zcc&{AOsM{NWH8{qJ&PaI3N5s}OFsEz2=HvU`M7%lti}j$K_Kx^$4Bcv$ zFOHLA?ZZ(mKAp|x`1=y&(<*m!Dw#*RXQN}jaTOW=ybF6+P1A++#TWg7$nAZTz$~h8 zT+R>TcBnFSgN8xlz$A zkK@j9FS0Zj-jLnML!}{K?%||L%(~q?j;NLsJF}gJZEW`&CSWzL`Dv(6azi)v_k542 zfkf^V*yo_QsqIK*1;t&(W}%&Eit)VPHS1E-rE2L5>&b4i<}pmc+gByqYiyu%f1R7~!=G=1h`f+&ksF^WsyCo3juQUDGaGfp-b6x2lL>YNeupvC2f zN9w$JUo?ht37f7y>`8LU+0^}oVoFN3c=7V#;=b!5g7831O20*dD$WTj5K-(tVWnk!|I(dczD1w!9RZ* zPU6r6g4Teswu_tJo~Vks9+q|T#&8jN!wcB(X}_R5=g&Y8DC>!;w)Wm<8d<}p?}$Ev z^ob*Cohj%dTk~NjQzcM2a`X#l)TKt!hg!0O99A{KMs zbB)#Il&lhov_Q1|8F@XXpP8nFq0|QhIr4GK>l3WBNTYbKR&uLu`y*~3O5>u~Q81P? z+ybYh?JK4frH^=eR3E9$(SblehhGY}4~hy17xXCot%@6iVGI+vlnsTDoOZuKuA;S2 zlZY9kfz#nQ1q{&%YI`5xny-+R={h*8Aym9!B}1W0zW1K!u!)HIZcbzHqp=q}f@K2_ zg**<4NJ6Va1ef0V)jA7FlOYeHW7vDQ(2}2a9IiCkM2w3JL>Q}!O-hgmr{VGCXv9m! zFc=Fvi_MJwdY(zC1HmScI6sgo3I$c3uD{#h68)51#cV;^^`{BLP&iFbm$2trZo?Z< z4Os&CAi5~^?UM72a6>4$K$vttWvhZCP3+2+r8g;wwHTO$=%WE&+6Z?~{mNc$UE`Y& z?!qdOexOSGhU>wHD2!;wq&utLId_O<4a6qNV(Gl)$`~W0TEkE%z348rRRv8GSa^_YJky+FLLh)rF z(#gnhlMEtX_gal12Bqs!j(D6%2llyB7+R2lx<4Rt(hR_$uw7%HB$0$mQH2dcavTJ9 z?2q@g$8V@nHYEMjkRKosU2@K0eANg#FEzJod|p1Mc4NGuMY<^9puYv9kIm|~kO z;VC{hOQHnQQ&R|vsszy~6E3)`r$jNa zxP4*|GQ4$LD^^4J2Et1lDXx=$hgt2&W$r>+F*Up?H z(-!^Zb7BygVX@_0jA)d2Sssx&JPeZyAZ8__&6VLkN)!60_MrFNkPtLkSY3RO&$1`H zPiqAxhY|#+c~hQHxkbf#kioreo^nc8T3Lw0GNFpMY)Ge^kWk6fP&h@@(3ge~6}_0V zp8~aQPfgo7OR;O?u7@XP(f^AUQ;EUVSi zWD}6Hr=i7$yc+UZxImXG@%hdHVTJX2yU;%$*BTZh2X{3)7ZBm}xy_Y%p+@&)9?}W* ziOm7o2C`CCF<<#ZT8){rCx-KQOr?z|OUXMi#c&wdhj~+q`UTpU+NWMg3 zq8uh6#C03RK?vbVriM~aAbQ@LuA#3uOO|U$3wGt`OwerQ%NL?|&!$m}Z{3-qQv~@Y zn3~BJX{LAL4*RDp>E@h%_s{3GhKW%SkFysy3Cb@@|nUk*}X8+;x3 zW3W}5wXS{FMh${zfGoG>U7v_}{q1$_O>zF`EMMRAFW7tf-~G~p>`+NF*cA$+BEOJc zIAYWWWc^Y@VtGhDbU4c0E4{-(?kl!TOIXE`m(2&rR0R=eb0W_WMj1<&&HvIkP+6{V ztvrQN9hFE}X$#4ahXz?ta8&8$1KZQLI(}7b ztAtJGkehi3d!Nf$<{_To4JY{XZuFfW-%Ty_k8oc=2YIzH;;$JO0_brxtF$!$N?Ejf zMTpQ(OldUZ8{q_)^}QQ+Ui~hY@icU|yopV)CmoSjVE-ZB;bcvH0;Gtb(fSa^=Ts54 z=m~0{J)Ft!u+p#<%Tx}GxE@u;rpgBwy)Vk&OM;w1OD!4K3 zwu(w*r;$+GQ06BWWwwb+I&vkMofx-^Y13}{{yn)KP;s$7VBd;yBENp#v)CW8iEW5S zbDK*s!Axg$Wa16KCWbYvDlWp)P$*Sw>ErENMnvDQCFyzLGE32##8|A^DG6q^0IbJs z**E0Y=o{g~7QAH{^~Mu4G+a4!-a!w5HtkFM_}t;sWjcROmd^_{6s#dSV?vLtP`$!x z&Yt#z3~1-69-26+=HQZ5tSkb{ly<_l3Qwi0-`Cm)*iZ(AyRI3bHO!2!r`c?U2)tzX zx6a%zc_*bdmA!xoaz|`d6kPDIOTtW5huCThhauBJM((N=$Nu`W+=~e+;ct{e`ZrRx z{_qJ#gtyd~iGP|((TZ9!_we;-BvUXytz>FDMWj62 zAjxyjcP7%T*W$2+G2lR_6C6_Z6c_1V9cc=7IRMT|j-%)%C;oqoHWM-)gmz_gO7fjQ^7pgT)->wr{ zQX5EZbfyk!{upNVYWIVd1_C-o;9P0}7o_O!4>yCWuuDD%5}l9Q5|5_3HEcBdEj36^ zE2N=)>#dd-+rs4Rc(R0cV&kFOniK5mVf>kp;z7^hcDJNZM=@kznJYP71FzpO)}mu+fCIHPCq*TB{+TwoS1sAX2MhPc4O1#)D@aHK&2GmkOA`EV zKO*?6|B6Y!4{>a<@XgU&@w%<#=*z-#&vSfu!m!G7(NZI;57AaW_$}l z#=%8yb4Y}|P9BTXSut~3)a&t@f(rIn$lVq*;&;rM(6vLC-L@KLdv$ZP|dYXH(AwiR|zj8 z?Xnd_rrob=hx_Z*>91=Wq>h0-D*_=yFd|w1q0No0fXDi(d;}n!ZWw+Q+fDwoT}UD# z9i#k^b8{L;KAz>P(X0aL1SjCV=+J2;ZMZB!Z6Fx?O^4Tqm8t;J$jAxo@Dw!86iDci z^rGG?GZk`#@KOX}b(8m}h|#jir$Zaui}=j>7ShQac0{EsT`p9XOXATO_HM`HD;JS0;nJ)$Mf;asnyyU*pEF8stU2@Ah6SQTZJH^(&iWmdZjB6QQsWL9~)?DY86mNnctlrq@Rq zOw}I5M-w;7c(pYfF`d1v^)Img$Mc1N_Os0zohpeszoojjXP=@Z*d}`-_WDy5vw1#S zZs+4x=4G=%YwLHUC*_l*YjXn1wI$iTpaTRDj(QV zm{i#^o}tx3DxbOGm)_v@An;>i&0fWx>=-Zs{ zX?OnF@0!3=%hRx2&Gzi)-It963pz^$`?L?^8qL=0=+N{kRn?BVj z&*Ssf#=)MfSn;PMedz0xr}b>g$7Yqfq?os}5aT6-Yx0UbmuuCl#TZelmov0?#lce?E}%=y z#88GP9QW~?pr3b+D8Ey;^~1f`dr zq5iY}Ho>y&Z7)sn+iwy##$!H5+2*@fU3V6gT`z%-V-h?kH;^g(;psPlS6?m8=4}$h zq<*8}%F`oSg;UF_VuP~F^${h6f@QHxDs|?6iRRWwYWrTl|9oK-ER_Xm&SmLvT2j7# zIab@GdEk6#B~aB8AL=4hWy8%H_)({Dc%S~T4}nGr2z9jf)(B#WH@j^7sCg#h5Oe>6 zQ}K6ilJp&KbRu~ZJP0uJK0N5ou5)6I)$%N~!USY)kA3bYWnKj8j7QS{aFq2FGo|5% zzCy)0oltl^IX5Tb%!(&l*@Cs;i>|!IL<$o4qzp)nO?Fv%^Ku=;a`tSf?`Y}JU98|wTAKC+mBdCd|LsRRLkRaGVO}PCl<7UkMjl88Vkb2 zr+>@xcbXD{a=tmu1s0ImR%WF1olD{fyDa}~f-FUT!mykj$y~k@SzABa<2PTPODL=u zNfFm?3*HOW*jqg1m4ZG}u%{-QO>?ny-f$&Vp`wkO0~{M+hDg7XRmAQ`cpNgsNTdv- zi2_l$89g zl*Ml}+j|;Lu)o=B1x|BgRs@NwtLAzB$70prcgTxJ@&n%My<1JyE7oHZcAl4I7ZSaw z!$s`ny@lq#NLt)pjJxjszA%1A)Pu+7Xmp=&UBPf-#k5T zcyCQK)U>}`ACg=n{kn(BUFf6jk}i(SGhqKXzQL)Tu((x1&Fkai!%!Tz&A@LOgrxy( zW}SV(A;G$7@Q5Nlo!~(=a1a*sM1-i+-x~-uAqF z5J+gm#S2Xgp6$}m1-gpp&2{sO-Dj)pEqvpmKo@sJtF-OWokyke_BKT`8kfb4)M;{G z+&Jo^4R5FnqtDfT8?;SM&fU(+&}@qD+sNweHPSwDc*Ux!_}rqKPU}dCrqLZVkSx#eda%=uI!`tC(`w=FLC zE=|ap@suK2d+?k*U%O0=S!Fe{xx5^0g{ZxZx5kBY%W00a^R6v`a!=E855L5@F;tI! zl*H=FyXCK_`FI)Hn8TkDH74BF$a?4IbOsw#r?p!NYmc4DZ(a<)k_V&MmgPMTzEleE zO3Y&vm6H|~`1aK-nJ@h)w2%dU_#!!5A=%W)Q)7%-# z53{Igd3#cQZlozRz4k+eOPYDL`YTr#CB6rL(c9C6`rh=RXKe>^5C=EQ@88+!)1kzZd2s9np7aNLhrY<`z9N=4&HEi}aeqcgiRX4xbQh8*$0F z72^mCR4{PwS*?R23QpS%^easg5*OD`QhE+g`n9o-tcW(U7G?q-d3Z76#>5|;^-i~hV-a%lF>x-*0(~{ZFski%;U&!R1+>o+^c&d|2vE_4p z4oBV>enc+967Q$77@?6t?R>Sw%7)OgDX{uD5Z+PGSX`v;TnAw_C7f}$lMILcx4Z4v zGS4}4U8iE^kFz4M{hO|$h9aAJ++DU)1){t6R#P|;_Lw}M%jzV1=4u=ZIyrlIo-bIX zz?cD=-V`DAnxO{Y^sAl-&w3wt{oAx*-0Hf1-5~v{y9}pVn(fh)(8xDWVincit3ii! zK2^LDAHL*VNjG#QN{ve)VoEzcTeV7xuupf40MgLo@*>A#i>d(wzR<=_Vq+aZj zw-ok=kP+^mIsr$cgj^;ekW#X5V!c&4^<0gv8L<3^6Vuz=hm3E}TYYw;%G0)`s6&_X z3Y>>$zByD9-ls>LJ-3{x|1WH9@&;C!N_%O-*i}9#W?3ltb+e zG02jH;Aiv|v1jMq+0R^` zLowk}-TP4qMW3O1H}TI|1p^22xx;ZbGlJ$?)>okS_YL`=;WRGEn`Mvo^C6DLZ{I#? zGNV>~^+O_%pIBQPe-n64;Aysd@_c*}tz7gX)Iss6JS(E3OD$yFRS^2yL;be*Ay=}w zIhTrM>k@eIp+SfPRHR}((z?wPJv$!di4mdY>HVr-gGbq9r`#o{+1QdTqMoiC-7ZRy zn+?OmL^m-jI5J)#&6QQr!$UwzOREyt9RF|CuN?;G}Kf#{p*7e&FJsuF;^WT z*-zY=Mx>kVp#TkxP|CH|2pQ>H`WiNSZ;o(yAarzey#2!>qvq!3R!W`t5wpC!d_4{5 zVs&-!Tk`bBtM@l;YyYNOU{Jbko6m{e&GCwArTwA3uJ8oA0i| z=clH60&Z4RoSdALUlOM>4N9iL()W`ImV4r~XilNAuHM-E1h?zY{hn&71bx#kcTImS zgQvyRaxBpbe;&56x<)m>HMVh*7q()qxhAbr1A@E0a+q7qNJ5sJzEbM0vu_{$#sjVdxS za!P8d+xm|XtN1|wo8yw^=Jctlsp+(4`*CXg7{y4`1mCmQoVCEKxIh#>c z*01g{(Id6E_+qsLuz=+PBP3#*8wGR!&j!XpQZyaky_PnTmpIumF8Oap4+a#aR-5^6 z2-EdCI@osU*EXFk88l`^prT$ zGc$caXh*8p4xY`)YR4nIv)8Yepg!=^BIB73kB9qv--$g~iiWH>~k9b{xk5sgRE%n^5Z*r|y z4Lqo)j)#WSayg}es)Xae*1zS}dDC%nHYoG#Hb1k77fze1es zRSkdS_2xztjh&^XWyT77^T%vq$Yyib(@}K&$A0UP3_hEAAGT@hxlbQ77#eI6lj6s1}c#B;Pk4w1|1kHEnDdvPGcO*Jc_Tm_Dm8 zmVai<0-+_<)$yu~p`~EsG$kmM=O0yK?GESR`iO#0)%$q)yP%+;Z9IbKRawi;ey-%{ zrg>`{0UBF*w(buj7n6~D4Lh4Xcm1Qhls?4WUycqA>je3?NbsmQ9^H9z(s4r_bY&Ez z6c8YVjg1{HPuJSoI{(dyL?wY*swC9H#N=01^Qt-sv~4oWC3BXy`Vs2rxS8ctZS{Ay z3ch`{Vh$S{)28-aNB9>%$SEi)Dk|s*F+Qm>{+sFiuMe#(Eom7Bm(P1Qc>m7T&n&P#ZfLBg4TgpPF_y}z=D>b)i3IPWh?{{0`@D;?Ipqvo}-fsYihjR=xR zlhh76xUH*O@I-OOj4efshV(Cf{Q5R$E-|Sk32MXcUH8a;pseY*CZ`Z~{@FMecGLOw zYaAD_>4WjW#G3D*G~B}*Tvl4;2DPslVPFl+6*U4YTZ7ky8rR>h&uD-NAG3^;^#+HC z)^o%>ZkM{AfZVNnpRF)!zGFP;SQLEoz_ z6mZl5KH{2-g}g?pfZhBc>6=x5o&=d^(Kpg}jBt+|Q&bJYWoKt^c|0Hfe$=$oa=qwu z(fVP-r!7^l()4>0&CBheSQoX)S#t zqXY*q4-Zz|^=FgEhglm>Ce84+55;=In07>NSM^!CyOUX$eM3a<1_ng`hRB?m4;8fQ zNf_?X)^KNTY;2sEo(=tX||G%6zenCBnUQKZ`}DFRw^QH(B|am*s>Kb(eix%ccIP( z720{nywnWcohVfB^z^hPywYJ+R8vE5up71B=!xL8=*)rZ;)S~{9(G@%*<C(4?my@2|>`S(6_rT29v{A^JqxX ziu9x|+?*%Mxj3cZsefk#%534Z#Bm_3tS-pf; zOTeb^Cat@jm2%wT@5t;cqL{|f?xsMT#%sJ8CM^NX3O4ku4~s?q1!H2?pg!JE_dLv{ zrg3!{@m$d{!?pVYcNO5y{-Us_p2v>YNQ^eYg5_}o_*_h*68s1CJGiBE`Q3&fGY3P$+O@(NME_|3 z+t`TPKwV+(V0#BofWm*4XjyI8X!*p%L}^t)KF%OdPc9uR8z(DwTUrGu#MR0Lc4q_= zfy`D7i zn+?<%>g7)B;c8_AqUECfXMy5d)e5)>+J7QEpmv@mjmIa( zFKgyz0LPI04>|uEV+6MKbO691)0K2+a0uD|fM|gsAWxVp2=E_P@wmF!%hVfc{~vO+ z^x-G~pNN2%h#0ScsIXM*K?fZ2`hUoI3-$v6c;)3&K1(0Ms|^1~m4Tibzz*yTf literal 0 HcmV?d00001 diff --git a/public/favicon-back/ms-icon-310x310.png b/public/favicon-back/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d5a8795cd5a159c1dc21baae7654e0449ed104 GIT binary patch literal 33000 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 IZW#1G02b5c&j0`b literal 0 HcmV?d00001 diff --git a/public/favicon-back/ms-icon-70x70.png b/public/favicon-back/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..ca90a5b24c3521fa96325447e082ec9c455c1a59 GIT binary patch literal 4672 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 TwQ3oA`olwf diff --git a/public/index.php b/public/index.php index a8137b1..ee8f07e 100644 --- a/public/index.php +++ b/public/index.php @@ -1,55 +1,20 @@ make(Kernel::class); - -$response = tap($kernel->handle( - $request = Request::capture() -))->send(); - -$kernel->terminate($request, $response); +$app->handleRequest(Request::capture()); diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 0000000..013d4a6 --- /dev/null +++ b/public/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" + } + ] +} \ No newline at end of file diff --git a/public/ms-icon-144x144.png b/public/ms-icon-144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..c92fc362d3a6c3777b8ef69a2e6e9e971b6054be GIT binary patch literal 10752 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/public/ms-icon-150x150.png b/public/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..78c8cd00ccc9308179074a3d5c3b2c6101e833ca GIT binary patch literal 11255 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 literal 0 HcmV?d00001 diff --git a/public/ms-icon-310x310.png b/public/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d5a8795cd5a159c1dc21baae7654e0449ed104 GIT binary patch literal 33000 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 IZW#1G02b5c&j0`b literal 0 HcmV?d00001 diff --git a/public/ms-icon-70x70.png b/public/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..ca90a5b24c3521fa96325447e082ec9c455c1a59 GIT binary patch literal 4672 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 diff --git a/public/mstile-150x150.png b/public/mstile-150x150.png deleted file mode 100644 index 322c5a9e40c47444ad8c02e448a2f0283875692d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7949 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 - - - -Created by potrace 1.14, written by Peter Selinger 2001-2017 - - - - - diff --git a/public/site.webmanifest b/public/site.webmanifest deleted file mode 100644 index 3a91549..0000000 --- a/public/site.webmanifest +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "Support", - "short_name": "Support", - "icons": [ - { - "src": "/android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "/android-chrome-512x512.png", - "sizes": "512x512", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone" -} diff --git a/public/web.config b/public/web.config deleted file mode 100644 index d3711d7..0000000 --- a/public/web.config +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/resources/assets/documents/invoice/logo_ldc.jpg b/resources/assets/documents/invoice/logo_ldc.jpg deleted file mode 100644 index d9ad13ed37f53b89ac740be75ce1c6c3c9fcbb17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16611 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 jMJ^bq5tM?rz1O+UZsWI`cmOx|ZG4 diff --git a/resources/assets/documents/invoice/logo_ldc.png b/resources/assets/documents/invoice/logo_ldc.png deleted file mode 100644 index 81d32824ae0e36240457c9175432ec0a0a08491f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99978 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 diff --git a/resources/assets/documents/invoice/separator.png b/resources/assets/documents/invoice/separator.png deleted file mode 100644 index bfcb9f0aa9cc9db207c9517a8c0c9ea22468fd83..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1297 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 UgdJ(P{$I)D(j|WO(xsSx10wb$cmMzZ literal 0 HcmV?d00001 diff --git a/resources/assets/fonts/Figtree/Figtree-Bold.ttf b/resources/assets/fonts/Figtree/Figtree-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6f8ad640402b7a214ae16197aa769b5ab06a9e2f GIT binary patch literal 40324 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 literal 0 HcmV?d00001 diff --git a/resources/assets/fonts/Figtree/Figtree-BoldItalic.ttf b/resources/assets/fonts/Figtree/Figtree-BoldItalic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..6b3e86cd49c0c113e8a1394949b0c378142b89ce GIT binary patch literal 40928 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

puv1EmnJUZ~s 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

wvTUFM|$(UI85f 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 z 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 R!1en|D6hZHy!QI*{|!E}Y7YPa literal 0 HcmV?d00001 diff --git a/resources/assets/fonts/Figtree/Figtree-Italic.ttf b/resources/assets/fonts/Figtree/Figtree-Italic.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7ff07e582d51e2470a8c8787c72dd25d4d395fd8 GIT binary patch literal 40636 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 S6VgA}{Zc*&z7efBC)>Eg> zsXC`_hjGT3KLRylwN=$M;WNTsWlYKkc317RsV%qP7vRNM>UPGWw%4|_R&4m=(kB^< z$Yf0W=+u^s>_tCC-@q6jLi)umGs|ZlZFw~e&$r^ataC;Csy&B>M;Oywhze#bZSP+N zyg%LtSufKx!4l|~@X+`_GRs65)8KjRwdeh4G72U%TvAY=y_!;T* zSM~J|BwRVmfmcTvGwffrx_i|!%~h8my${lBpWv=bcBrq$BjYX?^TVC-S6D04uq8}O zPac12N`+b61(_??dNS+=sfldh0vyZ(nwp*t(&3t6^!Pf5k!-Hi1ia<2TuSo758YIYIxjq8^Crh12cig!2C zdwxvXi<^n5P?yAvgu~yRh=&1V02uL>vp80Su!J=soX+MVoX?gaT+UV^T*aFg z@>=D!!Ru+S1DZfhfu=+AfaU|u-!$K9Mzq!1>DmR_9_^s^BJE4s_qAVWzwr+Bj`L3U zc6ir#&+uO8z1(|^_eSq6-n+b?_kPWL$or^{>%w*Mx=dY>u1>dD*Q;Bn+oZcw_kiwz z?j5~BAEr0!GxQGqp#CELRr*`>_v#{oHrh_a~#u=x59^E;jZW*BUn&uQlFo zJYam=_=)i=<8eQoU$9?>pTn=(ufuPp-?@I5`Q7Mum)|bGZ~cS(C;KP++x#p1*Z6Ps zf875C|JVIL^#8m6_W@}E1p(Co7X>^W@KazwU{s(bFgtJ{@WQ|=1Gfa;6ZlZzv7o3R zYfx^`?4YiozMyl0E)BXN=np{;1nmlXKIomGZ-YjHwZTEblY{NS^MjWK_XnRJe0lIa z!4CyL5xg(h6=Dbp4T%j&4apCw3Yi)*FJx&*f5`PAe+YRnWLL;vL;XWbLI*={2z@gw zHmoA-!myXaJ_&b(Uljg)_`&eu@MGa8BGeH+5y25r5%CeJ5objVM4T6KX~eY=w?^C( zu{Gkch`kZ}BaTG|Mox*`61gYxyGdD->L+cP^ueURPx>*+D=H)^Au2DbI;u5lVbs#7 zRZ;7sHbz|;byL(IqVA7+Bx+C8b5RGP-iZ1j>a(bSM133eQS8BO-56wDall1 znrfPF>NcHiy3zC()6=GxP4C1u$KD^iKdw6Nels&$&9lti=5x(k%+H#Cim!;jHvXLi zbwXjnvV=7WS0>z+uruL{gr5>a5|b0l66YtbOT0Pp#l-g$zqU-WoNKwm@}%Vh%a7I& zYmRlgb(QsI>o)5X*8SEY>))-vCix|$CbcA;le9VM=A?U*4kUe@9FQE7oS2-RY)>vt zu1%hrJS%xo^3vqK?rL=jo;z3>=4>4E#hfi*=d{ zdeh~m?WQMV<6;-a-WYpZTwq*C+~T-yNP31kOe~W**xl@5$j@Y+&I@=sZ{X8-7hld_ zm%>rU%hHgFsWd7*>PU>a5Ow@u3NnS8qD&^#Q6TCVFkPtBF)#MI*eyyOT`m`|M=c~r z|Kp$Y0w*-3{O7#Sc|BvFLz8{pCSyL&`@H>5bto1r1@ zg?@N|ZDYIHlk92sJoLl?_7-~wnqmlg;tMtmJ@EtkANDg}$uH%7{13d9FMy`FmS4%Q znd0st7bK*c8?U+IO%{b~c-eQQi!_aw)rtUB<42 zrn`atk=+g*`3JU>J;WYnkFZeJ0y~xVhKFqn7SS5Rz zHL%xNJ$nrr{7p84y~k#<51=*QXKn05Hiv!8X0yMtS?nXWfE~f==%1{e9fgMfnsu|U z*i!Z{*2}(StJ#mNpRHlPuyt$%+V)qhS1!S7;1jlxea>Iv&+vWxAawTgd^>*#I(ir1 z4XwKky7w{uFyD!_!uQb9->?foAHSbJ$p6Iu z%>Tmg;J1UH_pvVNPS=s&3aX<>+rb>tn=JdZunq4BzGw3VOh^2`K?KscP~JrN4*2g_ z2Ef6+5kDc{5zob%u845s;Cg`{bN$;5QX|q6@KZpms%H+B=0AX%*;M}tLa-vmJM{p| zk{l=(pz>xmX*uGa(8Cg?(?JH(MX|;)*w31z-vSS^R@LLDg4E>t41H`n1vW8n$pd&V z^Hwcp-gN&@Al0&@-wLWe<|oy$SoGuc;4Z5MWi}zrBSoL%IUq4*fIaYE#W+-Kqk>QkJPY7xxEoe~Xo>u0Xn5 zuVgQyx#R4zs&VBKO5zD0A@gsZ+88H`o2NB7NlE)`if9rIqIuNebZ3iG^Cr3 z`WjGQDdaXI!2Xdz`}(l=UEe~&$FuKU-%4f7hsU!LfQA3a7Vy_xpR!Rl594zy|CDWz z2GN#5*9X#-(2w(>Q<>{AejnyVB2%dwv3q;M^*L`v{x-C6BWvOpF)!@)lK>%Xzw28b z>iU2uvtpitRl@@^NP5T|J&WUWAS>tK9)%Ueku;XT!s4zP?L7* zm}TrdfK7pP-17lb0M&p2Krw(;dBD41&v3y8 zc&D08!Mv^JL2Q6$gNCUn;}G(`M|m+`A7Pcj)jGr{(t2$MQdm(+G64$Uq)vyxxh8%iVi5tM1_bG87kGL@i1zq1qg0~A z16Vlmioi#(NXbWzW4Y^tjf22*4U6GlC~+-|;x8+4w85R1>&Dv#Jv-JfZb162N_rm_ z$(8=X;$Q_G;|yfr5KghjVsNg zo_b*0k-i7Dj@NF&`f(gTG54u$^Gto}+cTHu?uTa?Zrqu3PNalq2@~I)xg<{-dY0me zKXVD5xvD_Teo%D<LIy6{rFEn3C88Yz%9snmE49@q-qnn`++BF znXm^+7hv*e*~#^~Thor+N;~oq?{^6Ln$Y4N(GH?5)mx5zE5!#u6O))3zn?-A=}Nur z!Hn$!P)}AO?1D^BN6-4e1J%lV6SRWo`-!t^d{jNhdLlitQEn!#>SiGS>FJ*Vp7oS^Ny5&e=X<3iOscABoXM~1 zZ68?4j99zq%I8*__}t3!nI>+loPjWKO8Hz9`=)7Xqlq1AZmcq~`)5pTGO>+tl$hAU znKP!Cz(Y*<8pwhpL5{11)x;0dJ^+$E2=F44tJ^y{ zgFmU4{VKv^BK$^#Uy1Mw5q>Pf_eJ=o2oJ3sT(O$%>s#Hml0CZ$5A2Elo|Q}3qy7Dv zS?mFX+3c?V!H#}*YyaS?es;qErMXJ9Gg^c}A`F1FiGyPq*NWI=#5Cefpa{vMg|(Ro z$$Q3O9iq@%grxU5ID$f~u@P!TD3{xjQ_eu?$pf3SZlP9eTr5`|v zM2mQNRRxO|$2_Dw3^qXGttzC!nh*A~iEpTNyh83bJ?!TdA`V@^w;$+o;dIFz-3}o$Loz_CXc6J;fa&`Ow`I2^%^<6v}36x z)GlGAxkt2Du160{JX%CO&Vl7srqDx59`fSKnADRn?t0?Ef8#9*MY%F3(uffl0h}*J z+4PQMUqhoP_mkc|EuJYP+x&P*xCx{3$e_@RKqj?ao~3N2**>BRhn9& z#u~xF;?NG2phF^3mI*&4y_0d&_ZpFxc!R@+D&tF#HW=ebrP9brm;>-bigM!cO!?@| zMDHWDn{3!}N@`;a*7uKM&fJb!vk@zg<*oWD2Pc?^@K7Fx@)A&&1?@;e8&lB! zG@g&XNn*T-f;qToPF4XoTkMrC#@ttfhTAZ1yK(tpCLRDM{uNh%nBReDsU17IF3gWa z&}s?%4nnfIj$g=JcM2&3#L0i~(&Kaidxct#@;cZ<)PAfe9)|5b0WxfqxnMoeKr&lM za>3edg_TARiFXM5$5({}NrDXfS?(#UH|Q(&i9xWRzYgpEuj~!#H!MNuIZNl^ECa2L z1f{>g3MUKxnrMv75{y(ftnF`M{qqhtVLY#guV4qL@Ne)#9*^T@9*>=U0`{3BGVPe1 zsE2v;F6<-kVXgDNpkq2GkC_9bnT3(g!Ah-&ea&;((>xDW02})fyps=KhXdY@B3=xC zS}89BoqI6u6+**f@NWNu2`D~c?v#0m~>{Ns7AHtuo4t}3=__^?Fod<8? z1@H%51Ygm`d=tDxm%?Xr*Vr12^d>A2&z`t}AznWhIPt$e$dU(Qa32c^B@n%!~79= zL3Y9i@|f_2JkIx!Y~fGwr{TeR20k$rd{)n6W#|XrPYmXP8lJH@_{Uy?ugMpZEfAK% z7x;^q6OTe(RX}3+K&C8)-K-22iT&{Z?1rUm5Bx$~;rn?GUM@YnMml(`E`_h^3e2yI z;g9*XR`(8Dva>xd{#X7n|Ac?aKjTLr_dbTV>1ufK zhS=wr#h<{t^btI0M>ORftGm~9YX?{MWM)-XY0Fo%cdqVRsV(nY+PAX%EJI~y&+5*> z6-#=%*Xb*}`UcuNJG)m7XsSBfkqWofeeDC9YVoA69(%8?R*I=sim4qhMy@J5TVFet zTwT}EzS>YXo<^!~(AFzO)GI|$3o~=eGjlSt3=QK+<>GQ|n#T6d!GUf~qiBnQtH z%+9LN49e^?cv9hmO0NdxUU>})_E{?zx^}!!-CFnHYSzl^vwr-gX1&Zl=ZI|jbH?bY zX{SNWGPH{qN?bHU#C>E5Q7s<)+s6wO2xGguN+shM|77_nY$2DT@P>HMw^Ij{37`q?K^_SuF32O|azk<|l^6ZJ?fuI{Tz5|Q>OK+EirBys4MbQvZUbxkaPuBm zwz`|1wM+U2SBrbk8u7lrXC1xohag-@k?tOx0Hg#fdqe>~N_igD(08fFgRi z3X1APC31|a5$UKRkxs5kMCHmvLQ$QFi3(}QE9wvts)Hg*9Tb)8kYiMbNJn*ubaEXc zD%T+riaJCLtrz%ZKBCofyx*_{B`I+qQH1h9GbB4RKU2A9DfevUo}=7zm3y9Yw<&kK zau*U4`MOfOsR54=&J73J$+rI zsUSwXgjj&NXwvD?>13x+R}Zf4lba+rB|AGyREehKY1>z??pr&!O1#f1u!C{&yqdT~ zLFMZNs;h79N(ECOV|u%nxYLN1Lw$)B<8If9Nz&Q3qC+R<9K|R%-c<-Wm6KVS4oixH zlPLq7^6W0JTqov^M{Ys0%$zJGN4AnOThJ^sCp%v*Jv*ODH_A2UrmqxTpd~x)3iMce z&y;O%%qZL5unNK-tZ4Gi3OlE>x>v7c@hjR_pT#0qoVDUC?AIu_YyqL273H9vB#tKQ zw(HK(?7%ArRyZ25uNBr5^$_i<)m>OYsijo)Q|euk2|3hQtEOwLX8jowUYO`u1F1pjTVJx;r<-S&_=vuDo0xVZ86d}bZ-$vDJT=XPg zGgR``sH#zFDO2taRW4%b%4Nk_RreLAqANj!CA`T^IM zBBa=nvFoF;*t^nU>7d8;qD0qT<$8Q9wnK7XvYqKZNxtqRx;X? z*oYH$5wsaTbk5I^CDLt*Vi?-BSainDh_EjvZ{tay8ez&}mt z*{veJo7w}*0hQAu%Bi8aWEJ>&5#J)-E)XTp6KV1Z!yZ?yVqBFf${!Vdxm<+T5+1EW z@1#nKgId(n*987S5uYi-OGUUug#T8Zhcs`A_}3!WCjJvJUkUt60)Muk-fI-ccq3$o z1pXz_+RsGz2T{xO0)LJOMN0m(DCbG>b_?)ib&~C*bXwhj9aIr^Q*>Ir0KT2M*vZmq z^%mG;R$}i&r`5Z~Y4wY77V#eJk^Y2T(9ObHxlNo|-@)k2`t#V$f6WewGwbh)GwUCU zGwa91ne`vVIrZb>ocd4Vocb@27YsEp)J3OV8ER#)OTnWLXi%UEcRCGACjzq3>IOmo z=S8?(gu6ueng|bz@JSIa6X7EwoFT%U2q#*lND>MuhTUlcXubulIvdu3(_PuHCY*ew z!rnkvqH<5=rjxEn@e~Z}$HWU(-U*jCY%8Z;5<4;RQe~cc;nd`Jr(UNi4>iDgaTGnR zL|-{<4%Z>XnF{dpBBC&VfI{hK5r11y=Y0ynk%Ye$8i-5RQV0tL@UTnM+t(?SXe4oJ z0$8%bhYRi^+jcOlD^1w5FTz+`VBNSH{z&4b8tmbB!Jqaft~r8#=EAC>fwhUO(tRig z8Vcc^R61&Ta$M_3Pf6fn=|0qUkEA}`1zY|2^)sJ%{lMMVFl_q6{7dCJG8X#?yLGbl z%hzG->D|{s?Dfa57ZKmfA6Kp&uwl5btfkx(ikj&+ArLPtJ77t-lKPmI;^E zrnTYJuY6qyTh913z*j2QGFXV*R|jlJ9k4dZR~xLP4X|}_(3`$Zc^B3W$T#8&SXGGX zcZ+bR2w!)R^lPQK^r*o6j|kgESSmuAu^i`JDGi@&t?qyJic=bxq z=@Ur8&tSFL0)LKy-3CvJFS|=fygv$wcQ;xizV;GxWg)c@R#plnvTNb(xHmv8+8!_D zvIGluJ}g}p*KuxjJ;#&aM}ZH-H6(JV{NBddLm$L9(_G*k@I2`;NATwwJ3lX;j#CKi zkbIvQqSTZAPR@;)IpJ@@d-q%NBgwNp7@jo)=6NHmbMwJV;m{ldp!n6GW+u)6ZGjAb z09OI1`4m>0&xn)P&*Q{*v7qBLoMZn9C-U$a59EXd|J;1o?j-o1S0bdcB-rJyMs3$( zY&fLHJqZ7Vi^FRDCc<}cag_2sR=7Xl^1_+;pAaXB!inFpdR+(`tD0s2!WDc4!am-I z@NAs?Q`6aMgs_Ezwi5G4X$Is!wH?$aF8ZVqeex20@)mv4Koh==Raw1yQ_w}RqUbju1FTEW>?(9epwVuhX73SPHjOsq(4h2Gc* zHoO?H32+JEQov<^&49}RR{*XAkk9mLz_ozu0QkBDy^z1^y9xK30b2mK0B!}`2Dk_C zC&2T77XU8;NFwe7><7FIH~=^ZAP>qRz^j1Q0Hh5M1Kt3<37~U|?*QHfya#w6@Bx74 z=7)ff0DlF14EO}_1>kRhqkz8yz6AUO@D<>nfPVo<_Wca_1@J3?WGQGgSG?|L|H z@K!(&15^N#7+wGky%4SEpnnYH&K)>!b1&clz=MEofSrKH08av*0z3`a3wQ?bEZ{l7 zXMiJs&!Mxm0B?W}pa&R$$JnB-jQ=Mi^;<`SM&kESil|cq>ePTbHJ}cyT53R@8c?SO z)Tse=YCxSDP^SjesR4CrK%E*;rv}ui0d;CXof=T52Gpqmb!tGJ8Vt?~F%r9>ljgFG zuEXqNz$U;YfJ*_F0X73J2V4QT5^xpZYQVLC>j2jSZUEc}xCwAGU<=?Dz^#DW0QUg? z1bE&x%w7Pz2zUvw53nEbGT;E-9|XJtI0SeV@EYKCz+u1}fHwheA?-W3zl-~OfcF6( z0EPe`0zLx#74R|O6TlaMzX6T{{toyO@DIROfPVu11^5~;3|jmf@D1Qwz;}S}0kp0wZM7?d6crH4W3VNiM)lpY49he7FKP0wZss5uO34uhJ*pyn{BISgtJgPOyj<}j!^3~CZ3e_zi}ApI!732?cF(bHk{bQnDy zMo)*)(_!><7(E?^&kt|V+adIJ2)!LbZ->y^A@p_#y&XbthtS(0^mYin9YSx1(Ay#O zb_l&4LT`uA+adIJ2)!LbZ->y^A@p_#y&XbthtS)hGfPRlKL~gQa0u`!;5ESOfWv?{ z0B-_>l*IjiTT1>ez5;KZBvH|xQGgTRat(pnL!kB$s67N~4}sc4p!N``Jp}E^U0*^y5FaNiDI8hJKxIcw)--mJEhjE7w6L2ZuGQeiQ<$x;yR|2jATn)Gua2?=!zzu*K z0XG3|25bS`0=N}$8{i(mp8(HeKD_{V5%3aVA7DS=WxxTvKL~gQa0u`!;5ESOfWv?{ z0B-``LfUt5e;4=n0Ph1n01N>>1bhVeE8t_mCx9;ie*+u^{2lNm;2(gm0RII13-C4I zca1y7?-%6x6)*xgf%c37oB)?=AI5zj#(f{geILesAI5zj#(f{geV=kdhxRDHr$!TK zHv-y?fOaFG-3Vwm0@{s$b|aw42vwfF2{D z#|Y>#0(y*q9wVT~2twj&!eqUUh{!Kr9l59I7}JQK(Mzo5tOp~dg(p9wo1#tb-bIzwv2Nt(^r zN9@D;@mbhd9q7LSyPjCFAET4o_lW)00j$|4pHbtUPRIOj?lWlLO*@EfBHRtj3Rd`# zp#Qg583$0uZ&^vagLEeVzg2S+pNU-xtRfc!HUTaHTne}huo-YU;0nN%fU5vk1Fi*J z2e=+^1K>u$O@NyLTL8BJZUx*1xCihjzyZKPz$<`5fL8&p0bU0j2D|}y6Yvh;1Yi{4 z1h`-iVgL@104jhQ;04g&J%?qLG14l>p;eAUs~m?`IS#FI99rc#w90X4mE+JV$Dvh@ zL#rHzRyhu>avWOaIJC-fXqDs8D#xK!jzg;)hgLZbt#TY%{fOZaBzx~;0` zPn0=Sjj-9djv!bj?L|60W1T!F$ZUz#2F0pO{N}oC<+;wsHr&OdXG(iVt3Lb?M<^G8 z6mlNb5=|oN!*3VCBbm;&o(BIY=F{o$J5R!|9xG=D_VeTESB>GfVjn(^AFp>i_T}Sv z%UJr|*y9VlE0y{-hJTX3M!s65{g;p7AH$x1yqxj!cVVx;Ri=^ZJ!>_bd+X< z&CbMFe^5?#XsA}Br9fl0Y3{)dzNFr|A7ITDo;d{bIdgM%(TB zon@_heO=S-(%!VTqLt|pZH2QI7uFV+*B~e=$Jk`Mj^Ve04&sy@tBy-dw3n!;sxWQ3 zWR5dRT1{vu>af|vj1phab!Ab2v8HEZebHId0`iSzGc$@-%q}wcWvrZ<-90NR%e-uz z&%!^SHTB}fxv945 zYR4K=`W)P(p<0AxQamH(hjW>%1-!uJu{^o%`8wi?fBuIS@G^(P`TQyE!01ssDnzf) zr*WQh4DuV@thPTLtmbAgqMXPh+8(ZqK%i**M7+CCGM*?cr{95J>Y%>Lc%rn7-wG?+ z>G0dQ)dNp6M^3*T*0}NXG&5!VZdhvs9y1et8^b@zv(R3-&t>Sdj>Zvvra7iUkFVD` zA5P^Ndgoht=&tiehw~+czrO;1L-wADzcH1xMin1CYfD9dv0>F!Q*GT-L-PDfr>9h` zT~uZ;=B{sRIKS0rhyEMAp{#v9*nIiaO^b6A%93KudC_StXIIU-tf{oGwy?0WZ+a@I zL-Xn@)h4t)PEh$#oVGqVhQDqMzk>%T_~CqcTGzI|j>g`2)FSgJpK-oP24o^ANXuZs3n7>5-5l3N9o_vUUeeQpd$y% zft^j^M1GFoM1kiI!K*_fpNnB$qau!z@jG0Q1!#2<@J;ZN(;TMR6qlHnYlFB73D)Fz z#8s$$n}2w?e?VARk8=MNtx=f-DnLQue&UF`g(%riMZ7H6xD8(>E4<0`JzBUO^}6wE zRm8J$`rXisz`I^>r4kJkyoNvdDGGM|+w~*=J17$ZJsX!US?n>A5UOaWQFWau*BY(Q zGE7d3wzQP{G?vZKEw)K0A0tyafVbU({ga=l}N!+8z{@O)Z_qXt#x zSWkmEO$V+bE_{KPmJgP7I$wCP6FuF;H;h(EGtk%bMt3L_0&mLF1mrS_Al#d?D>G$9p2e%aVEN2(K zybyW{Qjgl>hqL@7u`G6>f$eCRMw1ZaZXtgyASG&2M6Ax5>AkRMq3=|u)uYYt`ub$) zb=g@`*66E^4exq(0SbfJAe+8}Obo!z1$CrL_7X5;jHES67E<=44&yW$QvQ6wl)))c zzJYyz?wB&r5M>Nl^`}MCHZSn=OFwJsv?~|-8Piw#$!KHW9pT2 zXJ6JNhtyM1o1hq3-iTtd#+UIl%VoSzKM*8I!b= zbQSc{#8L6`(Di)&(kmQ+KD9lY>KAUb1skh6*H<)MJkLKMby*{gkYCD5K7HbPz-R8C z`)HZgdf#B%rSmczwU>8wTvClOn|E0QM&6tidqtLSH zy^00N27N`lV|S`;r?o26+t5&p1!sO&c}cs?d7M`#HDpw`iPE@KAU%VX88rRcpd9U3 zd0JY@%4=H8z2KYW5<48b!sB*Oi9QW=w{dCjIdYlTz3MK}=K4r*awz=RtlEOLvByY) zgToTAQnuK`PG)N9yr%T!g(nZEZ$;J==c5_366R;mx7hR^{GB*|ve|>h8!yb5n-m?< zm)w`sTRP6@@(Ob*Xca)Z$-QFNXd!SlaT6(4xgf=0=&asQwO;F^y(-gjzqLMBYnVc0 zvn?vAToU4Zk5A^#FZdiwb!z!EMea-$vuL^^S)H;*# zNojmVYL&IpTD`8RW?{Cv*mqV{&aB-0^p=vQ_=XKWk*W5Wpp0sBb#6jxq~2d|DNU>B zv}e|sgY1Qt>a_F>L$F_ZWkzv(K1m4CCegQ6MMA`gK1{^#R91$Gu5{`H`X;A;0$&V` zmqQXo#_xcQhG>xp8SI&UkMLSSXMh$q&>~69H@BpvjTL_XheV(jN`&YUBZX<@y%+Zl zE(_1{GMOr->J7yer7F#5{sp<^O}aT{^KjfZyE-k>J7(XU7C*lMpU}yPUQtsjN@_xq zKM0Sla*Tc_#mtx;o@n)-^sLviIrF-pdn&%ik4LA5cQq4(Z6y{BR}9QD4Lg>JHL=(O=~Kseo>yNe~~gm<)Z$H_($O# zCyL8>8VNc54tUSU@g&=2{8o6#$MLi`kn!7<-Q2|TABN9yJUz*FIsI;U-DP|+^?MBe z6u*)MjJ1b$^K$yfux6$85%@&<7w80kd%G$Js|L)nZsjw-m_Eg;;JU+ z>w6pTa60kJm9v~5atnUD^KPEud<(s5L(XfE6RYw5AUUV%^SLaXn%p8* zhCR-|qJEKD^n()8n?!1_jHiCc_^t53kK<{qW&Cz{3h57M z4ejgfoXjS$qIm12Y-f&6iq?(3!C%umq&iHACmh6+BE4wOpwgaLQT{~yPAY#aJ+((p zzm417^>X(b*$zXEn1eZ}xvQf~$Gvs9om{W$M-^-{*v+h`da;}7#hp%zG5(N>enSkq ztA3A?RM=adR9f{_Z8y7nA{||~PU#JQP^{oZsn}Izpmi!y>Ltpa2R52=kA05WBaS-8 zTF%>)9nKZX{Y%fToNgE7Zj4MNj`~0)xgGR1vqC-KY1Cx=cAP+R9G@{1v*QD#7)Fu7d6%siI{V=tkuHol$T2@&`|8;XbD;ZH3ac%gxU$^xA|5T z&HPt>Tb8A+vp9cRYFgv`xU42yR84XA^uo!_3-~QgAD_I1#f4|jwdKq&p0;k9)t25g zKfR_kZOXiin%U@+Tr0JO{9)i+I`eZ1Uc(>lJsozZ2bOdWm7(D~mXD`>d938Ebh_!3 zlC^w0opu_-pEp*@ZZY;rSo4D_W2HRFZ62vV8^b?Fe!Q_##{08NoS#xNKdfwLgSr9O znU}Fz#=4cIyw)OXbw4RC(T-@2mXw=@Onde)jV4wY{=@)iV`V)-20v9SRAHQkulM%y z&CJYdo|K!sthj3WB%|NI=g#u+>6`tm?$Np_-rBr^h9!P^K^O4U`tDR;->GY>>*mDz zI#=i>*XI>3h{=ekX?vVcl}f6rSM8cxHY3TJ7-h?`ub9#H{LK2gX?A;dYWAu*>i)~C z)-^W{R8+5@S~xeSFwLBhKbhNVXU`_Si3Q(~(2WY_c2e z{`EQbg=Gf)wVC~dJ)KB0W@bOZJKdBV(=egrp;!nBkZQ^W>JP&Kf>G|8{VRzBs8Rnt1h&Dg} zbsl~qWWvp&r;kXmm19h4eqMprkhF^=i%L0Uux9YkbVH0K|ltxD89N*k}bEqqbm+F~$KgdC4YyqVM#z)%FGDdOaqA z!V7$Ak)MyFcY08LZ@tCq&5##^6t?h-wnp61G+1GmIYSO#SI@m>c}-xUe_`9I&2OZv z09ho_LT~V6IQ)y_t;445)M=}Svl`)RrMrX&y@H7wP^xNsQ=NO)3ri|ZBr$`0980FJUknvCP zB8;4b-vecQ8&>tg6Vor&@9yo4R;2=GwZL3b<6%CTMqDIiH`OavlhL>NGj=<;(GPMt z0o2BCtGc;CvE31Gf*;03!f8w=FQhkQ>L(e}O5&!i4{R)IG|n81s9a$2^_|jJUOqd) z*Qa55b{3or`pB}(ytyTMeRR#c!Qoz++F-wqv-mz|{;bvZcPrO6HmoYE7-($hFVC|r zEOyMv$y-oVI4_4NAh(YwM&4fNFQJoUERBYY-LY&utsAT5kJFieu`*~hD7BVv6K7f> z`M_@A0P<#$w53g<*bOQBB8bEe>B(xQ^@ncROl!G_CPVl;%{-I2w3x=Ini9M!_-EoNY5Ty-~Uj8i> z=zeAK<+eb7h#I9e6D`oASB$q}Vyl(5X*}At{h!n}YK2vz86mgr>GyzjJpkMDc)t@l z^;^TA+%IytlK2tnWvp2#hy2ch?>^`(GsYahkwPVGLMoM@+~YFkdQlN!*~g%qFMbME z*dueYiTz=X3`m(YDKl_dz`~+MzEeNI>Hs_O*xc6Uj~=o|)qOGbj=3%BP&5#FL^Y zdz5nz;5vNgNE$_y7Q41+EoG)0sHUjjv|c5AuP8~zKZ5hb)Z#Z?`1P7G zyoT?AaYrKi6^~b1JZ7H`*Kw6@2vu=kN58{)A=OB02y`(C>=ZBBq7^GK7^F^~P+Axo zHw6usB7L*%bHqSo=b4`iyW7U@A0!MzKm~XtLE#|C+F0S0s zIAz{3W&Ua>RHs5E`m)~f`CGj>D4idxZyle$ZO(6qbI^K{1EBB=3cWs-rSD02XaYs% z=PNQCB&|)X{j6E{a1veiQZPsY-oJkJopn`1-iDcuc)b(c+5M zloxa-X>97JsE4R^K%v&>a{mRMq%Yw;S7&izzR9V#5>-x9%68cF-1tgCML9kF{*xOY zC**;Q-z~na!1)u@+JauIzy)S;a)XDRQDx~R!;H~mkGt2h|A7J|v3?g7c8#x5RnOt) z^c3pgn=IJv&^j+zvCL?vvbvvzVOO1bb?-Hp@6*lA|8aGHP})0x^ls_k8P=mD8&GeI zn8m^q&gf5BOqy3+^)}g|y`2fgmU{CU)j}rOqlhWbk9H8CJWgq15>=W!7@|aKW{7 z9$Ld6THwZB>Ve()3$U&)A&F7`SlT@>Fyl8IUB@^^oUHS-fAX+4TP)OPSr}@CtABcthE$m23cbAlY$ZqhM>CC^tvQ!FSX%K(cU3tPCg-K4dLmmMxyX-LW0edQ^!$@ z$FNWI9aGA9P3SEu1M_!=oHo@Xtrpz;Ailqp*E~^JfkudT6g>oT>oy7cMwi}Z%7+DyH%zu(_@ z(NalQ(3Y7!yCAJPBf=3|oLo>BUu+#6DXcCmsV-bTzjYzTpcMVwAYDi6FN}d5W+K$9 zg$V#AVZ{LOQDvziZ;ozGWKrZFb$_&J%@*HD5y7!mpDC5R(0=EgcIOM$6uqy_-y5`` z@*b1k1BGCD#OmP@*j^(AKA-9t!|xGaba7^e6w+b+fR&`E-))MfMTFU|`Rlv|L1GbE zY#o#7KC4&rD5q11avtdPsc%L3q8u?^Unt{vSd8Pzc=sw;#*)OP)EF_b3YM|7+Lg=L zN~fYvQ}%Ynjzj6;RURwlVX+67OQH3bT=woYav7=A&#|(fgnx3pY_j6Wbv`C6NSsbN zNRvPp4R{2`SGaa}U0AqswA}d-1ne}v!-=UXQmLYlisr3Ig@h`zN_FL|!uq$1>fS0I zEvbDQ89MnNoZb8mERFu)>_m@Hx++SvoW9s0Yi*fmjf^L{$oL)fZQEFSqKu5+N|u5# zJW)W#Zx>%*aMuwu4h;IOui>4`YnMO9y}o_ng<~%EHomi@ zlMzzn7#Bbg5bN3HejB9-+Ky!g#iaQcTu|IQTISpuk?A0n9uybV&VO*uOXSqs#Mg)azfDxO&i>!AiE@?- ziF_P7-p@n&C{pj<;sV2>qQ%}7c=b$QWw)}k15N}|JLPD{@}=6o0JZa__!i<%-uJ;HJ<9{_+M zjLx458}hs9Wl`RS_VV=7Xm4$HeR5K%w|7z^Lal{go>ZSv)rugk+F~zCPqh_hq}Yij zbjAbwKw)Y7ZzoW~ist19`UWn%ths1jL7*{U(PfRrXEpixMKu=|_cr+%qndq`qbK5a z&-{~5prE$1F|SwP+yVV|IrK58qOyxats2eaXX}gBUZM*stBEo@`lZ|BaL^~*F*$2e zRwn(fYakjMfOf``w_>dYM@3-*mb&KSC>5$n-$fp&*JO#c2!(?an$KgLC)K8A zSH$K=*{9_e&(Gm!6;u>w*2c$JBN9WhTXK>s(!#-u7ElM46U4lUvTH5)-CR2iY+54m zyi|Uj#aZs1&cD|ExKdj>xId1+m*AY7r7wJ3x+Y!rt6I@VoYth0JlBT`b6Mz^3yLz! zhmt|$Uo6wBLb768(sNrK-o8`nlG`E+=J6Fe=Z(6u1tme*`Grwc3vsk!%Go|)nU;ji zl+>o2hI!^lKfc0|@4PuIVUl0r(#rDAe9$)sbvr;`6aD73d zOAT|9R6c&itxF5?I?Sn2HRe?}h54A*))&poNv!L16wk|PEX{5!(D^j^;VxInF$_ zjvvq^NO#AKo=*n?z{NzhTC|*gWi<_79MRs{?VA`kM3NLhbA!(CjvMNGvUK{U!McVX z92jd_Q)8c3s5Q)ByC&AW&?qMG1hfcK(EakhRowG0duL9|h{GJSF@8xF@OIRhOffnu3 zLA8b(vD8xGq$F9vo)NPt0CI{r;3Qeqq37r7KRroc6%ru7zn#eqq%jNyHVIKiKc_x0j^ zsK}p(=OXbO1~ZPz-7mz%uKK@Ib>aUeRfAl=;=eF%S8I8?>n-O$(SArz_BVbXFd4vn zg%#upP`a9L113|(V14>4erb$yWhuF^2ITD`SGJPIA8A_opOGde<3+k(8&1llR-?-}s^b}xVu~Ui0qMb$5)vc*lS}Gs z@s3G0-^uam*_wQ6Z6;{ZjT*!0gc?qGyB#jd=Pu&>q2+WcPcm=ME!7oh{2~IaHnmq) zUXZtM)|5o8CcPqGYs@H9t72k9lLE4hDY=oB{3wkkw>g~$q?v*Z!G^RrQ$qS=M^Zvw z^gC&>u_5unp^;%G|CroZb5=O^T&y0cP-W1U}nC-P+7AIf=oEx&pa z4>mhL$@a1@Cgn!istlTp8Xgc}jtmY9$+VhNgN(+{3+#XM@}C@1S8gee z1104eY3!`Z`c14?Cg?Y;UOZQGFBKN~>U{EM>ZJw2fhk6x_70=jnoyeLXs~4^n$xlq&8ak&WuV$-w^nQ6VZ!^S zE#tiOmqZcnR}Ox(?DHv3oQM!Ujc%|gzV%Qia?lL_10Wy2+)sP{On4C? z@9^t@OoeaEPI;frFBb1nfvQ}33GXrIM1J^#kUyL6l=HiORkfZbzYXP+gw4eJi%*l^ zhMhaTFU9+9B7crj{@J2@n-nSDm*G8*+oAqE&j z@cAtEyx_B0{6gF%Rsx!giaCZl)?$lJN7KgZS=L(CT5?i7FYpnk*BhSg#IDW8zLZF3 zP&?tmvdddUTGyhey;O!w+5ovIp5^r7BX0;2i;^hs0<`pJtdql`FG%8$!gGr}XkoGK z#5sIWR&E|iaZuq|eRAeBo7PZUk=quSAKh19K0gVcf3B!34GmYTCIyKwG^Q+uXF3wA z(@L5%&EdJ_I8cC{i}S^((4a7a{f|9{Hn=`@rSSCY-1<96c z(ULG|F&?f@&X}I(t*;S{h+3sIVr9j|M!e)mtV%DQ>TW~v+#Fuw*#?Z*JbX3x6z{{_ zn}z?z5evS(6<+*qzJcsHYl)=F9^5E>AC(-W_A+HeMkR-MspB&CL}yHjOo@m}kBUfz z0mF-Jz_0!tmRuUk`>GUIUSdGXPAMBgmMKkz_U zdO^X%S4CZt7{4i6n~sebG!_P0x><0HTqbJ=*Cb%&?u9#@HQ_mb%RB14!&l1jb%rCF z;wxqQlGr|&oD3%wKFvFn3}MGzAGq+JfTXX*%z`LM;(x4kcFt6lo`55jvkupGsY-rZ zZRR;rRkgFT5^rgJZon^AE$7`tBmDo|Fv!BkAjbpw)dKSuUW)vs`1Qj<{C5=0TRMYL zs^_VC?pshmWve(^H~vngml8eSspojUQ#ZQbxjuIt;OAi82w4!Tovh>6=?YLJeyz@R z2fsiSi{IyCv&6?mbea&H6ZT+yZjhf}O=o^ZL3gb&xFD~y_}Y7CwcT}1u~c^BT{F)) z+73$mjNAos?iTS)5-p3M?k$HCa)SJfwH*cS+^WgN*WNR`^^eG2e#0MIC_6@^3G(_b zl?nca1nMnK9M}(_o8f^860;EQCS_KJhBd3KnNd1FQ+h=f7D93Ux`^b8tIA6?K{`#M zRaH^p=i|rC7Tyvcj&1JB(g+8)cFoVJOz?BoXI(I0bA-glG}X>&Po)2ziBwBduNmZNul&ZDCqU!QWqd`>NLshr-iK@HjQPq48Rb3Do zAJbejcQL94&67w=p>9|z$$x4_kCSfMtgpMcPT!^4VE#SwUXs<@_r5aY1#rz2D`R*Cd%2ARf%xv*e?mXkU=I1ibZ8(>& zb4QY?e&vt2iOQ~3$`Gv$gR{eNa%xIPb-{ls_uXC3c=^eqNVK(w|BI(fuR#Z$Ct7;m z5*im^*+C(jL>)b`B`N%0Uwnbm;#?`Jr=?d}9{$f!i-(7G1Zid*Ss9%mMo3;yP7t_S5ZF4;$x^=o|`+XNas7XA$NA6&bRr!>hrfP z?SA0g%Bu6WE^&0!SfcXc`FiIi5hnYh;w(ySySCpSkhZt zwYhC z`lPVcqBG1doLN3S-D0iKdPRjTer4LOc>&QzFKupPN@i`GwG}j z`cl81JNz%rDIY~KvI5EUZthB z!?Ezj7PPkz()(9%D@nW{F)GkYFkGUU`yHW<>1KnWyxsBo#bxWW*U#h&3%bg%S3mKc z^!{ivc&E&DzcdNjJ_-Lhz|#&&LeC4Ke#UA_V~Y+DX%dj84QasRc6?D0hyF+5cWBFSYJH4pl`ea%I<&$*2Rp6ce}$oi z!vky)3g6uHc%8m@ZeGDmW1c=Y&RU(W)#ux+wV^rD9rcap&W!W%ZR)?Wq4C@nv#$?g zb+fiC@$<8-Yn^q=Qa__@{jE6*Am_7+)BH>c$XwJ6%WX#fp9;D*H8yPQ$S>#?cYFTS ztLDz$+&t~dd9yb+VI5G#c1V5b0iCnSBChQ|V>>PMB_;U{AdAdew>87evx*iJhw1h9 z8A~1Gv9jKJy&<8sw5+$zppS12&g@Ff@m429XXU2m1xDnD#H&@|5%wL{`pzOpdyU0? z&&}^DD_fM8-&tO|IIo_^+ma_G8wPrNZ;c5J##&y&|C|q3Ed|dS$TMFaL@rz~tk!~G z1dzXh;aApFEPJrBrX=s-v+|t#i#FBGh&tvai;KadR3BM=$ z9A5_-{1+?MM+x>wjV84W=li3yUg_nrraX;TZ1m(jjoQSYODsz;7sMqLC76ri?b&hB z$r+}}X|m>uXFrQyt0DcS3VG1+;K!;TPT)sA@Jqxl_d95(7Fu}$2J0R5w>LN%@QcDv zIO|67|3IB}NJ~o|e4&r^pg3s=^@DX?)2qF;sY%7DCHvx=%+DlG$xN%VB-Lf4*IFl8Y7^^ieV=4Wahx~7sD zOT4{nON*@KCU4{VrKK(D>Owpf{_K=UtO$3w?v`sN241{&x4OXV56y=`-;Yi8WDw(Vov z3~yqG`D4>-HmFEBWJ{-?NvD}J0GW7}Lbbjff-d8OYn;-C z;(P$+QsAH1Bil*4D%NKsQ+bR&hfOsINN5J6rF-&g=2+a$)0h&H=UpUlSWsyNxCWre^r%+ z4nZ2C6^ZANMxWIs9)Y_N%ECqetk$vFR_;#V#D54iuD#13Jk_FLh(;b<`muU$Pu4!6;$|7J<;IiJJc!XH|*{0seh*l-Ru zMC>QXDUiafx+Gv&6Y8X1LPT=Iw0ASc2JbpufrHa#(#KfT8}|LAT!- z4R#fRLAS$YQNKX1gSgf87Clm>7r#F+1LlJoJ*G|i@;-{?^Pf0#2KjbEdPl4pJs(<* zKj+Rj*4>c1M|UA@LSEqycB*$^U&{CVm=Ko{+x!Ib!j%dmExWRvWV85h)BfTFB`$86 zbtY`BC2$Q*Vb@b*4RE%EUP8_b`OeSw?)AY0Z})?BpZ-F_{UAvLYR$v5{9j5^al)3m zhfkk5f`$^TYr2@bcMw|H**>5j&x=PlRZc&g912)0Yp3GLVZX(knu>LgS}f5Bo-iPp z`#@rM_o!JHa9?s@s4rQN>DYAd`~F=(5}InnEd>U}sp<1z z4l~#ZKLcKW&P1r!dGwX8SLJug`7-SdQo1N_lCLOVlaGrN6%;k%#)C`Zr}~@Vd4%%3 z@Ee_39s1xZow%&T@2m=_`MZdA9~BMDW#_WQn_wi|;ptdR(C3pw#dR6^ z6WY@x576JEG8LtLa(`eoPA_n>jJ@oEl{SxfC}MQN#2W0L$VBAps?+o!cX}!)Un`PN z-Yi0!{*}r;aRTMR&x+If>Z$jc>19T{7r4)r=SPdBkudGi+}vlmiWcQ5e^KEcL!ZyD z^m)!>4x`7BFbq4Mc{eKmO%DX*FLL5ht?~zr#_#Gf@RmVq*jX+2nO9t6N2G&7PLC+b z&n4){fPB_LUy@H2N3)k0bBbOl%KfzH$DE0a1N4OMtHT=O{~If6tL~-q7ybLg9y*x+ z6XJm3w5sWS^*s5ZGRS*a3{sV|Gt5C#aAVutN5tU50#Y(aX;r;ZGJXb5;3@^yP)LDu zi|VIJW9`b@pSkbId-!l3RX!=~xKoO?D=JTN>xLb|e&GUoniEs>6!z3Qwp@fprNs=Z zpOhzea`yOlcZl&FVrqd7qYh!%2uvq|shYE&l`m*y=*8n7J-KBE>O(Rza%-T#a`F@X* zDAED6!-M$(nM$p^%oXbEE*wK_-gcM6=5U)crc9r=&EaTty6ZDqk0`nWZih2iz?ah* z#AqZ#R*b~NKa9p)_SLB&{g=LZ!HZz;~iz#6BwSmSh^X|Z$}c73BuuW%_o_1L(6 z!`AD^jxo=1Whn{YYqOFG_^euS>`+sHV>T;O_AYm-)88C%_(I*`cu#X{Tjq^McSLje zydHP`db`is?McJYl$QPm@2#_-nM-K^SZAnoro6d$>gy-dYt41xYNC?@-T4@N({|CV|}wxB^gIud3AE7jT8wwmG8xo@Pg+ zv8g%nrZedF^d_Tr(LNt;a+ysC;ltG03~J3SQ!8cOZ2b@H(ers|vGlnG{owbN<>SXO zL(ap$te(!hSbz9?F=)VBgO2XP(!DB&KKha4VhzTa2mAvC>th)3OA6LUDqv{zfKeZh pfPbi9eUt(Ik%IMc0{F)Y*55SX%M35SDZno)Sf@AOE6~Fk{s;XSh_nCz literal 0 HcmV?d00001 diff --git a/resources/assets/fonts/Figtree/Figtree-Medium.ttf b/resources/assets/fonts/Figtree/Figtree-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5b89c890b8f6f93d2701b5ade7dac12c3840e24f GIT binary patch literal 40148 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�*ejGFR{m^)4qv$m{AKb3Xl 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

BLO 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�znRO6SVN@Y#{E4zCaujrzY3Tm`Vs0D081f8Fp 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

ulFWt}9*Fx^8ma=DNf6 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

ctwM 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 D;C3n~ literal 0 HcmV?d00001 diff --git a/resources/assets/images/logos/uwil-cms-dark-icon.svg b/resources/assets/images/logos/uwil-cms-dark-icon.svg new file mode 100644 index 0000000..b060e17 --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-dark-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-cms-dark.svg b/resources/assets/images/logos/uwil-cms-dark.svg new file mode 100644 index 0000000..ad78eac --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-cms-light-icon.svg b/resources/assets/images/logos/uwil-cms-light-icon.svg new file mode 100644 index 0000000..84e4426 --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-light-icon.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + CMS. + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-cms-light.svg b/resources/assets/images/logos/uwil-cms-light.svg new file mode 100644 index 0000000..6079765 --- /dev/null +++ b/resources/assets/images/logos/uwil-cms-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-report-dark.svg b/resources/assets/images/logos/uwil-report-dark.svg new file mode 100644 index 0000000..a1ea004 --- /dev/null +++ b/resources/assets/images/logos/uwil-report-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-report-light.svg b/resources/assets/images/logos/uwil-report-light.svg new file mode 100644 index 0000000..d2318ec --- /dev/null +++ b/resources/assets/images/logos/uwil-report-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-support-dark.svg b/resources/assets/images/logos/uwil-support-dark.svg new file mode 100644 index 0000000..a29be57 --- /dev/null +++ b/resources/assets/images/logos/uwil-support-dark.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/logos/uwil-support-light.svg b/resources/assets/images/logos/uwil-support-light.svg new file mode 100644 index 0000000..4a00988 --- /dev/null +++ b/resources/assets/images/logos/uwil-support-light.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/assets/images/supportweb_128.png b/resources/assets/images/supportweb_128.png deleted file mode 100644 index 6e6d38a7ccdff24c62ce7b00a1af49522ff4e4b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22080 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/resources/favicons/back/android-icon-192x192.png b/resources/favicons/back/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..2d53c6ea91e02180b82474bb4cf1c512190f7ed3 GIT binary patch literal 14197 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 V7FAlj&)?|)l0RidtA+Ig{s#aVm2v<8 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/android-icon-36x36.png b/resources/favicons/front/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..de42461b67b810c4b20c92dc690cfa5b7962a57a GIT binary patch literal 2533 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 Gjei5}7~-@5 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/android-icon-72x72.png b/resources/favicons/front/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/android-icon-96x96.png b/resources/favicons/front/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f2732bf543f3495cf358ee83f9a4ad5c4d18f98d GIT binary patch literal 6559 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 D3F$gh literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-120x120.png b/resources/favicons/front/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..86811dc1b5a8942a2f1e423193b6ab2d204619cc GIT binary patch literal 8157 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-152x152.png b/resources/favicons/front/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ff41715245508dd72d1c66b5a6bc91a77bc86603 GIT binary patch literal 11508 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 UUB7&thSY!@5Vg0JG8Tyc1$BJ7YXATM literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-180x180.png b/resources/favicons/front/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa31604462c87b078efdde730c38c66f26cf9f8 GIT binary patch literal 14509 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 Q8zuoZAga=}AhXc_1>QfvmH+?% literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-57x57.png b/resources/favicons/front/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..1713575f8212e64d3f9c37b47e7670afd4f6ed89 GIT binary patch literal 3888 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-60x60.png b/resources/favicons/front/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..17d0fbf34b56b443552be4fbf33cdd1f51f8458d GIT binary patch literal 4033 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 F{{q&=K8pYV literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-72x72.png b/resources/favicons/front/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/apple-icon-76x76.png b/resources/favicons/front/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..7248415fc0a921037e0b1dc5c71b545ce2f2487d GIT binary patch literal 5040 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/favicon.ico b/resources/favicons/front/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..467711c2328e4e5a1acf14f73cc865d9c40ef007 GIT binary patch literal 1150 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/resources/favicons/front/ms-icon-150x150.png b/resources/favicons/front/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..78c8cd00ccc9308179074a3d5c3b2c6101e833ca GIT binary patch literal 11255 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/front/ms-icon-310x310.png b/resources/favicons/front/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d5a8795cd5a159c1dc21baae7654e0449ed104 GIT binary patch literal 33000 zcmd>lgE3y#4O; z`!{~qwrktHJj~t4F91Gf<*a|O9`lCl zq@<&Sg@sBd{$q=W`Oaz&gX>^n1#@Fzy@|oX`h{6~bApBCCya&l%?1lgCLarn#6edk z4+H+zEsyWNPAS~XrX8Us?5EmPG-_d*`%kQ}U|ZXYUyS{>bJV{_PtH!e`r@QkMSfQc ze{eNo<4>PVnA8nF2qCILva2S6z+@DM%N~lD4{$k;>d{=xnsPjH9bOIdI?13k|KA^& z;C5P>>|+(mn(knDwUjR`Q4n)rJQ)~O1IyfBVBkQGVn#5-nWW) z(f_HQGBHNeoya=!lA!qainUI9%M)_n+Pd&B^OEuH2e-lhy^0ZIR!!F;-L$?E3LL{K0 z@86c(r{|7`IG1)GlV4jI1hBB(`qvC0qncdwS~+V$1kjw_UrBLwCl5p{Pu(tmhJ*rC zl-u)$`|mGp=bd6%`G;f_pQZDpjsndA^Ttian-+!5S7WK9GJ_x59E|T5#j^IAC84G|B?(Kh_Lu8V`M(yD`RK$a z9oT9_0@-VyJw=5Z4n(u>|0t({Camub95DY^yZ?9KAlXP|d6U?mUIceJ*I^5}zHien zS1L}a|9-UdyQ3|?H^t6Fqy-_U-nK`G5z(t+pydamh|2=) z#Y^^J&yhqPbct>Zm0;n*FmCF{&5{H!ZlDMhxVf=05R-7u5xhz7Ms@wy@xFJDyz-bT zJN&_!=oU<6^Mx@FSaRO}4+?vu2Zllj7aQ8OFP*Z8BkTN6SST;djGXLn@p zP3nIbHY*P!X`#EsdI<<0CDk7eze5w!t;MZ2Ba;929gjVgu^O9r22p?m7;83vSd8x$ zNoOl4+a)tOo;WclvO-vczmbAz1sr(~1<^7J3^@?-;$7Pfq4V#G&Wlbh;xrL@UAp2= zInW6__Hdg#hyCB9Q+l|^pA{BQKl8X6rD*SS@}PD9W424Acx};^WhuHXG_1Pm(9d-J z1MzoIW<|IDv-?YXrq8zUEPq`~{K5G9SbJEpy^krSGq;LLF%&n;*OLi6M0)$?$2*&y zyHj3ODF({bE<#221VIJfS~gmiNw3h#(Zj&ZhO@mug*Yw>s2YLF(o!1d%J1@IM0KSu zg@B~p;S;t951u+jv(HC@jDqI4fS&Vn#!j&pkPuFEtB*sVyEc15wj-y~*roIuOWWpi zS&j5eT(-pR#QidqyQc6Bm9IY|d1eQ~d|`vUE1T zAC5IR24vP1LQ`=+2&fFtuuM8l8(8NSd>x@NYHih8atnnkpP)^Yo7Qf!A6bwg^S_O3XMeoSEpwnG$Gkz97|1ab|GX34)dA^iO48saK`A&O>cG$No zmOSE_3*xoDu9m@{r~!smkBKh__dBJVYJ-~}JE$I2@0oVy(a96)&?ijRUVR(3gKNWD z56jf1^ffk8tdeZqjoY$wsH?n^3BUONw)Xnqvgz>~*ZSt}Og1yd0zC@mRsq1Q?PXo+ zM0Ust*$eC8uaEVj$~D@T8b4PxejCpaPfQWbo&hn7{?r+%>7v>;=dt1>Mgj~lD z_xO0pz=;v9KhA@|rHi-mkYQk9wJSZRZ6Z{iXnu*$SnNG3S1EAVNeUyQbcgxi~& zOWzK_PE!Tc?K`i~epT)_-1yFJJPiBZu1tD?n$Zc4PV-_Rms~Ta=pad$byC`SjC1 z-u|g`Mt_sny&I=F z`C>jFfM~Eipw^pv1WmEvNol^B!_GfA-+#8OU6#nqnYI35>KR@N`Jt4ERb`7qG&s7; zc~+({&8ZSd77xZtYcX+^5|CtSV0y;h#mVk&tOnq2=dPlQP9domEXdZz_QOjq)t%EN z1$c30uU9@FwwZeMigW(KCM|SaC5X^KvF?N&_&H^Wrin7fSa6L=#_D9KSfC-{cf2X3 z8Y27UX1TLwHQ>*P2AK=*?YDJMR4%+JSiyYoLt>|x#{aN@wjHr@ogR#hmUn}ZNl?^+ zs1g_oFDr@RU@S!+x0_sg_N~>H*f65C#o=sHMADn=T!065J~jSq!ee1qx# zIv8?*7)hZqQKlkpUf%taDiPGDZcOHyZd0TF&w_NpxeR1Jt7Hht&*_#K0yz3a_ySXb z<3qVJZW>FX&M_aqE65PpP8m1-N-~LA6-!m2GEcxHsauDFsR}tLxBg>sWpbcrI;eHS zyT|fufshkYurS+lEw!nzY$M~8na#d99>_L?mn&cPRCljNmmtH}j`&r?M+ipc4zAsA z3Pi3J!{OIqa86>g)N((BIU+qaI6gI(!4a_do0I%yQyW*o$8WqboG(yUM-_K2NfNrK z{l~?&N7GO3TzTtu;8FKwn_#K=Ls%(%Q4Ln&A~~p=RL$DTi4XQCVRPm4zg zIQz;2ThFGk_Q;)m_q<3jHoQRL9RK2tu;XTJ%T#mcd01JiP|qwmdBWaZq7 zP3hFIoV0T7O8^13j8f$pKV(y=%MGz+_M*u~vyHhgP;{=CjSkiM+IS2$H{%-oG9q>Ls0v}=1VhI^P5mtk;NO<+q-bqMNGh^bA6&V zO;=hbu$U({d}*eZ4fzarjtOQ3ceG!eo5df+F;H=4Nqe)=(PFEK$vkqhr!eT`?r~Uj z@`5C4^6x>bfpH5?2JTvNs4)?XkDkE|Dm@O$<@b8PoK@{i@e_g>;O=9q$z|)-$pX=q zLRLr9=8o&auVIl*2LXFKqQxS4DO;c-CQ##k>|N;V2w%$xwM!;HXORsieXL80`R~mp>%RV1>2eD@1~$Rjq?NNbTM-#KGU`P{${@-& zykj)BX%LgUj@Xr;IG+x#(seA$ZpbSpdC{!nNjmyz)$XL1ES%Dvm&fg-5juuj$+H7E=1~ZpneT`xcMD5;LX= z3_+s4T}{m_QfnfxEq#1H>szW@W__7RXCR1L@0Af3uC}TCUrNFLTSF2Dj@rm^8Becf z?;yv(*oW4&TN7tr6NL0j+kH+==-!OD8-QDsdnA{WACH#;6r@3o+ndfnWE6&AN;NKm z+0a}vkl~_~0K^3{QE;B2W^?06A>%Z$`{&7c^OiCbGL3Gg# zp3aR@GG_q(5+JNJf6502a6uB++6_ZZepGzr(LslbN(qnRUpH(=Rlwt@4pi}fP^)Ma zB0p!PWC$>RaT?sQ9jt?gdb2!#0wS48KnT0j!Eil*l7$_4^(uYUE74aCbF?U~uK4>p z7BZ53I=1Pccd#?PbVLaXO9kpx%>KV3y}OtdK0J$ zAyak|WJ9!CR#ynl)6?KzeMQIXkaF)g3)MP zMJdCGTW2ZP0al?;XDG{zaipADt>wEuxa9``$3>H@jYh2~wW_jB462IItp)lCp$Gll z-u$R=4vYQqee{@7z>doDeO)m^SOV$vs(VOJI$C8nM3+Z0Y>9jNz-@k8{*m{IswS9o zBVplZ=vp*#&%ESNjV)$M8&40yWltBaWS%9_A;hoov3J{@@7EWJ8WZEzdQgeeEXy}V z3WnQSIiX|s+PE8S@~=~{M3%wFGS@RZ($IwQ1WQQ5zy-?}?)}Zt(zJo!0nKbQvL#OO z=rNX?5_X~v#pVP0E*Tm1O*MXPN2FX3duietC@Nfwfg&kx)Oc!kky>E|fyXdt_u06^ z?*3X}cZh=FM3`@Zd@3*^H``v-yEdWi+r_QTWsKFSM|xZ7`b_QmErs305o-5>|034e z-_0>kE8smpoBuj`+3&;Gq=x_sL7Ibez-4n$owjP0-+cf@cSy`8b_D>a>K*0>4%uoL8A9(VRz_@*9yOu^?O%}>OiF| zp>dm`HUE&`!tbBHYw?WI#S^#Cai7uQX|Tx|?OuG__rx6IejDc;^?3UG#Bse*cwg!& zdNpGleqJ4nMRGzY5~wmqAulWST9xq0-?i{Ns&8!X+NL6xH-%n6wsCa4-smOI z4$o$V9*X1QSA&1$&PChDA5Zyp@-S99cU}3bL_>d4xgXx22BqyJ73le!o2^V|3xeto zx3#>T*fPpmp8gyC*uiimoWRL~J8~p2p+-aka*wHVHrU{`WCm~aIgxTFCYrmOm-%(6 z$0a>@Yx~!#ZgD-wxVT?palerNR*AO; z(DkFRGqqJ(o`o?#wWgcktcJ03^{ZdF76Atk*(d~`R6Ggic54az_NQ@R=m`gU_1eU( z=TIk+qWgk#Zd-;=fYW9aLOVwbB8hG|K11#i-i#1e0kwx-Ciz*nUi=nEvNCjUa`Id+ z{f99Mb8YpqPEP&kAS+psgiS9OaZ6#`r3`t3g!K*K;7RC@mw&$O;id|ztA6jkQ05C} z{(e5nZ9j3FLA(9s0C!QD@w;|t%tWlds0H`TgJ@UdJaqH|2W`p!Vh{yE=@<1n>@0I{ z$LyMIBcMbMzRWs9qJKozJpdJXokJ*Zd@;skT=v03@tAUV%{cdLC9S1fKS5nB-)(Rf zHlfr>YlES+(_dPN(P4{Pc~&w`6k-Bq9mn!sdhF3YY^6{rj!i_TWJEADAr%2frpT9D zQc`8sTPT)C6AQ762gS&AdDaPOoRTg^Gtq!>px@0XR8xRhy>Oj$&z`xfg>C9S1#EC1 z^(?d9>Wyjo$7fsW<28o8T6xS>PAcOK$LkLwY!pPjojg$X6+O$g6ehZ3R0`W7s-+<{lNsXA&bI-hj+PMz@bE{^{@Mf5}HVsO{fn)%$ehXg?|8 z4Bj2H?hK~u-6u%v-S^aT^Moak_EJMxm|fx!c^N;c_Bt!w6ny(GzwA!1>wMRL&xni{ zP>@WDvk|plc&*tKk-S4gLCfsb^NI&U6=9ZD@<$vT+%F6C+%(3~Sme$O_NJ4&f zP8iyil_gbYZ74zeiM`>Xu5=`(_(94G*LO=oE|3gQ=?!=*#fma5GO1E(YqgP#6csxi zatC;!_wC&?@~}Ahzx1X&WiaxZz+z$C+X9*XhIx=cK*vEF8`LSufpw)PSkVwn9X6I9 z^?|L-H$HA1Ya>m)>fH6;+Ypj1%jaW%)h~JuaO|8cLx67uCQT_fk%@O`U6fd8P4jdu zD8&T7Dt9Vrnefl&TLp~@^uw$xpULghiLkL4P@;(ccLK7fsAl)hNAGtZz8NK_o!QfR zPjtFma(hWW8MBZ>v#i^LQnkxA&l3h@{pTBbvXA)%l&`i-GVPUvG)<|Llaw1TrJ6FF zowiXa!^S#FJdtcv*T}uJC@yOh-AQGt`qWy6Cu5);ao8%>E90|2_vBw6Mm{w*d2~)W z=)@p1aX%eY({Hk(DGIvXLRxgq4pSIPszO3LI#Q&Y#!KvK-qfCDx0C!g;zspn^M`#g zv!JUTu}b8KqMV})=7 zBpG?T-EYpfQ|T!nNU{FFjcJg=$ z8D8jYGhTc(HlqPb^LrWFpFlc6tgrln9?g;`fjBYoj18at5-7Oy1q!3~hGcrbJ#_qW zP<=6)S1I(r;`H~1Z5QWgMJiP4%GUn+2_3IVaUrkhO5Rw)jbr_rSv$f|mAvGAC!&E6 zm3c@o8dEC#=jbGqr1SkDHY$UW!z4?{aC6o}+(pK!^~|=&DxT_Pt4ZsHKw*{$rW6MB zvofTdd={evo|plOG*NFs=gMv}Qn;hkf?SdCk9HUcGis9t|F}ff_a9kw*FoTgQLXm( zz4i0wZ!PcjB2{%Xht)=G!`sKq=7z6(KSz*X`pQ}WCcr$M?H*;|YYN^R_r*TS?l6^3 zV5xuf&nE<>>-+kX8Bv+uaTwrS6-F0>J^v$MCE&Y7!okIUTZ2UwtDZr%Wu)(;)f;d`UZ;D<$GQ55*iV-oVTwHZNgejBt zgxg7mZ}m#6M(~=SU#(g`xf%$(o#OG|Y@Mn1dqwUUHWoax_scc9(@b(#*fd=kgBd^8 zr;xOL+sJYU2JiB?gYGI#ZP}yD0Id}rE4fX%3e1c|cFA=_d2mk$-udfAY&2bWFy}*< zfm@%2IieMQhQ&Eum}?g>TEnPCgfCbk)bHSW0EZLvX$=|bk$QI+et2*tqZwwxoMa>; z>U2+zXFSQl?oN$`YsK~X=7x8uN7JfleP`9VsACsS(ck?z9AO)-FgwQDiu!{AGOYUVaxAxA2x5#p7M@g;IgS^}SS_&)x1exm8#7$-XIxE<41?p$=}Sxelx zjaM)E?LGt&_FzcapcJ!JwSuaQl|`mS8RD4}efV^0JJ}R+g2|g}y!x8szr2fS`Lnt> z!#{9h^iTI`gIV%Z;p}Vl751y-KB{UMckq4=o{VL8b8F{$I^4YBp^dqc)5IMGrxDL);hbSM#p*2KGqtlrlV z##*KQ()0>xA1l!$o*-^WuAB8|1zHb&7Uh)GP{YiF6a%VSw}o08d}{*lS=&uX;0k?21*bN;)wzvg#r7@Q zf|^gz<2CwiXLPI*eXOS^kVJntL)(eu7s=lQt{hJ2b4^PyvkdB-fG!@>4LveK%NzVquIT(fDfPdqO_lPv|~W;fUXYTdKL_3dI`0tgvK z1Lb4zaaFB??bWH)4*z#$MR5t-S&p!@G*CYCG+TxF7MD`OG&}FQvy_FoODmn!S*;Xp zf^K~iGG#+1^`(%eLV?`mZc9};cGH8N;ogh^lSx38vbMYBdhPCmb0o(I9*NesJNs3TBk-W42TJIoqjSDqbe=5LdNwrt* zwn6p`H3k*bQ5F?L9#6tB`2-4}paW*Lv65=ch~o-Q9Q;&E&M_-WJD%V+O^SZ=&JPqP zFqI%!Mf5VUJc((#k+3|~P6G_F-z4KB6GZvVe06D~<##Hen-;^QrXornUm?x)6H}#| zsUz2-$2sc8PO^72-Bg@&y}5SkZ=GFF3#)8zG@hdl>N4ICG`-#N-6IT<`%K&$S7-wvZR7UM)}6bO|vvM zS)F`mRJakiBbwLD7@M(FQub?q!P7htGF-t8IZ5qg6xb+cbr=sbe$5xnFqE>`(C!!x?~af*LR4I)MfOv{b@` z2P$XfRJuYFM0`BuiR3BD7<5AazgY_XGts5Iv6LG}F1K|gTxt8|u)9)80IDUA@7wM(KwFN_QFf!82-4JR<$kDE_?y7 zs@TsEXkm{NW4Ij$Nf~^-)}f==HduH9CLN7kQl%5q+w4G6rs9<7EX~Z{N#?^K2%&#r zz@<=+?gR}0oU#RRv(dw?U=iH6yX3GfnP=JxJwyRDBAO=pmmw_i^oxH8o2$@Mw>G5( z!*aDir9eY(;H%XfY&jM_ojis!(p)ztgSSP}FtP7+YAWuOp8U5H)ehkH*#_Au&CnCyZLtth5tSE;tusytdchP9R3s~0h)pEZ)^Hk@BjihCh+ zP)yey5xEPhR%!wWrX1jrvsR%Xta4dkRj;Xhz5Hz1KLc=4z>0p@%7kNjLC2V}tHt;z z`N1Bgxa*$xG6_6x-b38WEyuCg*jM#vWm zK|o@t0@Wz~wuu(lrvKT@H46K$D#LO{V0c?-GE}e-j5in++YBK#N4O%=1C@Rwx5&si z7o3Q=-J`XI-z8e`p1j(lGD;#()M0x2=~PU`o&6WaP8l&yB%M){A#xS^JQwokl*7~S zLk4yYh=DZzQ8PKVnYuZ!<^eRN?k=+61gmwA?$?H>##Faf*pRB`+jFy}PvC5iRH%#d zHWZoOPqw~LI1M2>YTPNIe8aj)sxx8l)i^hI_sRgQP>)xx@2;Fesu@St!pES5*NEF2 z`bOx6vNx=W|1DoE!w-5X!16@_8wAUatVeotchor(Q(Ieu#ap->;#3#1r}SGH4U$^$ za`vfeskKoAAd=y?j>68aXU8lkWc?kt#|Rs;Kui!86t#bq?D(=$0Q znE9VARLkRxH2%yjmDe&bD`~NMovEU@YGG|LTtD78N4o?dktn_K0TRO7pjju{5c?|= zC(0>p{ewm|7aCh%IY<=!g#BW%ETx`WNMBo757CDK(w_ls-?$sDe3IljIPf@f9Trvy zb^pd>tKy8Y>&e^f8P0=Hr?lSk;%G-s3(vx7A59{tSvk0`wmaDn~g1{~E${i|u_ARl7e@tuK9mo79-$6Fyj%0}RrX7JT zm{m`;ML5rhQj%O-!t@ybU(?4yu*y8_uZyIx>)W49L|S+d#xnCW9S`H)oPB*GSz5p` zQbnCD#Vo6mO<1L?&YtS~+z-!d$1c-|Lz4uIV)?9xmtJ z=6n#-aKC=6N^FKj46DVYWiKYkAMH_XU-5C6ObfVo_E@?s`hHmX3MQlUb!AmD)f^Yl zc=7GXic*8!mxD|{?pdP{ii>HU6E&98iGx=}RVDN2Fiw=Mt8h*|4pd{q#mo7`K=#8N zvBp4_#v-7<%!nYsPP*8d)*4pH2o>ck&Kl}MDz@06-#Ge`)bEsj&-;dvt=?6iH@AvQKZk!GMqq!z^+Q%S*DrftH<@zmiq<4y7coWU$ui?1R! z@KqvdZ!mZn$jAit^sRpL^swfVolalSy^#%%bmCw)mZj-AFOG_(n#+j7OpYehZa{6^(34P8OPX~D#V5IJ zC*4VyK$2q?UweRe$i2iHgY)Krcv4Z=88)t+NcXFq>x8RwfQiY5X+3GKy}H9sw$#*a z8I>DsqOB~vlXrCDS-JQ>J7> zW8>?TO!HE4+QG)%`xu}nZ~p24IMEKe9ZtEJ`D#E<^$*vz-nO`tJg7RIH@t!DKTjNz0SNKGP!SE?fiULf;UUi9v<)I4cT|@B_Ok%n+~1Iuu)tq_ z&k)N`9OV}kksLGafjNtdFF|dw7zWKcbmy}rp4NTfj?E75S^J7nd~Rc+4*rXNa8~Nu zs7h>eqF8)B&$>pfK_=jxjHtB6D&SX$dDChMuf4{H(qzzm zB$v&KIISp`5mbv`4gB$GM^5f~G46bqQ|UT8!Kh-(%h^J0(!+e_*|QJmofq{fSqrZs zTR^MmiMdp2tBz^uZ#B81#|CXyFZ1Z{+ zlfE-R)xeZ{CutG*5QMArn8#zcH(W0YedgseFtu+a+c1>F{+K|O%huuNyO4pbCX>0R z{Nw!%$b+tyXQBtA#(=$HDff=j(njU^BDX(r*Lw9eZ2_3Z!MSF3tSd23)90%WhCGbD z{BC!|_CAxud$mhaqyngDuGru!+$zYWG=Ee6LJmIUY#m2sj|m*MCtTK9{eH-$W|8RP zN3Bi>#$3>5@2ud-hv0Jk? zT=l6Kt|<*F6Qw-`lODnJL*U z&3Uydua}@DYsz*a$!Q9%g7Rr7^P>C~MyUh1U%*53?UFfinKhw682H&#gDxzjX50~1`MgUk5#4o6EG^pQP}LGw*#;4 z8pLzUVJtN+mGJ2t;**m{``q_epG+k)+l9u`gmKrQ6KT^AoLVa}XPWNJoT5~O)uU(* z1MM=1NvpK9SvgXoQ!)_Rc_TVW@lQ@@-nL%%)YN2=lzHtuvC)Y8DgLzPIt;F*; zcCF6WTY;I8Q6=46yo$8vPmPkSG36yDyLxw62T~Rl+Xc`%!>Kak{o39NTDkBCHJ@QT z{CD~D*FN4&lg`pw<49iBrl_3pWyY;mg$AUV%q9kd82e`Cr7YiMzs@b8pc2rCHpla%xWEiSto97UVJjX&CUyjOR6&vePgl&hj+fqmQ3b^K*rLp z5+36c4`cIQ>%J*yTJy`K+>{5Jsgbhf)6IH?R=;taR(bVnLF+{<7#DLtFjz)&fJ*us zcVj2mA9`~8t>Im#Nc{o#!eOQXHikPwi3i4%G4t1%*s7Z(q1%-Cp_G=ZJ9mC_i#2BP zW)sT=8Y&G=S~8(Ep2!bMc!}KEr^&Qgg&M|qS>hOJiGBA;1XW_6J=TFYK@yQ?OVEYV6ZmcIQO&m;9F^NZ>EF$iER zBZ~9mfUtTIST*Ckib+f1vw6Gd*m8W5v~E}E|CnnswR}N(&Z09|kO80P8uLn;?jefK zDwCV|6LG}aWX|$M{s}rCaaUx3u|OhaBKov>yUr22<~gHH9Y1#s6#;V(EigpB%>Tp9 ze`6I3)tO3K?i#9^?)OS^A6V@*xqr23-yPEmtefTK44IWe->?l|hprWo`4l0HTuYpT zvMDXRfn}09)~Jg|UxWK$ZL{JQxS8F|5*NCawwcT$zq; zUoh?Pra1Vr@*xHF26|OsfUz|7lYne))S`E;zP&0Doqb*ugKh*QPI?36S-14cwvnoa zI1k(+?>Fj{%5bu_W}&*O|9~mz4c<^%+G+W@$78YobnI~VanC`x8R<*28ymz{MDVAn~Wq~*IZa(R3k!UL+>(9*;fR`BYl(c=9lN5|P zr(pjnjR{_mVyC8OT04;IXwB=r7rK7s_H0dR<+b&Ga?}k>uO!V^Ha6-6Bd1KuOns4d z!`CK$VO!Nr@?C6&`p$pNC|aWk%T&l-BqCZ8QmxiR^S{rC%4bwPf4%oe^qko$Cu0i3 zo~dNgMZqsU9h-;M_-7Y$bB{s_0URn=jCeno$_%@Tj-P4do=JJd#zj-sr=9Dul9Uh~ zn`0PqqDZHvrYfLs8k%#k@0RtoIMbk+ODi)5Oegot$&bc5>JImwweJSH2W`+duuMCo zzHkm`Tm03@jycPfV&aL8Yf%i1?Nu!EWJE7+1dWv%780riXfFF;|UE z&JS~^f+p<8?pz*-lyMVDO8rOBY@BF;!j+Cbb(+Nd-y+qcKQmfMr>-;Q)Z>3RXv>dk z6s1&*t>tE+>o7svC#-4=+DWy_q{BbEK4y#S5ecQ9E*ZDLWFb*)7juq4#I%gI8dOH;C!8B?X%wCE8J5?MABUDOim}h z@fv-{R<%)#+#kTi1ZfJss}ri2K+}7PB=pJDO{#kkirYy^xpbo(-~DByByD1~cBUjvefd+b z1f`j(c7mFM&a`G0%>r;6jQW`M+i&>@zFhMS?}C!OpiS4A^llNp(fY=s z)%nHGeQ7RqJk+F67aWW1jatRn&$Tx`)+ha!^cU4^P1KixNi9Zaf4+Xj=f6(6CUpOy zq;@FEhKsO9eSffUm)UYY^F7y)pml#8@mv^xoxmX+b8`TIJTkP4uzbeBi6^uEx2Q3V z@CrgU;Tjv%#vXY9y1RSHrs_y7CzG4zMct5XR*WsTjP)Jr?Y4A%rX^50IS7!#2aqW?$4law^;m+YI0jpai~3N#gq zOZ*&GkyAo8f+RPE-naOfc=f+645nN(S2oDRiK9qiW&djy^<`7h`#0n|!8j=oyOuy4 zbw}_LFj&UuttT7)$tzLt)A5L`dH-``TZJn`b|kl~1|2sUeXsN{TtSw19To~LvKFsT zd2#p)E(e&q-z3@qhs)noo=~b~X^_J0LO5fh`D1Om^Y<$i#0aX1#~bKu1#QKy|9{GO7CSMDxe`1jt><(k~O`Q{Xkq501I zmx(|1T)0<8bGY!#r|0y_ws|CUVq~LqfTL#_heh>CKE(n}pcf0W2jk;a?2sjlrM72t z)&6Sd^_959o!{jBGm{l%HgTMMM1T3w=pnE|b6}aYi=C@Wo(<`(Y6E=xs6fL&#$qHp z+a=4n_|o03H`Mdv6Sd?|Kg#UEc?pk`}+sGO*SB zE9~JXw^P=5rE9#F--z~2$Un(4Px{TVqO}%Q_BnTkr2!$dA|s`Fwz?0aHy+gofy>|6 zsKCZ!$}xr6{TrA!chN>PIf6A9);DeRQVtX zNx;rM3IPp>ot~aVF0P}LDFd+b8dAvts-2|eMN?Qh-;AD7Uxl!Il5r1KGTPd`ug+4I zi!XZyqK?Aw_p8tPsJ}YM0x$?kL{YZ0;jP)9S;e&1v$tOMhM#CBpJPbX6@Q7CymKVD zh`M`sR9e#-LH~Z<0_Vw(`a9s@ZP;)z+d}Hjuai@$%T{CzEHJPLGns?+{>#HA z!Bxc-!{%0%#0$*Y9AE;Y~$WCVoBaj>`lncMegoZjrb`R-XP^kJ~k|&P}1ywQH_S{MW?FDNzFw(z^$>3+CPPBX%}j zQAaM>nc!ahYJ&Z;lHA`YMCK@CzXdZvPhxoqb1&`9OG0I()%%5f&kQvwF7!ltyRiIbz?A@wN*(_p@KNeBYSBDQ@{CE4js?FH8*Xv1xxvvtGXJ zBYp}glRWa>sK|P2-KO#2I{E;oU*sibvmJn9MW0kOVEcV~>3>z%<%^(ei293}Cy&1Y z5XN*Z%pSG+j_xJT&)yQJFp9Lj=)qY7Nrr@kN8&Le4*;8J3fSDL# zTAlq|B04xRk-~y8wz$72S&l+@TcW@D4*BQ}Hu88pm=H#0;OBEMbz~Uf+kOUY;=6o{ zAG#k7csa;`Ys-(!BG=%yWU$Ilt=!{#XCU+EZ>P>HH=)-lG*ZvAoaA2LF?Q;|PdJyU z$qafZ-s*i)Ye{#C} z=Ixt~swO$41o8B-Q+T^DrXG6=^HH7rAd*SN{`HDMO6KBH5F5{)3%36v_0&i*3hp+liJKKuQKB52{RORqXRkb z#V|Voakc0l6q}8X1G?V%%wUQM@riwd0xBG75>)%>*C1vzLQG0(a$x~@G47 zX!>dRO?KJUqB;wzw^x%pI}s+}p`8KW|E-XApvMc63i(R%@87?(fBPr=E!RPvb38ea zJj~7;%d)g6_iCeszbpI{cuO9w76wpOQmT=USVT^Z(6I2djXAd!538#1-_&z8K^tdo zQl0eSeX%zd$d=%d&rwGW;w052!vdg55|RuCrYb3U<ADyCGXBL|>%6aoh)d&- zyLsn7>BIclJT(?3R}M;##=Ckix_aj~=1!Z%^GHA=ICFPkbfzAsj-SE;w+ z^9Uz}0Y>njS*+o{zWDv|)4HrV0Ej>Bc3}9)W!|bb{0Q4z69uA`Ptkj?lD8fU^p#<{ zd6aW=b362wPGgpzet78S?rOc=vbQLV8~r9lHZwEx=OWGj0By zXwRbKpu;vgBM5&=#M$rJl(Mglx$|?iBW9bbgqFhQM06T&qt3Oy4`rHaR=coi6Te@r z?(r~M z?UA}=m6wO$Br)|#5;7Zywudz0aA5-AFDvZ(wBs88+4Ho&N)k-}GfTb5vv~4BXb;&) z+s72y`FP_mHQ|r;P0gnLU#SO=$1UXj17+jstybl`{sVv}-$fgL8ErHMHu`M%$eEAQ zm$HX^=epr}uk>@0ZuX`X-5tvll9A_iqQ-+ac)8zM6xfVEeQz)0N*<6m5(^ZkCl#{5 z5C=zbpY>m1zaF@wuBxhf82o2)psUn3E?535>K)J#0%y8n8F-GN)sKu(v{|EgUP5Ar`!DU;}wOFAR z@k5FK|Mm9OQBg--y9NRR3J6ltB}j*KNC--oba!{BG)RfGlt_t4cX!7~NW;)Q3=Kox zGw;3Mz2CZP-GA>|%n}#pmuH{7pZ)A-pW)8J9q7F!F!{#DA@RXAdTWh`#B+pxB%kh$ zf!-skitDRw!CO)qhvtFHy0)(6A+~SXMA9-$GSVA4cpuL(`KX@s28_L8Pko6!h&U9>@AN#u?%KmQdxoRq+|i@$ zQ+}1Js;s(4E4|M;7DBZwUKH^x+E)v{=l1AqKKEMGExocT5to%WNkzBWGrsNqy3NAa zIB0Bate@-t;9Kat-m3#h$I(XNmKQTK^I=u?Z8WyXb@{FkMUWNYT5FI*hf|s9TiXwjfbf5DckO?9_04Vs@53VN+9doLF}C85L|ki863RoG4mx&j;Fs)pAL>)c4`H zv7}wJsMC#g5mgN$MEsiqq4vw_(~e9-mo*rJRtbXM&ut93*;y}Jum^78>~kL1l{wPMQ;L;j%}gQ ztyp@C&;jB%8b~fsZp*RSi-LYnr2ViaD-&UnRzp)0t??$#n2D z65%~Ef!t>JBF&2&ON$ z!8fzncM&;vB0>-e8Jg8zC2h?7aPsVWyTulsM75)PS45fc4Q#LE%O=Xq$94 z^u0Sqq`Ql9psc0?ld)vvJ4S!0$=PtHoT@hE*4A{i>$0{ed#O6D|3Z+5m$zv;V8$M+ReGU8f|qeaTA`+Ouk!5dz5RVz zo5@ZcTq(WfWj$;=xQRYlcvURH57mVDMdNXefsTbq@QBpoEs8tx*qIS6{WAG5F~fj_V}oe;-oI%y6)y`y3O3k=-~u62i9ZgMYirnA-RnK zPBg6Aa_JHaYGss+iW3$o%$?(L(c%}NQ{1k!>_uK@VNuk4A>u*=Na5z?sYX zAm8oE%fVQ9?Zb>CfRWR1;dS2|;NTOyw1?9fn>2gn5g#$YI-_2cW z7x*pdYbeCq9vzQD_R>@?ID>H@?OU_i*SB<95{97IFY%Q1L)kiJV0bCI+g4|x?qxtg z=LlOXI$LeqxYK@Ch}E*aeZ}csb`|(cXzLt&``#9Qgnjn;XYp%HRLAh!AhQA`K}dp~ zlGynZD!RdwUo5PLL-!YL9KY}jrSBX#*Vg9xT|TI^7XltBLQxHRk(Qmkm3@!M_PW2l z(9+kBB~^k;TMHA@b{?iJvNgiyj2&c?K4{S$>O9k~Ya73_r{OZS$m;8V>6#~z`qtDy zP@%5NMy*Ky_L0vOxA8v1)HZD@0r&g|M)qfsX4}8dk`o2mbuEqYl;sNI$~iCJxgC&1 zwE-pqB2w7WNYD_!52>1SlS)>hmdC48F7#f*D5mgxx3L$+p%LrYd@%Nv-PwrkTfPdz z#u<4N+EaxmQW#Wp3QZ&bWK%Ae7XvmH(zX!ib!{Wv-I9vmPlBV7OwLN4x=ckw!$3Y5 z)5GT9(Gx}J6aDmprY7qnewc2gW-=O;8+qJ2!h)c73n4|(8IH2xMK@l(aAhUW5rL9f z*~zOgj_Ys^%#GJ3n;P2iLOL`;2bZMte~M1Mg$&p?IK^t6Hr`^6zmsJIK|#r9jPql6 z$x~3}4ux7*-VDGsZ@25}|26ZSAL(YNdf zyA_4XMWqj0mgbVRCh5~oO4hM3SLD+fAZLLgo3to6}GPt;A9=*?pq z8X7q{x&4c6Q6$Ap1Qw2gKY|Y4dd*tr0PS_kAcvMLj@cC9g@tO7_mZY|Z)d+FxQb6} zj(zro%y_N(@Rd%z&JbU*OMSX5Lmip0p+{5HDfPj^tX7M}+F;*$TxQ?yD=|%X!-|tx zhc8hP&TZEnR&dETm9sxq45_ zSR~9mMqYa4%JOt&aO~n2WXbThlVaQU&wIaSLPi$X(Ha@EV?0&-xXe8Ew=s**xK9j} zEU$1FAU$?(9c?~o+t_d)3@f*|1#fl=weJ1Iqw8;%@rLvN5R$LO{7;zkX+G+Gl_Bht z92odeZbIl#MF$Y`k$gsP)8$33_qqHpnxM)h>Vfv2qxR@-rYh*nL)5CfeMG69WCF3I z{0iotsJVQf``2*`N?xaxMUL30Ir64B5|oW;HGiq%jMC8QgICv=xxNTheR|^_JbKJr zBB)W`7yFf1uwV^cPt2zDTAT1P-f5M1wnCu z?)7fW&aiEd0)160+(pPZp`-V}z<1`w-v;q}$oqIi2l( zvR`a`iI9W6*G7LmIvk&S0~fu+9Bnz%`yO0)IbWuut82el|t0jNLhcZ zyegl6@=d%d(JblUj--fj<9qKkIvAEez!$qIYOOaBy$f#5>Jrxuunv`*ZM*4vys${9 z)tI){&z9CN)8lNl3=3AT(P4Znd3o%9A@OysU8iw((Sa%YJ#WtTs-;@X?nCJN{%XGo zkt7lDi)X~t?BR58peWX*<>l$!zrRAOE%lYRC?0?NX8$jt(_$I?8bH6Op%k_WOYYBT z{RSyYz=M26f8EpDi%Q6*Z)#;#^jZ(nk_XtpFe7$A8Wfkc^cvjX-zn+?7o$E`KH2!b zW@>rU8;|Y@Cqp=4!)jlrY$*3v_vHPf6rAKx=lRJ+p3DuM_~1>}61e|~a7N5~f#N!+ zSLyw_`r!y6u>e8X^OZIG64j=2x+KU_A9L~mB;#*I+&ta`6x}_wsoBd*y;@d-_7aVn z7q=fT|KvPXXJ{ck*8?Vkq2OjS&j(+KWtdJg`s=YNln`)3gKFUavMJ!Rf*I4dU%C4Y zs|S2j<=A;v#wjwv(T8_VyV4RB+{3@P&34k}TYfB&P^Z|bOZ+Bx1Z>b>ln8uia#Z%q-ber<;>cOApCuY0cfMb@fiE1UOYTHT3J(5 zQ@AFcIAo?DaO<|@dy=j!rKN+RPsDb7JJIC}KV@I@)6z9qL8I2L%M#0zpJsia@XBhd zKRTO|>x^{jZ=(CFS&s3_!uK78oeoou#d{2eC5xEecpCdmKf@Ug?QDkibG&zGc6r-S zH)ux6(MiP)MJ65mMm9q)td<%gq4qtB=cXiNZaMF~$nC2Fr+4;QjKr21Y&J1X!=-_5 zd?dal6D7FQ`_xLX;Rzex1L(=24okFc*zqhEmfzZ^D+STGv>|{DblT8<{j>g4R;F4u z?XkG^gHrE{2xV>5rqSGv60cJk9fM_sXu<%yh{$Lfmj$2GDoU-Lbi*N6!TOCUG1U(k z!dB18%15O2k;LGVDTTNtncOz3vDrX$c6VBRY?VlyvtWF@VILZ6LHNnybA3BJsFm~= z#8iwlO4`)YN+e2=JJQQR}x+cE7z3y*P7@61~F zEGeqWZ9J@GW)w0hIm6>etXB!%6qwA+kF&`LzN}BbYz-eyjn43oohmLHtM__bs0}0D z@~IhcBDJm|DN)~RXBCt9pQ~29MmxrN2a0(lPVeXEM=I={I5wutX%ww*OMPZ052o+P z0TN^Up+it(YSxy2J&4Xq(@*HTdk#G9YpNej>g^i3RT$wxvT;+fve;$v)?P?b%$vcT zcD(YigPB4j#5+j7)3v}Mg3G#c2!2 zwg@(Lo+JMYA_N?9selG`gOB&X-ckfAWaUMcz%Xs|iM|CTtmO`q3J!|1%D#lD{=VIOnJ zYCJy?cF^H!WLdDkJr#m46=gn02c-Qw$s)tVPB%S)%u&Dmn#+m@X>wt$ts=Jb2mG%? zUUr|=<^+wr;_~xs{b|T{GMe<3RFNv=%X^-`CgX$!G38b9-32TmP5CyHTNoFr3YstX z22eWS3m+HN1=4N)+~1LL<|g3BX7$1?FJjN)0%UED+-Hg|8q_pYmarKT-CG#&-Exv0 zpS0-^qN*EiT-T2X{M*y`<$FelIKqv#eOUJI`R3!MZ#rK$Up(dO*!ZI2*o%J?Pt|W` zS9|PL(pV2^ak!V4@mkgsrlhMy>pcI6^97E56~-l>V9OI_L?j5uk;EYuXIH8AI&FQu64+_HZ#g`jdUn^#<1FVoJlmEEHAQ&VO zBsu!~Mzjy9P^2^&yb7Vge!lt09cD6CnqH#~%%jGZU0T{l#TNdA)>wpLbVf4|2Y$q` zXbaWQYnxx72xAB(d~~S$Cs5g08bWzOCr=W`f0W0LWm@~=$#(@E(fTH{uQ9J)2-sOq zv;7nzZ2R}4fjt~9pe(vrbss7@$1`4uE52Goa;dP@fycY_c+jPTdmuX6=;GNf4wERe zbIZJ#81)AzNS59VI+e@#U6w+Yqsk0XriKrDCPpGiNn^zs1KIE&s~l&T9lDRMM%x); z2KI08J6&<#Zw1`M{b6QXL;0uxw=g6oC*KSu)c?`eCJMGp#g4naZpPIbl={NsKsxp` zBOH^bt-i9?e4O@%~-gkb-$;C#e7QKg0a%|Qfnlt0Fan=+n24>;+8p9 zw`9KkkC!3aH+H}MvwQQoo^RhnP=6sWX%`nUCGn*(IaZ%qO{E(M1G0idS-R0|QN_Z= zr5vTv(Q>1c3=yHHADAS}Z_w4f zaBLi-cYC0FI1GL%f?w4Z>Pmn?Uu0=`EGuLZbo6iT2wsrP#yic~$a1IH_bD8quM_Y- z@+9x%F26=&1Zm3A#_*+{g;Gb80F-+@3QBZy6N0-q1E2IqkRl z59>ZR+8OtHf-fO{7)0kKY;xF~KeXAyX7(KwM1?pWe>5V-3OdrpUEII~R;*2yC4o7J z;ppmX1LmVBCYwJ~WWI{=F{C_tzL00GTnqB%%IrYhN76&xd(tHwra7kBYe17g6R?kk zFtOPFvyju``?_(k6#f0ztUQ<9tZ9s=L*zu}+v(6QW_&F#xB+?giM=lw+~;%PuqgwX zXwR~2*@SNW1W-j*^G@D}nv55zY2NQYN-ATk0xPxv?v)8MIqcD3$o7sMp5aRqkF^?F ze~-6RiGn9?^hS>cA2$&lYxMp{(RPpCT7V;K2kS-8QnB53wv^ zUGosA5b|nT(D~)?_)xexIcnN^m1o!W%`1?UnZgpV2Oy;RuKOqng$hS8TMEZF!?d~T zk#dHgF;be3zGGm^D1`_970>H-e}{wd$^YwiZUzTpGhQSNlR%}tZ3#zL%WnA+12S!X z-A_bd%O?M=#W%8P>N zL}+414JkW+*v3+u!lrFe2HoGm{x~&3z1$8%##-|)Oy0%Pfo)4`=bE~oZdD2roV{$q~mhbK86e-#hu~eUkd3{U^~NUPQp{3*Ku5$J1@)g2F=LSFdu* z%F6mWiKpwx+@G@2)jp2+3z27hN&K?lniFe1JPpV;wMGvo%BE9`s~sO}aLlgNpX2BF zvS?{}e-t>JyKrLKtDYuU$#FHLj=-A8OHJqNJk$x0Tj?))=dj^%F<&-MNEy<7Art~P zS$96o_93=PqeQ`k5sYr4w(g-s+3B(D>a%@^Rg@_={#@pToXpJ3{7@-!1Z0Bkyt%J$ zhRfC{U}GE(=WNQHHiwB((a(sOTaykc+u1<(o#jINg5rR~NP z*T;C9vPT4sUo3BzJisMFT^-NbYpgGoZCWgt*eS26=}BVJxI8Nh7>UGt&F67I%GP$n zX#vSH^YrAa&*;P^t;1#-$OnS#v9pIK!E|!`HqPeN?V1DTlorZ^+P;lSX03Atur~m& zNWKim$eSgR#~KFWfiowW!v)j{NP$&!e*=> z^Nfi2As&>_{%&-&sSl0+t=e)+gZ$muCOyT{($8^sT$!(L%@RjZ&s!Qh&grG8-g}Za z&=l?jocVB@w-r=1{HDParzpE#ubV&(CY?R9Le)nQZ)B{QjPL9b}FRN~+az2zGDHRM_J3)rz6LkX)7Q78Wnc1?lP4@?5RnBDG;6^vD zA+($3Y2p?Y*9#lN)Vq|nP@TmeEw!I@irrb-aS|4cmC?m1VOXJS5U$hSi-B0VUA3JY z{A0BkI_mLzugvGIIH?={s0Loat1fKIt^Sy9M|jPOqIvEJS!8X@JYQV!L+}P#MS(YI zM<|7#Lz}BW;KvrAIcqd=>wqG&N=bcGzfS z8_E{p9iAPd&Sq6d9F7uXv;EVw=i@7-Hj%OA@+HcOc8S0dC;Td=!siuxe#Lo~o&v&8 zhYb&ok#*tUd)e(%;Xya{N`8#K?85sVUWQEHhd=@1Hm5ANpCDb=E2;L4vfq6{dAVkO zCTmEOwX0}L(dm2=MIzwFj^yM-x6wCEQS?3oB6=NNtWj23TU%>VT3wG)m+~S`u)%Yo z-YGcXsxaWEe%Z+y#eFKp?Y6XO)vUzEaQcgRDyjOfs&gHmqZx^q=1$Gz!%hg+-ly-h zVx?%j8n&yMwQO(|3SILdQZYowrCas8QEhqk__q)t)wAK_2cdWt+dfAu3*JeaFdLkI zxagg~B`-Rvu26|R5ju&G<{+)z$B>C{u|`4_;@rZwWULfpj|zf2H5##9RQ_6^_pw^{S!HRa46mh`GFROUg5r4;wN0+Yg zTGqE!Z43KE$CuB*%)VH@WDThJjUsNDObE)nU)0MoOpmqNl?7yPcCySddALf7d(w0` ziGPk~`kF1$(OwLt5_Q4Y;G1{uhtX8oRaJ)&t59>jZ*B{vW~1ZMN+3KY*g7HTtEBe} zdxxs7JXFc&ypFD_s_J{K12uMWNtm70LOLO&GitqD#Vj>wQ^;3|d{ft#bmzmt)1A-D zNY@JI5)>Q~gf|D9X#qpiacHRt@H-CyXpX8UHce$mBq0n%l_dJri}|l|iJZ+s`m4v* znM1|TN*%bhtQsc;$i*3KY29&t(s^OM(Crq@QBlN8k01D!&EK=U2bI<)fNcmeOpB$e zS_9iZTkj33EeP{7%{GVKhL{JK_JJfT+qc`F#_3)ud)PTsr{^>rnE zpEH4KZO2!-0og!C^f!S!bj95Aauc)(13=ER4TmE&1{(Tap>8!I zMov!3d#lFDW7i)YkD$KLxPDkl+l`r;uBEs4cR6~O<=X|2`}gAHS1VI0eRxRoBt1T8 z1Z>y@^rZa!N^4d50vc24%##APZlt6rt&gA@o`D@JPIWScvplXx$u4CkXV3m>r@n8< z{2`e+8W4uFUKpp!=T1^Q8P^HD*icRE=DAdTL;kPmdi=$=AV!9?Z%*^enxm_7qpOmm zrjwlIUDYaY)S1+wUWvvGvV!!% z;-K7HEh$U_2e~BBOw&-UvQ@S5MuX|OEK4@%Piop7V~XvK&WL{%@l`qNe)un6T8Hu^ z!r^DsD0(C6C!n!2wbXRf4Z*5H5fzDR)_jBy`z!aW3g7ed7LyQu*ykWHPjr391dt7u z*e&K>yWpQx6(~duz6NJY?x|W&oKmoLbYFlw&B>wq(nDRSkhv-?dW8$hM81fPl$*PY zwyiE~(e=3+8@1wpSryQ|@yQb*k=s*Mb93{{sk+vl_V#wY43)A_OGTYd9=9SG9r9~2E>QK{gF!7lo-qhpM@5J$LGwsGaJ#2&( zFGkRf^`MKgcm>5=`(MiyrtQn`!%2l-Rg7fC2EJj^vE?p>OOg4*$Y;nk+lpf7~tg8`z5^pz8 z%I_Qk!1vLVjsvpB;*S_I0CKsT5ZM&gii(P(cd;!ncfs)uGEx5wAl$Lc1|=D(Bld?I zaa`!a2lYE%WZ0R7#Y zX=u59aORy^WdY&j=I$QLl}?MseT9DWuFp)CXz+XVOXf-`+nu_;YYhxi#jzvTUFwaZ z{?EADL=xjs8MYD{Ul<-cez05|)Y*R*y8`xub;mf^c-SOJ^W-%qPuaOe8iN@zL_1n1 z2<$-k+3uUzO6|O_n@@7~-P--?&`^q-QKnu5%f7?3o7c$*uNN>rViJ-siDwrHv9&tF zYu@$ZIqgNNg+#=}MkXe~Nl7n7ZVn~hBn|pKeIw*hI04*Y{K&}2W2T}|K;hyV5=rG< zd*alW`e@iL=Tfp(yd`-C$}6A%VPs>om(}>~>!CpA^AYoel9H08-{(Qg4`I$>h4`gq z=epx1g>4~}>k=A_LIzZ!^gP6Tk7XZnZpIO4KdWQodOzGzXOZ1brgafj`mIz=Q$?V( z5jsmo?_W^Kh~N$8zcc>Xtt2Ab%Z(%RURDKqGHcD9s-wHUI&I)`+Z&VBY$3Qa*m;+g zkzwlPl_r&o+hZewE}kpynW@A%v~|*q*hHc_m$lw!;L)-mJABW9NEQ&$+azc&K`r$` zE!$(;dHR&0_z`o8Z6R>~z-?-mOzCa;;WOle+JoAgr0sk>E(;p2?M87iR)u( z>MKVW{olW--fE31CZ+N5w@c-Yc-JV%KK-7hIIqgr8kgIyD#=Q>_(y`HGK#i(iR3wz zlO<+BCk}?rXF9s%ZEf<4Id>flDNgz|VjvZ9^OAUZs#Bf~zg8CE{<~hj$8R#!>fR)u zJJ#;DxLp^Xw7j+x1(1Wec^I&zbIBJAW%4U609616nkL$t6Lh3VP}A0m=e#RY>#T(d zD@It?48rE?X6NR1`Jr8gO|$-PZb=&(8y`rxu}m}`iwmLo1F7q=>*7hP7klO>&&5Af z{9`FAP&opAk3YlKT}Bng%4hhW`U*Eaxpm_TiY>jq#Huv1$2?*ymkTTY_}+t`Bsn7? zkeea2JMq!u>}WF;*4aM<%yYFL-(!&MFD`?IGJJvR=w%`{jPhyryzVa_VMf^pv^AkG zD&f~aKMKT4Ry^q*unYEx1oIpvLjZ|I^Z`>ux%wj3 z>U*LL-PQH=fGMY|K&D;_)loorkqN-M;4C19Nn^Z=#hZ_L#ar)vW{o|tG$cTv&z3MC ziQVP@PDZSQo2d55Yv&*n1anDcBn3)jQ|nYqjoHne%Ne6nESeOLj(_%GCnuInl)I>4DnQw;ox zSz>&lZSbQ9AjDKuaA1UXn!uQFeSBmeCWmBDvC9Wn63fPs)iC~Dd(tS>C!L`EWBO!P z%C@8785KJU5$D%RB~6vDZ=X$7q59PZ(ox(#jhbh|U&xQ0VGQGnbrkBP{p!$sB&E3f zqu%wF5(V$|WJw8&y1Ke0H%Wz4{k@8Y%txN|n8C}%`|pclJl>DIeJ*A#6f?*G@{^#X zMd@N^NEspp(SWV>GAJ}O^qTyYLb-R#C_Lca2b6q3G&Hoe{bS+0U_=X0x`zDUG*_>ro=KQsT$ zKRmr3?!!$5iBJp9}NtkS$XG5(?ss&gdgm*?}_s4z8%Hm zDyku~C)_b86av5%#0TDjwve8bJDS@vwmVy_Fgxpr&Zwl{Ev-twyf64Yq)R)zzghIguy3q{&E{klxUO-|UFs0c}*DW=BCEOny++iZu2U6!c zT-SDMm*sQ7Ke)kJV727({39d4h)8+#K@99EZ)z#I1=(Lv87x0#grL5+bt`m@WY;Mv6HO>$15~SDy`N}3I@j+Gr zq&fZ8pb;QODmW(Q8IqB3hmim=$~ss;7G`F2_Bc3c5dxm*PiS(~XakyB6rh)S|S7esEOdH2&w z%q{VJ6(fKEUh&!=BDS(!Ryv;`)gR(T2X5FaTVNIR#Ze$rKk*#L=^>V^E*GPg0eGAC zM!?M;;Lf7V%z3}N&XEfjm{V!~uAcc*Qv{m3_Q>vT(z)cY%m=hl{Xc+>)n|XS0scW{kfHt-2$UDV zY$6bdEVZ{62`{>CJN?4K!uWj7nSp<@@b+%B$i}~ro>4^jW=#|-p4^;3xcK=8G6g*j zcCPTKeL2Fyf`GAuXF?oyVS}C)6OffgMn092mInW!0k45b3LmNiYB8FchW7TcKpcKC z+|&}H9O^Q|Ew7Lzgd~H8|Nd1{oNsiYV!nEuVy|&I;8S&Toa?ojY~3Fe6VK%%&YL*i zaH2kye&c)l9BiTed>wIsP_Dd{s)qV=08w7tXUD(Kx|WC2xNPn1kMFMGRSgZqAMIAw zXP?ez(s#XE2T3*3qkA4v10jagBj|+_X}EgvORosHYi!FZIPPXA`;JjMjvQuX0rr*X zb04THD~n6f_l~TC`lkmVQUU<% ztxkolmg$-<>rc?T^E#i?KS#GAIQ3Z&?~*QyY2M2bLRpZ7f312K#x`W@;&C5DxwqBspM~O=ksE+^B9~39vX*lai_wh8N5@UcCkLF>YgY?ec8(^k zgPqP~(--lzMT-sx)I2#8vc!*!WWc7WB25h)t5OLmYNE=|Mb4!yK{Vo^q%8!tb+^iP z7bKJ4Ig-w+rK{WRw%F7>?ja!JpLLn;W#Mvta6l6hNAL10 zLgC0TB5nfYBZ#Go);^#y)G{#G0!cN%R>DQ-pPP0G_vw6wyGBC~Gk_&;LGJb;p0Ju} zA`+6_F*1*`98tko2<)E#(<}MJE$IWkK@CCe(j*GaUtkNN z5JUf*J$UWu2(TFu4lga}YSQ=Kp$oyWwX@4fG&VA#I{pA18b2~RH9M-c71gM}AtfeW zDXCjph1}mjyslw&K1+YELxaEnIy8zO+VH$Rn+8@7*6NZETo@@ze5n(Nmj3u+Zp(j$ z1=9gUCII6_@76>&k<ngIUYQwYo(P>@x0dJMQx0{tk3S%{!>Fruf9pvk5VU zMbw9wX%Rp#dwBsWi;jysiMzjy^F8~g!A%mQ*SGD|_F#27QZN*giqCBqA8En}?E4kb z!*N+Qn3gqf{tq?>m0==5+OuY~AXjFsi65zN2P~rfu*+nC2~ubLQIV0!e*wG~(Ch;@ z2XDIIM0Ur;~FB(23)$ajS!1_e*IG~784?eGBT41Hg#`RA52>Y$4XUK=i zZ0Z@a=bh<}JP^C0Wo>8yRW&3qMml%4`(w77P2M&mK+}1*#IEu2#h&!9RZIw>4=^*6 zZ~-f~L8>%?r5}S*96J}+M6USk*<6LE-aKb2F{86_MDm*gYEgirmS9li)Xb zg{k|H!__f=dbE?&oYJ)0iU@HT+v}i9S`PUHAgo5d9>?{5T;$t#2GJ1-UP1I429Tz7 zZ)sZ9j}85{NFjr-gQ={!lehKg8HiYYM{9jZ(jb{MPTX=u;+6TA77gzcPmHWvZD&}` z$PtnLv>SXrnVsvP>qE`_1so3lkB97!r}2gRK%-M>BA-cbCGsNvfPmna+M7x1wPq0`;eKZIZ6@wAx@$VXqlKRc1-!;Ti1?TPE6KqgDb`!iMExukK~h#6cl5sqnB6F zn>^-kMJ(XlAIwX8uASnT+-k`+1hm=+!#+X23*Rvs6{3+xJj&+f;Q`YooWM_8mZo!5F7%1UL^4PGbopsz?cuW4TG*e@Gc%kVIkgoFgh7<@Lb zy)*n+Ln6Lx0eCB&)a0JPzV<>V751~N3|>)9=bwpV)KfV!A`iF{z~g{=*o1Wr^}wQ2 zh9zT*o;Adj6Mz?B89m1F&JDxu?GN%*c3NLnk?)EGb!TOjX@ZoeL2YeSHx#5idpdR* zv2jM|gYVM^R)h*)4>hw-^f~ee+sTmS9HLJ{fqufLGeXevfUfN(SfRh3b!hw&WS zX$K~@izyWS#wcJ@-11fpok|&lblRe2%DiMQ2j;061|kF(zUDhOol_1RnE*gs3+&@x zlCB!j+uzI_x`?{`7XE{~tZ!s|9TV>4y;PRcso;i7?*6EV(8*o4)#P6BadDQ6r zP69(tLIYb>Yzp$4e;@1`#kj10C*wnxm+712ezl;uKdXBCv>>F_K#)9-<@(Hd=B=xh z4$-3iwR@e954Fn!7N4}R_679}!9Q=0xWCHSKJC4&bj$PPaV*2C|M*#@g_eNFrcD)Z z5%Yh3lX$!nVU*B{v(J1y>wDF_4@dnUA`XeDh>uvow~l`}B8vb2|83;=*n$gO2XI34 zN${QRbgu6;T}_Q#%>+!G&A>koIN3ShvaoZqaPX>ea0syT2ypT+v9k-Xv(rT{A-_)k z{~TcFU}|OV_5VIVZOpt89KeUXf|ZGhfQf^nm$Q|HrRxKU|N4!R!Gw{LgP)&|@`IU& zt(mJUi;|Ivjghk{rG$f>qmjKALc@y}oP+AW&S7fiV&ZJ&=xXI)|G-5>TAcFZdkG#6 zejXkcPF4<$k~wKGnEt;8+ZoxrnH!n7x;dLUKL7(MEnQt51=!d;JUm#f%uHBKEJ*_% z$blnx|Mw9Nre?PP8T!9ZN-1e(Zsca`N{PIhiG!_!n=_@0qmhXjB?~3;4kT4S6oFGv zB2VGsVD9Q+;u8{?`}{D^pj?2Vls= zA1ZV(g!sP=k+-rlbMLc$D_b-0=xlcOuC@*qZ01JpRwfSiE^PnD zu-G`vcue?t&5Zco8kzENa`G9On;CPPau}PLnQ(HObF#C7BUr)xT@aCd2Uh?Sq99o+ IZW#1G02b5c&j0`b literal 0 HcmV?d00001 diff --git a/resources/favicons/front/ms-icon-70x70.png b/resources/favicons/front/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..ca90a5b24c3521fa96325447e082ec9c455c1a59 GIT binary patch literal 4672 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

Wx>okl0B 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

{h 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 z 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íiN#t4qT)%0Ob^;B+0llT@A|#wHK(+oj!=JfQ`yRBGv5p4kGwik7 zKCMlzeU_j9C@=GoC>XOe&>LEdH>#P953GLzv^eA*M-lc-E+vJFsLNITA_Ir3jLS0+ z1pjJ9|D}=FEW-IK1ltyB!D7vDtvwdd(8IuR^WchD&wqDiAq-hPzzK0rPy_mq1N6V4 zG92iDRGqpf+8B>CH)z$t4Tbk;c`wm&{|*K@_#*5}zGB^JC|uHE>kqVy2Y?#8Tac8blzGJ#+Y(a@rWmjAHj3=bJlmP{Gvs)MsDoXh|U9iiXR*(KNqeY*HD zn6oU(ZQt#-p2_P z6H@ISW7S^!e3Ak8{Y@%`Awo(;U->4;l8P`W1gVpB+UHd|5`vM(-^oKzI_Ay$Blzqd zrwz&1*&YOAEYz!NC9n|_*e4*gtWc&@*9aJqW&%fm?~`1{P0x?yb%eRt(%{}DRVxDL zG(!o+NWS@#XlZiv&;el7r;p=u$Xbv?#P7coMVi&tOQsli-&#$Djqwn?t8U)2c(UaA z17Z-(zzDBD=J|)|_!r_(tq<+Y#r5%`l7a->B9!?V^xfp-CPA__p{f96rao+BFS5dIkLLSGrO{1hqIZI>Gaj^I&QK zhOyLP`z17lQ=6B6)$WxS|8gmq#YfUUi4nSwCew_%WIqwG0+_B(g%T)Kzw0XcwVS-)$hjk9I>vqz%JA$vb1`f9#|G0*Gv9 zWkr2ar(^HrYA`W+CePtniez8g^xfv@-jRQR)24NnH+F}x4~xF-#dv7Xji0Jre) z6=leGDU#fzo4aDc>)(g|<oQSPb(;wVAU6QqF zEb#$f4KE|V;Av?qWA3r%UCB2T;=^K`)>25p9?Ee#sKV@gyefU%H`IQVK)U}TCD%&& zskwu+23pc1eSr)aAk5)iKZAIax(jh3@4o#O^uHs(O{cIQ>HOsVE^GhchJ$RrJ?6!N z;|U1fiqn&-fk*+W6}vr#1ccKZwDv18csE-g#+r!zWC%+Zj6W}~wg zT}4Q!JLx&|@&q40u}9dN#SYpQuo48QxmIwy_V`aPMrLW{1yh@qtML!a{yEobC|Y3LsMKD{J5yrys$cI z5(`VnC%RF-Ya-R_^=Zhp=Aj2Rwy^3K=GQ_FYx({7{AP6Vz>T2bR|K-z@T$M=8)c^! zS7}7jG6*v&4RUSrlZkA@59SzXrT}aTGJ-Nv$L(*gA68PXpS3AfjCM)#p>&WR!!*6^ zI>n$9F1@omXkQ+i1CUXlhZQF634VYwiP| z1Y3Ad;26x|V+5);6^Z{XK-T>keUHco+WWRCBo{f1y%D?%Q8a_lKyF+<&ry3P2!%Zh zoCPpaXrBUP$6t_-e44d&%-aXK8$*nZ*Qtu-d-<c@Y48wo{V?xFhh58>-8{)i=qH z#r_0*MhE(D+r$3H1xR;9pX9+WpECrALjaPD8QAt4IT~WANW{c$u*0erZxg3@_|U2r z+zO|uuavnVBaNieJp+m&BHa>-l+@5AGN6QXcMO8k z(hbAQ_lNf%xNDuY&RX|5dw=$Rs2=M74x{1ecsdP4CRPjLM`7^j40bHkhv7e{e@bY$ zBB($<95oG3wcL;k{Q9^JU$+^VUnM?j)jp_qp2BeiKjfj#b8l=f)!2JRzLc`}y)W1@ z`Fv$}2T>VuJs5<7?V z+C6f0ME}ME(U3y+LWgzigRJa3TmzZzGPE{C{ZH*x2*4AWgC-7e^2#4?st@ibD;C`4 zo@gZsa5cdX=b2zW!2%_(Z=zR4DV$Z#bLdfx3e_4M4yPavIuYv5yLxsmA$+^M7ZYZ z2YF>7kmRR0E?{&VB#gLZ9=PDs`K3j`a}`u#h)vNuloH-uUGI+UFe5MFi~ z65CMu0Sr3qPG$Y8yodjXC(jsYbwy>9gIks$ZVyfIt`RQm;4}O;fmj8jk9AGx^kF_!$y@vt+VXWacrZtxFnF<)#n%sPcUD>0aEn z3CVqJ!h*`*e+Yjy-katz9jSdZQl{2$H~h|KsYwC=ew8_8FM{T-Tyu{f@3uMLu`PE& ztn&_s!`8#`(^-LWF2p@o%ZRa!o65`RNiJm48`Sb$OxGMTYl+mYZ4MP(hk9K?geAW3 zY8{Ek%vk19uU$<`q`>hABY+tGI{n;<&}c`eE??<05uP(CUBL7^Vybk6DE!hf2uw>v zMgy@S!*zrmcALSm6JO7_+VNiZ+D#KTlXUK+|FRpW6s??b%58@c#=4Vxjb?&aPhse1 zaWJla*H7(WN`9Lda|TKKFNv|wo$4OK2&?hT2d9Z=vng7TUQKz!g>NpDFsm@HWf|;f zj7wL1p7XJlT~@%I#;|d2KG)lwp8xQJOz=0)YBHEi3u%k7xT)BuN~aLO2#mW^dlWb$ zmODBXyZ=oVW16S3H{|hE{bys5;F(366zfkGuH7vm=EQtc{m+kM5*_3(?{ogH-BF7@ z*@zr=q$UswrfS-7I!vKwEzlZ-<%i#8Fk~TuOX42_>GQ{OIye2L7g$I#r1b~ep z&he0=eCfw4q@_`T+>m*0-;Z?ce>zL$_^P>Px~1|R9p>{%XK$U$5^*B$eDsFW7Dlm2im3ydy|qT4mfbZ3kcA1ClU;n^>7sF<=uP2;3PnhW;_nkZG1K z5L%tGS)Pu>>ZwJN;bLZ2cGg$mi4GwGOEn0I6Vv)Wn zE3J#o)(yPOm{G&lET~)iD5|_c5eorwyAZ$c)ax6rPUku4rC_Y9l>n6SuBC1-)VzGo zfmR3*-~Ofr*Smt28LF#1cH#d5Hg>ZYnXOq%!64oWMi2&CYmhL2Z!jy?eDK#0@a~GZ zX%ljwZ?74wA&e-_uAqVMjYd0^0kd???*PO0y*FEO(pfYx60T3|OO+-H>}%hZoQRVh zPTe#TIKdst8Jy$yO?hyo)Oh30xfV6l(~b1bRv^d0fdTW;O{n^XmBez#)R^}y1i_tm zfn4;(M73i6LNH%<;Q1n2bnH>6JB~Vc{Kb5J0zM20KR<%=lP+Xu!mZkHvKeihk@m^+ z5A=V1dlP#+@g+RBIl?8`{#qP4j8j!~#cTfvaQf^G*NMSzTrr*WsOUql-Vb;pk?q4PHj}Fyx(d05P=eCsU;aR89 z2KWZk``G3WRS?ad?PM?aNHY=UU$nz`@SG=YMi`s>{Hu)R&oB#!8Q+sT>zra(N)GXS zspq7#sQ} z1pV^vmOV`WLXvXbo=V!074N*Gm&B4J9YyXk@MWg(55yMlb(r4*P47cVY~DS~+(iwC z&Tm&KnBQ8CN?k*U0zt4IH758fMVMC;X3V`Ov@XQ7SDr%Z(w3Z#5@0|$K;meJZ`b9G zz~OyKAn)ht+5WC`YpocD;e(HSgV;UQ2(v9tkP8#T@cSXJIGQgcAWa6a#g_}(D)|ot zpoFJNUj6R013<_CeD^tGOsT;y_Isn3YyZ(>g#F!NOG3B#w0f%QbIR;$!1@t#e9h)| zPOQ0kJ0K$$ct81gYI}qH>5b-~7rzdZAvZUk=uc;30)?X*gDmT55-QeA~>Z>l*b(R3BJe(@qVTim*MQa0?KQM zTS!~b{mAM5%9{e@^MVekI*>Mg!5>OTcx87N>HbSW3omTA>=m$VTakGlIqb1*>tY2Z zAeY0xPN7D&M)_s8zGk-Q+!+WbEn6fK&;0OJ%ve~DL$aR()1W*9cgZU;>u`O1`H?pH zf>cx=7Qetx`tw&5K9Zae0{|F($@F(LviFikL zrL%$rTfvqAtm)Fk_sUv8Css2baNJ%)&z&S|m+5j_pXjuO*#IGb(nvFB9~7HK^HeFg z>$I}@WKb940cD12HL3{&d5VI-GP{2f~A1kjfqH(qD`u?Eo z2@tXKN-#0a=1G|fvOYhmKb+>B^6$~+Hm)l>$=~$^V!}b~CC4LBY;Q+}h)Isi5`7jK zFhHv;^F`3qgqB$SL|%&uK?j2KUdB0Ge_i~p3RI$(%y|?vzsn?75aI-+Gnig{ZYCB2 zC#_-4%{_qII)1xK&=BsvS6>l|6pFG?ASyG>O%#kuhWI?W#}5AP5c)S$n~ZCwsSeze z#GzwOoDniw7)o4F92Fi4H3J^E>)9xutdI^q;hs_4wH4mqW`m)rIGD}OfTU>tz$W&a zhG)N(HKi;PCp0_SzpU35I~VCl=1iRxspI+oiJ?jPkc^*RMdSI{$eh>Ts|_?KNND1X&eFPGj_br3?Hzmb3N9q zk+Y;Y`V-Mk0NL7BEE8JFYUH&vNxaM6W_)`kj_^U8VB$pd!RmWLC#Wd`ffXGB-vv1B z|FE}DBfm-J^nfA@98{lue>LIG^ih^1=-BUsH5Ct!k$X|&G+{Wj*p}{}!&zDAhqUZ3 z|G--5ye_ziHA*0S6%Bq?VLH=po;xwjHT)#xqX?nnx5E++T_c*;sD~{kosu4|{1J@& zv1F_Sx*^2Qq!{13530+nz@}A&T(aJm*;kM!lbT0t}yU+?2NWCJk9Y(Wmwrp?_ z1w>DRFitaKY$1j)GPi`nKZQ>?dm=|VZe2cmpbY-wdE)gPe2Z0s;DN&-_e`7kVaFC+ zSoF-h3tr;GSZ&`(NoqeTFfEyJ9=C4>uJV_UX%z>B^nOPh4{Nh%c1Gm9pro7#bO8Mj zC^oBpGE5Nf`jZN79PtOO^KL7FljP0s-*92lH$TZRY~EHd560p*&5-J~X^gCEUvb!E zwAXJ7OhFnThE$u0AZdK1d}{o2zo}wHtNieIF@GjI5;oAhI~w+c_Ns3hxGiq)Fz_Wj zONu!ejUhWL8v0>2vzT{EKOlMV?y~7h0lUeF7|O>KT7*t@KE)KV0#|{?jUKhYe3uY4 z4cxklL{znedIuSye_jm|euGfPS2XSEqo>jKO+Pr*Bt|d>5EPTrQNWU`q+g~*H1C7J z_WA~4iYI5j!9;_p1cWoTE?341Sr;n9NN%Y1vz!p!p|K~Ow9`n0K4$1vNEmDeKU`s# zbu>+Q(JCI#QK(^9n&1mVlBieH!m};z9eUfUOnoIKr~h2pqCmoO{qni2$XCykmHp>6N!G7dTtB=7rpG^KP3`F9@s(G zU&Ppz>0GwJi{;~&z#wePnW)#rWA>&-@yW5eQxJbceJDt_>$bvZKPwV|(~8|Vd%hI7 zOk<^?n>K$JhVuCIZkOT=x`m@_RKWh7wULQnKECGumVL&Fe$J1!tz+gLUsoDVA(@40 z2g(0U7pMXfk#XjDuDKun=D*p{j_i=0>*rO6YSJFGgSQ?=V|1{V3mQ}) z<)Q~#R42!G$mNC-N+@4B9ZWLr-F+W!Jr4r#%&U^9Uac+(@m}#?LX!I-SUNQR9{ncH zU<%pr9YoSfR_rQOjQfLbJ;}oK>fCmuPVWO(K?SNC)O2tWI%H&HifTmEap%3AQ^Jc& z3(&)wgu(uc46-QD0NKV?dao=ror?-62E^Er@`gx8Y<&&mp7`p4nz6-{S)bz%Cw!t0 zA+?48-L_NfW?`#dpC)@w16*iChytphSvfZz&~4wHE;w!I57$y{`mIO^3D*`_*V(l< z#+-)`etv`g=@7rk^0Hr$n&7@nz(m9Y-(q>;@y8g(h%vq9CvCq11sE5`zglF^Ip?Ph z-z@ZETiRhhg%Ib-aEOsxcZtI?|CNdn&3TIBjoWhz9}0csg{Ka1uWe`ceA@`1_9Ql0 zXc##8y@n*e`H+={4q^sTr?z$jOPug?=93#YR*?SQOCkFk@iRcvy}IO1)l+V2{5o{0 zIw6D|e+t|~UmebUy0g~ZPH@F*5Msp&6E?;?XCtA7dJlH2+alpE9_Ca6ypyzf!7y%* z$6NVWYS5ytCVoWWjwQnczJ?O==-PQy1Oo*p%qoyl9TdGJjk2A3qOsd92cgh!O&f30 z3!z>Qm%+c`77zc)1s5gNwpOZ&`Lr2=oWTQo=R?-nf%TUI$`e)la~CW71Xa%7sx#x{G^|==AO%+xmL{> zb#V%ztvht;#7<_yOaiIXSE(24yDq2AH^T156F}VBOA}cI>iQb68(($_UC~ee?_yN7V}`pXj+Gnu0&y z`%F>=&XCssA;xm>A+{bUJjQ)9$swbPAU`u^VB9WQ^ldS~n6{M*6Zeavs;YiA=@G%0 z1e1=SuehC+RWsmiE9L+%-v@ZP&<^Zf9!`PVJUT4TmN3tPGVA_n zL`Cf$s@DE>7m(&~Lm+)F?S+%USenafjx*0~H;CDQ|6OI>3Mjf0rNvUJqXf@oHF$IP zJwif}#%kSiI_jGTpG0L^;vZxh!+>VWe{Ze`8R|-3cPf-7F(-D?Rcn6gj4S+0^S1Tc zoMz%Tp1$ZL2SnW!f&zNPANGU~MMBK!5an5~n;^XR4|gtaTqg-Tzy#&j);ImUJ*w#_aPTd4_t2fx2cP6S*~efyXDje_|EL9j zeJI29AqQf>7;$9#rU2#PRv!i)ZUyrGaT<1a+e}!_<9)I*E6?>bxXbq^9E^rY0sA|R z++*+>`g3Ws*^57Xwb31B5^wvMnxZ5|pk7Zb$#S&gd19~BO#ZnnE5Odi)@lPIM{YJa zD}O1xr!&7kYpcW1aN*AEk##3#sDEn$s$%%Md=x!}%datPUj*3Gj{>$KLgWmS-DFRx z^61(p>FFGi&xaK}JT^)n%OE4wP=tA9v0v`walaO)dScIz$ZZzJIzEl$jn`&et!*n1 zz%TI)wgPbpGs>(K-(-YgJ_xl+*zU+<7UO^|58WcF$)+{if`b`6f_l7nTMyU=%*y$V za=$zuzc6|Y^_@{I(SVEk;!9txVa^yai^ZpH?hX54YnzQP4K#OZP6|SL^r-P)WWmn3 zTn#zoTqX)Gzq+CHaTJ+(e(KOk9)tN@$GULp(rYamMYc%S*-Yd^icb&1-@&e&`^u<@X#h%pKmFlD)k>N5m{YPSbk;_~r(Bhe>@C#O9DU4#HdkAbA$ByTsMQfCkI0+f$r}lmTe^SSFDKZu(i0*%@^1XJFOM5582Q}MnzX6!=p!T5p^eg zp>cyI??;6|2Pl(;j(~qMYp4qG{{*WbVsw}k`Z^48X{GDMCHrB9iYXqIs?p1*RMsDL zMH2y@8>Bd#mD2Y*IJCSm)mOv!j|%KM^nej{Njgxtt4nOrz*BZ>5QGamJ8z(PiIT|S zWBgXY4pN;5(E#O6j7WTpL+Q%V3xsSwWJdmEB-lOFAT*fta0XuhMsDN+mUlb$c+2M$ zK;jx`kguFOv{scuqeVtnaU;U5MwM}L?nd%fQxgsXjSNP~asfJ=f87M(tyo)+TSZ+x z*ihp9$;2A?RrSpVCAP-~SSdn%2@eFHy0^jRk36J^{5uKqMts;4qoywg?4yQND4m&eU-Z2cp<;hJf$Py zb_5Dug3h1h-@a-acVlBEc*|ilwooJO^^I07IXW70rZO+j%yHMZao_9SJ3g{l@RZ3W zqe3t~Z7|u{z1LUhUgI8+6w5a_1N<<@zw3s46PqZyq%=+u~38YT+fle1P z4a1+pV50KKgT8G1i`?*%jh}FZuW7EvwGN++zWzZA@V-rk9$-`86Q| zvt}zbP)V_-Psdk|!9IfSyY3X-s&;PyJwkPP_Hb%bYdsd{IVH7JcdhY|MOKZ!#P*e+ z`Xk&6gnl_P*^>}@658{q;}^+W6Xm_R8*sChJ~WRbaz};~s;N>)FYf-F5Hm@2Twnw0 z+aS~F4mS>rp>Iix4OsO-euWV23NvLlzY7H=^QRL#JC6we*r;sZbGUg-9B?SKQ2f~2 zWdn@+8i`TK1^Ko1IV?XWW>6q||M7$#)&C_@R{?JyS9rV><&kUiV<(N-#Vaq=bN}Jo z2%lY^r7+qtjUWG3eotrewq6>#p8fr=B4FDSBz4W;bt437z@_K%Dfb+8Y6)2hKN12j zT^nIL4l!q?hu&90A!LoaV#o}FlW+#px?j*^_OasCOB0b{vM1>erQ-!qho2Nk9+SGW z^#K*jh6g^{4?If^bVe!Rov*;H9_2Rw_Hy*P)*Kyxn0n_5eFEfdF;w!0Y5{qU33BtH zduv}ty#6XJu48?^ROzJSkQaB;ZR_>=XcF&5N{OMY#|mMhi2-8=gA~kkc)DaQ9$#aG zfM4-)^jZ_Lp+iGp{$9&po&RS6rY^BIw3V`h+iCs6d5Le?r+=FmZ3w{%zdb3q!!mU{ zz2z5;MH^^&1s~O5zQ+Obu6NuOC4u+k!ji8d63Gc`_PR{rPn4OaPq6+G@TldlihPZuLUlohzYt|#3z zY&1r&_aN@d1`19IGo0ClOZ=){Za5wJ7faG3@T^^6;B%5KvkmGF8do(NrMJAc7A?K^ zWTJIaRXaUCnBK)7AfD%bqsqifiZ^LqdQ-8tQI18O!C5PVWk-CBmZ$_4YU$jtUX^b1Q69IH_e2q3{&a zK44kl$A}^x4*^Tcw=E9D*3O@3&6(I92$+BPz0%)A9Wq0oVLc-8*!Ps|j&ijQLeT9m zq%UjJ6r5a{>;YXmJbRUZ^h>roTUt8a0@FcBDU3dHXFYT0?Apxsj8g6*{gKF{L-Axg zkTXH~+iW4yVqZNb5{B?a2<;B7;W-Zrg+>y7WCwYLx>lV3-dpBG$v`>}*-a|(lLX0D zvc?@JRP1H+rcDE+>I3hA?hGIoGujbS2l{M*v=WJjd81cNI#fySfCRrMJL0r{2E81U zyFGnE>6S`UW{`2@>0tChiHTYfn{nPH@dH~kMBeN36}+`UXK_THX(I;tlKbwmPo(g9zA5iddR$s;_FdHre87?$gzGD7$~$m|9R1 zW!%Z!v?!v#df!r8g9raF;F(UPU`IH5fD-BW7~G3D?Pok>bl!Eb_KRr}6)#Fir^*a( zp)_o?Q_3vDwzi2ErV(h=_jK5sqdxt>R8>Nf)>7&BoaU^;q0=F*n%Cam`DA?8qa0Sm zHgxO4fIcm#<*x$qQCx>Veph2@@0 zVBQN{HQCgR)h)kv4#QmzKZ8=l5MI@|9|-LIyaDEK7>gb^?mSw6jSa6=p}Gxa+Kugr zY}=?`6mTQ8lY1czH`NG zLckJ3__MBZ#8j32JDeMk#N#tl3@VXVKlh zB=bkS!a;NaI2(|Pp3uDitx|wCZ&{Ax)HhdT&SCI#d>RuN{HFnxkP8mFK+4B~xBS$R z-+Jwgals^eo!uqxzKsynzo#35XnsvBV$ZP(j<$*Dt#KB0VhlgxD=7|Oz8@7XbMST64+iH zaCZ&4vV>PS)G=|Mwp{-w^wzGY&2e_j#SY%*O=ot8zp(-|-?DCvb7}qztC1<>FZw9V z--K=y`X-+XKEb^en_>*>gKF>P*uZ?k$94_qa)10SxjVk=`M3q40tBdmiFyg*uOBli zk_vx&CQV@4ve4w_-ZUm6Ss6|#ec`!wDred>RVCQ!9Fr>FXa2JMc_aP{TM7pGrZf8b zBpZVIC1ST}(y|5hSD%!T)Ss_6WQs{}u*f!5r#0k9aPpIgyH-I93_mJNCRnYstQh4_ z6;ytr_KYqv$!H?<0)x%iOxKV^&aBlhK`!LAj}vryVQSlAo_?XrAKY+LOa1ZvNA4I>BY7xI(bwpZgEaAVZf09Z>ZeuUqvHvW z!OrOUqRU^0M89A|<9EZP?Z4}nvxbKSL0=aq_q3R1l#^26%Ef(lOJ)C?r!wg}ITJDqo~Q8T5NOSmr zYJC4EaXm-TW%iLD!$eH$uG6i8vRYIo8fuWxE*Aa5ip`fozTqE(SQ>-C=`yhntsAUs zw&o0VRs>hsjkA8Pc2jc#!lqMUb`#u8w#KudXJu#|G}q6tP^eXF_~9MQMA8nv&WmFO z_NmL|IL%|a&rw1G;C#!&dj6HAJy~CpFLmt#TfNgjQv9OZ=mYGzn0*9XwEclUr>dNV z%9vtmS*X`FD;8&i7lw1eKEhF$hF;Ex(Oc|lIDwET1j1dHDsQHymacK_h7G%EhTY7N z%yFTb7M~^`@uM?_4&YcX7Fu-1-kSz_;G~`^_Yw&H$t#aR5jy0r+pDA97R9*l{#AMR zkIg>l?oQynW@a@#vMcJJa-1}ZsN2%gwkhAshcAFP;}M$W?*sGNkue50pWnPDx>5{X zm<~i>CGzT2v#&PY=Gb0FGthsXBv{c^`eq=B@q6vyJSm3-n@pPl)lYZ)gUj0R^;oN(DHejB{3o`v3GFX1TwEx^B(G3bgW zEnH^*gNow$>R>J?jH?>EC>g~xw+g~%ad`%{ZC8QV@m#;K#nVt0>9f0ocHv`Th!sJ^ zA58=;k`YM5>itcru-PoFO|I_~lCe24Vn!a%A#+mtf5lm9emYj=Ea(ke8?(=MHDrok zB?`h9C;8MLOZ=V2rLQ`(4x1p`=rsQ$_>^zL{gseeI^DW2Z1^;pPNuIHzm^|!(GGX~ zVL@?s^zhN6t3>Mcx;v?Xpy4I6($7bQ^futaM<8$Cz{r~lJ@73)CALxnjLa}C4%7=E zUN0DTcl`av=5r5Q*?aOSwG03B-wo+>n9b&5k^QG!)4oS9KJwD81{NxEHGjDSw!R0- z_SK7gS5_WZdG@7H?@^NDP(k_QbA`7b*o$nK-Q!RH$}ya<-U=#EV|PFIpcYop#rI)? zjZ}QcE@TEJVv|WYw6pcJZ~=3X4fl+@oaP^0&;=NH>Xt=-6+lpoRr?Y6xSz&_&tvF@ z$E!OIQfdM=plyUxN1wa@T2hv59$g}qR_lG|6DsW0&NWfJS{^1zdrnEusdr1wyYFuA zmo+Sk$$q9zf>8wP22i|uwYL%EYOjO{TO1qWQ6PVT9yFzJ<b zNsmu&qF+q}-D0Q@;Jd~FtT;RSfOjU!PZX{NM4dr#R}Vd&YI%RU#8!f&-H3@>t*|nF zD3ocb#qo}W@|~Lk^;X~*(C_`X%@V@~2r80le~_(n;Tb)w_RBmsAj)a_>QEcn&hj=3 zhdI4Fq`t7py1EnEG@=>#_WfJ@=aOpirLE#Ee9lv-XQ}P1KjMSF^Z(^>(#hg1@U`)3 zXP~#F{KWdeVA#B3ZG-$7iD1ij!=Jd*NjA_w95ZGy*VKG!@xMP>#Ys&#Hy8Pp$YZF! z8eXyCRnw=#t?MkJQ;o;b>MxG!dwhhN20Tw7e{COklHWi0q4zd5Qbmmb??o30Q?*%! z;P*G2)(|4KXP=Z`Q$I?A(guDYyKz~4ILu_Vh;4hRi2lRsbZ(IuGT24oELa~e9U=k+ zJpK2E>IJd}%CrODeR;e0E10Z6!DY9NFT$(hKnfR;+^|~r@drbwCI9FIN)qe1s}x*e zl$2r(bI&EdNmfMs^bQgWi~eDOs6$h@zKvk4C^lwUf8A+7?E0C<&>d7JV9+3igyIPH zqK80ixHPSm%**LYh^s&78uXr@nBWT>K5-_0V!G$4%w9NBkw*VrsPiL>%OmJe&&HNG zCCmMDre8ODN_opr{D&HOZh*r!*H;s0ar*RX)B3of#}T#Zqk=nDXB@(QgwEMEiy+KD z@}`5|>y|A)2i4c56zArlfHxRt)D04<-su?gkZfNy%FsF{I5Oq9`@EWU1CEG4f90C` z*lfk0)*j=YB>AU!bW(w=>%1cY?KVT@8y?w6&veeyV~S6hr*$(l*BT%NyLzA7P}MoD zCxW4%o2Nq#K#~5pLSYdOZ~7)FCb+8Q@*e8CbhWOy*UtRyNG}7R3a&7v0Qg|A(4}`J ze_wB@Y*GNAP+q?Q{U~;tw@+nr&eeEbzDFgR0fY7~DT9yL-_yHq89Zece3j7WW(8At zWGeP(Q0U)A_QJGeE7UZcc-V46O}`<*ZNYCpw7G3U3j8&{DJ!nOZ8NXE6KxgNd)&HZ zoww$fHxi?qTYVcAk-_9o^T4=oABaRb{*2DHCrPbPGhS~;C0enNX}^;sr)x&}Qqvuq zOJcfX0<^JdnGup!pIfo)h=XvDhsA|apKy{fD7s^aT?bKnWP>5BTla6;)5QhJ159N{VDuQFfA^h+rE7JvEx zMJ=X;*})<3&*{Hy2=4$6#Bs47_09y4&k7X!(%U{#emQj^44c*;q$dQURec4G>T|3x z4-_}SX9W!% zD>)XgxDX)grMXAdi(R&IhZmg^Z71!GUa&PazLOskO``o#(xW|G#9x@hy+wJ`<|wvU zN0pSzj`3b=sh+J(o~Z}sPZSV)q==zgyne~la%wi`4T^MbwwXj1r6TJz*>F%WLKD;Q zTL}PDAL{qNCC)iZVE@28*?Me*eZ2&!V1@MOWht9EFkg^)9WY}qA_Za7r%w=vxT8>` zmQ`$Qdz~5`do6;WmJ*U$X9V|R;)>hnd-Ft%=VpNbOl>i?78dQ^Dg`>dCPJV4Ay)e% zBL3OV{^bEodlbUONaqh;-1BRh26&dtL!7Qx*+5f@Anl_Tx`q^HSfk0t4U}kHLE~>F zL<#j7_d8RV_)Ae{M6-iN#;s(l<*eC-hh(gRQ&1XT5IWp|rS8-gvxmX%(*#dz5VGUp z?3FzD5WD%9f*+U+HJ{k>S;+P`wrLVXd^Bgl<2NDmm1|U`_5v>GwUNGI;k`n@^VO+< zK*v|-maOaWE6%;&H^eNL{D_0k5S(s(NfHM07=g{gM0*0R{*V?n{FAU@GgXxWH{^pL zBGow}+EqHDF3sT=?N{EByKmI2j_MZ6UVp7cs(%}>lX1Ywp)SK_bT0d{O+4MKNC4*; zCP?_ivTBD6Xjb~1p%P2XGIm(9Zf?7q8 z$3V(ye|K(#)1so=)fykcQ6M8yl>D2!UR7qLM-6Qt`iV$O94@!^>NTESZ!d9{>7nrp zy5yk0uDu`P*XDiVYN(A!+bf@;>c7WgFj*y4qq=OCG>~n5Dw@3>zK27qiM+ok-Z~zB ze1P4C;P+%a#s=SzNbgT!R`J=J=35UX{CcjB6bV0`v!V|$d<@``boX6!0;aYJHAiI{;`rr*wK^fyPg*4$I5K z7v2~b(VgS3j_3Px${M_u^8_a|EH$eH_CGx&dqi9}KQnEu+5bjR@WVGFO-@#Dl~PHn zYN=O-_~mx#DafvyzPrx%oEF>BhiSfpiORMGGqI5N-#BWTI+U78xWxF20^EE`+>2mBDX@8s!BrG&T|tNh+Qc{(qnXD^!RABwkxvo;H} z6#FRJJLJ*W;Y3AKJWhiRcrajtBD&qzvcB`zmcbzDYb(UDE@CYbGYCa4*73qXOZC5Q8swG+aSqpsK+gE?MI&%G}Bv_ zj(q1!YA@(aqv4){L`Eo@-a{sjNHL(tazrHGNj^s?=h}uEu-QGm$Tek${>?bsNkr9J z6XxxPKBRS95_H?W5c-IIxeXTnt}$I`PqVIw=O)9RdzUcD79v~fc<(EC&t&0`v*O;F z;w_>Hyl2Z?I`sd&)bi_dGvRi~8~(%LAVsTiQAB-L+lK@8Jb|a5r`Vt2y|lX<^SQ=G z;6*j}JxdC)Oc#tm4FCYfWdxFo1lm?58L=kHf7H+=o2Ledi4UGF;j7`tIelsdny;5E zjj$FHJHKwj9kOWhf_IUk0XL=3fh|uk6-3+8SA6N|^fs6982S6}gq8{r5>{Wy>{3aH zd})v2Z7Gg;!D{tpCfv@b=530zal26&0qJj@7 zLXp~dezJa=D9vB9~%88_=O#NIf;HdwzYB4ijJTw32j-Kk#0Y33;Oz_cqUt%j)W z`|z(0^QgeNyr1^8y5IL}Zit5kAhFxRUW@mz=(C6%E zKdnH{-ky zj#$Em-2F{VTXg@^DgnmoiH)=k5yYOb*ELt_K%p@JRV2Mls5Dyp*DDn*4GBQr&i;VK zW{D(ex9s|dL6GUC8WRBgHAsOD2#9>iX~=bLmp?W0IaBz>Cxt2{sDCSO)HqCTZjT?6k`yEP*5GjD?mv?l->qoFBr;*Y~ z@)A2m`TX19?wlud@H=2BYuI`(w4$Ml35$I+I$1A^DGSlB1aJGw_Sx2-2;mgGj$AQ& zH8J<@W=lgzo_IS{2>qvm35f`q><3T0retyl3D~R( z9O{86cT&f#w27y0I1r9Bjf>>{mX@>FHk=Y-r5wJ*gK+c0EiL&`2&aGW(*XBfWEp>nBs|&y*DJ0^ zWb0h^G(Cr5^-}iD2`)o?yz)64ix7itOC7$NYoy3;o|054cT^mI<`-koJQu}Gr>Q=q z_i5<~DrU&aX8z8~(ci_TfxM*Jt!Hht*`-5>0*>QQrJkU2wVY@&#Xn&LHn)CHhB@)l zN=?#8%0lYtDLu>8d$E8Ey*Q8iN+G>IFxv+O}XkF)ycm54Ndravuu!jdSrCI)>>H0 z!TU?Inwf$0CA7&f!88?*K|wh(;%&zdw?SYWc6Gq@Hi(#=bbM?}MG9q1yxsz746`Q` z11^!r!N>&S?7~gYm~vZy-C-$vjO=?`NT=^ZD3PHvEeRtr;loM^OjM|#-JB1z7Y>T~ zQV57@PrDmJF?}vP-16>YVL#_B=0j|KKCj0D6xPlZke+DJo^qloZGQ7=0dA0h3QtRGHcqHo=Y8z7wpVqC!&mTErJHoj>Bd2g$I z8tn<8w+5nYtTRu|T|3O;p(9i3gWSg;eFa}nZZ?1)jkjmv%XchP1*&z}pEWCLY7C;$ zzZ+9?^wf9mz}g8bKC4ETpQ?-T+akUHz4mZw(jJiY;rNYs8aRUPWakJP<^GgM8bGZt z#<6k{+OPyIn<2Cey+upx^K|INJRIisRmRiq;Ao_*;_`@C1^okzZcjM-pn}`0I~b`I^M%{Xk;++e zCC~CTzJ7vtYI2$Dr)!6FzikUlfFeRY^{>3&A1<#kF6Q5Mlx*pMalX|4#fOPAN$NLrjEiQ3(^v@rtEzB4`HoJ$;2$b*9g#h0J-p~zV z?r%+WZC3nj&-k>jQdhW6Lod6S!S`t4Ul7BzS4`>a>?;DVKY;>SI~Pw*#g3%CF61y5 zStzSrut!kZ7FXUl!q{7&@zfWLv)nHFK@^^qhww3!k*2LKoenZZss8?=CfuG6KN}AJ zJ*z{n1qjO|5`g&ShH!Og(~-(LP@DFhi;IFh?D-Ppzp%&o@@Q*=V8|WmJv+FKInmqd zn|_YrtioU7Vn<*87AlKa#nyHuMy6)~x{AvWITMutYVTOF!-j=(#;H?9zp5@ZQz^oK zlZ{x9w$qOUfP|>${V@_rA=MuIZE%E#Oqe}oi|C< zV+U3~PIQrjAVZKxZNI1EvX*Wg^r9^N9w^N0PVT!@r?scX6|jO_NBMIG)92&)*=eX0 zK^)VOqNh#Lhcs)FE3uS>ryLU@C%Y1JR$g_NE0`Hi!3fOm{o%~$Emr01*1`@^jH6z3 zO75`#iwz^}sz0jALAb;{=phS7kVHrxyvaqnrg|O^=EnJ%wp!bf!CvKeyN?|10d{-^ zUfM=_)#osG&4<__Lp-m=i?K^E%K*?M$SrWKvTu=6$$PODWS-eIyHlK0&Wibj>F1=4 z2*v`pl8J)UCDqqFpE1WKlE%01Gq8Uc)ATh6dq9buW~)^b>wD%(3fzTYU`VYvNNYbL%;G6%>m>e{Q*$J7wk~DuGUZSPY}g*9lrOEJ)=pR;PRQ~yc#_QgQsCW`A%{MD z!5igEnk$hOpL^ujVBs)E=~FArpuo1jTT=ZJ2!AcYsFjp_JDMwH=eqcJm>YuhiI;Jk z;?*5&?-T4rRYACr&XJs0af&NP);+F{ys{%@2^9X~C>b!B|5!rK0e;YxD-)}>B~I7Y z>VD68a;;YLaoRDl?)h5R{{__Ayh7a&7zwPnZ~GHXLs~U z47FwsIdXqd(;>C=$K%M(#@zh*A5BwvGHuouia(YhA8;;nHi)6id9TlZ@4rnBUMynk z9d}oi?xNS!5q@b@x)r`p!5$uEz*yIE73twQa+&@;#Ni-UrlYZVcSwJZ^L5y+>ct(yA9l(|+ zw-YNXJ`pzkg!c@R5wd4zG~M>p-B+-TpZv%jJn7*t73BR|Y~&XH$V82JV=%WPkf%@_ zzx_q+C1ddaXgbe8D&IehKWE_Bdnd=9Au=)#5h7%daO~`r8O}LIrS!A1cQTR{C9)1t zR%W(1_TGD)^Y`Ze_IY)`dhYvseXr|tk;^|<;Tn=eD*EfP4bx9p~6T0*H#+?UhX1{rWMN4-x zrQLeKDSgL^K&Mg>H(_!LxiA{@#&OpCEkc5dAm7ooU_q7bm&6w# zzXnEw6c5MSzj32cDdlsJJA8r7FU5+Qbdf{`)(!o4bQM%!Ps8l(YEj-lxE+xt6c~-C zPrbnR)#mSV4F;dT#eNb%i-?P=z%!e``OCIXQ=P8w{T%Nh8c;N^9uxmG7^hN#hX~Aq zSt97=u3WGk_puaq7T#8~t3BTwt~t;Fecg3^(r;_UhA)jx2;&?nlcYbDH-UTzQ$FHV zif>h&W4X^(GdRZ9_wOesn}a3_M4X@Ecf~rR-nAQ@;kwm@sQQ`%djUcCan$dL`dpFs zF21ZK^|^k0Ds?64GykfeDuAFlb7t=uv!&!(GH|~5aV1Yh&mI3Ml_$?DJ)C)}xl&d1 zE#J#-Qy6jiap#*ay+X+;ESr~xYglz%a@<&aJ=2#M3V^=~T+z+l^#bvD&6&2(g!F70 zIGeT)!j4MqD1Yhox!PK@7=QWl&oiS-V%0g+PhvqwZGEw;T91zsZ%$frwT(ji2d-(- z*=+DQYJiDGkQ8=n3ObG2zT@yBV}uOTh`Vcs6R7XAE3^eA8a{= zDBLE_%=|+yxH)I0Rste9|67(G*{Xf@ANX_G69VfW&j-+?%dv4 z@Hd_Rvi(8bOUuioT2jn81w&I=K)JV-z12>S%d{`(><6#wP2t{E_1I+DiOS5>YwyW@% zne~9JC|kZ^^1IL6@4s4Q+-A#Dmbv?HNlT9*v65B5#RPdP^-~2>-CWC-{O9Me>hqI& zgWd!<+>WU=RlUT}esS{Z!`bDx5rib9M8kZ=YB#jz*RN1>hi>OdjTuTV+tG`b^#qS< zY30Lm2>Qmkdwlsu$*d?N%%JRP4JtF_;F%cC)2%|nJ-5k)=^Oi|_?3mF5S7kdwCh;} z%=y=Kg*Q(%fgXGED*Nqdq6+9&yy$h7{}GMP5{<-_9j<5px!{n}$4YA3fL&0X9lu)f zKQfI!QB7p=2cGDV`ykBeTUxpwOMZ#EZx6R zT@ZbAG9h9M^edA;wRzZsa#c8F)*}>Vc?rJLVCx{$d89U-xE}NBUQgV6Qr;8Vo6&g$ zcjj5+H2$%|vR1siX7%eS=i6T|3ohBvH5cJDgc$LvG7d+3H;g z_P?O|z6pAAOXsbhR%Dc}*Yq`h4oX4A6e9}KB8}{L z$!e1OwG`I%iscdc_%3SeE^-OF)CTJHXgtam39p!0fVTBqP%wIKl7uKS3%G1*EZFM2 zoZ){WFvyWbb?gpL91vOpI8KM~q{ znR=Z{A(ZvX6mdEJHu#@9eG1pZ;}{*FKaAbHmU$wgYV+1asO;dHs_$0iW2uNg>F9@6 z1FFmjCm4PHk{_bf${2hi-)eQ{6dmn2dpSp)ZG$a8J-Er+)7%Ka<+FdCXOh@9bLfCv zD;^#{G28PX?3yd`;A|Qa-ybpghhg1<(nEfbDV(pEg~Mr5iBis!JjOM`;y0~R!y0oE z-)(0yi4pJk!dUP1WLMx1Ni}cMfA{>E<1pZ`DixHN3ZHYy! z?nP6sa{j6_auI~={fF%eS=Exe+8X}hDiGh8SMd8EwkY6ohM@|=2^rh<%wyIc(*I2- z!0W^PZM#VX(6EDF=Y9rECjoZ5=Pzu=i)dY{+XR?6>h1LYRIw^cM-o9S@Ho zpSL1C6>q9EQWPM=1eIe{ecji2KEI)L}1neHUV8`*YgM{TT8J?~UA} zk=T>pM<%F;(c0yG;LvxX{p7dvvA3DXXI#MA>bUGN^vWgU@p##F(2K3zt6I<>%iSvO zB0%F}k1tapb9kC+RzW6J4hv>5<+tk>@w^lcdsu0Nq+BL7w4A#5oimCj&x;Br?f5V2 zV8Qjw zYFbdaV20rB0rcnJAb&>h-U?}06TS)!A!N7@G_Knrs^Gd@LlEDQd^N1w8y)=ua%??- z)fJob|8X33WBdiV2Lgqw5Ecg!X962hVex&?lGpLIS?8$N4MudAE5mR?c;u2H)`uqt z;v@wo+trXng(k=5X);Ph*qo;IK#qiJv~Oz+HJi6KCl88m}{X z0u}xDJg|c#qMenRk2t-7>Zt-K`-0zRr;6$HUHHay|6hkuCYM6;e|2Q0iW@TOYb9a6 z$lENXf!cu9w9Gv9J30j-;Yifv;TpmF9Okp}0^!dy_@f3`JrThwpopGX2ZfT$-|Bj~ zL;fpLNPFuyv*mEv$pL45YU`%=f@doS;Q?}Ppiy%6p@^ zv$oRJj|dMKC60G=yuoBf$b2luQtf?ddv^Ni1zImg;Y|o+;^c9EYgc)yC##_&od5pV zQdzJS9SzHGDDMqqO$ocwh}otFcF*FZkRglum|9fBnb!{a93V5hk-gv*+HwEW@?^7G z!PqWHR_Mxq8^N@;T1$evVi8PEsFmCsoiNO@wUD5pW2&4b+6sO?5B{>gS-CB0w-{Q) z3Od4=o9Jx-ESn^^2?E%nRm{GbHyU+2`ugtRch)s)B9A7e=5Mk2;^V?YcfUCHBn34m zoiOO+O6{>pNY(A}l&-o>AA2E}ok{Tf#S-(`RQXA!V06!uc;yI;e_@+_GB!@HmSN+&TMp;CzME6ce%B>LRKJ z?$f=$XXQ_SW3LBuo>?PL^~GD*ua4)yvlnDO2h-SZwb4YRe=iRGJ%$BmzjD?JakyFO z@n!Q?_Hw%>uCku6x%oZNq$HQ8yBKBb_(sHpZ6+jc2Ah|9UP($wPvXNKeY3uEXA0bg z=%au4xptMZiAwS06!Ugq20*#KI3&k*5xI;#sB#*b`JEt*z2H{0l+54kSnFJ#236x# zN$?Gg_T3t8s~=A0Ip~ zT8D)|3~K{D$iRP6n`D5&78#AQ$e*2%<8H%fdsEEY|Uh`t92vNDMmdZquNGD<)W_1B>X)?avL9iZ>;NCA0o?Wj;1f> z?g}(I8~@{rCHqHl&v_U6tjMIG%mrP+B07=8D923`cU#lhi%PAzcGaBgAFaw8`>Jsb zePH%N^BDLloiK8dUA$}wdPHlf=IXT2FjzV@7H1VbwgufeyH|Z$h;Y9phY!G=F*D4>{WFKyv|Z=l(jP%ARw`i6f)^bx^utx7`O^!Re|Ah$e$ji zV=@@clb))}CHM1B0E%b5SWlJB_tWB6#1i3lpxPo|ToH+MG|rU6+>Ur8!5+?lEuk{^ zIbT(XL}JFNr@Q=-%aOf?Nf<@bW8lGq5%9L?6uvBsIl!4Z-+j)zQ^Dj}nuy~ElPL5= znz3}fAUXJ>p{hUyX7Z@PpvnG?r{mM>P7MsVzAm?6mLy4jhC;YF`_0ytArMVk?U5TE zSeXPJjP)P0y!Jx=alzot&<|Q$s$~g70}v_H$Q?kob$V#+NN32S2T6RyKMGx1EgDjO z6_csljejh7X{O5wht?9&+)y&k5~SQLURMxa^b6oGUe^lrzl1xzveHG%u$9N8|je$?T-**gt8;2n-R5Uf+T{!f}a%sN?6S}nqsrcokR^}o(S#>evM+f@oy?+la}pvJDp$+@;gr+F$g?vxZnq+F?3$zzp2U6f=z?jeD@ zM66|J<}#J3dGdU4^-5I(UReGS>IPQeO4>wfuV^mO3C9}z$ohq_uv+}e?)oDl-YWZM z)7x}nMgASgzM}3o3-7cp44E-%3@9kGQ7dz08e#~=wED=1A$BMn88Yt4&l5FG6d8KOOf5Lk6djl$O6BVxvZ4&UUBscM` z;Qd-1_8Glv(!nbt*+Yk34vM7*t@KDkHkL4m*26E)9{ve<;ePbttM46HZr|bDFGN-r zZ1MuG;_@F#rajD<5>D3STw=wjFq90gdsbymaYq|iv34t-qh zs^@eczUFn^PLT`g7Ivhly_hwhO_wy~qs6om~y4v4FyD53i;If1~7T*0~fcbuaZuv)6WLJ z4kHVeNr+jsoB@4QQ+P2!&$6GY&ReSbkp2+0V{`2(K-}c_6d-(5lF%y2p=ZTqL7(we zzUcUh-jBe2K>Ct-a7$VdwhYy0&uG~_x%}s!DS{p$%w35QcbnigZXj-+amUpym& zZZ;LU?!@J`wqKv=I~;k*+;K#1`6iU#_kZ1YnsbLvN)IMiiwLY(&AoxmLM&w)r=+6e zMhv2OnfmnJf#)t)v7M_-zqT|_K_tral58pob_27YFwpbs9I-s`278B* zrpr^O&o7hX**Sf;doqwUMpIVzqRD~q1fjJSK5sJ$lzi|d)y*OdcB2*{JQDN;Vb#89 zaX_f|eY3*|ZvrV1jH?kj>x#7`s>nb2&YRH}9W;q%)2awFkp`s_QNDjz)5+Fa$}E9r zP$;V@;w(~Kt0=b`(uFAO=tya7Z=@eKaNuRJ#f|7$W#qQlSq|gZhs9i3haxHyQifT= zB~K|ENiyTw3i>EQ;-g6y>AqEyZzK*Va5?SD-vIW`BhaoSFP_5A`Us>)txZ09sNE}D zw22jF9RE!3*GI9n)ThL=7j!;*CI6a#c*RrTOL76daOU)e>acJ^t>>XqrAEkxrN&-% z#k~GMFLVvG)yvtoXii1qZr~0CpppL}MvtUnzSID}tP!0v+W(ynMES*|&1tYqVT^42 z>WvUl5DWLm;iYeeGzpM~{eK&31JtBICjjb`j(<<0Xvdxn(;XW76^F?tuKPz+di!)H z8KoHCJsf~MVyL$B4i&qTMU(Cdrjr5DY|ptq&a=si2~_z&TF{16_Rq;82knRaD6?6S zWS&01d5N7?cm6kZ2l8QhhFX~lACSiniM{Ov7zaQ@;a?x8i8uUZ&b9p&%~hNHCtm*lILttEn>|teux_Z z9V$uai|cyd$SJ}|MTTT~tl$7O>mw=!C7mSPLNqN{fT zwlN|yG{qWsP0_@}_cDh-SOLN*G2JKZu@E|V_Y8LwIc> zngC(NM(k9=tQzJXlUUb6SQ^bE-utC?4*6A4(^3(R!F;ShYJ16=y*E`_ez4|LZ$O#mocBY6T?4}oWbJ}NCRRgZJf z`)pH4NW?qyx)6q0nU0S@3OoAZo1*pHt5OQBZ!#c^Q?bu!|2~E->44GZtohQ!9uvF7 z*`n$|f^~1hVK&|SuJv8-2+H8iDoocuvwRmp#g*cejoEM(vje+|GYLSaQ_hSmsh$Cqpv@Jr}fl7-Ru6 zEeD~1Poq_X1bqVkJK-WHBFRUx?vH<*D`791v1QY%K?QPGjg(q2(R9ZLSjtS>a@AS4RsIRt9@&K9J(9pm;G!TRp1O2&F4uNa$R~}^iKk&*% zJJ8mQ8mIhh*+83K-`A3SbUMacefb1&3=SPV0JqPVpt}pb#rJH3RI2BhTy$*MuRN8| zAG>9u0Y#yjeN-;jVCKkQh^JNV6j=?-yH|RnJlC^97`e=^&Q5+4FqLrxW z$Q$E+WBVauBm1@u@v>YVv%-9KNw-TB%Dr3>Mjltxf4Q^o`J1P5#NmqIz1v&3Ew>@n zy76Ln`gk@u_hZSwR7X;a8Yc_lCUG2#{R!H^SqrNd=}ULZC5eWv=1=q)1%>X4E>h1g zI{^aW#UWjM7A9gB(QTr?I?z%3Vpd~b+o7SC&DPSWzt&|ps2sB(Gx5{)vHS87E&r^o zn@3NtTQ2Tsa#-R?tNDE_Q*l{3ET9fQ9U{@0vwRK2MZ&jLs$P0z(&;8O+&}># zSN!;bB(g?1vgY$GX_^gY;8V85hZwT5V0xMz_Izt)8vKqeg+~Z;ywu!b0B-QXq%O;7 zl%kOCfIZUZzQKmOHNDaOli2kLrS*uc_k5!yYwIe**l@F^#kZ!Q<+d$>iP&bvPt=8P zdducsm9+LOkC#hb#cnUmK~wWcZiO&ie64Sv(-}LwMO)IyGWErCnH|H&9&?NFHO*#T z%5N0Krt)93-i9oV@MAeR@I?#IMu3eyely{I_TNbasuRF!Z#*B<8IV=R%ZjS9W6fxZ zAKi-p$=kzUl7&`Wt5+S%4qF@K zEalsD#)ouN8kB{KPCn(dDirg-W{rg~`&*n*e&C@4-<^sShG8m8VbUcvawX3C76^<1oMzW>Jnm{UH+Ebhbr{T+ppBbu$B$GqdE&cdZfk; z1Q!ZEE)7L|^nLA$DGL8&o@etdPnTjzeq23Vm%f@k0vZ`*C&gaF;37wkyx%V>u{FWK)GL_H{Z5dYzAw?jhJ5N~BtFcRC5+ zLr+I4wqtDWGu>AMhNVB3N9>=n=zz=IURp{cS|}r#o4OZD?88ARDf)bx7TmnJf(rlR z|Mt{XqpUEWN`~{)odZFdxl2n?cbK(kO+G>&>NI?*J6SFT=66@5lJaVASqhs_9Q7au zo}EDRWr+F){%UK5hm}z8^+agq5wGM9kihycSaI31zORPq8`VTnU&D;prrngQSL~5U ziZynK&Dm4trwRq0*F?D)HG8S3)hLuY5xip`J(++OT;d{|)KUX4xsyRc1x159Wr}Rk zPe-s{c?SW1j8=y!q$zOIwn@d_88KSu+#bTp@F`Mbn1>%m^EZ0mvng1g2?_xGfh3>D zq;pA=E5gC~Ocd@6KLOI@+$>`;bK>V^)d!FzL=iYThP`NlpBm&Z5S-4+;^QZ)f07(v zVf%&Bn?&r25$PeK|K9QI6}znUmkJpYiYkyyOQP*uWh2JY#v<*JSBKC_5<~Kg_)#abverlK)p$dC;e)CNY zVQUIzxHQ~b&i~_09Qq2A#tGJ2PVXw6{_ELGf=;P&y`zz{kBf)lI91q@x&l}UI-~(v zIX!WVAa!L9g#Mfe{woQfcmjsuE8hV5HVS!$7mWEu#MLj^kPGVS+(LtLSKTda#~&Yl zV3>xhya$cmw~<0_zPekqSUkl0%k2h%sAH*A*1YzSuAqPORqNH56f5RB7Jw{r#8jzCC1aUAD%q}P+F zhE|I5U}{gTL5PtNX@IA|wYmlwGE6Z&{bmGAIpj(`4GrsnH!)aG|c z5s69$A#poF`ejCgrAPrW@~*U^nkAE7FbrI%<)Jw5ZSn}|n-NLps^FPouyezkJmtaCx1kuPM@2peXQ4;beG?H$kX2Ei}#1f3r0Qg(fIjGGk z4{B=5&3o~MDEup=wZ}GJX5hhtOEXZiHQ3;F-LV;lk$L}$YxL7iX~1d0rU0V=HvQ(r z*I@1#(o8IeU|$mY38ln+m`nuoFeu7$g_1_UDB;ND_P)F(0v-@YsetWFYB;Qg|zw__attQcJvNXUs2T=Wt@6>XjuxzvM39dux zJd)5qx7b~1uz;W;Ir@3xLSg=cRPLBgVzP5~X1b0VyvV%2YMr$niL&3*Hvz%9;(iv` zqEr0yH{Bwuf%C6_0TWNK1wIY18aBLX(Fm?8@GxkY7R z$PG;1ZkG`vfGtD&A3ocl^84Le`VQ+>mITaP>}($5{JIq8bDhm@Ly{d#+x1i8y1V3% zDDuutt4R}xg$<&&qmlJ0fNn62fa;{eVHXjuu0gEufw~1 zYxUV%MSR_xx;OGb&lKRd6P{Q!Zq%0>oXAX?Ii2&5cVy&u&UB^@v(0A1J;PZwJ;qzh z-gydlhTN2-B~o_SO-i__{t}mZf2IH}M<8)CQsgjGTWXJn#MLmB2F+{5QiI=^o`Jp< zLd^5u-|pW|ooXffmuke*j7_S*c1=a&ywi6Zal7UqSip{yg-Vx1c(tC=>l)sKVzxnS zK$Qk~Ned&hi&7OLJpFtYxhxS+W9g$ z)`l4-Dt|t=pZiB1a;B7r*w!4xG?D6Zoo0oBGh-8Y7n~^u_M_#YK&l6B{_TkVV%)O_ zt6=6?GSP5G@uiR74hqdL+P%5C=uan)Mii}&b8i+V`(kjHe`77AYa9SSmAVAf6En#0 z*#9LO70s^dA7rr>jRe?D~`n58>{utEZ^gRvH7hrFsJ z{lq6TBSg#PnX*8fC*HG=K$*z%Qla*D8~5$i0kA_A_#$;r5!AS|&QIF&!83w$V8=%uI9A%{ojpiBQ=8AR#D}1S%Dfp}Qr(nked5RrFONWqDU5 zl}K^@ALCDo&QtaMFa6o&3ff|OfhUxTi|j(K!{|%sA<0R^jP#RPq z+q&fUxf&AFDmk%kVK)Eq?!^t1v2`)$`k?xXU8j4fJvKQ8WGPPCVFGEdA$e#FG2Evd zL^nOTyBEpyJ>V;v;*5^n*qPO1kDN)@WttaS!wnavy_de)N}B&})sW7Zsq;>{GO^-0 zAMURhcAz@-sw_uwX7i{37w!!-h$~4&ntoMBOPp04{Wf3#bJ-Uo#<=|kH5epf1-0mL zS2uUhmpu$}dvs>q`vA?h_s%rpRt!8EMguNyPA7c-d-FuDCm-w2J6AyObIc3{oX9cl zgtk&Xn|8j|)jWw;1=J2GR@dR_KfKX*XkXWeBBJuAW_G?s5hd4bd=mm22v9@{6~f8E zxB1$)Q?gINdJ#!dNS^lzq-cJs2p>f_N>vZ*#*>F2Z`zp-i|fqBha)D(r#YUUf5?ifhl-Eq@(D1s>n~DLB-+L z;^bY7YadI|{Im(6Jg)Rp6=j@?Od;sMX+*C@#p%gEz(v4@uaQ#H;>iD~kZAGH(ias@AYpT7Oc&@w zmF(cmtAoEauOeW5oc&%&A;+9x_o^jjl3M!VV0X$oo*BcT)(`WW*l0fLlqKNhfk@e~5q(6Ry$QW|Ji02oy~ENc?plb^NFz2d#SUGg0w-%-$S1syuj8RZtUY< zlWgfln4w#A*(MaLpAq?-NFxTgk-HEys)l^YcWUA7c~ZRX;h7& zhnol(3m=1vxUja!`Dba@LJ|?VG%1OEICg|e9GpUwNXB{qw1q3gCTjjbdrkK@GnyY; zR(|~Jyy;HxEsuC!xs;bxYik*cw*LgOgL@6>C#DgBaTP{X#+Mnd(e3^-nXr4X#29e| zuty91_G_xXoGkd+IrKFx^i?j9OK?F(s9+@z9Bq$@kzoRZvZ5V~Z^su&(>4k{uUj+h zC)4WQ>P1NoF*v6@OnGqsri68gHDS)^LoC=4;RKY5f>)SnXrAJ=k^fAvM^B)`hML^q zgQZorBg*SbWr+w-5RzS)J$PTNlIFS93!ZCiCyIiiYT@+oC<4%w@7)L@!dJG*6YT{d z0MSuEghpSR5~dWCJp+7|B%-xmAditv2sfVez}* zZ`VLpuUGs1%h22U5pGqE`}7*24#UC$Gl3NgUvfXvy&h;!QzHmYg%dU58nx6jCT}Fh z#P=Us?D7?>eSrBMl|@?Ck`pxxqn~eJyhLG;`pt-v;a$99)!+IP;as^jY#}ywHvnYo zH6203Vo9aDRr@ts;m<}8Dc)5JfA4^&mIp8{lg<0imjCs~gV%_)B=uVafC&5QoWz_S zG%CTUo=@2qP6}{|Qol~EO4q@DB!fTuM%;fRx)oyEeq%OzpNV6#>|cytVhVh15HAHk z+?gs5FK|{v#v(-Pd3hhY@eqG3>c2vQU48I)F`tPH!ll^x+zHLhAb*5pKFXSNXfFP_RN#oneKWcXzOn`f zDsNtQGXTO0k$hZW(i~{Th1O3MM363pW}5+bzJwT;ICa-GupRU4(VJxuy9pwpYg%!f zR6+%`^@2ifj|G?4#dP&b95A(}h^t&2bIRxSg;ZQp&E)Hd$eDShgZ`{cT0TLQJyU^iDaR^PG`XsEV(E^S9o!DF zNskc&aNP0pLMVXC&O$G*9)833RYW{bNJFvV1`;}a<)-KmaR2N-*cv}N3LbFf73AJ( zRu+)k%9$R_gk|_p?BKzg^b=c?gU#$k)G zQGLri=zhGn${wOl$5zA5Weyf++x38dm7i9`xT@L|HPoikFvK`Of_`*&A@(moPcvNx zvI~zsBl&7EPx~4h%Zy>Z4J~^G;(Z=b_#4ew1xodmFY$_?alY@E?&@EU7G_*D6v>H19jVS z4Vvk-XDmXOfUZ|Zp30)5RDcOuIp2RaVRsG60D6*`kx6wbU?U9Tw{V+V2vQ>qcr|cb zfqafE0D%ppKJD+e4vWU6MeG|hNJ?&gx#)P@sk%>bBxm&ag*Vo(WY|f2@&aZ8QU0WG zd6&o_RtMy1+EP$99-H=&TZqVe6U9`IV{Vv>RH4oe)#jL_kzb$w81wDh-p}%|w+@B! z{HDa{B0Jhz zl>DAoG&uo%FBaP;gp0XEcc*Q_*GrH8I}mjp;c0SoZqT>e-YgGE7KV3Tn+aeX8iP4b zV#5)~a_C8UEyGg(>D57*ISP+3shio;$3E?%nVAFlB)Um1{Avw0`F!D!A)J&dT=%$A zddKPUb?zIxS2f9b>*3B3fy+tBb?*42lD?cQ;J?;ImBR*+VwGd{nZ`p&RsOK~fLF8JIFZ89|E*-ME{ItHKpPTUzu zx@B}McO>3P{LE8H9xPMe;CqsS{-uh@q8453~Xr&wQ7As4gIZOhn>2&uYYVS|@@ zeH#cJM<>M7hx?-esOQ&jB1k;p`hPp4&AZg=pD~)D-pq(y@YoC=|ILLZE9z8N^=!N) znFr;=f33ewJIe|(3GbAW9(|J(B-;IjKxRKU z_ML$iYad1uT{c1>HYSNzK%1IE4#k;QC(A=2KKMUPAEvw0xY11@Y|4OOTM{}s{F(eJ z_w7?k^RIN~EfBf=TeeJsmh6)tj~C(tOTSqLv=i^|HCA76bRGx28Rhgf(}cpsXyINL zU&%OhF)-bhcJlr+%^}Z9(cbujFnkf2IRD>rH9@XoVF#|kH|J?m3}v%KwzWee320|! zkn?lgc&khM{@)2u5O|9n68i9s5jif2Kvf=br_~#yrmS6F&#MEbJ*hPmdPdP24OMsY zxi9e*Y~Dna9!wg%E^8D}$FuUW$Wx+!-gY+C@Xi?P)ab_-K=rmxoy$ z&?LW>Afx!tSLcNz#6W@aRydv90Z)Evjop_kH(a@U2=O0772JTYj_pxxY*v(tIEhLc zcJ7I(N(?!tc+eBz2?tRQ9f+3ZDGlh4a#Sz+u{W`v7lcZQSXXJ3=s?hO35@(rg4S@y z7_!PWd=CfPk?je5Gd!|E?;$E zu^#9x2`vQve8OM-H%C17)Ouj$)UYpB_+fCmKS?_bo%iD+eOpnln`@*r>dnC zzJuwZMY)cBOr;B8)YF)*&KITtPM_oI-`ASsnCQq&HEwWbL^`$c1$zJRew2!@SoLX( zlq_Yb=kx&xdCguQDyj0RlxeK~4`1gi#67z(wM@q$eRR)&i2WdmzvStx|G6qhZKC^ z4@4w;!E<;%ELJj?{;De;<1n`YZk|ZBA@*pXWl{dz($dPFZWujJR7N4=XZ3N6V-T%}P#6HowgT*8wNn|VjZ(Wf>5+}k)LeM~;6XsYJ-244I@0KB_t!;J~kzBL* zv+lR2*$80|UgPmX;i{|9N46{41GWH1L!g?Ka>O6sgG)q5AIkX9vJ`8ZbO9OH_^6!$ zJ>>$f*bG>S$83lx{)4lFK!4PkT;l0fJ0vY=x`Chl6>_z+ZpqM2Y<)E3Z$mdh&7Rg5`59 zw(rS~-HV%Y$KB=}@*{^daIZMdbOZb5BGVzmcKWX!a)SlE2>W{*Zpda&`_z#s& zvpW&O^X~dw~O>$YSWt!rWjw=`94C=4?qfC_T&7bKBJp$ zNs9CQPelg^0my&Sh+VkP!t$D3*cVmha_US!Rtr-a$$39QJvNUwD!21R0_$F5sJO!9 zMm!b18-^%W$2t>A)!`mVPPbkSA&QPQ)DSl!hO=7urypYc{X$vcszneIO(e zVgT|X13c-?UV{`FPyacP?WOb}YYfQ^I^$mk&tuz-KR#H-YR2H7e|%WLE5zFLM_qkG zSs<#ZV`oqpw?~a>wta`sHnSlqZ;33~tB3)*uBXaX^sveku3Q#9sVhUA=%SalG#?SPSLu^PNBHLoYQ(p=3 z8x#`Z@2#@l^=4&(B`QiC1)?&${mkzFj5WRIN~>VhZIW=(hw^lc%)gW3%^qdifsZx0 zTx!?$r2k|f$->0xg8gA;Ld5G9!?Q`p&E*h`1(l;(FYu7$d;VvVyd0-5{6E2Vaq zsjfO}FC1vlu&wr~_WxiL+_Zq9#T;y7Q2W-EY(3{vfG4E|7C8M`o} zYe>=I?wJ5K+UMLqmpDFT-Xw+^Q`-Y=f{g17QJFagO;NrAd`xzJ^xCg>wMdby$$^V{Mr|-GNK63iU!i^YDGI3p3?gik(tMRyCanYk<8~XdXQQHlIBd$mhPM5 zU6NN{m1FV~HA(J3e^;V42Ct1`oU>c)Iq#Aqv4+mut1kSV2;Q2O`5a`D|A(u%X9-#~ zs;=;tcLhlpWxu{!Q&oJ=61}8vN@e}t{aFX8nD}a&XdAmw$MA2WYYKE8)4lPC5)g{Y z6r~F`c+O2@;@f4&Sk1>o)s1#jd}!F-_xpP{J~N@Q?uDox9(?!Nqd$Fnn2^ZqN^@?w zqy+2mw&cj~pA3vZMx>yYn;K7Y-kK)%3OA9}gLs;M%3Jy1=jkigPuw1jdI1H*_KQ8@ z@W&c(_dPwxQKC<{@~1vqBu+d!%9hErbvhMG0_Uf#uBlw40okESdLh2XAbQqn(0-{S zB1l`H8 z=wp6nxQS9+INs@)(a%@WhjbOIOXNPUGVcn|)(iho$noS~5FNhn`7yPw4p`K&af6uX zm*(Oh@_tc8Q-hiWXs|1$%7Pz7HOOz~(o~9@Y4cNgyTYEJb_Xq3hA@8BR&I=uz}10f zO2dEfLhRt>p_Gj-U{hK-pHh_B-+u4gc<@atmYE8YUPL_soi zv_6f-KK<)*GW9i;07>LjTBhn#1!YE`CqH{T|0)BIK0i&SZq4X>6_XHIO^w*&KtkuK zP{MmsLae+U2Sd>cbo)UA2#R!jSA?GzuY7<8<1YIGg%&bc#_$8rV#|O0?Yb!#Zkm^0 zRXM$QBShR=$*+bk|0~SbxJCU~fg0_{p-86F*RBtDF@e*vN^G%z(w{B@XW?~YJk8J8 zTCxM;Spl=U>JPvT0(-_zC^axaB{TFK^eeAI~deobq}h;TFdUuW0h&W88( z6N#OY*5091Y3%AU602ryEj1FgTBWM^njvDVs-i}1rADnNl$gj%V+M-uY$ z{tNGY?jLZT`<#2vea`s|_tItCx=)KypUP^*ub9!PmvhQX zym!Cl4u%x_K>1BiBCX4T3bDvJ)$_cwRfMhQUE`}+w|x@z$5=a8CrlCBd%w={RG6h* z($sqXO1ngSo=r=`bgMAO^ZqrmwwNGXaGiNH0d@0+ZIWcPwxQ8iJh6U|i#~~Nap1q* zIQN}8Yah#cklkGlXMO(13=7Yh$gG1?h*7M_26vb$u-!@qdrJ=at{e#&xfmP=lT?JY z_1;@c>V|=(heEg=D;&p5;+-R-VC5BFA4D18+RCOm5qeEkv351Ju~D($?&~EFu3jF9 zR*k%MO5dme>b>U5B>nN0_@FoxC2_S#bB<;EB@?--@>F(PlJV@;3KO$a;xV5}Dg7`n zATDrT$AUi6iA9&eXceFZbG4uRENSP=8HK&72do3wL>10nykz zR#J)MMhWxalc0m1hTghbvOV;9IvAO$oY>WR(WZ=!UL5qPDoUHAvM!-~k&b($nrBzD zJdIs^8_mCkDYO81sM9?Py)G?6&;3C>mIJ@P?#mq_IQQV*Lv1{}S4XEiNBqDJTjl?HEN?X)mUZAR5O2Y#i~CPAKZR@~ScX!%qPczr zA{GIT%IZ!QO1~?Xt_K!lY&X&B%TL^La-YjCbRud3&#Va-PgR#5=OjOtOpuuDv82z= zeyyD$mz)${KNg-e5xP;e8-!@c7FSdLA%DS4^hykJbW0vvdbjaLw5kEON}crr<3O^% zPs>C}tFL44W%Q3jx7tISUT5uCP=C@@yBj0Be~oQr@}>4O)9dV5@=?4`!wLXl+=PpH zk?9M0k=m+oLo1{zD%Hu!4h2_4`^Zj?G&aoMOUV%(&wYY4FJs6UT!^}=H6Sl;VJ#ef zr)W6hi?f1K1pbD(20a+AeTN`H`lSOb&3&zZ0ongAO~FtH_9L>myz%jm)>ue7_-_*P zJ9FagnD2gF$|DH+(VSU(IFY+S{%a%nP7TwNgKSwUeIb&VmEZs5dmU}pvi`As>Ra=Me2%XPp%rYA0q{woTc=iR|pxe5a0SPR{4i;dS1u!1l zi&gS#9~mK3ZT$%t`V%>+pwa*U#G(*``P@(w5nDsmvbiM1#%g;<^EZ(U7e`%%&I@xy zvDfqmIIE(n3v>A-Jj+Ip*DCFP-!oIQr=d9|BiAO1S%&bb*2mEe#vY_hAyxV_P`F?RO^YRRWZGf0*pYH(VyBD-4 zC@oj)G=1ntABFL9=HU$XABWw|T)>Ieq8K%QK}c%yfXq@CchDt8m{8WLGRKqT;fuIi zQQGjKpM^oBKOQ_z2Y!G2;=|8vE7-^J^kVu<&TOe7`ryL+AVxk5Be7&2gwrn#m73S{ zxqqVNeo(H^1-m)mm^IYrzdO^(!@D=`q%0jlDi@3y&j801oQCeihhGkdt%h{Z2anMQ zUz}37mZIK3tio0Mkbiw*%0L5eG@&c_7@M^b^{x+IHVVVHXKVzC33p8^%P5+S^U3wT zu!oJ(ib$^et3c{oPJMN`U(dn7!$`vm(@us*uh)#ROE) zoyx4(Y}}K)nl`fhnD^06%(J60ZJZQm%$4V4jpRZfQ*9|RzWfbj*=5%7X|m;B>DRf) zqSlSvM-4p$RgOSnjsBoT5|AJBbK+ku&}Wpfe|MS>c!mQzrOgC)JdR#5*iKlmHms@`Tcuf($=Rc%G+Mo&8R!li8O zCtBJeXc;<-49TzVEp{ZvWI}88?5w3a^^nq=&tPC9^cZB$C7M5v7K!4u4*xvZVN!D) zorRm=Yj1&xFn4Rzfh*xl+fhNX54Ts|n)aaqAydu9)pV&r6BDF%*%B~1p!7&|?1P+c zV9halol0f?9lp$~*TwjZrKb+y99X;SA>+G4HL4T&RKG0Bb@C=Inac6$GuaPKydmq# zK&jcdF7DRm@wUIfA6P58F-n~ws4^5bN#N(X6e}nKuj}rH+^a|OJN%%xzLRg0tK@W0 zxSda=KYQ+1;4t)l9zc2vZ0nAW2|D{J1+=aW_>~v&lM0k4>D=v1lmu0EL)`?;SZUhZ zmjQMA5@_zWOy^)yAMVE6Drt`VSMKOfYN-&Y+JrzSIm1=6W>S~&a3Gnth8OmT<pJVuR>^YQo!7vVJ-KU4CFJ_4mg@HOZk{LaT>KH zXv=6Wx+6F|2Z-gcUi#6=D$nM2q$O;~`CVh`=I*Y>M5s19^6tM|&UxKRmT7$rIb`Ny{(;WL{6h$4!+E@7qq^v|H%J0GG;wda9;oVNdM zSRa2%z=y2RsB=MoEUXzJ&mOj|_h)25Ti;pNX7yTk=u7?MwM)>F(3fl#aV)TRR9?-Z zSq7eTCVo6Jv7xjfiH!@;QzmQ5G4F+cCKcr+6D2zkDNn1Zl)P*2LsTBWgqIe=y7r)j z#>yToubb9?O}vH$%p|Z3#Xb@CnmB9r)^l=96PF(r`Gt7kx;OOQ|7S90rTi%4ijW~c z(QhJfAy?`BZRJB%{-Y2mKCX$t>ytS6H^h;-?VUOxbcWIfv19;Lr&rl1_&#u7UQ1jH zb=uX{l?K7o#DzYFh}teP!&kf9qh9F<*P-MFPu{QVzNi^5_7}a56cg`6iS?_NKSJN( z!4=6rHG@^AnBT{GFQpE_cwB&N37_GW7y@@d?#f32)dnf_vbbp$L#qQiK%(WvpLb=t zXPccb3$qmsLQ&K)34zU?bt%v*2fz=c*s}23KHJ2UvTjZZrS~Di0{z_|!oHOk4wo_{ ziy@6p%MVAT7{}UOILGh6D-UkGEeMsV)hRaTduI?y2eG7>f5&@DM^E3hvJEKrFWRsh z+uf@%0~J2p($AsK>@IX;!yBfBB%-TUqU)C>bqU$OTi3g${5`_mJa;}TIkbCqoik8# zHPDawFf&p8TP8Dhv;Y0{OhMcpSHZqO=>Oxq{cus}POhG`#@J)9T*ui(@}WluB&D43 z#<(w?A1rxktAp&e5N5MJX1{*x^3N*V{!k7YXu zJO6flcW>MTL)lWVzq$%-EoE$7dMA_jeZZULVSkU93H9Q;?nh5Hz}*WEMPs#Cn2sF0 z>L3}DKN|0(uN$J9mzgl58LCJi&~xNU^L+vaXPg#*^A?jlq}LuANl&?IvLzt`H8_}|$D2KlXSW?Vo+!0%Tq#{#r9|Fuyjew*_*0r}1x;1vsDd-DFjBPRjrV9ci`KL8&}8owZ(|ly zk&G;Ws|n!u?femT`0bZ765slJfV^Ya)TNV?1RpRK%+hxd5_}U{af_Jk~8l> ziv=7jx%I^$dXWC^j)y6PI6j^0Hn#?T@Kl(%3%r6oJmWTFc!d!-D6^END^|5gGqL5q z@~MWZ&8lLlpH$)PVw)8^g;F3X>v?hdj}A*RB7xJ*9vE@H`Pd?u-fE<7=k+x^WW*{5qp&`?FH^d9{)ggQg~rGsBs~lDX9#aR+<>?9jlwI{pMU) z^iqz8Hr>BlJ*8N+&90P4yTuD68(atrq1)QK+lr}J)MR+5Z_57y)pITkQu_P2nKp6v zKZ@;8@Q#K5w6C!!^x(%$%y#=_6A@JSnG5(WP-%|m6~sEiGkdJLD)4T0p{7|?_^qb@ z`WI3SSAp<8 z&vx5vkgG9?U#Y^tcgipoEH3{0;~{Fy+qP)ut_X4_b zfYr>+%p|O?@%)--_fGs#A4l6<=}uR9l41H>?)`GKc7T`A5Ua7!tCwk|@GB(A-2RkX z`=SWRAKHl+(SVVw`$|578FvQ0wM~QIw_{GpEwZzi?};u?vnNw!5uN_0RIe~vuGhwF z+=v)1Tmff3dB!=I8qNvdHp)Is-v0)#SgVIqV%e|-Qb8OE7Ki%JAN?zFscf-i9ckRR zacA(W8V_+#`?|2h?H(7tj7U^HSKXe)YMv z@$ps8$0ALqCTE9oTa?!V$bJ`yHJq6g$!tE?Z{&$l_bmC!DIS`YO&J`_#3CbwbS)QN z88X==(WRei({ESoGCDJDmjN+vfNiYgXGp}qW0}{*%IMH!+tY@?P-_}f=lEJVjgs?m z^Gxou9nGhTIF-D{CPJGfY@Kuxn>WUsOuh!Vc&_@=CtOSoUKNMA8t-%jZKtF@wk#Kv z0aKHck}~>1;;y}qk{2pwrL0=pHX^&O+t4lD7Bxoj*9?M7S=qMBKo}N+xn3KtNHka$ zN&J4`i_;PXQKjXBFWtgGw=r0Gw6n5p+ul^!`L)~kKR;sI(31DVORT7qsgbs?YqMVJ z+grgX`u&R#xJ2px< zO|^m?B`B5jSDBl8n^itHk?}OPM@gjA7-XS~{qiK#qqw7n9P(e!J%U<`qu>MlN;E-e z&3bS5ka*Trf;f1q8^)|W6*FswJ5$K*oOo*`k_9ETf6$AB^)2`sfyGcMAk+WoNaFK5 z`roo8!akIxfc~iaJml|(Oyp=_HAFX@NvaHF=JlrEI_xhg;&Wwl zI?l=@HsYziCWD}Gb@qUMf_k#CHQc4+6SVReV)asX&W(vI9P>O zHHjE+M&|1ogtJ7}r5-7xjS3Sk-;*DzeO*yWiF)>R1+ZU+{ra?>ahl8B8kWDc_(g&# zt77oEWZRd%@h!vg8iA^?(X!8W%~Xz?#DMQTwNwK=;k@O_&%~V*l`YIV!@voK#J8xO zuh_*Ee&gdOQY7-`{lA-?qE9S&;7NHJMOv|!73Z4ROE~PzDuX(5QmnZnT?#-Lg9W#G zYo}`v(u(uO&G0bp40XBzko z+EY1VD`KnqHRluQ4C z?Uj79_=3T;c-Z%+mt`e0#c+P_*j}<;B#nZD+h_PgS)61zNh?n_2%{Nfb!Sc=EB*bWW@bIFh`HIiOMXc>&0CYTr6_RLa3uq-PiYZ@ zLif_~zJ!u9GQOuu^VQ)uH{_R&KIB#*`I5$@*k!x;^vq@hbnu0)9mYIyKGSzjFSX!$ z(cBp0+|xIkx+PI8t`~OsW=aY{_&o|9ip(3AIFmx3iPNf^I)`~{PIfcp&Q=>;((~qK(9c6Fk+yYQao!fE-3BimtkEQFdG?P;z_vi!f3zb9>zHy> znUkW4^0X3oe;-tgZ@yz%yG=JFM#QHV9LQcugTx^p^Att&BBvtrwXl=lZ`qhtNq)p> z)%#Qx#A3HX?965@y1yPhc^k87RdUiCx-H~N5(1}rm4@y%(ppzWSP2+%ypSQ{cbxUq z8!*zte}+Q3aHO_f-L@CSh;OU>Vl>=T^@6?>vRjNZ5Scp|J3Xi0Yrb62or8fDlFjG% zn>g->e4wun2Wzl(lLSL*?Na0dq7maVcT&|SN_^FHe%{aEBh{rvNE8D;(ltoSb=qbv z=?5)-g33c=f%m;~PS?F=j~5Sp9-O{@*$9~#{dYXMa~=onY)oNyh_*XdB1|SbZ3P|c zwsg;p8epLSWEmutvRahSvmInxgk>6x@?3JPYqq-Z9ap?xn%Vh4?81_mV_u}QN8bwl zSmI#+ona9eyJBj*Zs=Wt)nYbKX>O#Ky(RlUGUD|!OF(*+pFE5b0x-#^5 zWj1tQ2GMYutK1(HhUqNF8&lDP5W0MKe;&5Ft*%fBVb0?&dmx{DIZ#Z^|^Dv_g3}vNNt6l>)&R) zPB#dEu*6`}sQalG3ZYFGog0e&WlsCMq2j8(Z|H^jJN>i&jNDpBR{uP_=bd})_weY_wclT-oSu-No>}R5f$tnt5 z5ySdvw|MI>C=5_I20HRZ`SRovU5w1}G1p^sds((+FZ##TXLO7ZfGy9SzjcV7)!}@9 z&E0=`SEANR`AdQF^no?g801Fv8A^2H(sPI zq@MBj$tCK^{R&Z+i(B@_pC{MUXP>Eb3fN=kBXZ<7Jx=fQGBrK4U3Iy7AP;#(evsGp zPUG5`Po diff --git a/resources/js/vendor/ckeditor/.gitignore b/resources/js/vendor/ckeditor/.gitignore deleted file mode 100644 index 3c3629e..0000000 --- a/resources/js/vendor/ckeditor/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/resources/js/vendor/ckeditor/LICENSE.md b/resources/js/vendor/ckeditor/LICENSE.md deleted file mode 100644 index 95eabee..0000000 --- a/resources/js/vendor/ckeditor/LICENSE.md +++ /dev/null @@ -1,49 +0,0 @@ -Software License Agreement -========================== - -Copyright (c) 2014-2021, CKSource - Frederico Knabben. All rights reserved. - -Online builder code samples are licensed under the terms of the MIT License (see Appendix A): - - http://en.wikipedia.org/wiki/MIT_License - -CKEditor 5 collaboration features are only available under a commercial license. [Contact us](https://ckeditor.com/contact/) for more details. - -Free 30-days trials of CKEditor 5 collaboration features are available: - * https://ckeditor.com/collaboration/ - Real-time collaboration (with all features). - * https://ckeditor.com/collaboration/comments/ - Inline comments feature (without real-time collaborative editing). - * https://ckeditor.com/collaboration/track-changes/ - Track changes feature (without real-time collaborative editing). - -Trademarks ----------- - -CKEditor is a trademark of CKSource - Frederico Knabben. All other brand -and product names are trademarks, registered trademarks or service -marks of their respective holders. - ---- - -Appendix A: The MIT License ---------------------------- - -The MIT License (MIT) - -Copyright (c) 2014-2021, CKSource - Frederico Knabben - -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/resources/js/vendor/ckeditor/README.md b/resources/js/vendor/ckeditor/README.md deleted file mode 100644 index 9290930..0000000 --- a/resources/js/vendor/ckeditor/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# CKEditor 5 editor generated with the online builder - -This repository presents a CKEditor 5 editor build generated by the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder) - -## Quick start - -1. Open the `sample/index.html` page in the browser. - -If you picked the real-time collaboration plugins: - -2. Fill the dialog with correct token, websocket and upload URL endpoints. If you do not have these yet or do not know their meaning, [contact us](https://ckeditor.com/contact/). - -3. Copy the URL and share it or paste in another tab to enjoy real-time collaborative editing. - -If you picked the non-real-time collaboration plugins: - -2. Fill the prompt with the license key. If you do not have the license key yet [contact us](https://ckeditor.com/contact/). - -## Configuring build - -Changes like changing toolbar items, changing order of icons or customizing plugin configurations should be relatively easy to make. Open the `sample/index.html` file and edit the script that initialized the CKEditor 5. Save the file and refresh the browser. That's all. - -*Note:* If you have any problems with browser caching use the `Ctrl + R` or `Cmd + R` shortcut depending on your system. - -However if you want to remove or add a plugin to the build you need to follow the next step of this guide. - -Note that it is also possible to go back to the [Online builder tool](https://ckeditor.com/ckeditor-5/online-builder) and pick other set of plugins. But we encourage you to try the harder way and to learn the principles of Node.js and CKEditor 5 ecosystems that will allow you to do more cool things in the future! - -### Installation - -In order to rebuild the application you need to install all dependencies first. To do it, open the terminal in the project directory and type: - -``` -npm install -``` - -Make sure that you have the `node` and `npm` installed first. If not, then follow the instructions on the [Node.js documentation page](https://nodejs.org/en/). - -### Adding or removing plugins - -Now you can install additional plugin in the build. Just follow the [Adding a plugin to an editor tutorial](https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/installing-plugins.html#adding-a-plugin-to-an-editor) - -### Rebuilding editor - -If you have already done the [Installation](#installation) and [Adding or removing plugins](#adding-or-removing-plugins) steps, you're ready to rebuild the editor by running the following command: - -``` -npm run build -``` - -This will build the CKEditor 5 to the `build` directory. You can open your browser and you should be able to see the changes you've made in the code. If not, then try to refresh also the browser cache by typing `Ctrl + R` or `Cmd + R` depending on your system. - -## What's next? - -Follow the guides available on https://ckeditor.com/docs/ckeditor5/latest/framework/index.html and enjoy the document editing. - -## FAQ -| Where is the place to report bugs and feature requests? - -You can create an issue on https://github.com/ckeditor/ckeditor5/issues including the build id - `unyb7c61pdjq-xt0bz4ltrghq`. Make sure that the question / problem is unique, please look for a possibly asked questions in the search box. Duplicates will be closed. - -| Where can I learn more about the CKEditor 5 framework? - -Here: https://ckeditor.com/docs/ckeditor5/latest/framework/ - -| Is it possible to use online builder with common frameworks like React, Vue or Angular? - -Not yet, but it these integrations will be available at some point in the future. diff --git a/resources/js/vendor/ckeditor/build/ckeditor.js b/resources/js/vendor/ckeditor/build/ckeditor.js deleted file mode 100644 index c9923c9..0000000 --- a/resources/js/vendor/ckeditor/build/ckeditor.js +++ /dev/null @@ -1,86516 +0,0 @@ -(function(d){ const l = d['fr'] = d['fr'] || {}; l.dictionary=Object.assign( l.dictionary||{}, {"%0 of %1":"%0 sur %1",Accept:"","Align center":"Centrer","Align left":"Aligner à gauche","Align right":"Aligner à droite",Aquamarine:"Bleu vert",Big:"Grand",Black:"Noir","Block quote":"Citation",Blue:"Bleu",Bold:"Gras","Bulleted List":"Liste à puces","Bulleted list styles toolbar":"Barre d'outils des styles de liste à puce",Cancel:"Annuler","Characters: %0":"Caractères : %0","Choose heading":"Choisir l'en-tête",Circle:"Cercle",Decimal:"Chiffres","Decimal with leading zero":"Chiffres avec des zéros supplémentaire","Decrease indent":"Diminuer le retrait",Default:"Par défaut","Dim grey":"Gris pâle",Disc:"Disque","Document colors":"Couleurs du document",Downloadable:"Fichier téléchargeable","Dropdown toolbar":"Barre d'outils dans un menu déroulant","Edit block":"Modifier le bloc","Edit link":"Modifier le lien","Editor block content toolbar":"Barre d'outils du contenu du bloc éditeur","Editor contextual toolbar":"Barre d'outils contextuelle de l'éditeur","Editor editing area: %0":"Zone d'édition de l'éditeur : %0","Editor toolbar":"Barre d'outils de l'éditeur","Font Color":"Couleur de police","Font Family":"Police","Font Size":"Taille de police",Green:"Vert",Grey:"Gris",Heading:"En-tête","Heading 1":"Titre 1","Heading 2":"Titre 2","Heading 3":"Titre 3","Heading 4":"Titre 4","Heading 5":"Titre 5","Heading 6":"Titre 6",HEX:"","Horizontal line":"Ligne horizontale",Huge:"Enorme","Increase indent":"Augmenter le retrait","Insert paragraph after block":"Insérer du texte après ce bloc","Insert paragraph before block":"Insérer du texte avant ce bloc",Italic:"Italique",Justify:"Justifier","Light blue":"Bleu clair","Light green":"Vert clair","Light grey":"Gris clair",Link:"Lien","Link URL":"URL du lien","List properties":"Liste des propriétés","Lower-latin":"Lettres minuscules","Lower–roman":"Chiffres romains en minuscules",Next:"Suivant","Numbered List":"Liste numérotée","Numbered list styles toolbar":"Barre d'outils des styles de liste numérotée","Open in a new tab":"Ouvrir dans un nouvel onglet","Open link in new tab":"Ouvrir le lien dans un nouvel onglet",Orange:"Orange",Paragraph:"Paragraphe","Press Enter to type after or press Shift + Enter to type before the widget":"Appuyez sur la touche Entrée pour taper après ou sur Maj + Entrée pour taper avant le widget.",Previous:"Précedent",Purple:"Violet",Red:"Rouge",Redo:"Restaurer","Remove color":"Enlever la couleur","Remove Format":"Enlever le format","Reversed order":"Ordre inversé","Rich Text Editor":"Éditeur de texte enrichi",Save:"Enregistrer","Select all":"Sélectionner tout","Show more items":"Montrer plus d'éléments",Small:"Petit",Source:"Source",Square:"Carré","Start at":"Commencer à","Start index must be greater than 0.":"L'indice de départ doit être supérieur à 0.","Text alignment":"Alignement du texte","Text alignment toolbar":"Barre d'outils d'alignement du texte","This link has no URL":"Ce lien n'a pas d'URL",Tiny:"Minuscule","Toggle the circle list style":"Activer / désactiver le style de liste \"cercle\"","Toggle the decimal list style":"Activer / désactiver le style de liste \"chiffres\"","Toggle the decimal with leading zero list style":"Activer / désactiver le style de liste \"chiffres de mêmes longueurs\"","Toggle the disc list style":"Activer / désactiver le style de liste \"disque\"","Toggle the lower–latin list style":"Activer / désactiver le style de liste \"lettres minuscules\"","Toggle the lower–roman list style":"Activer / désactiver le style de liste \"chiffres romains en minuscules\"","Toggle the square list style":"Activer / désactiver le style de liste \"carré\"","Toggle the upper–latin list style":"Activer / désactiver le style de liste \"lettres majuscules\"","Toggle the upper–roman list style":"Activer / désactiver le style de liste \"chiffres romains en majuscules\"",Turquoise:"Turquoise",Underline:"Souligné",Undo:"Annuler",Unlink:"Supprimer le lien","Upper-latin":"Lettres majuscules","Upper-roman":"Chiffres romains en majuscules",White:"Blanc","Widget toolbar":"Barre d'outils du widget","Words: %0":"Mots : %0",Yellow:"Jaune"} );l.getPluralForm=function(n){return (n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;;};})(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={})); -/*! - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md. - */ -(function webpackUniversalModuleDefinition(root, factory) { - if(typeof exports === 'object' && typeof module === 'object') - module.exports = factory(); - else if(typeof define === 'function' && define.amd) - define([], factory); - else if(typeof exports === 'object') - exports["ClassicEditor"] = factory(); - else - root["ClassicEditor"] = factory(); -})(self, function() { -return /******/ (function() { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 168: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -/* MIT license */ -/* eslint-disable no-mixed-operators */ -const cssKeywords = __webpack_require__(874); - -// NOTE: conversions should only return primitive values (i.e. arrays, or -// values that give correct `typeof` results). -// do not use box values types (i.e. Number(), String(), etc.) - -const reverseKeywords = {}; -for (const key of Object.keys(cssKeywords)) { - reverseKeywords[cssKeywords[key]] = key; -} - -const convert = { - rgb: {channels: 3, labels: 'rgb'}, - hsl: {channels: 3, labels: 'hsl'}, - hsv: {channels: 3, labels: 'hsv'}, - hwb: {channels: 3, labels: 'hwb'}, - cmyk: {channels: 4, labels: 'cmyk'}, - xyz: {channels: 3, labels: 'xyz'}, - lab: {channels: 3, labels: 'lab'}, - lch: {channels: 3, labels: 'lch'}, - hex: {channels: 1, labels: ['hex']}, - keyword: {channels: 1, labels: ['keyword']}, - ansi16: {channels: 1, labels: ['ansi16']}, - ansi256: {channels: 1, labels: ['ansi256']}, - hcg: {channels: 3, labels: ['h', 'c', 'g']}, - apple: {channels: 3, labels: ['r16', 'g16', 'b16']}, - gray: {channels: 1, labels: ['gray']} -}; - -module.exports = convert; - -// Hide .channels and .labels properties -for (const model of Object.keys(convert)) { - if (!('channels' in convert[model])) { - throw new Error('missing channels property: ' + model); - } - - if (!('labels' in convert[model])) { - throw new Error('missing channel labels property: ' + model); - } - - if (convert[model].labels.length !== convert[model].channels) { - throw new Error('channel and label counts mismatch: ' + model); - } - - const {channels, labels} = convert[model]; - delete convert[model].channels; - delete convert[model].labels; - Object.defineProperty(convert[model], 'channels', {value: channels}); - Object.defineProperty(convert[model], 'labels', {value: labels}); -} - -convert.rgb.hsl = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const min = Math.min(r, g, b); - const max = Math.max(r, g, b); - const delta = max - min; - let h; - let s; - - if (max === min) { - h = 0; - } else if (r === max) { - h = (g - b) / delta; - } else if (g === max) { - h = 2 + (b - r) / delta; - } else if (b === max) { - h = 4 + (r - g) / delta; - } - - h = Math.min(h * 60, 360); - - if (h < 0) { - h += 360; - } - - const l = (min + max) / 2; - - if (max === min) { - s = 0; - } else if (l <= 0.5) { - s = delta / (max + min); - } else { - s = delta / (2 - max - min); - } - - return [h, s * 100, l * 100]; -}; - -convert.rgb.hsv = function (rgb) { - let rdif; - let gdif; - let bdif; - let h; - let s; - - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const v = Math.max(r, g, b); - const diff = v - Math.min(r, g, b); - const diffc = function (c) { - return (v - c) / 6 / diff + 1 / 2; - }; - - if (diff === 0) { - h = 0; - s = 0; - } else { - s = diff / v; - rdif = diffc(r); - gdif = diffc(g); - bdif = diffc(b); - - if (r === v) { - h = bdif - gdif; - } else if (g === v) { - h = (1 / 3) + rdif - bdif; - } else if (b === v) { - h = (2 / 3) + gdif - rdif; - } - - if (h < 0) { - h += 1; - } else if (h > 1) { - h -= 1; - } - } - - return [ - h * 360, - s * 100, - v * 100 - ]; -}; - -convert.rgb.hwb = function (rgb) { - const r = rgb[0]; - const g = rgb[1]; - let b = rgb[2]; - const h = convert.rgb.hsl(rgb)[0]; - const w = 1 / 255 * Math.min(r, Math.min(g, b)); - - b = 1 - 1 / 255 * Math.max(r, Math.max(g, b)); - - return [h, w * 100, b * 100]; -}; - -convert.rgb.cmyk = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - - const k = Math.min(1 - r, 1 - g, 1 - b); - const c = (1 - r - k) / (1 - k) || 0; - const m = (1 - g - k) / (1 - k) || 0; - const y = (1 - b - k) / (1 - k) || 0; - - return [c * 100, m * 100, y * 100, k * 100]; -}; - -function comparativeDistance(x, y) { - /* - See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance - */ - return ( - ((x[0] - y[0]) ** 2) + - ((x[1] - y[1]) ** 2) + - ((x[2] - y[2]) ** 2) - ); -} - -convert.rgb.keyword = function (rgb) { - const reversed = reverseKeywords[rgb]; - if (reversed) { - return reversed; - } - - let currentClosestDistance = Infinity; - let currentClosestKeyword; - - for (const keyword of Object.keys(cssKeywords)) { - const value = cssKeywords[keyword]; - - // Compute comparative distance - const distance = comparativeDistance(rgb, value); - - // Check if its less, if so set as closest - if (distance < currentClosestDistance) { - currentClosestDistance = distance; - currentClosestKeyword = keyword; - } - } - - return currentClosestKeyword; -}; - -convert.keyword.rgb = function (keyword) { - return cssKeywords[keyword]; -}; - -convert.rgb.xyz = function (rgb) { - let r = rgb[0] / 255; - let g = rgb[1] / 255; - let b = rgb[2] / 255; - - // Assume sRGB - r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92); - g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92); - b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92); - - const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805); - const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722); - const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505); - - return [x * 100, y * 100, z * 100]; -}; - -convert.rgb.lab = function (rgb) { - const xyz = convert.rgb.xyz(rgb); - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.hsl.rgb = function (hsl) { - const h = hsl[0] / 360; - const s = hsl[1] / 100; - const l = hsl[2] / 100; - let t2; - let t3; - let val; - - if (s === 0) { - val = l * 255; - return [val, val, val]; - } - - if (l < 0.5) { - t2 = l * (1 + s); - } else { - t2 = l + s - l * s; - } - - const t1 = 2 * l - t2; - - const rgb = [0, 0, 0]; - for (let i = 0; i < 3; i++) { - t3 = h + 1 / 3 * -(i - 1); - if (t3 < 0) { - t3++; - } - - if (t3 > 1) { - t3--; - } - - if (6 * t3 < 1) { - val = t1 + (t2 - t1) * 6 * t3; - } else if (2 * t3 < 1) { - val = t2; - } else if (3 * t3 < 2) { - val = t1 + (t2 - t1) * (2 / 3 - t3) * 6; - } else { - val = t1; - } - - rgb[i] = val * 255; - } - - return rgb; -}; - -convert.hsl.hsv = function (hsl) { - const h = hsl[0]; - let s = hsl[1] / 100; - let l = hsl[2] / 100; - let smin = s; - const lmin = Math.max(l, 0.01); - - l *= 2; - s *= (l <= 1) ? l : 2 - l; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (l + s) / 2; - const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s); - - return [h, sv * 100, v * 100]; -}; - -convert.hsv.rgb = function (hsv) { - const h = hsv[0] / 60; - const s = hsv[1] / 100; - let v = hsv[2] / 100; - const hi = Math.floor(h) % 6; - - const f = h - Math.floor(h); - const p = 255 * v * (1 - s); - const q = 255 * v * (1 - (s * f)); - const t = 255 * v * (1 - (s * (1 - f))); - v *= 255; - - switch (hi) { - case 0: - return [v, t, p]; - case 1: - return [q, v, p]; - case 2: - return [p, v, t]; - case 3: - return [p, q, v]; - case 4: - return [t, p, v]; - case 5: - return [v, p, q]; - } -}; - -convert.hsv.hsl = function (hsv) { - const h = hsv[0]; - const s = hsv[1] / 100; - const v = hsv[2] / 100; - const vmin = Math.max(v, 0.01); - let sl; - let l; - - l = (2 - s) * v; - const lmin = (2 - s) * vmin; - sl = s * vmin; - sl /= (lmin <= 1) ? lmin : 2 - lmin; - sl = sl || 0; - l /= 2; - - return [h, sl * 100, l * 100]; -}; - -// http://dev.w3.org/csswg/css-color/#hwb-to-rgb -convert.hwb.rgb = function (hwb) { - const h = hwb[0] / 360; - let wh = hwb[1] / 100; - let bl = hwb[2] / 100; - const ratio = wh + bl; - let f; - - // Wh + bl cant be > 1 - if (ratio > 1) { - wh /= ratio; - bl /= ratio; - } - - const i = Math.floor(6 * h); - const v = 1 - bl; - f = 6 * h - i; - - if ((i & 0x01) !== 0) { - f = 1 - f; - } - - const n = wh + f * (v - wh); // Linear interpolation - - let r; - let g; - let b; - /* eslint-disable max-statements-per-line,no-multi-spaces */ - switch (i) { - default: - case 6: - case 0: r = v; g = n; b = wh; break; - case 1: r = n; g = v; b = wh; break; - case 2: r = wh; g = v; b = n; break; - case 3: r = wh; g = n; b = v; break; - case 4: r = n; g = wh; b = v; break; - case 5: r = v; g = wh; b = n; break; - } - /* eslint-enable max-statements-per-line,no-multi-spaces */ - - return [r * 255, g * 255, b * 255]; -}; - -convert.cmyk.rgb = function (cmyk) { - const c = cmyk[0] / 100; - const m = cmyk[1] / 100; - const y = cmyk[2] / 100; - const k = cmyk[3] / 100; - - const r = 1 - Math.min(1, c * (1 - k) + k); - const g = 1 - Math.min(1, m * (1 - k) + k); - const b = 1 - Math.min(1, y * (1 - k) + k); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.rgb = function (xyz) { - const x = xyz[0] / 100; - const y = xyz[1] / 100; - const z = xyz[2] / 100; - let r; - let g; - let b; - - r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986); - g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415); - b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570); - - // Assume sRGB - r = r > 0.0031308 - ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055) - : r * 12.92; - - g = g > 0.0031308 - ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055) - : g * 12.92; - - b = b > 0.0031308 - ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055) - : b * 12.92; - - r = Math.min(Math.max(0, r), 1); - g = Math.min(Math.max(0, g), 1); - b = Math.min(Math.max(0, b), 1); - - return [r * 255, g * 255, b * 255]; -}; - -convert.xyz.lab = function (xyz) { - let x = xyz[0]; - let y = xyz[1]; - let z = xyz[2]; - - x /= 95.047; - y /= 100; - z /= 108.883; - - x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116); - y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116); - z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116); - - const l = (116 * y) - 16; - const a = 500 * (x - y); - const b = 200 * (y - z); - - return [l, a, b]; -}; - -convert.lab.xyz = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let x; - let y; - let z; - - y = (l + 16) / 116; - x = a / 500 + y; - z = y - b / 200; - - const y2 = y ** 3; - const x2 = x ** 3; - const z2 = z ** 3; - y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787; - x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787; - z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787; - - x *= 95.047; - y *= 100; - z *= 108.883; - - return [x, y, z]; -}; - -convert.lab.lch = function (lab) { - const l = lab[0]; - const a = lab[1]; - const b = lab[2]; - let h; - - const hr = Math.atan2(b, a); - h = hr * 360 / 2 / Math.PI; - - if (h < 0) { - h += 360; - } - - const c = Math.sqrt(a * a + b * b); - - return [l, c, h]; -}; - -convert.lch.lab = function (lch) { - const l = lch[0]; - const c = lch[1]; - const h = lch[2]; - - const hr = h / 360 * 2 * Math.PI; - const a = c * Math.cos(hr); - const b = c * Math.sin(hr); - - return [l, a, b]; -}; - -convert.rgb.ansi16 = function (args, saturation = null) { - const [r, g, b] = args; - let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization - - value = Math.round(value / 50); - - if (value === 0) { - return 30; - } - - let ansi = 30 - + ((Math.round(b / 255) << 2) - | (Math.round(g / 255) << 1) - | Math.round(r / 255)); - - if (value === 2) { - ansi += 60; - } - - return ansi; -}; - -convert.hsv.ansi16 = function (args) { - // Optimization here; we already know the value and don't need to get - // it converted for us. - return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]); -}; - -convert.rgb.ansi256 = function (args) { - const r = args[0]; - const g = args[1]; - const b = args[2]; - - // We use the extended greyscale palette here, with the exception of - // black and white. normal palette only has 4 greyscale shades. - if (r === g && g === b) { - if (r < 8) { - return 16; - } - - if (r > 248) { - return 231; - } - - return Math.round(((r - 8) / 247) * 24) + 232; - } - - const ansi = 16 - + (36 * Math.round(r / 255 * 5)) - + (6 * Math.round(g / 255 * 5)) - + Math.round(b / 255 * 5); - - return ansi; -}; - -convert.ansi16.rgb = function (args) { - let color = args % 10; - - // Handle greyscale - if (color === 0 || color === 7) { - if (args > 50) { - color += 3.5; - } - - color = color / 10.5 * 255; - - return [color, color, color]; - } - - const mult = (~~(args > 50) + 1) * 0.5; - const r = ((color & 1) * mult) * 255; - const g = (((color >> 1) & 1) * mult) * 255; - const b = (((color >> 2) & 1) * mult) * 255; - - return [r, g, b]; -}; - -convert.ansi256.rgb = function (args) { - // Handle greyscale - if (args >= 232) { - const c = (args - 232) * 10 + 8; - return [c, c, c]; - } - - args -= 16; - - let rem; - const r = Math.floor(args / 36) / 5 * 255; - const g = Math.floor((rem = args % 36) / 6) / 5 * 255; - const b = (rem % 6) / 5 * 255; - - return [r, g, b]; -}; - -convert.rgb.hex = function (args) { - const integer = ((Math.round(args[0]) & 0xFF) << 16) - + ((Math.round(args[1]) & 0xFF) << 8) - + (Math.round(args[2]) & 0xFF); - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.hex.rgb = function (args) { - const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i); - if (!match) { - return [0, 0, 0]; - } - - let colorString = match[0]; - - if (match[0].length === 3) { - colorString = colorString.split('').map(char => { - return char + char; - }).join(''); - } - - const integer = parseInt(colorString, 16); - const r = (integer >> 16) & 0xFF; - const g = (integer >> 8) & 0xFF; - const b = integer & 0xFF; - - return [r, g, b]; -}; - -convert.rgb.hcg = function (rgb) { - const r = rgb[0] / 255; - const g = rgb[1] / 255; - const b = rgb[2] / 255; - const max = Math.max(Math.max(r, g), b); - const min = Math.min(Math.min(r, g), b); - const chroma = (max - min); - let grayscale; - let hue; - - if (chroma < 1) { - grayscale = min / (1 - chroma); - } else { - grayscale = 0; - } - - if (chroma <= 0) { - hue = 0; - } else - if (max === r) { - hue = ((g - b) / chroma) % 6; - } else - if (max === g) { - hue = 2 + (b - r) / chroma; - } else { - hue = 4 + (r - g) / chroma; - } - - hue /= 6; - hue %= 1; - - return [hue * 360, chroma * 100, grayscale * 100]; -}; - -convert.hsl.hcg = function (hsl) { - const s = hsl[1] / 100; - const l = hsl[2] / 100; - - const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l)); - - let f = 0; - if (c < 1.0) { - f = (l - 0.5 * c) / (1.0 - c); - } - - return [hsl[0], c * 100, f * 100]; -}; - -convert.hsv.hcg = function (hsv) { - const s = hsv[1] / 100; - const v = hsv[2] / 100; - - const c = s * v; - let f = 0; - - if (c < 1.0) { - f = (v - c) / (1 - c); - } - - return [hsv[0], c * 100, f * 100]; -}; - -convert.hcg.rgb = function (hcg) { - const h = hcg[0] / 360; - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - if (c === 0.0) { - return [g * 255, g * 255, g * 255]; - } - - const pure = [0, 0, 0]; - const hi = (h % 1) * 6; - const v = hi % 1; - const w = 1 - v; - let mg = 0; - - /* eslint-disable max-statements-per-line */ - switch (Math.floor(hi)) { - case 0: - pure[0] = 1; pure[1] = v; pure[2] = 0; break; - case 1: - pure[0] = w; pure[1] = 1; pure[2] = 0; break; - case 2: - pure[0] = 0; pure[1] = 1; pure[2] = v; break; - case 3: - pure[0] = 0; pure[1] = w; pure[2] = 1; break; - case 4: - pure[0] = v; pure[1] = 0; pure[2] = 1; break; - default: - pure[0] = 1; pure[1] = 0; pure[2] = w; - } - /* eslint-enable max-statements-per-line */ - - mg = (1.0 - c) * g; - - return [ - (c * pure[0] + mg) * 255, - (c * pure[1] + mg) * 255, - (c * pure[2] + mg) * 255 - ]; -}; - -convert.hcg.hsv = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const v = c + g * (1.0 - c); - let f = 0; - - if (v > 0.0) { - f = c / v; - } - - return [hcg[0], f * 100, v * 100]; -}; - -convert.hcg.hsl = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - - const l = g * (1.0 - c) + 0.5 * c; - let s = 0; - - if (l > 0.0 && l < 0.5) { - s = c / (2 * l); - } else - if (l >= 0.5 && l < 1.0) { - s = c / (2 * (1 - l)); - } - - return [hcg[0], s * 100, l * 100]; -}; - -convert.hcg.hwb = function (hcg) { - const c = hcg[1] / 100; - const g = hcg[2] / 100; - const v = c + g * (1.0 - c); - return [hcg[0], (v - c) * 100, (1 - v) * 100]; -}; - -convert.hwb.hcg = function (hwb) { - const w = hwb[1] / 100; - const b = hwb[2] / 100; - const v = 1 - b; - const c = v - w; - let g = 0; - - if (c < 1) { - g = (v - c) / (1 - c); - } - - return [hwb[0], c * 100, g * 100]; -}; - -convert.apple.rgb = function (apple) { - return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255]; -}; - -convert.rgb.apple = function (rgb) { - return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535]; -}; - -convert.gray.rgb = function (args) { - return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255]; -}; - -convert.gray.hsl = function (args) { - return [0, 0, args[0]]; -}; - -convert.gray.hsv = convert.gray.hsl; - -convert.gray.hwb = function (gray) { - return [0, 100, gray[0]]; -}; - -convert.gray.cmyk = function (gray) { - return [0, 0, 0, gray[0]]; -}; - -convert.gray.lab = function (gray) { - return [gray[0], 0, 0]; -}; - -convert.gray.hex = function (gray) { - const val = Math.round(gray[0] / 100 * 255) & 0xFF; - const integer = (val << 16) + (val << 8) + val; - - const string = integer.toString(16).toUpperCase(); - return '000000'.substring(string.length) + string; -}; - -convert.rgb.gray = function (rgb) { - const val = (rgb[0] + rgb[1] + rgb[2]) / 3; - return [val / 255 * 100]; -}; - - -/***/ }), - -/***/ 85: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -const conversions = __webpack_require__(168); -const route = __webpack_require__(111); - -const convert = {}; - -const models = Object.keys(conversions); - -function wrapRaw(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - return fn(args); - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -function wrapRounded(fn) { - const wrappedFn = function (...args) { - const arg0 = args[0]; - - if (arg0 === undefined || arg0 === null) { - return arg0; - } - - if (arg0.length > 1) { - args = arg0; - } - - const result = fn(args); - - // We're assuming the result is an array here. - // see notice in conversions.js; don't use box types - // in conversion functions. - if (typeof result === 'object') { - for (let len = result.length, i = 0; i < len; i++) { - result[i] = Math.round(result[i]); - } - } - - return result; - }; - - // Preserve .conversion property if there is one - if ('conversion' in fn) { - wrappedFn.conversion = fn.conversion; - } - - return wrappedFn; -} - -models.forEach(fromModel => { - convert[fromModel] = {}; - - Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels}); - Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels}); - - const routes = route(fromModel); - const routeModels = Object.keys(routes); - - routeModels.forEach(toModel => { - const fn = routes[toModel]; - - convert[fromModel][toModel] = wrapRounded(fn); - convert[fromModel][toModel].raw = wrapRaw(fn); - }); -}); - -module.exports = convert; - - -/***/ }), - -/***/ 111: -/***/ (function(module, __unused_webpack_exports, __webpack_require__) { - -const conversions = __webpack_require__(168); - -/* - This function routes a model to all other models. - - all functions that are routed have a property `.conversion` attached - to the returned synthetic function. This property is an array - of strings, each with the steps in between the 'from' and 'to' - color models (inclusive). - - conversions that are not possible simply are not included. -*/ - -function buildGraph() { - const graph = {}; - // https://jsperf.com/object-keys-vs-for-in-with-closure/3 - const models = Object.keys(conversions); - - for (let len = models.length, i = 0; i < len; i++) { - graph[models[i]] = { - // http://jsperf.com/1-vs-infinity - // micro-opt, but this is simple. - distance: -1, - parent: null - }; - } - - return graph; -} - -// https://en.wikipedia.org/wiki/Breadth-first_search -function deriveBFS(fromModel) { - const graph = buildGraph(); - const queue = [fromModel]; // Unshift -> queue -> pop - - graph[fromModel].distance = 0; - - while (queue.length) { - const current = queue.pop(); - const adjacents = Object.keys(conversions[current]); - - for (let len = adjacents.length, i = 0; i < len; i++) { - const adjacent = adjacents[i]; - const node = graph[adjacent]; - - if (node.distance === -1) { - node.distance = graph[current].distance + 1; - node.parent = current; - queue.unshift(adjacent); - } - } - } - - return graph; -} - -function link(from, to) { - return function (args) { - return to(from(args)); - }; -} - -function wrapConversion(toModel, graph) { - const path = [graph[toModel].parent, toModel]; - let fn = conversions[graph[toModel].parent][toModel]; - - let cur = graph[toModel].parent; - while (graph[cur].parent) { - path.unshift(graph[cur].parent); - fn = link(conversions[graph[cur].parent][cur], fn); - cur = graph[cur].parent; - } - - fn.conversion = path; - return fn; -} - -module.exports = function (fromModel) { - const graph = deriveBFS(fromModel); - const conversion = {}; - - const models = Object.keys(graph); - for (let len = models.length, i = 0; i < len; i++) { - const toModel = models[i]; - const node = graph[toModel]; - - if (node.parent === null) { - // No possible conversion, or this node is the source model. - continue; - } - - conversion[toModel] = wrapConversion(toModel, graph); - } - - return conversion; -}; - - - -/***/ }), - -/***/ 874: -/***/ (function(module) { - -"use strict"; - - -module.exports = { - "aliceblue": [240, 248, 255], - "antiquewhite": [250, 235, 215], - "aqua": [0, 255, 255], - "aquamarine": [127, 255, 212], - "azure": [240, 255, 255], - "beige": [245, 245, 220], - "bisque": [255, 228, 196], - "black": [0, 0, 0], - "blanchedalmond": [255, 235, 205], - "blue": [0, 0, 255], - "blueviolet": [138, 43, 226], - "brown": [165, 42, 42], - "burlywood": [222, 184, 135], - "cadetblue": [95, 158, 160], - "chartreuse": [127, 255, 0], - "chocolate": [210, 105, 30], - "coral": [255, 127, 80], - "cornflowerblue": [100, 149, 237], - "cornsilk": [255, 248, 220], - "crimson": [220, 20, 60], - "cyan": [0, 255, 255], - "darkblue": [0, 0, 139], - "darkcyan": [0, 139, 139], - "darkgoldenrod": [184, 134, 11], - "darkgray": [169, 169, 169], - "darkgreen": [0, 100, 0], - "darkgrey": [169, 169, 169], - "darkkhaki": [189, 183, 107], - "darkmagenta": [139, 0, 139], - "darkolivegreen": [85, 107, 47], - "darkorange": [255, 140, 0], - "darkorchid": [153, 50, 204], - "darkred": [139, 0, 0], - "darksalmon": [233, 150, 122], - "darkseagreen": [143, 188, 143], - "darkslateblue": [72, 61, 139], - "darkslategray": [47, 79, 79], - "darkslategrey": [47, 79, 79], - "darkturquoise": [0, 206, 209], - "darkviolet": [148, 0, 211], - "deeppink": [255, 20, 147], - "deepskyblue": [0, 191, 255], - "dimgray": [105, 105, 105], - "dimgrey": [105, 105, 105], - "dodgerblue": [30, 144, 255], - "firebrick": [178, 34, 34], - "floralwhite": [255, 250, 240], - "forestgreen": [34, 139, 34], - "fuchsia": [255, 0, 255], - "gainsboro": [220, 220, 220], - "ghostwhite": [248, 248, 255], - "gold": [255, 215, 0], - "goldenrod": [218, 165, 32], - "gray": [128, 128, 128], - "green": [0, 128, 0], - "greenyellow": [173, 255, 47], - "grey": [128, 128, 128], - "honeydew": [240, 255, 240], - "hotpink": [255, 105, 180], - "indianred": [205, 92, 92], - "indigo": [75, 0, 130], - "ivory": [255, 255, 240], - "khaki": [240, 230, 140], - "lavender": [230, 230, 250], - "lavenderblush": [255, 240, 245], - "lawngreen": [124, 252, 0], - "lemonchiffon": [255, 250, 205], - "lightblue": [173, 216, 230], - "lightcoral": [240, 128, 128], - "lightcyan": [224, 255, 255], - "lightgoldenrodyellow": [250, 250, 210], - "lightgray": [211, 211, 211], - "lightgreen": [144, 238, 144], - "lightgrey": [211, 211, 211], - "lightpink": [255, 182, 193], - "lightsalmon": [255, 160, 122], - "lightseagreen": [32, 178, 170], - "lightskyblue": [135, 206, 250], - "lightslategray": [119, 136, 153], - "lightslategrey": [119, 136, 153], - "lightsteelblue": [176, 196, 222], - "lightyellow": [255, 255, 224], - "lime": [0, 255, 0], - "limegreen": [50, 205, 50], - "linen": [250, 240, 230], - "magenta": [255, 0, 255], - "maroon": [128, 0, 0], - "mediumaquamarine": [102, 205, 170], - "mediumblue": [0, 0, 205], - "mediumorchid": [186, 85, 211], - "mediumpurple": [147, 112, 219], - "mediumseagreen": [60, 179, 113], - "mediumslateblue": [123, 104, 238], - "mediumspringgreen": [0, 250, 154], - "mediumturquoise": [72, 209, 204], - "mediumvioletred": [199, 21, 133], - "midnightblue": [25, 25, 112], - "mintcream": [245, 255, 250], - "mistyrose": [255, 228, 225], - "moccasin": [255, 228, 181], - "navajowhite": [255, 222, 173], - "navy": [0, 0, 128], - "oldlace": [253, 245, 230], - "olive": [128, 128, 0], - "olivedrab": [107, 142, 35], - "orange": [255, 165, 0], - "orangered": [255, 69, 0], - "orchid": [218, 112, 214], - "palegoldenrod": [238, 232, 170], - "palegreen": [152, 251, 152], - "paleturquoise": [175, 238, 238], - "palevioletred": [219, 112, 147], - "papayawhip": [255, 239, 213], - "peachpuff": [255, 218, 185], - "peru": [205, 133, 63], - "pink": [255, 192, 203], - "plum": [221, 160, 221], - "powderblue": [176, 224, 230], - "purple": [128, 0, 128], - "rebeccapurple": [102, 51, 153], - "red": [255, 0, 0], - "rosybrown": [188, 143, 143], - "royalblue": [65, 105, 225], - "saddlebrown": [139, 69, 19], - "salmon": [250, 128, 114], - "sandybrown": [244, 164, 96], - "seagreen": [46, 139, 87], - "seashell": [255, 245, 238], - "sienna": [160, 82, 45], - "silver": [192, 192, 192], - "skyblue": [135, 206, 235], - "slateblue": [106, 90, 205], - "slategray": [112, 128, 144], - "slategrey": [112, 128, 144], - "snow": [255, 250, 250], - "springgreen": [0, 255, 127], - "steelblue": [70, 130, 180], - "tan": [210, 180, 140], - "teal": [0, 128, 128], - "thistle": [216, 191, 216], - "tomato": [255, 99, 71], - "turquoise": [64, 224, 208], - "violet": [238, 130, 238], - "wheat": [245, 222, 179], - "white": [255, 255, 255], - "whitesmoke": [245, 245, 245], - "yellow": [255, 255, 0], - "yellowgreen": [154, 205, 50] -}; - - -/***/ }) - -/******/ }); -/************************************************************************/ -/******/ // The module cache -/******/ var __webpack_module_cache__ = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ // Check if module is in cache -/******/ var cachedModule = __webpack_module_cache__[moduleId]; -/******/ if (cachedModule !== undefined) { -/******/ return cachedModule.exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = __webpack_module_cache__[moduleId] = { -/******/ // no module.id needed -/******/ // no module.loaded needed -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/************************************************************************/ -/******/ /* webpack/runtime/define property getters */ -/******/ !function() { -/******/ // define getter functions for harmony exports -/******/ __webpack_require__.d = function(exports, definition) { -/******/ for(var key in definition) { -/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { -/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); -/******/ } -/******/ } -/******/ }; -/******/ }(); -/******/ -/******/ /* webpack/runtime/global */ -/******/ !function() { -/******/ __webpack_require__.g = (function() { -/******/ if (typeof globalThis === 'object') return globalThis; -/******/ try { -/******/ return this || new Function('return this')(); -/******/ } catch (e) { -/******/ if (typeof window === 'object') return window; -/******/ } -/******/ })(); -/******/ }(); -/******/ -/******/ /* webpack/runtime/hasOwnProperty shorthand */ -/******/ !function() { -/******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } -/******/ }(); -/******/ -/************************************************************************/ -var __webpack_exports__ = {}; -// This entry need to be wrapped in an IIFE because it need to be in strict mode. -!function() { -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": function() { return /* binding */ ckeditor; } -}); - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/clickoutsidehandler.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/* global document */ -/** - * Handles clicking **outside** of a specified set of elements, then fires an action. - * - * **Note**: Actually, the action is executed upon `mousedown`, not `click`. It prevents - * certain issues when the user keeps holding the mouse button and the UI cannot react - * properly. - * - * @param options Configuration options. - * @param options.emitter The emitter to which this behavior should be added. - * @param options.activator Function returning a `Boolean`, to determine whether the handler is active. - * @param options.contextElements Array of HTML elements or a callback returning an array of HTML elements - * that determine the scope of the handler. Clicking any of them or their descendants will **not** fire the callback. - * @param options.callback An action executed by the handler. - */ -function clickoutsidehandler_clickOutsideHandler({ emitter, activator, callback, contextElements }) { - emitter.listenTo(document, 'mousedown', (evt, domEvt) => { - if (!activator()) { - return; - } - // Check if `composedPath` is `undefined` in case the browser does not support native shadow DOM. - // Can be removed when all supported browsers support native shadow DOM. - const path = typeof domEvt.composedPath == 'function' ? domEvt.composedPath() : []; - const contextElementsList = typeof contextElements == 'function' ? contextElements() : contextElements; - for (const contextElement of contextElementsList) { - if (contextElement.contains(domEvt.target) || path.includes(contextElement)) { - return; - } - } - callback(); - }); -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/csstransitiondisablermixin.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * A mixin that brings the possibility to temporarily disable CSS transitions using - * {@link module:ui/view~View} methods. It is helpful when, for instance, the transitions should not happen - * when the view is first displayed but they should work normal in other cases. - * - * The methods to control the CSS transitions are: - * * `disableCssTransitions()` – Adds the `.ck-transitions-disabled` class to the - * {@link module:ui/view~View#element view element}. - * * `enableCssTransitions()` – Removes the `.ck-transitions-disabled` class from the - * {@link module:ui/view~View#element view element}. - * - * The usage comes down to: - * - * ```ts - * const MyViewWithCssTransitionDisabler = CssTransitionDisablerMixin( MyView ); - * const view = new MyViewWithCssTransitionDisabler(); - * - * // ... - * - * view.disableCssTransitions(); - * view.show(); - * view.enableCssTransitions(); - * ``` - * - * @param view View instance that should get this functionality. - */ -function CssTransitionDisablerMixin(view) { - class Mixin extends view { - disableCssTransitions() { - this._isCssTransitionsDisabled = true; - } - enableCssTransitions() { - this._isCssTransitionsDisabled = false; - } - constructor(...args) { - super(...args); - this.set('_isCssTransitionsDisabled', false); - this.initializeCssTransitionDisablerMixin(); - } - initializeCssTransitionDisablerMixin() { - this.extendTemplate({ - attributes: { - class: [ - this.bindTemplate.if('_isCssTransitionsDisabled', 'ck-transitions-disabled') - ] - } - }); - } - } - return Mixin; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/submithandler.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * A handler useful for {@link module:ui/view~View views} working as HTML forms. It intercepts a native DOM - * `submit` event, prevents the default web browser behavior (navigation and page reload) and - * fires the `submit` event on a view instead. Such a custom event can be then used by any - * {@link module:utils/dom/emittermixin~DomEmitter emitter}, e.g. to serialize the form data. - * - * ```ts - * import submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler'; - * - * // ... - * - * class AnyFormView extends View { - * constructor() { - * super(); - * - * // ... - * - * submitHandler( { - * view: this - * } ); - * } - * } - * - * // ... - * - * const view = new AnyFormView(); - * - * // A sample listener attached by an emitter working with the view. - * this.listenTo( view, 'submit', () => { - * saveTheFormData(); - * hideTheForm(); - * } ); - * ``` - * - * @param options Configuration options. - * @param options.view The view which DOM `submit` events should be handled. - */ -function submitHandler({ view }) { - view.listenTo(view.element, 'submit', (evt, domEvt) => { - domEvt.preventDefault(); - view.fire('submit'); - }, { useCapture: true }); -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-ui/src/bindings/addkeyboardhandlingforgrid.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * A helper that adds a keyboard navigation support (arrow up/down/left/right) for grids. - * - * @param options Configuration options. - * @param options.keystrokeHandler Keystroke handler to register navigation with arrow keys. - * @param options.focusTracker A focus tracker for grid elements. - * @param options.gridItems A collection of grid items. - * @param options.numberOfColumns Number of columns in the grid. Can be specified as a function that returns - * the number (e.g. for responsive grids). - * @param options.uiLanguageDirection String of ui language direction. - */ -function addKeyboardHandlingForGrid({ keystrokeHandler, focusTracker, gridItems, numberOfColumns, uiLanguageDirection }) { - const getNumberOfColumns = typeof numberOfColumns === 'number' ? () => numberOfColumns : numberOfColumns; - keystrokeHandler.set('arrowright', getGridItemFocuser((focusedElementIndex, gridItems) => { - return uiLanguageDirection === 'rtl' ? - getLeftElementIndex(focusedElementIndex, gridItems.length) : - getRightElementIndex(focusedElementIndex, gridItems.length); - })); - keystrokeHandler.set('arrowleft', getGridItemFocuser((focusedElementIndex, gridItems) => { - return uiLanguageDirection === 'rtl' ? - getRightElementIndex(focusedElementIndex, gridItems.length) : - getLeftElementIndex(focusedElementIndex, gridItems.length); - })); - keystrokeHandler.set('arrowup', getGridItemFocuser((focusedElementIndex, gridItems) => { - let nextIndex = focusedElementIndex - getNumberOfColumns(); - if (nextIndex < 0) { - nextIndex = focusedElementIndex + getNumberOfColumns() * Math.floor(gridItems.length / getNumberOfColumns()); - if (nextIndex > gridItems.length - 1) { - nextIndex -= getNumberOfColumns(); - } - } - return nextIndex; - })); - keystrokeHandler.set('arrowdown', getGridItemFocuser((focusedElementIndex, gridItems) => { - let nextIndex = focusedElementIndex + getNumberOfColumns(); - if (nextIndex > gridItems.length - 1) { - nextIndex = focusedElementIndex % getNumberOfColumns(); - } - return nextIndex; - })); - function getGridItemFocuser(getIndexToFocus) { - return (evt) => { - const focusedElement = gridItems.find(item => item.element === focusTracker.focusedElement); - const focusedElementIndex = gridItems.getIndex(focusedElement); - const nextIndexToFocus = getIndexToFocus(focusedElementIndex, gridItems); - gridItems.get(nextIndexToFocus).focus(); - evt.stopPropagation(); - evt.preventDefault(); - }; - } - /** - * Function returning the next index. - * - * ``` - * before: [ ][x][ ] after: [ ][ ][x] - * index = 1 index = 2 - * ``` - * - * If current index is last, function returns first index. - * - * ``` - * before: [ ][ ][x] after: [x][ ][ ] - * index = 2 index = 0 - * ``` - * - * @param elementIndex Number of current index. - * @param collectionLength A count of collection items. - */ - function getRightElementIndex(elementIndex, collectionLength) { - if (elementIndex === collectionLength - 1) { - return 0; - } - else { - return elementIndex + 1; - } - } - /** - * Function returning the previous index. - * - * ``` - * before: [ ][x][ ] after: [x][ ][ ] - * index = 1 index = 0 - * ``` - * - * If current index is first, function returns last index. - * - * ``` - * before: [x][ ][ ] after: [ ][ ][x] - * index = 0 index = 2 - * ``` - * - * @param elementIndex Number of current index. - * @param collectionLength A count of collection items. - */ - function getLeftElementIndex(elementIndex, collectionLength) { - if (elementIndex === 0) { - return collectionLength - 1; - } - else { - return elementIndex - 1; - } - } -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/env.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/* globals navigator:false */ -/** - * @module utils/env - */ -/** - * Safely returns `userAgent` from browser's navigator API in a lower case. - * If navigator API is not available it will return an empty string. - */ -function getUserAgent() { - // In some environments navigator API might not be available. - try { - return navigator.userAgent.toLowerCase(); - } - catch (e) { - return ''; - } -} -const userAgent = getUserAgent(); -/** - * A namespace containing environment and browser information. - */ -const env_env = { - isMac: isMac(userAgent), - isWindows: isWindows(userAgent), - isGecko: isGecko(userAgent), - isSafari: isSafari(userAgent), - isiOS: isiOS(userAgent), - isAndroid: isAndroid(userAgent), - isBlink: isBlink(userAgent), - features: { - isRegExpUnicodePropertySupported: isRegExpUnicodePropertySupported() - } -}; -/* harmony default export */ var src_env = (env_env); -/** - * Checks if User Agent represented by the string is running on Macintosh. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is running on Macintosh or not. - */ -function isMac(userAgent) { - return userAgent.indexOf('macintosh') > -1; -} -/** - * Checks if User Agent represented by the string is running on Windows. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is running on Windows or not. - */ -function isWindows(userAgent) { - return userAgent.indexOf('windows') > -1; -} -/** - * Checks if User Agent represented by the string is Firefox (Gecko). - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Firefox or not. - */ -function isGecko(userAgent) { - return !!userAgent.match(/gecko\/\d+/); -} -/** - * Checks if User Agent represented by the string is Safari. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Safari or not. - */ -function isSafari(userAgent) { - return userAgent.indexOf(' applewebkit/') > -1 && userAgent.indexOf('chrome') === -1; -} -/** - * Checks if User Agent represented by the string is running in iOS. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is running in iOS or not. - */ -function isiOS(userAgent) { - // "Request mobile site" || "Request desktop site". - return !!userAgent.match(/iphone|ipad/i) || (isMac(userAgent) && navigator.maxTouchPoints > 0); -} -/** - * Checks if User Agent represented by the string is Android mobile device. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Safari or not. - */ -function isAndroid(userAgent) { - return userAgent.indexOf('android') > -1; -} -/** - * Checks if User Agent represented by the string is Blink engine. - * - * @param userAgent **Lowercase** `navigator.userAgent` string. - * @returns Whether User Agent is Blink engine or not. - */ -function isBlink(userAgent) { - // The Edge browser before switching to the Blink engine used to report itself as Chrome (and "Edge/") - // but after switching to the Blink it replaced "Edge/" with "Edg/". - return userAgent.indexOf('chrome/') > -1 && userAgent.indexOf('edge/') < 0; -} -/** - * Checks if the current environment supports ES2018 Unicode properties like `\p{P}` or `\p{L}`. - * More information about unicode properties might be found - * [in Unicode Standard Annex #44](https://www.unicode.org/reports/tr44/#GC_Values_Table). - */ -function isRegExpUnicodePropertySupported() { - let isSupported = false; - // Feature detection for Unicode properties. Added in ES2018. Currently Firefox does not support it. - // See https://github.com/ckeditor/ckeditor5-mention/issues/44#issuecomment-487002174. - try { - // Usage of regular expression literal cause error during build (ckeditor/ckeditor5-dev#534). - isSupported = 'ć'.search(new RegExp('[\\p{L}]', 'u')) === 0; - } - catch (error) { - // Firefox throws a SyntaxError when the group is unsupported. - } - return isSupported; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/fastdiff.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/fastdiff - */ -/** - * Finds positions of the first and last change in the given string/array and generates a set of changes: - * - * ```ts - * fastDiff( '12a', '12xyza' ); - * // [ { index: 2, type: 'insert', values: [ 'x', 'y', 'z' ] } ] - * - * fastDiff( '12a', '12aa' ); - * // [ { index: 3, type: 'insert', values: [ 'a' ] } ] - * - * fastDiff( '12xyza', '12a' ); - * // [ { index: 2, type: 'delete', howMany: 3 } ] - * - * fastDiff( [ '1', '2', 'a', 'a' ], [ '1', '2', 'a' ] ); - * // [ { index: 3, type: 'delete', howMany: 1 } ] - * - * fastDiff( [ '1', '2', 'a', 'b', 'c', '3' ], [ '2', 'a', 'b' ] ); - * // [ { index: 0, type: 'insert', values: [ '2', 'a', 'b' ] }, { index: 3, type: 'delete', howMany: 6 } ] - * ``` - * - * Passed arrays can contain any type of data, however to compare them correctly custom comparator function - * should be passed as a third parameter: - * - * ```ts - * fastDiff( [ { value: 1 }, { value: 2 } ], [ { value: 1 }, { value: 3 } ], ( a, b ) => { - * return a.value === b.value; - * } ); - * // [ { index: 1, type: 'insert', values: [ { value: 3 } ] }, { index: 2, type: 'delete', howMany: 1 } ] - * ``` - * - * The resulted set of changes can be applied to the input in order to transform it into the output, for example: - * - * ```ts - * let input = '12abc3'; - * const output = '2ab'; - * const changes = fastDiff( input, output ); - * - * changes.forEach( change => { - * if ( change.type == 'insert' ) { - * input = input.substring( 0, change.index ) + change.values.join( '' ) + input.substring( change.index ); - * } else if ( change.type == 'delete' ) { - * input = input.substring( 0, change.index ) + input.substring( change.index + change.howMany ); - * } - * } ); - * - * // input equals output now - * ``` - * - * or in case of arrays: - * - * ```ts - * let input = [ '1', '2', 'a', 'b', 'c', '3' ]; - * const output = [ '2', 'a', 'b' ]; - * const changes = fastDiff( input, output ); - * - * changes.forEach( change => { - * if ( change.type == 'insert' ) { - * input = input.slice( 0, change.index ).concat( change.values, input.slice( change.index ) ); - * } else if ( change.type == 'delete' ) { - * input = input.slice( 0, change.index ).concat( input.slice( change.index + change.howMany ) ); - * } - * } ); - * - * // input equals output now - * ``` - * - * By passing `true` as the fourth parameter (`atomicChanges`) the output of this function will become compatible with - * the {@link module:utils/diff~diff `diff()`} function: - * - * ```ts - * fastDiff( '12a', '12xyza', undefined, true ); - * // [ 'equal', 'equal', 'insert', 'insert', 'insert', 'equal' ] - * ``` - * - * The default output format of this function is compatible with the output format of - * {@link module:utils/difftochanges~diffToChanges `diffToChanges()`}. The `diffToChanges()` input format is, in turn, - * compatible with the output of {@link module:utils/diff~diff `diff()`}: - * - * ```ts - * const a = '1234'; - * const b = '12xyz34'; - * - * // Both calls will return the same results (grouped changes format). - * fastDiff( a, b ); - * diffToChanges( diff( a, b ) ); - * - * // Again, both calls will return the same results (atomic changes format). - * fastDiff( a, b, undefined, true ); - * diff( a, b ); - * ``` - * - * @typeParam T The type of array elements. - * @typeParam AtomicChanges The type of `atomicChanges` parameter (selects the result type). - * @param a Input array or string. - * @param b Input array or string. - * @param cmp Optional function used to compare array values, by default `===` (strict equal operator) is used. - * @param atomicChanges Whether an array of `inset|delete|equal` operations should - * be returned instead of changes set. This makes this function compatible with {@link module:utils/diff~diff `diff()`}. - * Defaults to `false`. - * @returns Array of changes. The elements are either {@link module:utils/diff~DiffResult} or {@link module:utils/difftochanges~Change}, - * depending on `atomicChanges` parameter. - */ -function fastDiff(a, b, cmp, atomicChanges) { - // Set the comparator function. - cmp = cmp || function (a, b) { - return a === b; - }; - // Convert the string (or any array-like object - eg. NodeList) to an array by using the slice() method because, - // unlike Array.from(), it returns array of UTF-16 code units instead of the code points of a string. - // One code point might be a surrogate pair of two code units. All text offsets are expected to be in code units. - // See ckeditor/ckeditor5#3147. - // - // We need to make sure here that fastDiff() works identical to diff(). - const arrayA = Array.isArray(a) ? a : Array.prototype.slice.call(a); - const arrayB = Array.isArray(b) ? b : Array.prototype.slice.call(b); - // Find first and last change. - const changeIndexes = findChangeBoundaryIndexes(arrayA, arrayB, cmp); - // Transform into changes array. - const result = atomicChanges ? - changeIndexesToAtomicChanges(changeIndexes, arrayB.length) : - changeIndexesToChanges(arrayB, changeIndexes); - return result; -} -/** - * Finds position of the first and last change in the given arrays. For example: - * - * ```ts - * const indexes = findChangeBoundaryIndexes( [ '1', '2', '3', '4' ], [ '1', '3', '4', '2', '4' ] ); - * console.log( indexes ); // { firstIndex: 1, lastIndexOld: 3, lastIndexNew: 4 } - * ``` - * - * The above indexes means that in the first array the modified part is `1[23]4` and in the second array it is `1[342]4`. - * Based on such indexes, array with `insert`/`delete` operations which allows transforming first value into the second one - * can be generated. - */ -function findChangeBoundaryIndexes(arr1, arr2, cmp) { - // Find the first difference between passed values. - const firstIndex = findFirstDifferenceIndex(arr1, arr2, cmp); - // If arrays are equal return -1 indexes object. - if (firstIndex === -1) { - return { firstIndex: -1, lastIndexOld: -1, lastIndexNew: -1 }; - } - // Remove the common part of each value and reverse them to make it simpler to find the last difference between them. - const oldArrayReversed = cutAndReverse(arr1, firstIndex); - const newArrayReversed = cutAndReverse(arr2, firstIndex); - // Find the first difference between reversed values. - // It should be treated as "how many elements from the end the last difference occurred". - // - // For example: - // - // initial -> after cut -> reversed: - // oldValue: '321ba' -> '21ba' -> 'ab12' - // newValue: '31xba' -> '1xba' -> 'abx1' - // lastIndex: -> 2 - // - // So the last change occurred two characters from the end of the arrays. - const lastIndex = findFirstDifferenceIndex(oldArrayReversed, newArrayReversed, cmp); - // Use `lastIndex` to calculate proper offset, starting from the beginning (`lastIndex` kind of starts from the end). - const lastIndexOld = arr1.length - lastIndex; - const lastIndexNew = arr2.length - lastIndex; - return { firstIndex, lastIndexOld, lastIndexNew }; -} -/** - * Returns a first index on which given arrays differ. If both arrays are the same, -1 is returned. - */ -function findFirstDifferenceIndex(arr1, arr2, cmp) { - for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) { - if (arr1[i] === undefined || arr2[i] === undefined || !cmp(arr1[i], arr2[i])) { - return i; - } - } - return -1; // Return -1 if arrays are equal. -} -/** - * Returns a copy of the given array with `howMany` elements removed starting from the beginning and in reversed order. - * - * @param arr Array to be processed. - * @param howMany How many elements from array beginning to remove. - * @returns Shortened and reversed array. - */ -function cutAndReverse(arr, howMany) { - return arr.slice(howMany).reverse(); -} -/** - * Generates changes array based on change indexes from `findChangeBoundaryIndexes` function. This function will - * generate array with 0 (no changes), 1 (deletion or insertion) or 2 records (insertion and deletion). - * - * @param newArray New array for which change indexes were calculated. - * @param changeIndexes Change indexes object from `findChangeBoundaryIndexes` function. - * @returns Array of changes compatible with {@link module:utils/difftochanges~diffToChanges} format. - */ -function changeIndexesToChanges(newArray, changeIndexes) { - const result = []; - const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes; - // Order operations as 'insert', 'delete' array to keep compatibility with {@link module:utils/difftochanges~diffToChanges} - // in most cases. However, 'diffToChanges' does not stick to any order so in some cases - // (for example replacing '12345' with 'abcd') it will generate 'delete', 'insert' order. - if (lastIndexNew - firstIndex > 0) { - result.push({ - index: firstIndex, - type: 'insert', - values: newArray.slice(firstIndex, lastIndexNew) - }); - } - if (lastIndexOld - firstIndex > 0) { - result.push({ - index: firstIndex + (lastIndexNew - firstIndex), - type: 'delete', - howMany: lastIndexOld - firstIndex - }); - } - return result; -} -/** - * Generates array with set `equal|insert|delete` operations based on change indexes from `findChangeBoundaryIndexes` function. - * - * @param changeIndexes Change indexes object from `findChangeBoundaryIndexes` function. - * @param newLength Length of the new array on which `findChangeBoundaryIndexes` calculated change indexes. - * @returns Array of changes compatible with {@link module:utils/diff~diff} format. - */ -function changeIndexesToAtomicChanges(changeIndexes, newLength) { - const { firstIndex, lastIndexOld, lastIndexNew } = changeIndexes; - // No changes. - if (firstIndex === -1) { - return Array(newLength).fill('equal'); - } - let result = []; - if (firstIndex > 0) { - result = result.concat(Array(firstIndex).fill('equal')); - } - if (lastIndexNew - firstIndex > 0) { - result = result.concat(Array(lastIndexNew - firstIndex).fill('insert')); - } - if (lastIndexOld - firstIndex > 0) { - result = result.concat(Array(lastIndexOld - firstIndex).fill('delete')); - } - if (lastIndexNew < newLength) { - result = result.concat(Array(newLength - lastIndexNew).fill('equal')); - } - return result; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/diff.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/diff - */ - -// The following code is based on the "O(NP) Sequence Comparison Algorithm" -// by Sun Wu, Udi Manber, Gene Myers, Webb Miller. -/** - * Calculates the difference between two arrays or strings producing an array containing a list of changes - * necessary to transform input into output. - * - * ```ts - * diff( 'aba', 'acca' ); // [ 'equal', 'insert', 'insert', 'delete', 'equal' ] - * ``` - * - * This function is based on the "O(NP) Sequence Comparison Algorithm" by Sun Wu, Udi Manber, Gene Myers, Webb Miller. - * Unfortunately, while it gives the most precise results, its to complex for longer strings/arrow (above 200 items). - * Therefore, `diff()` automatically switches to {@link module:utils/fastdiff~fastDiff `fastDiff()`} when detecting - * such a scenario. The return formats of both functions are identical. - * - * @param a Input array or string. - * @param b Output array or string. - * @param cmp Optional function used to compare array values, by default === is used. - * @returns Array of changes. - */ -function diff(a, b, cmp) { - // Set the comparator function. - cmp = cmp || function (a, b) { - return a === b; - }; - const aLength = a.length; - const bLength = b.length; - // Perform `fastDiff` for longer strings/arrays (see #269). - if (aLength > 200 || bLength > 200 || aLength + bLength > 300) { - return diff.fastDiff(a, b, cmp, true); - } - // Temporary action type statics. - let _insert, _delete; - // Swapped the arrays to use the shorter one as the first one. - if (bLength < aLength) { - const tmp = a; - a = b; - b = tmp; - // We swap the action types as well. - _insert = 'delete'; - _delete = 'insert'; - } - else { - _insert = 'insert'; - _delete = 'delete'; - } - const m = a.length; - const n = b.length; - const delta = n - m; - // Edit scripts, for each diagonal. - const es = {}; - // Furthest points, the furthest y we can get on each diagonal. - const fp = {}; - function snake(k) { - // We use -1 as an alternative below to handle initial values ( instead of filling the fp with -1 first ). - // Furthest points (y) on the diagonal below k. - const y1 = (fp[k - 1] !== undefined ? fp[k - 1] : -1) + 1; - // Furthest points (y) on the diagonal above k. - const y2 = fp[k + 1] !== undefined ? fp[k + 1] : -1; - // The way we should go to get further. - const dir = y1 > y2 ? -1 : 1; - // Clone previous changes array (if any). - if (es[k + dir]) { - es[k] = es[k + dir].slice(0); - } - // Create changes array. - if (!es[k]) { - es[k] = []; - } - // Push the action. - es[k].push(y1 > y2 ? _insert : _delete); - // Set the beginning coordinates. - let y = Math.max(y1, y2); - let x = y - k; - // Traverse the diagonal as long as the values match. - while (x < m && y < n && cmp(a[x], b[y])) { - x++; - y++; - // Push no change action. - es[k].push('equal'); - } - return y; - } - let p = 0; - let k; - // Traverse the graph until we reach the end of the longer string. - do { - // Updates furthest points and edit scripts for diagonals below delta. - for (k = -p; k < delta; k++) { - fp[k] = snake(k); - } - // Updates furthest points and edit scripts for diagonals above delta. - for (k = delta + p; k > delta; k--) { - fp[k] = snake(k); - } - // Updates furthest point and edit script for the delta diagonal. - // note that the delta diagonal is the one which goes through the sink (m, n). - fp[delta] = snake(delta); - p++; - } while (fp[delta] !== n); - // Return the final list of edit changes. - // We remove the first item that represents the action for the injected nulls. - return es[delta].slice(1); -} -// Store the API in static property to easily overwrite it in tests. -// Too bad dependency injection does not work in Webpack + ES 6 (const) + Babel. -diff.fastDiff = fastDiff; - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/spy.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/spy - */ -/** - * Creates a spy function (ala Sinon.js) that can be used to inspect call to it. - * - * The following are the present features: - * - * * spy.called: property set to `true` if the function has been called at least once. - * - * @returns The spy function. - */ -function spy() { - return function spy() { - spy.called = true; - }; -} -/* harmony default export */ var src_spy = (spy); - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/eventinfo.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/eventinfo - */ - -/** - * The event object passed to event callbacks. It is used to provide information about the event as well as a tool to - * manipulate it. - */ -class EventInfo { - /** - * @param source The emitter. - * @param name The event name. - */ - constructor(source, name) { - this.source = source; - this.name = name; - this.path = []; - // The following methods are defined in the constructor because they must be re-created per instance. - this.stop = src_spy(); - this.off = src_spy(); - } -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/uid.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/uid - */ -/** - * A hash table of hex numbers to avoid using toString() in uid() which is costly. - * [ '00', '01', '02', ..., 'fe', 'ff' ] - */ -const HEX_NUMBERS = new Array(256).fill('') - .map((_, index) => ('0' + (index).toString(16)).slice(-2)); -/** - * Returns a unique id. The id starts with an "e" character and a randomly generated string of - * 32 alphanumeric characters. - * - * **Note**: The characters the unique id is built from correspond to the hex number notation - * (from "0" to "9", from "a" to "f"). In other words, each id corresponds to an "e" followed - * by 16 8-bit numbers next to each other. - * - * @returns An unique id string. - */ -function uid_uid() { - // Let's create some positive random 32bit integers first. - // - // 1. Math.random() is a float between 0 and 1. - // 2. 0x100000000 is 2^32 = 4294967296. - // 3. >>> 0 enforces integer (in JS all numbers are floating point). - // - // For instance: - // Math.random() * 0x100000000 = 3366450031.853859 - // but - // Math.random() * 0x100000000 >>> 0 = 3366450031. - const r1 = Math.random() * 0x100000000 >>> 0; - const r2 = Math.random() * 0x100000000 >>> 0; - const r3 = Math.random() * 0x100000000 >>> 0; - const r4 = Math.random() * 0x100000000 >>> 0; - // Make sure that id does not start with number. - return 'e' + - HEX_NUMBERS[r1 >> 0 & 0xFF] + - HEX_NUMBERS[r1 >> 8 & 0xFF] + - HEX_NUMBERS[r1 >> 16 & 0xFF] + - HEX_NUMBERS[r1 >> 24 & 0xFF] + - HEX_NUMBERS[r2 >> 0 & 0xFF] + - HEX_NUMBERS[r2 >> 8 & 0xFF] + - HEX_NUMBERS[r2 >> 16 & 0xFF] + - HEX_NUMBERS[r2 >> 24 & 0xFF] + - HEX_NUMBERS[r3 >> 0 & 0xFF] + - HEX_NUMBERS[r3 >> 8 & 0xFF] + - HEX_NUMBERS[r3 >> 16 & 0xFF] + - HEX_NUMBERS[r3 >> 24 & 0xFF] + - HEX_NUMBERS[r4 >> 0 & 0xFF] + - HEX_NUMBERS[r4 >> 8 & 0xFF] + - HEX_NUMBERS[r4 >> 16 & 0xFF] + - HEX_NUMBERS[r4 >> 24 & 0xFF]; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/priorities.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * Provides group of constants to use instead of hardcoding numeric priority values. - */ -const priorities = { - get(priority = 'normal') { - if (typeof priority != 'number') { - return this[priority] || this.normal; - } - else { - return priority; - } - }, - highest: 100000, - high: 1000, - normal: 0, - low: -1000, - lowest: -100000 -}; -/* harmony default export */ var src_priorities = (priorities); - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/inserttopriorityarray.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ - -/** - * Inserts any object with priority at correct index by priority so registered objects are always sorted from highest to lowest priority. - * - * @param objects Array of objects with priority to insert object to. - * @param objectToInsert Object with `priority` property. - */ -function insertToPriorityArray(objects, objectToInsert) { - const priority = src_priorities.get(objectToInsert.priority); - for (let i = 0; i < objects.length; i++) { - if (src_priorities.get(objects[i].priority) < priority) { - objects.splice(i, 0, objectToInsert); - return; - } - } - objects.push(objectToInsert); -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/ckeditorerror.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/ckeditorerror - */ -/* globals console */ -/** - * URL to the documentation with error codes. - */ -const DOCUMENTATION_URL = 'https://ckeditor.com/docs/ckeditor5/latest/support/error-codes.html'; -/** - * The CKEditor error class. - * - * You should throw `CKEditorError` when: - * - * * An unexpected situation occurred and the editor (most probably) will not work properly. Such exception will be handled - * by the {@link module:watchdog/watchdog~Watchdog watchdog} (if it is integrated), - * * If the editor is incorrectly integrated or the editor API is used in the wrong way. This way you will give - * feedback to the developer as soon as possible. Keep in mind that for common integration issues which should not - * stop editor initialization (like missing upload adapter, wrong name of a toolbar component) we use - * {@link module:utils/ckeditorerror~logWarning `logWarning()`} and - * {@link module:utils/ckeditorerror~logError `logError()`} - * to improve developers experience and let them see the a working editor as soon as possible. - * - * ```ts - * /** - * * Error thrown when a plugin cannot be loaded due to JavaScript errors, lack of plugins with a given name, etc. - * * - * * @error plugin-load - * * @param pluginName The name of the plugin that could not be loaded. - * * @param moduleName The name of the module which tried to load this plugin. - * *\/ - * throw new CKEditorError( 'plugin-load', { - * pluginName: 'foo', - * moduleName: 'bar' - * } ); - * ``` - */ -class ckeditorerror_CKEditorError extends Error { - /** - * Creates an instance of the CKEditorError class. - * - * @param errorName The error id in an `error-name` format. A link to this error documentation page will be added - * to the thrown error's `message`. - * @param context A context of the error by which the {@link module:watchdog/watchdog~Watchdog watchdog} - * is able to determine which editor crashed. It should be an editor instance or a property connected to it. It can be also - * a `null` value if the editor should not be restarted in case of the error (e.g. during the editor initialization). - * The error context should be checked using the `areConnectedThroughProperties( editor, context )` utility - * to check if the object works as the context. - * @param data Additional data describing the error. A stringified version of this object - * will be appended to the error message, so the data are quickly visible in the console. The original - * data object will also be later available under the {@link #data} property. - */ - constructor(errorName, context, data) { - super(getErrorMessage(errorName, data)); - this.name = 'CKEditorError'; - this.context = context; - this.data = data; - } - /** - * Checks if the error is of the `CKEditorError` type. - */ - is(type) { - return type === 'CKEditorError'; - } - /** - * A utility that ensures that the thrown error is a {@link module:utils/ckeditorerror~CKEditorError} one. - * It is useful when combined with the {@link module:watchdog/watchdog~Watchdog} feature, which can restart the editor in case - * of a {@link module:utils/ckeditorerror~CKEditorError} error. - * - * @param err The error to rethrow. - * @param context An object connected through properties with the editor instance. This context will be used - * by the watchdog to verify which editor should be restarted. - */ - static rethrowUnexpectedError(err, context) { - if (err.is && err.is('CKEditorError')) { - throw err; - } - /** - * An unexpected error occurred inside the CKEditor 5 codebase. This error will look like the original one - * to make the debugging easier. - * - * This error is only useful when the editor is initialized using the {@link module:watchdog/watchdog~Watchdog} feature. - * In case of such error (or any {@link module:utils/ckeditorerror~CKEditorError} error) the watchdog should restart the editor. - * - * @error unexpected-error - */ - const error = new ckeditorerror_CKEditorError(err.message, context); - // Restore the original stack trace to make the error look like the original one. - // See https://github.com/ckeditor/ckeditor5/issues/5595 for more details. - error.stack = err.stack; - throw error; - } -} -/** - * Logs a warning to the console with a properly formatted message and adds a link to the documentation. - * Use whenever you want to log a warning to the console. - * - * ```ts - * /** - * * There was a problem processing the configuration of the toolbar. The item with the given - * * name does not exist, so it was omitted when rendering the toolbar. - * * - * * @error toolbarview-item-unavailable - * * @param {String} name The name of the component. - * *\/ - * logWarning( 'toolbarview-item-unavailable', { name } ); - * ``` - * - * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to throw an error and when to log - * a warning or an error to the console. - * - * @param errorName The error name to be logged. - * @param data Additional data to be logged. - */ -function ckeditorerror_logWarning(errorName, data) { - console.warn(...formatConsoleArguments(errorName, data)); -} -/** - * Logs an error to the console with a properly formatted message and adds a link to the documentation. - * Use whenever you want to log an error to the console. - * - * ```ts - * /** - * * There was a problem processing the configuration of the toolbar. The item with the given - * * name does not exist, so it was omitted when rendering the toolbar. - * * - * * @error toolbarview-item-unavailable - * * @param {String} name The name of the component. - * *\/ - * logError( 'toolbarview-item-unavailable', { name } ); - * ``` - * - * **Note**: In most cases logging a warning using {@link module:utils/ckeditorerror~logWarning} is enough. - * - * See also {@link module:utils/ckeditorerror~CKEditorError} for an explanation when to use each method. - * - * @param errorName The error name to be logged. - * @param data Additional data to be logged. - */ -function logError(errorName, data) { - console.error(...formatConsoleArguments(errorName, data)); -} -/** - * Returns formatted link to documentation message. - */ -function getLinkToDocumentationMessage(errorName) { - return `\nRead more: ${DOCUMENTATION_URL}#error-${errorName}`; -} -/** - * Returns formatted error message. - */ -function getErrorMessage(errorName, data) { - const processedObjects = new WeakSet(); - const circularReferencesReplacer = (key, value) => { - if (typeof value === 'object' && value !== null) { - if (processedObjects.has(value)) { - return `[object ${value.constructor.name}]`; - } - processedObjects.add(value); - } - return value; - }; - const stringifiedData = data ? ` ${JSON.stringify(data, circularReferencesReplacer)}` : ''; - const documentationLink = getLinkToDocumentationMessage(errorName); - return errorName + stringifiedData + documentationLink; -} -/** - * Returns formatted console error arguments. - */ -function formatConsoleArguments(errorName, data) { - const documentationMessage = getLinkToDocumentationMessage(errorName); - return data ? [errorName, data, documentationMessage] : [errorName, documentationMessage]; -} - -;// CONCATENATED MODULE: ./node_modules/@ckeditor/ckeditor5-utils/src/version.js -/** - * @license Copyright (c) 2003-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -/** - * @module utils/version - */ -/* globals window, global */ - -const version = '38.0.1'; -/* harmony default export */ var src_version = ((/* unused pure expression or super */ null && (version))); -// The second argument is not a month. It is `monthIndex` and starts from `0`. -const releaseDate = new Date(2023, 4, 23); -/* istanbul ignore next -- @preserve */ -const windowOrGlobal = typeof window === 'object' ? window : __webpack_require__.g; -/* istanbul ignore next -- @preserve */ -if (windowOrGlobal.CKEDITOR_VERSION) { - /** - * This error is thrown when due to a mistake in how CKEditor 5 was installed or initialized, some - * of its modules were duplicated (evaluated and executed twice). Module duplication leads to inevitable runtime - * errors. - * - * There are many situations in which some modules can be loaded twice. In the worst case scenario, - * you may need to check your project for each of these issues and fix them all. - * - * # Trying to add a plugin to an existing build - * - * If you import an existing CKEditor 5 build and a plugin like this: - * - * ```ts - * import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; - * import Highlight from '@ckeditor/ckeditor5-highlight/src/highlight'; - * ``` - * - * Then your project loads some CKEditor 5 packages twice. How does it happen? - * - * The build package contains a file which is already compiled with webpack. This means - * that it contains all the necessary code from e.g. `@ckeditor/ckeditor5-engine` and `@ckeditor/ckeditor5-utils`. - * - * However, the `Highlight` plugin imports some of the modules from these packages, too. If you ask webpack to - * build such a project, you will end up with the modules being included (and run) twice — first, because they are - * included inside the build package, and second, because they are required by the `Highlight` plugin. - * - * Therefore, **you must never add plugins to an existing build** unless your plugin has no dependencies. - * - * Adding plugins to a build is done by taking the source version of this build (so, before it was built with webpack) - * and adding plugins there. In this situation, webpack will know that it only needs to load each plugin once. - * - * Read more in the {@glink installation/plugins/installing-plugins Installing plugins} guide. - * - * # Confused an editor build with an editor implementation - * - * This scenario is very similar to the previous one, but has a different origin. - * - * Let's assume that you wanted to use CKEditor 5 from source, as explained in the - * {@glink installation/advanced/alternative-setups/integrating-from-source-webpack "Building from source"} section - * or in the {@glink framework/quick-start "Quick start"} guide of CKEditor 5 Framework. - * - * The correct way to do so is to import an editor and plugins and run them together like this: - * - * ```ts - * import ClassicEditor from '@ckeditor/ckeditor5-editor-classic/src/classiceditor'; - * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials'; - * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; - * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold'; - * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic'; - * - * ClassicEditor - * .create( document.querySelector( '#editor' ), { - * plugins: [ Essentials, Paragraph, Bold, Italic ], - * toolbar: [ 'bold', 'italic' ] - * } ) - * .then( editor => { - * console.log( 'Editor was initialized', editor ); - * } ) - * .catch( error => { - * console.error( error.stack ); - * } ); - * ``` - * - * However, you might have mistakenly imported a build instead of the source `ClassicEditor`. In this case - * your imports will look like this: - * - * ```ts - * import ClassicEditor from '@ckeditor/ckeditor5-build-classic'; - * import Essentials from '@ckeditor/ckeditor5-essentials/src/essentials'; - * import Paragraph from '@ckeditor/ckeditor5-paragraph/src/paragraph'; - * import Bold from '@ckeditor/ckeditor5-basic-styles/src/bold'; - * import Italic from '@ckeditor/ckeditor5-basic-styles/src/italic'; - * ``` - * - * This creates the same situation as in the previous section because you use a build together with source plugins. - * - * Remember: `@ckeditor/ckeditor5-build-*` packages contain editor builds and `@ckeditor/ckeditor5-editor-*` contain source editors. - * - * # Loading two or more builds on one page - * - * If you use CKEditor 5 builds, you might have loaded two (or more) `ckeditor.js` files on one web page. - * Check your web page for duplicated ` - - - \ No newline at end of file diff --git a/resources/js/vendor/ckeditor/sample/styles.css b/resources/js/vendor/ckeditor/sample/styles.css deleted file mode 100644 index ec013f9..0000000 --- a/resources/js/vendor/ckeditor/sample/styles.css +++ /dev/null @@ -1,500 +0,0 @@ -/** - * @license Copyright (c) 2014-2021, CKSource - Frederico Knabben. All rights reserved. - * This file is licensed under the terms of the MIT License (see LICENSE.md). - */ - -:root { - --ck-sample-base-spacing: 2em; - --ck-sample-color-white: #fff; - --ck-sample-color-green: #279863; - --ck-sample-color-blue: #1a9aef; - --ck-sample-container-width: 1285px; - --ck-sample-sidebar-width: 350px; - --ck-sample-editor-min-height: 400px; - --ck-sample-editor-z-index: 10; -} - -/* --------- EDITOR STYLES ---------------------------------------------------------------------------------------- */ - -.editor__editable, -/* Classic build. */ -main .ck-editor[role='application'] .ck.ck-content, -/* Decoupled document build. */ -.ck.editor__editable[role='textbox'], -.ck.ck-editor__editable[role='textbox'], -/* Inline & Balloon build. */ -.ck.editor[role='textbox'] { - width: 100%; - background: #fff; - font-size: 1em; - line-height: 1.6em; - min-height: var(--ck-sample-editor-min-height); - padding: 1.5em 2em; -} - -main .ck-editor[role='application'] { - overflow: auto; -} - -.ck.ck-editor__editable { - background: #fff; - border: 1px solid hsl(0, 0%, 70%); - width: 100%; -} - -/* Because of sidebar `position: relative`, Edge is overriding the outline of a focused editor. */ -.ck.ck-editor__editable { - position: relative; - z-index: var(--ck-sample-editor-z-index); -} - -.editor-container { - display: flex; - flex-direction: row; - flex-wrap: nowrap; - position: relative; - width: 100%; - justify-content: center; -} - -/* --------- DECOUPLED (DOCUMENT) BUILD. ---------------------------------------------*/ -body[data-editor='DecoupledDocumentEditor'] .document-editor__toolbar { - width: 100%; -} - -body[data-editor='DecoupledDocumentEditor'] .collaboration-demo__editable, -body[data-editor='DecoupledDocumentEditor'] .row-editor .editor { - /* A pixel is added for each of the border. */ - width: calc(21cm + 2px); - min-height: calc(29.7cm + 2px); - /* To avoid having extra scrolls inside the editor container. */ - height: fit-content; - padding: 2cm 1.2cm; - margin: 2.5rem; - border: 1px hsl( 0, 0%, 82.7% ) solid; - background-color: var(--ck-sample-color-white); - box-shadow: 0 0 5px hsla( 0, 0%, 0%, .1 ); - box-sizing: border-box; -} - -body[data-editor='DecoupledDocumentEditor'] .row-editor { - display: flex; - position: relative; - justify-content: center; - overflow-y: auto; - background-color: #f2f2f2; - border: 1px solid hsl(0, 0%, 77%); - /* Limit the max-height of the editor to avoid scrolling from bottom to top to see the toolbar. */ - max-height: 700px; -} - -body[data-editor='DecoupledDocumentEditor'] .sidebar { - background: transparent; - border: 0; - box-shadow: none; -} - -/* --------- COMMENTS & TRACK CHANGES FEATURE ---------------------------------------------------------------------- */ -.sidebar { - padding: 0 15px; - position: relative; - min-width: var(--ck-sample-sidebar-width); - max-width: var(--ck-sample-sidebar-width); - font-size: 20px; - border: 1px solid hsl(0, 0%, 77%); - background: hsl(0, 0%, 98%); - border-left: 0; - overflow: hidden; - min-height: 100%; - flex-grow: 1; -} - -/* Do not inherit styles related to the editable editor content. See line 25.*/ -.sidebar .ck-content[role='textbox'], -.ck.ck-annotation-wrapper .ck-content[role='textbox'] { - min-height: unset; - width: unset; - padding: 0; - background: transparent; -} - -.sidebar.narrow { - min-width: 60px; - flex-grow: 0; -} - -.sidebar.hidden { - display: none !important; -} - -#sidebar-display-toggle { - position: absolute; - z-index: 1; - width: 30px; - height: 30px; - text-align: center; - left: 15px; - top: 30px; - border: 0; - padding: 0; - color: hsl( 0, 0%, 50% ); - transition: 250ms ease color; - background-color: transparent; -} - -#sidebar-display-toggle:hover { - color: hsl( 0, 0%, 30% ); - cursor: pointer; -} - -#sidebar-display-toggle:focus, -#sidebar-display-toggle:active { - outline: none; - border: 1px solid #a9d29d; -} - -#sidebar-display-toggle svg { - fill: currentColor; -} - -/* --------- COLLABORATION FEATURES (USERS) ------------------------------------------------------------------------ */ -.row-presence { - width: 100%; - border: 1px solid hsl(0, 0%, 77%); - border-bottom: 0; - background: hsl(0, 0%, 98%); - padding: var(--ck-spacing-small); - - /* Make `border-bottom` as `box-shadow` to not overlap with the editor border. */ - box-shadow: 0 1px 0 0 hsl(0, 0%, 77%); - - /* Make `z-index` bigger than `.editor` to properly display tooltips. */ - z-index: 20; -} - -.ck.ck-presence-list { - flex: 1; - padding: 1.25rem .75rem; -} - -.presence .ck.ck-presence-list__counter { - order: 2; - margin-left: var(--ck-spacing-large) -} - -/* --------- REAL TIME COLLABORATION FEATURES (SHARE TOPBAR CONTAINER) --------------------------------------------- */ -.collaboration-demo__row { - display: flex; - position: relative; - justify-content: center; - overflow-y: auto; - background-color: #f2f2f2; - border: 1px solid hsl(0, 0%, 77%); -} - -body[data-editor='InlineEditor'] .collaboration-demo__row { - border: 0; -} - -.collaboration-demo__container { - max-width: var(--ck-sample-container-width); - margin: 0 auto; - padding: 1.25rem; -} - -.presence, .collaboration-demo__row { - transition: .2s opacity; -} - -.collaboration-demo__topbar { - background: #fff; - border: 1px solid var(--ck-color-toolbar-border); - display: flex; - justify-content: space-between; - align-items: center; - border-bottom: 0; - border-radius: 4px 4px 0 0; -} - -.collaboration-demo__topbar .btn { - margin-right: 1em; - outline-offset: 2px; - outline-width: 2px; - background-color: var( --ck-sample-color-blue ); -} - -.collaboration-demo__topbar .btn:focus, -.collaboration-demo__topbar .btn:hover { - border-color: var( --ck-sample-color-blue ); -} - -.collaboration-demo__share { - display: flex; - align-items: center; - padding: 1.25rem .75rem -} - -.collaboration-demo__share-description p { - margin: 0; - font-weight: bold; - font-size: 0.9em; -} - -.collaboration-demo__share input { - height: auto; - font-size: 0.9em; - min-width: 220px; - margin: 0 10px; - border-radius: 4px; - border: 1px solid var(--ck-color-toolbar-border) -} - -.collaboration-demo__share button, -.collaboration-demo__share input { - height: 40px; - padding: 5px 10px; -} - -.collaboration-demo__share button { - position: relative; -} - -.collaboration-demo__share button:focus { - outline: none; -} - -.collaboration-demo__share button[data-tooltip]::before, -.collaboration-demo__share button[data-tooltip]::after { - position: absolute; - visibility: hidden; - opacity: 0; - pointer-events: none; - transition: all .15s cubic-bezier(.5,1,.25,1); - z-index: 1; -} - -.collaboration-demo__share button[data-tooltip]::before { - content: attr(data-tooltip); - padding: 5px 15px; - border-radius: 3px; - background: #111; - color: #fff; - text-align: center; - font-size: 11px; - top: 100%; - left: 50%; - margin-top: 5px; - transform: translateX(-50%); -} - -.collaboration-demo__share button[data-tooltip]::after { - content: ''; - border: 5px solid transparent; - width: 0; - font-size: 0; - line-height: 0; - top: 100%; - left: 50%; - transform: translateX(-50%); - border-bottom: 5px solid #111; - border-top: none; -} - -.collaboration-demo__share button[data-tooltip]:hover:before, -.collaboration-demo__share button[data-tooltip]:hover:after { - visibility: visible; - opacity: 1; -} - -.collaboration-demo--ready { - overflow: visible; - height: auto; -} - -.collaboration-demo--ready .presence, -.collaboration-demo--ready .collaboration-demo__row { - opacity: 1; -} - -/* --------- PAGINATION FEATURE ------------------------------------------------------------------------------------ */ - -/* Pagination view line must be stacked at least at the same level as the editor, - otherwise it will be hidden underneath. */ -.ck.ck-pagination-view-line { - z-index: var(--ck-sample-editor-z-index); -} - -/* --------- REVISION HISTORY FEATURE ------------------------------------------------------------------------------ */ - -.revision-viewer-container { - display: none; -} - -.revision-viewer-sidebar { - position: relative; - min-width: 310px; - overflow: hidden; - background: var(--ck-color-toolbar-background); - border: 1px solid var(--ck-color-toolbar-border); - margin-left: -1px; -} - -/* A case when Pagination and Revision History features are enabled in the editor. */ -/* Move the square with page number from the Pagination plugin to the left side, so that it does not cover the RH sidebar. */ -body[data-revision-history='true'] .ck.ck-pagination-view-line::after { - transform: translateX(-100%) !important; - left: -1px !important; - right: unset !important; -} - -/* --------- SAMPLE GENERIC STYLES (not related to CKEditor) ------------------------------------------------------- */ -body, html { - padding: 0; - margin: 0; - - font-family: sans-serif, Arial, Verdana, "Trebuchet MS", "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; - font-size: 16px; - line-height: 1.5; -} - -body { - height: 100%; - color: #2D3A4A; -} - -body * { - box-sizing: border-box; -} - -a { - color: #38A5EE; -} - -header .centered { - display: flex; - flex-flow: row nowrap; - justify-content: space-between; - align-items: center; - min-height: 8em; -} - -header h1 a { - font-size: 20px; - display: flex; - align-items: center; - color: #2D3A4A; - text-decoration: none; -} - -header h1 img { - display: block; - height: 64px; -} - -header nav ul { - margin: 0; - padding: 0; - list-style-type: none; -} - -header nav ul li { - display: inline-block; -} - -header nav ul li + li { - margin-left: 1em; -} - -header nav ul li a { - font-weight: bold; - text-decoration: none; - color: #2D3A4A; -} - -header nav ul li a:hover { - text-decoration: underline; -} - -main .message { - padding: 0 0 var(--ck-sample-base-spacing); - background: var(--ck-sample-color-green); - color: var(--ck-sample-color-white); -} - -main .message::after { - content: ""; - z-index: -1; - display: block; - height: 10em; - width: 100%; - background: var(--ck-sample-color-green); - position: absolute; - left: 0; -} - -main .message h2 { - position: relative; - padding-top: 1em; - font-size: 2em; -} - -.centered { - /* Hide overlapping comments. */ - overflow: hidden; - max-width: var(--ck-sample-container-width); - margin: 0 auto; - padding: 0 var(--ck-sample-base-spacing); -} - -.row { - display: flex; - position: relative; -} - -.btn { - cursor: pointer; - padding: 8px 16px; - font-size: 1rem; - user-select: none; - border-radius: 4px; - transition: color .2s ease-in-out,background-color .2s ease-in-out,border-color .2s ease-in-out,opacity .2s ease-in-out; - background-color: var(--ck-sample-color-button-blue); - border-color: var(--ck-sample-color-button-blue); - color: var(--ck-sample-color-white); - display: inline-block; -} - -.btn--tiny { - padding: 6px 12px; - font-size: .8rem; -} - -footer { - margin: calc(2*var(--ck-sample-base-spacing)) var(--ck-sample-base-spacing); - font-size: .8em; - text-align: center; - color: rgba(0,0,0,.4); -} - -/* --------- RWD --------------------------------------------------------------------------------------------------- */ -@media screen and ( max-width: 800px ) { - :root { - --ck-sample-base-spacing: 1em; - } - - header h1 { - width: 100%; - } - - header h1 img { - height: 40px; - } - - header nav ul { - text-align: right; - } - - main .message h2 { - font-size: 1.5em; - } -} diff --git a/resources/js/vendor/ckeditor/src/ckeditor.js b/resources/js/vendor/ckeditor/src/ckeditor.js deleted file mode 100644 index bccefc8..0000000 --- a/resources/js/vendor/ckeditor/src/ckeditor.js +++ /dev/null @@ -1,101 +0,0 @@ -/** - * @license Copyright (c) 2014-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ -import ClassicEditor from "@ckeditor/ckeditor5-editor-classic/src/classiceditor"; -import Alignment from "@ckeditor/ckeditor5-alignment/src/alignment.js"; -import Autoformat from "@ckeditor/ckeditor5-autoformat/src/autoformat.js"; -import BlockQuote from "@ckeditor/ckeditor5-block-quote/src/blockquote.js"; -import Bold from "@ckeditor/ckeditor5-basic-styles/src/bold.js"; -import Essentials from "@ckeditor/ckeditor5-essentials/src/essentials.js"; -import FontColor from "@ckeditor/ckeditor5-font/src/fontcolor.js"; -import FontFamily from "@ckeditor/ckeditor5-font/src/fontfamily.js"; -import FontSize from "@ckeditor/ckeditor5-font/src/fontsize.js"; -import Heading from "@ckeditor/ckeditor5-heading/src/heading.js"; -// @ts-ignore -import HorizontalLine from "@ckeditor/ckeditor5-horizontal-line/src/horizontalline.js"; -// import Image from "@ckeditor/ckeditor5-image/src/image.js"; -// import ImageResize from "@ckeditor/ckeditor5-image/src/imageresize.js"; -// import ImageStyle from "@ckeditor/ckeditor5-image/src/imagestyle.js"; -// import ImageToolbar from "@ckeditor/ckeditor5-image/src/imagetoolbar.js"; -// import ImageUpload from "@ckeditor/ckeditor5-image/src/imageupload.js"; -import Indent from "@ckeditor/ckeditor5-indent/src/indent.js"; -import IndentBlock from "@ckeditor/ckeditor5-indent/src/indentblock.js"; -import Italic from "@ckeditor/ckeditor5-basic-styles/src/italic.js"; -import Link from "@ckeditor/ckeditor5-link/src/link.js"; -// import LinkImage from '@ckeditor/ckeditor5-link/src/linkimage.js'; -import List from "@ckeditor/ckeditor5-list/src/list.js"; -import ListProperties from "@ckeditor/ckeditor5-list/src/listproperties"; -// Disable media pas recceté/demandé -// import MediaEmbed from "@ckeditor/ckeditor5-media-embed/src/mediaembed.js"; -// import MediaEmbedEditing from "@ckeditor/ckeditor5-media-embed/src/mediaembedediting"; -// import MediaEmbedUI from "@ckeditor/ckeditor5-media-embed/src/mediaembedui"; -import Widget from "@ckeditor/ckeditor5-widget/src/widget"; -import Paragraph from "@ckeditor/ckeditor5-paragraph/src/paragraph.js"; -import PasteFromOffice from "@ckeditor/ckeditor5-paste-from-office/src/pastefromoffice.js"; -// @ts-ignore -import RemoveFormat from "@ckeditor/ckeditor5-remove-format/src/removeformat.js"; -// import SimpleUploadAdapter from "@ckeditor/ckeditor5-upload/src/adapters/simpleuploadadapter.js"; -// import Table from "@ckeditor/ckeditor5-table/src/table.js"; -// import TableToolbar from "@ckeditor/ckeditor5-table/src/tabletoolbar"; -// import TableProperties from "@ckeditor/ckeditor5-table/src/tableproperties"; -// import TableCellProperties from "@ckeditor/ckeditor5-table/src/tablecellproperties"; -// import TableCaption from "@ckeditor/ckeditor5-table/src/tablecaption"; -import TextTransformation from "@ckeditor/ckeditor5-typing/src/texttransformation.js"; -import Underline from "@ckeditor/ckeditor5-basic-styles/src/underline.js"; -import Undo from "@ckeditor/ckeditor5-undo/src/undo.js"; -import WordCount from "@ckeditor/ckeditor5-word-count/src/wordcount.js"; -// @ts-ignore -import SourceEditing from "@ckeditor/ckeditor5-source-editing/src/sourceediting.js"; -// import ImageInsert from "@ckeditor/ckeditor5-image/src/imageinsert.js"; -// import LaravelFileManager from "../../../LaravelFileManager" - -class Editor extends ClassicEditor { } - -// Plugins to include in the build. -Editor.builtinPlugins = [ - Alignment, - Autoformat, - BlockQuote, - Bold, - Essentials, - FontColor, - FontFamily, - FontSize, - Heading, - HorizontalLine, - // Image, - // ImageResize, - // ImageStyle, - // ImageToolbar, - // ImageUpload, - Indent, - IndentBlock, - Italic, - Link, - // LinkImage, - List, - ListProperties, - // MediaEmbed, - // MediaEmbedEditing, - // MediaEmbedUI, - Widget, - Paragraph, - PasteFromOffice, - RemoveFormat, - // SimpleUploadAdapter, - // Table, - // TableToolbar, - // TableProperties, - // TableCellProperties, - // TableCaption, - TextTransformation, - Underline, - Undo, - WordCount, - SourceEditing, - // ImageInsert, - // LaravelFileManager, -]; - -export default Editor; diff --git a/resources/js/vendor/ckeditor/webpack.config.js b/resources/js/vendor/ckeditor/webpack.config.js deleted file mode 100644 index 140b0d6..0000000 --- a/resources/js/vendor/ckeditor/webpack.config.js +++ /dev/null @@ -1,99 +0,0 @@ -/** - * @license Copyright (c) 2014-2023, CKSource Holding sp. z o.o. All rights reserved. - * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license - */ - -'use strict'; - -/* eslint-env node */ - -const path = require( 'path' ); -const webpack = require( 'webpack' ); -const { bundler, styles } = require( '@ckeditor/ckeditor5-dev-utils' ); -const { CKEditorTranslationsPlugin } = require( '@ckeditor/ckeditor5-dev-translations' ); -const TerserWebpackPlugin = require('terser-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); - -module.exports = { - // devtool: 'source-map', - performance: { hints: false }, - - entry: path.resolve(__dirname, 'src', 'ckeditor.js'), - - output: { - // The name under which the editor will be exported. - library: 'ClassicEditor', - - path: path.resolve(__dirname, 'build'), - filename: 'ckeditor.js', - libraryTarget: 'umd', - libraryExport: 'default' - }, - - mode: 'development', - optimization: { - minimize: false, - minimizer: [ - new TerserWebpackPlugin( { - sourceMap: false, - terserOptions: { - output: { - // Preserve CKEditor 5 license comments. - // comments: /^!/ - } - }, - // extractComments: false - } ) - ] - }, - - plugins: [ - new CKEditorTranslationsPlugin({ - // The main language that will be built into the main bundle. - language: 'fr', - - // Additional languages that will be emitted to the `outputDirectory`. - // This option can be set to an array of language codes or `'all'` to build all found languages. - // The bundle is optimized for one language when this option is omitted. - additionalLanguages: 'all', - - // For more advanced options see https://github.com/ckeditor/ckeditor5-dev/tree/master/packages/ckeditor5-dev-translations. - }), - new webpack.BannerPlugin({ - banner: bundler.getLicenseBanner(), - raw: true - }), - new MiniCssExtractPlugin({ - filename: 'styles.css' - }) - ], - - module: { - rules: [ - { - test: /\.svg$/, - use: ['raw-loader'] - }, - { - test: /\.css$/, - use: [ - MiniCssExtractPlugin.loader, - { - loader: 'css-loader' - }, - { - loader: 'postcss-loader', - options: { - postcssOptions: styles.getPostCssConfig({ - themeImporter: { - themePath: require.resolve('@ckeditor/ckeditor5-theme-lark') - }, - minify: false - }) - } - }, - ] - } - ] - } -}; diff --git a/resources/lang/en.json b/resources/lang/en.json deleted file mode 100644 index 714172c..0000000 --- a/resources/lang/en.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "(and :count more error)": "(and :count more error)", - "(and :count more errors)": "(and :count more errors)", - "A fresh verification link has been sent to your email address.": "A fresh verification link has been sent to your email address.", - "All rights reserved.": "All rights reserved.", - "Before proceeding, please check your email for a verification link.": "Before proceeding, please check your email for a verification link.", - "click here to request another": "click here to request another", - "Confirm Password": "Confirm Password", - "Dashboard": "Dashboard", - "Email Address": "Email Address", - "Forbidden": "Forbidden", - "Forgot Your Password?": "Forgot Your Password?", - "Go to page :page": "Go to page :page", - "Hello!": "Hello!", - "If you did not create an account, no further action is required.": "If you did not create an account, no further action is required.", - "If you did not receive the email": "If you did not receive the email", - "If you did not request a password reset, no further action is required.": "If you did not request a password reset, no further action is required.", - "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:", - "Invalid JSON was returned from the route.": "Invalid JSON was returned from the route.", - "Login": "Login", - "Logout": "Logout", - "Name": "Name", - "Not Found": "Not Found", - "of": "of", - "Page Expired": "Page Expired", - "Pagination Navigation": "Pagination Navigation", - "Password": "Password", - "Payment Required": "Payment Required", - "Please click the button below to verify your email address.": "Please click the button below to verify your email address.", - "Please confirm your password before continuing.": "Please confirm your password before continuing.", - "Regards": "Regards", - "Register": "Register", - "Remember Me": "Remember Me", - "Reset Password": "Reset Password", - "Reset Password Notification": "Reset Password Notification", - "results": "results", - "Send Password Reset Link": "Send Password Reset Link", - "Server Error": "Server Error", - "Service Unavailable": "Service Unavailable", - "Showing": "Showing", - "The given data was invalid.": "The given data was invalid.", - "The response is not a streamed response.": "The response is not a streamed response.", - "The response is not a view.": "The response is not a view.", - "This password reset link will expire in :count minutes.": "This password reset link will expire in :count minutes.", - "to": "to", - "Toggle navigation": "Toggle navigation", - "Too Many Requests": "Too Many Requests", - "Unauthorized": "Unauthorized", - "Verify Email Address": "Verify Email Address", - "Verify Your Email Address": "Verify Your Email Address", - "Whoops!": "Whoops!", - "You are logged in!": "You are logged in!", - "You are receiving this email because we received a password reset request for your account.": "You are receiving this email because we received a password reset request for your account.", - "see_mode": "see :mode mode" -} diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php deleted file mode 100644 index 6db4982..0000000 --- a/resources/lang/en/auth.php +++ /dev/null @@ -1,9 +0,0 @@ - 'These credentials do not match our records.', - 'password' => 'The password is incorrect.', - 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', -]; diff --git a/resources/lang/en/crud.php b/resources/lang/en/crud.php deleted file mode 100644 index f244945..0000000 --- a/resources/lang/en/crud.php +++ /dev/null @@ -1,57 +0,0 @@ - [ - 'list' => 'List', - 'view' => 'View', - 'create' => 'Create', - 'update' => 'Update', - 'delete' => 'Delete', - 'create' => 'Create', - 'save' => 'Save', - 'edit' => 'Edit', - ], - - 'helpers' => [ - 'list' => 'List', - 'list_all' => 'List all :model', - 'create_model' => 'Create :model', - 'view_model' => 'View :model', - 'update_model' => 'Update :model', - 'delete_model' => 'Delete :model', - 'no_results' => 'No results for :models', - 'publish' => 'Publish', - 'unpublish' => 'Unpublish', - 'manage' => 'Manage :attributes for :model' - ], - - 'libs' => [ - 'toolbox' => [ - 'assertFieldIsUnique' => 'The :value for the :attribute field is already in use', - 'assertNoInternalBoUrls' => ':attribute : It is forbidden to paste backoffice uri into this field', - 'assertNoInternalUrls' => ':attribute : It is forbidden to paste a url of :appname into this field', - ] - ], - - 'messages' => [ - 'has_been_created' => ':model has been created', - 'cannot_be_created' => ':model cannot be created', - 'has_been_updated' => ':model has been updated', - 'cannot_be_updated' => ':model cannot be updated', - 'has_been_deleted' => ':model has been deleted', - 'cannot_be_deleted' => ':model cannot be deleted' - ], - - 'minicrud' => [ - 'visibility_label' => 'Visibility', - 'visibility_helper' => 'Check to make it visible.', - 'select' => 'Select :entity from the list.', - 'associated' => 'Associated :entity', - 'dimensions_must_be' => 'Must be :widthpx (width) by :heightpx (height).', - 'picture_title_helper' => 'Useful for users, displayed by moving the mouse over the image', - 'picture_title_label' => 'Title attribute of the image', - 'picture_alt_helper' => 'Must describe your image for search engines and blind people (5 to 6 words)', - 'picture_alt_label' => 'Alt attribute of the image', - 'text_warning' => 'Proofread your content before publishing it', - ] -]; diff --git a/resources/lang/en/http-statuses.php b/resources/lang/en/http-statuses.php deleted file mode 100644 index 3346f78..0000000 --- a/resources/lang/en/http-statuses.php +++ /dev/null @@ -1,84 +0,0 @@ - 'Unknown Error', - '100' => 'Continue', - '101' => 'Switching Protocols', - '102' => 'Processing', - '200' => 'OK', - '201' => 'Created', - '202' => 'Accepted', - '203' => 'Non-Authoritative Information', - '204' => 'No Content', - '205' => 'Reset Content', - '206' => 'Partial Content', - '207' => 'Multi-Status', - '208' => 'Already Reported', - '226' => 'IM Used', - '300' => 'Multiple Choices', - '301' => 'Moved Permanently', - '302' => 'Found', - '303' => 'See Other', - '304' => 'Not Modified', - '305' => 'Use Proxy', - '307' => 'Temporary Redirect', - '308' => 'Permanent Redirect', - '400' => 'Bad Request', - '401' => 'Unauthorized', - '402' => 'Payment Required', - '403' => 'Forbidden', - '404' => 'Not Found', - '405' => 'Method Not Allowed', - '406' => 'Not Acceptable', - '407' => 'Proxy Authentication Required', - '408' => 'Request Timeout', - '409' => 'Conflict', - '410' => 'Gone', - '411' => 'Length Required', - '412' => 'Precondition Failed', - '413' => 'Payload Too Large', - '414' => 'URI Too Long', - '415' => 'Unsupported Media Type', - '416' => 'Range Not Satisfiable', - '417' => 'Expectation Failed', - '418' => 'I\'m a teapot', - '419' => 'Session Has Expired', - '421' => 'Misdirected Request', - '422' => 'Unprocessable Entity', - '423' => 'Locked', - '424' => 'Failed Dependency', - '425' => 'Too Early', - '426' => 'Upgrade Required', - '428' => 'Precondition Required', - '429' => 'Too Many Requests', - '431' => 'Request Header Fields Too Large', - '444' => 'Connection Closed Without Response', - '449' => 'Retry With', - '451' => 'Unavailable For Legal Reasons', - '499' => 'Client Closed Request', - '500' => 'Internal Server Error', - '501' => 'Not Implemented', - '502' => 'Bad Gateway', - '503' => 'Maintenance Mode', - '504' => 'Gateway Timeout', - '505' => 'HTTP Version Not Supported', - '506' => 'Variant Also Negotiates', - '507' => 'Insufficient Storage', - '508' => 'Loop Detected', - '509' => 'Bandwidth Limit Exceeded', - '510' => 'Not Extended', - '511' => 'Network Authentication Required', - '520' => 'Unknown Error', - '521' => 'Web Server is Down', - '522' => 'Connection Timed Out', - '523' => 'Origin Is Unreachable', - '524' => 'A Timeout Occurred', - '525' => 'SSL Handshake Failed', - '526' => 'Invalid SSL Certificate', - '527' => 'Railgun Error', - '598' => 'Network Read Timeout Error', - '599' => 'Network Connect Timeout Error', - 'unknownError' => 'Unknown Error', -]; diff --git a/resources/lang/en/models.php b/resources/lang/en/models.php deleted file mode 100644 index 1d9f51d..0000000 --- a/resources/lang/en/models.php +++ /dev/null @@ -1,19 +0,0 @@ - [ - 'users' => 'Users', - 'accounts' => 'Accounts', - 'markers' => 'Markers', - 'tickets' => 'Tickets', - 'creditlogs' => 'Logs', - 'sites' => 'Sites', - 'brands' => 'Brands', - 'labels' => 'Labels', - 'packages' => 'Packages', - 'invoices' => 'Invoices', - 'companies' => 'Companies', - 'informations' => 'Informations', - 'ticket_types' => 'Ticket types' - ] -]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php deleted file mode 100644 index f4cedde..0000000 --- a/resources/lang/en/pagination.php +++ /dev/null @@ -1,8 +0,0 @@ - 'Next »', - 'previous' => '« Previous', -]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php deleted file mode 100644 index f3b65ba..0000000 --- a/resources/lang/en/passwords.php +++ /dev/null @@ -1,11 +0,0 @@ - '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/resources/lang/en/validation.php b/resources/lang/en/validation.php deleted file mode 100644 index bc330f4..0000000 --- a/resources/lang/en/validation.php +++ /dev/null @@ -1,229 +0,0 @@ - 'The :attribute must be accepted.', - 'accepted_if' => 'The :attribute must be accepted when :other is :value.', - '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, and dashes.', - 'alpha_num' => 'The :attribute may only contain letters and numbers.', - 'array' => 'The :attribute must be an array.', - 'ascii' => 'The :attribute field must only contain single-byte alphanumeric characters and symbols.', - 'before' => 'The :attribute must be a date before :date.', - 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', - 'between' => [ - 'array' => 'The :attribute must have between :min and :max items.', - 'file' => 'The :attribute must be between :min and :max kilobytes.', - 'numeric' => 'The :attribute must be between :min and :max.', - 'string' => 'The :attribute must be between :min and :max characters.', - ], - 'boolean' => 'The :attribute field must be true or false.', - 'can' => 'The :attribute field contains an unauthorized value.', - 'confirmed' => 'The :attribute confirmation does not match.', - 'current_password' => 'The password is incorrect.', - '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.', - 'decimal' => 'The :attribute field must have :decimal decimal places.', - 'declined' => 'The :attribute must be declined.', - 'declined_if' => 'The :attribute must be declined when :other is :value.', - '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.', - 'doesnt_end_with' => 'The :attribute field must not end with one of the following: :values.', - 'doesnt_start_with' => 'The :attribute field must not start with one of the following: :values.', - 'email' => 'The :attribute must be a valid email address.', - 'ends_with' => 'The :attribute must end with one of the following: :values.', - 'enum' => 'The selected :attribute is invalid.', - 'exists' => 'The selected :attribute is invalid.', - 'file' => 'The :attribute must be a file.', - 'filled' => 'The :attribute field is required.', - 'gt' => [ - 'array' => 'The :attribute must have more than :value items.', - 'file' => 'The :attribute must be greater than :value kilobytes.', - 'numeric' => 'The :attribute must be greater than :value.', - 'string' => 'The :attribute must be greater than :value characters.', - ], - 'gte' => [ - 'array' => 'The :attribute must have :value items or more.', - 'file' => 'The :attribute must be greater than or equal :value kilobytes.', - 'numeric' => 'The :attribute must be greater than or equal :value.', - 'string' => 'The :attribute must be greater than or equal :value characters.', - ], - '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.', - 'lowercase' => 'The :attribute field must be lowercase.', - 'lt' => [ - 'array' => 'The :attribute must have less than :value items.', - 'file' => 'The :attribute must be less than :value kilobytes.', - 'numeric' => 'The :attribute must be less than :value.', - 'string' => 'The :attribute must be less than :value characters.', - ], - 'lte' => [ - 'array' => 'The :attribute must not have more than :value items.', - 'file' => 'The :attribute must be less than or equal :value kilobytes.', - 'numeric' => 'The :attribute must be less than or equal :value.', - 'string' => 'The :attribute must be less than or equal :value characters.', - ], - 'mac_address' => 'The :attribute must be a valid MAC address.', - 'max' => [ - 'array' => 'The :attribute may not have more than :max items.', - 'file' => 'The :attribute may not be greater than :max kilobytes.', - 'numeric' => 'The :attribute may not be greater than :max.', - 'string' => 'The :attribute may not be greater than :max characters.', - ], - 'max_digits' => 'The :attribute field must not have more than :max digits.', - 'mimes' => 'The :attribute must be a file of type: :values.', - 'mimetypes' => 'The :attribute must be a file of type: :values.', - 'min' => [ - 'array' => 'The :attribute must have at least :min items.', - 'file' => 'The :attribute must be at least :min kilobytes.', - 'numeric' => 'The :attribute must be at least :min.', - 'string' => 'The :attribute must be at least :min characters.', - ], - 'min_digits' => 'The :attribute field must have at least :min digits.', - 'missing' => 'The :attribute field must be missing.', - 'missing_if' => 'The :attribute field must be missing when :other is :value.', - 'missing_unless' => 'The :attribute field must be missing unless :other is :value.', - 'missing_with' => 'The :attribute field must be missing when :values is present.', - 'missing_with_all' => 'The :attribute field must be missing when :values are present.', - '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' => [ - 'letters' => 'The :attribute field must contain at least one letter.', - 'mixed' => 'The :attribute field must contain at least one uppercase and one lowercase letter.', - 'numbers' => 'The :attribute field must contain at least one number.', - 'symbols' => 'The :attribute field must contain at least one symbol.', - 'uncompromised' => 'The given :attribute has appeared in a data leak. Please choose a different :attribute.', - ], - 'present' => 'The :attribute field must be present.', - 'prohibited' => 'The :attribute field is prohibited.', - 'prohibited_if' => 'The :attribute field is prohibited when :other is :value.', - 'prohibited_unless' => 'The :attribute field is prohibited unless :other is in :values.', - 'prohibits' => 'The :attribute field prohibits :other from being present.', - 'regex' => 'The :attribute format is invalid.', - 'required' => 'The :attribute field is required.', - 'required_array_keys' => 'The :attribute field must contain entries for: :values.', - 'required_if' => 'The :attribute field is required when :other is :value.', - 'required_if_accepted' => 'The :attribute field is required when :other is accepted.', - '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 is 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' => [ - 'array' => 'The :attribute must contain :size items.', - 'file' => 'The :attribute must be :size kilobytes.', - 'numeric' => 'The :attribute must be :size.', - 'string' => 'The :attribute must be :size characters.', - ], - '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.', - 'ulid' => 'The :attribute field must be a valid ULID.', - 'unique' => 'The :attribute has already been taken.', - 'uploaded' => 'The :attribute failed to upload.', - 'uppercase' => 'The :attribute field must be uppercase.', - 'url' => 'The :attribute format is invalid.', - 'uuid' => 'The :attribute must be a valid UUID.', - 'attributes' => [ - 'address' => 'address', - 'age' => 'age', - 'amount' => 'amount', - 'area' => 'area', - 'available' => 'available', - 'birthday' => 'birthday', - 'body' => 'body', - 'city' => 'city', - 'content' => 'content', - 'country' => 'country', - 'created_at' => 'created at', - 'creator' => 'creator', - 'current_password' => 'current password', - 'date' => 'date', - 'date_of_birth' => 'date of birth', - 'day' => 'day', - 'deleted_at' => 'deleted at', - 'description' => 'description', - 'district' => 'district', - 'duration' => 'duration', - 'email' => 'email', - 'excerpt' => 'excerpt', - 'filter' => 'filter', - 'first_name' => 'first name', - 'gender' => 'gender', - 'group' => 'group', - 'hour' => 'hour', - 'image' => 'image', - 'last_name' => 'last name', - 'lesson' => 'lesson', - 'line_address_1' => 'line address 1', - 'line_address_2' => 'line address 2', - 'message' => 'message', - 'middle_name' => 'middle name', - 'minute' => 'minute', - 'mobile' => 'mobile', - 'month' => 'month', - 'name' => 'name', - 'national_code' => 'national code', - 'number' => 'number', - 'password' => 'password', - 'password_confirmation' => 'password confirmation', - 'phone' => 'phone', - 'photo' => 'photo', - 'postal_code' => 'postal code', - 'price' => 'price', - 'province' => 'province', - 'recaptcha_response_field' => 'recaptcha response field', - 'remember' => 'remember', - 'restored_at' => 'restored at', - 'result_text_under_image' => 'result text under image', - 'role' => 'role', - 'second' => 'second', - 'sex' => 'sex', - 'short_text' => 'short text', - 'size' => 'size', - 'state' => 'state', - 'street' => 'street', - 'student' => 'student', - 'subject' => 'subject', - 'teacher' => 'teacher', - 'terms' => 'terms', - 'test_description' => 'test description', - 'test_locale' => 'test locale', - 'test_name' => 'test name', - 'text' => 'text', - 'time' => 'time', - 'title' => 'title', - 'updated_at' => 'updated at', - 'username' => 'username', - 'year' => 'year', - ], - 'custom' => [ - 'type' => 'type', - 'tickets' => 'tickets', - 'assigned_to' => 'assigned to', - 'order' => 'order', - 'priority' => 'priority', - 'default' => 'default', - 'date_mep' => 'Desired Launch', - 'published' => 'Publication', - 'all' => 'All', - 'estimate' => 'estimate', - ] -]; diff --git a/resources/lang/fr.json b/resources/lang/fr.json deleted file mode 100644 index b405e2f..0000000 --- a/resources/lang/fr.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "(and :count more error)": "(et :count erreur en plus)", - "(and :count more errors)": "(et :count erreurs en plus)", - "A fresh verification link has been sent to your email address.": "Un nouveau lien de vérification a été envoyé à votre adresse e-mail.", - "All rights reserved.": "Tous droits réservés.", - "Before proceeding, please check your email for a verification link.": "Avant de continuer, merci de vérifier votre e-mail contenant un lien de vérification.", - "click here to request another": "cliquez ici pour en demander un autre", - "Confirm Password": "Confirmer le mot de passe", - "Dashboard": "Tableau de bord", - "Email Address": "Adresse e-mail", - "Forbidden": "Interdit", - "Forgot Your Password?": "Mot de passe oublié ?", - "Go to page :page": "Aller à la page :page", - "Hello!": "Bonjour !", - "If you did not create an account, no further action is required.": "Si vous n'avez pas créé de compte, vous pouvez ignorer ce message.", - "If you did not receive the email": "Si vous n'avez pas reçu cet e-mail", - "If you did not request a password reset, no further action is required.": "Si vous n'avez pas demandé de réinitialisation de mot de passe, vous pouvez ignorer ce message.", - "If you're having trouble clicking the \":actionText\" button, copy and paste the URL below\ninto your web browser:": "Si vous avez des difficultés à cliquer sur le bouton \":actionText\", copiez et collez l'URL ci-dessous\ndans votre navigateur Web :", - "Invalid JSON was returned from the route.": "Un JSON non valide a été renvoyé par la route.", - "Login": "Connexion", - "Logout": "Déconnexion", - "Name": "Nom", - "Not Found": "Non trouvé", - "of": "de", - "Page Expired": "Page expirée", - "Pagination Navigation": "Pagination", - "Password": "Mot de passe", - "Payment Required": "Paiement requis", - "Please click the button below to verify your email address.": "Veuillez cliquer sur le bouton ci-dessous pour vérifier votre adresse e-mail :", - "Please confirm your password before continuing.": "Veuillez confirmer votre mot de passe avant de continuer.", - "Regards": "Cordialement", - "Register": "Inscription", - "Remember Me": "Se souvenir de moi", - "Reset Password": "Réinitialisation du mot de passe", - "Reset Password Notification": "Notification de réinitialisation du mot de passe", - "results": "résultats", - "Send Password Reset Link": "Envoyer le lien de réinitialisation du mot de passe", - "Server Error": "Erreur serveur", - "Service Unavailable": "Service indisponible", - "Showing": "Montrant", - "The :attribute must contain at least one letter.": ":attribute doit contenir au moins une lettre.", - "The :attribute must contain at least one number.": ":attribute doit contenir au moins un nombre.", - "The :attribute must contain at least one symbol.": ":attribute doit contenir au moins un caractère spécial.", - "The :attribute must contain at least one uppercase and one lowercase letter.": ":attribute doit contenir au moins une lettre majuscule et une lettre minuscule.", - "The given :attribute has appeared in a data leak. Please choose a different :attribute.": ":attribute apparait dans une fuite de données sur le web. Merci de choisir un :attribute différent.", - "The given data was invalid.": "La donnée renseignée est incorrecte.", - "The response is not a streamed response.": "La réponse n'est pas une réponse diffusée.", - "The response is not a view.": "La réponse n'est pas une vue.", - "This password reset link will expire in :count minutes.": "Ce lien de réinitialisation du mot de passe expirera dans :count minutes.", - "to": "à", - "Toggle navigation": "Afficher / masquer le menu de navigation", - "Too Many Requests": "Trop de requêtes", - "Unauthorized": "Non autorisé", - "Verify Email Address": "Vérifier l'adresse e-mail", - "Verify Your Email Address": "Vérifiez votre adresse e-mail", - "Whoops!": "Oups !", - "You are logged in!": "Vous êtes connecté·e !", - "You are receiving this email because we received a password reset request for your account.": "Vous recevez cet e-mail car nous avons reçu une demande de réinitialisation de mot de passe pour votre compte.", - "see_mode": "voir mode :mode", - "Website": "Site" -} diff --git a/resources/lang/fr/auth.php b/resources/lang/fr/auth.php deleted file mode 100644 index a22cd3f..0000000 --- a/resources/lang/fr/auth.php +++ /dev/null @@ -1,9 +0,0 @@ - 'Ces identifiants ne correspondent pas à nos enregistrements.', - 'password' => 'Le mot de passe est incorrect', - 'throttle' => 'Tentatives de connexion trop nombreuses. Veuillez essayer de nouveau dans :seconds secondes.', -]; diff --git a/resources/lang/fr/crud.php b/resources/lang/fr/crud.php deleted file mode 100644 index 950d5d1..0000000 --- a/resources/lang/fr/crud.php +++ /dev/null @@ -1,96 +0,0 @@ - [ - 'list' => 'Liste', - 'view' => 'Voir', - 'create' => 'Créer', - 'duplicate' => 'Dupliquer', - 'update' => 'Éditer', - 'delete' => 'Supprimer', - 'save' => 'Sauvegarder', - 'edit' => 'Mise à jour', - 'show' => 'Aperçu', - 'download' => 'Télécharger', - 'historic' => 'Historique', - 'credit' => 'Créditer', - ], - - 'helpers' => [ - 'list' => 'Liste', - 'list_all' => 'Lister tous les :model', - 'create_model' => 'Créer :model', - 'view_model' => 'Voir :model', - 'update_model' => 'Éditer :model', - 'duplicate_model' => 'Dupliquer :model', - 'delete_model' => 'Supprimer :model', - 'save_model' => 'Sauvegarder :model', - 'edit_model' => 'Mettre à jour :model', - 'credit_model' => 'Créditer :model', - 'no_results' => 'Aucun résultat pour :models', - 'publish' => 'Publié', - 'unpublish' => 'Dépublié', - ], - - 'libs' => [ - 'toolbox' => [ - 'assertFieldIsUnique' => 'La :valeur du champ :attribut est déjà utilisée', - 'assertNoInternalBoUrls' => ':attribute : Il est interdit de coller l\'uri de back-office dans ce champ', - 'assertNoInternalUrls' => ':attribute : Il est interdit de coller une url de :appname dans ce champ.', - ] - ], - - 'messages' => [ - 'has_been_created' => ':model a été créé', - 'cannot_be_created' => ':model ne peut être créé', - 'has_been_updated' => ':model a été mis à jour', - 'cannot_be_updated' => ':model ne peut être mis à jour', - 'has_been_deleted' => ':model a été supprimé', - 'cannot_be_deleted' => ':model ne peut être supprimé', - 'cannot_be_deleted_relationship' => ':model ne peut être supprimé. - Veuillez d\'abord supprimer les :relationship associé(e)s', - 'order_changed' => 'L\'ordre a été changé !', - 'order_not_changed' => 'L\'ordre n\'a pas été changé !', - 'publish_status_saved' => 'Changement de l\'état de publication réussit !', - 'favourite_site_changed' => 'Votre site favori a été mis à jour avec succès.', - 'favourite_site_not_changed' => 'Une erreur est survenue lors de la mise à jour de votre site favori.', - ], - - 'minicrud' => [ - 'visibility_label' => 'Visibilité', - 'visibility_helper' => 'Vérifier qu\'il est visible.', - 'enum_select' => 'Sélectionnez un(e) :enum dans la liste.', - 'select' => 'Sélectionnez un(e) :entity dans la liste.', - 'associated_enum' => ':enum associé(e)', - 'associated' => ':entity associé(e)', - 'dimensions_must_be' => 'Doit être :widthpx (largeur) par :heightpx (hauteur).', - 'picture_title_helper' => 'Utile pour les utilisateurs, s\'affiche en passant la souris sur l\'image', - 'picture_title_label' => 'Attribut du titre de l\'image', - 'picture_alt_helper' => 'Doit décrire votre image pour les moteurs de recherche et les aveugles (5 à 6 mots)', - 'picture_alt_label' => 'Attribut Alt de l\'image', - 'text_warning' => 'Relisez votre contenu avant de le publier (minimum :number caractères)', - 'url' => 'Doit être une url valide.', - ], - - 'pagination' => [ - "previous" => "Page précédente", - "next" => "Page suivante", - "specific_page" => "Accéder à la page n°:id", - 'paginate_list' => 'Nombre d\'éléments par page', - ], - - 'other' => [ - 'up' => 'Modifier l\'ordre d\'apparition vers le haut', - 'down' => 'Modifier l\'ordre d\'apparition vers le bas', - 'no_model_found' => 'Aucun :model trouvé', - 'publish' => 'Publié', - 'unpublish' => 'Dépublié', - 'sort_ascending' => 'Trier :name dans l\'ordre croissant', - 'sort_descending' => 'Trier :name dans l\'ordre décroissant', - 'sort_delete' => 'Supprimer le tri', - 'sort_arrow' => 'Ici, les flèches sont utilisées pour trier et non pour filtrer', - 'right' => 'Vous n\'avez pas les droits', - 'view_linked_ticket' => 'voir le ticket :model', - 'unlink_ticket' => 'supprimer le lien avec le ticket :model' - ] -]; diff --git a/resources/lang/fr/enums.php b/resources/lang/fr/enums.php deleted file mode 100644 index 8b6e5d2..0000000 --- a/resources/lang/fr/enums.php +++ /dev/null @@ -1,19 +0,0 @@ - 'enfant', - 'balanced_menu_type' => [ - 'kid' => 'enfant', - 'teenager' => 'adolescent', - 'woman' => 'femme', - 'man' => 'homme', - 'senior' => 'senior', - 'withPrefix' => [ - 'kid' => 'un enfant', - 'teenager' => 'un adolescent', - 'woman' => 'une femme', - 'man' => 'un homme', - 'senior' => 'un senior' - ] - ] -]; diff --git a/resources/lang/fr/http-statuses.php b/resources/lang/fr/http-statuses.php deleted file mode 100644 index af44920..0000000 --- a/resources/lang/fr/http-statuses.php +++ /dev/null @@ -1,84 +0,0 @@ - 'Erreur inconnue', - '100' => 'Continuer', - '101' => 'Protocoles de commutation', - '102' => 'En traitement', - '200' => 'D\'accord', - '201' => 'Créé', - '202' => 'Accepté', - '203' => 'Informations non autorisées', - '204' => 'Pas content', - '205' => 'Réinitialiser le contenu', - '206' => 'Contenu partiel', - '207' => 'Multi-statut', - '208' => 'Déjà rapporté', - '226' => 'J\'ai l\'habitude', - '300' => 'Choix multiples', - '301' => 'Déplacé de façon permanente', - '302' => 'A trouvé', - '303' => 'Voir autre', - '304' => 'Non modifié', - '305' => 'Utiliser un proxy', - '307' => 'Redirection temporaire', - '308' => 'Redirection permanente', - '400' => 'Mauvaise Demande', - '401' => 'Non autorisé', - '402' => 'Paiement Requis', - '403' => 'Interdit', - '404' => 'Page non trouvée', - '405' => 'Méthode Non Autorisée', - '406' => 'Pas acceptable', - '407' => 'Authentification proxy requise', - '408' => 'Délai d\'expiration de la demande', - '409' => 'Conflit', - '410' => 'Disparu', - '411' => 'Longueur requise', - '412' => 'La précondition a échoué', - '413' => 'Charge utile trop grande', - '414' => 'URI trop long', - '415' => 'Type de support non supporté', - '416' => 'Plage non satisfaisante', - '417' => 'Échec de l\'attente', - '418' => 'Je suis une théière', - '419' => 'La session a expiré', - '421' => 'Demande mal dirigée', - '422' => 'Entité non traitable', - '423' => 'Fermé à clef', - '424' => 'Dépendance échouée', - '425' => 'Trop tôt', - '426' => 'Mise à niveau requise', - '428' => 'Condition préalable requise', - '429' => 'Trop de demandes', - '431' => 'Demander des champs d\'en-tête trop grands', - '444' => 'Connexion fermée sans réponse', - '449' => 'Réessayer avec', - '451' => 'Indisponible pour des raisons légales', - '499' => 'Demande fermée du client', - '500' => 'Erreur Interne du Serveur', - '501' => 'Pas mis en œuvre', - '502' => 'Mauvaise passerelle', - '503' => 'Mode de Maintenance', - '504' => 'Délai d\'attente de la passerelle', - '505' => 'Version HTTP non prise en charge', - '506' => 'La variante négocie également', - '507' => 'Espace insuffisant', - '508' => 'Boucle détectée', - '509' => 'Limite de bande passante dépassée', - '510' => 'Non prolongé', - '511' => 'Authentification réseau requise', - '520' => 'Erreur inconnue', - '521' => 'Le serveur Web est en panne', - '522' => 'La connexion a expiré', - '523' => 'L\'origine est inaccessible', - '524' => 'Un dépassement de délai s\'est produit', - '525' => 'Échec de la prise de contact SSL', - '526' => 'Certificat SSL invalide', - '527' => 'Erreur de canon ferroviaire', - '598' => 'Erreur de délai de lecture réseau', - '599' => 'Erreur de délai de connexion réseau', - 'unknownError' => 'Erreur inconnue', -]; diff --git a/resources/lang/fr/models.php b/resources/lang/fr/models.php deleted file mode 100644 index 53d59ef..0000000 --- a/resources/lang/fr/models.php +++ /dev/null @@ -1,18 +0,0 @@ - [ - 'users' => 'Utilisateurs', - 'accounts' => 'Comptes', - 'tickets' => 'Tickets', - 'creditlogs' => 'Historique', - 'sites' => 'Sites', - 'brands' => 'Marques', - 'labels' => 'Labels', - 'packages' => 'Forfaits', - 'invoices' => 'Devis', - 'companies' => 'Sociétés', - 'informations' => 'Informations', - 'ticket_types' => 'Type de ticket|Types de tickets' - ] -]; diff --git a/resources/lang/fr/pagination.php b/resources/lang/fr/pagination.php deleted file mode 100644 index 225391e..0000000 --- a/resources/lang/fr/pagination.php +++ /dev/null @@ -1,8 +0,0 @@ - 'Suivant »', - 'previous' => '« Précédent', -]; diff --git a/resources/lang/fr/passwords.php b/resources/lang/fr/passwords.php deleted file mode 100644 index 75ae148..0000000 --- a/resources/lang/fr/passwords.php +++ /dev/null @@ -1,11 +0,0 @@ - 'Votre mot de passe a été réinitialisé !', - 'sent' => 'Nous vous avons envoyé par email le lien de réinitialisation du mot de passe !', - 'throttled' => 'Veuillez patienter avant de réessayer.', - 'token' => 'Ce jeton de réinitialisation du mot de passe n\'est pas valide.', - 'user' => 'Aucun utilisateur n\'a été trouvé avec cette adresse email.', -]; diff --git a/resources/lang/fr/validation.php b/resources/lang/fr/validation.php deleted file mode 100644 index a0d2279..0000000 --- a/resources/lang/fr/validation.php +++ /dev/null @@ -1,265 +0,0 @@ - 'Le champ :attribute doit être accepté.', - 'accepted_if' => 'Le champ :attribute doit être accepté quand :other a la valeur :value.', - 'active_url' => 'Le champ :attribute n\'est pas une URL valide.', - 'after' => 'Le champ :attribute doit être une date postérieure au :date.', - 'after_or_equal' => 'Le champ :attribute doit être une date postérieure ou égale au :date.', - 'alpha' => 'Le champ :attribute doit contenir uniquement des lettres.', - 'alpha_dash' => 'Le champ :attribute doit contenir uniquement des lettres, des chiffres et des tirets.', - 'alpha_num' => 'Le champ :attribute doit contenir uniquement des chiffres et des lettres.', - 'array' => 'Le champ :attribute doit être un tableau.', - 'ascii' => 'Le champ :attribute ne doit contenir que des caractères alphanumériques et des symboles codés sur un octet.', - 'attached' => ':attribute est déjà attaché(e).', - 'before' => 'Le champ :attribute doit être une date antérieure au :date.', - 'before_or_equal' => 'Le champ :attribute doit être une date antérieure ou égale au :date.', - 'between' => [ - 'array' => 'Le tableau :attribute doit contenir entre :min et :max éléments.', - 'file' => 'La taille du fichier de :attribute doit être comprise entre :min et :max kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être comprise entre :min et :max.', - 'string' => 'Le texte :attribute doit contenir entre :min et :max caractères.', - ], - 'boolean' => 'Le champ :attribute doit être vrai ou faux.', - 'can' => 'Le champ :attribute contient une valeur non autorisée.', - 'color' => 'Le champ :attribute doit être au format hexadécimal (ex: #FFFFFF)', - 'confirmed' => 'Le champ de confirmation :attribute ne correspond pas.', - 'current_password' => 'Le mot de passe est incorrect.', - 'date' => 'Le champ :attribute n\'est pas une date valide.', - 'date_equals' => 'Le champ :attribute doit être une date égale à :date.', - 'date_format' => 'Le champ :attribute ne correspond pas au format :format.', - 'decimal' => 'Le champ :attribute doit comporter :decimal décimales.', - 'declined' => 'Le champ :attribute doit être décliné.', - 'declined_if' => 'Le champ :attribute doit être décliné quand :other a la valeur :value.', - 'different' => 'Les champs :attribute et :other doivent être différents.', - 'digits' => 'Le champ :attribute doit contenir :digits chiffres.', - 'digits_between' => 'Le champ :attribute doit contenir entre :min et :max chiffres.', - 'dimensions' => 'La taille de l\'image :attribute n\'est pas conforme.', - 'distinct' => 'Le champ :attribute a une valeur en double.', - 'doesnt_end_with' => 'Le champ :attribute ne doit pas finir avec une des valeurs suivantes : :values.', - 'doesnt_start_with' => 'Le champ :attribute ne doit pas commencer avec une des valeurs suivantes : :values.', - 'email' => 'Le champ :attribute doit être une adresse e-mail valide.', - 'ends_with' => 'Le champ :attribute doit se terminer par une des valeurs suivantes : :values', - 'enum' => 'Le champ :attribute sélectionné est invalide.', - 'exists' => 'Le champ :attribute sélectionné est invalide.', - 'file' => 'Le champ :attribute doit être un fichier.', - 'filled' => 'Le champ :attribute doit avoir une valeur.', - 'gt' => [ - 'array' => 'Le tableau :attribute doit contenir plus de :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être supérieure à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être supérieure à :value.', - 'string' => 'Le texte :attribute doit contenir plus de :value caractères.', - ], - 'gte' => [ - 'array' => 'Le tableau :attribute doit contenir au moins :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :value.', - 'string' => 'Le texte :attribute doit contenir au moins :value caractères.', - ], - 'image' => 'Le champ :attribute doit être une image.', - 'in' => 'Le champ :attribute est invalide.', - 'in_array' => 'Le champ :attribute n\'existe pas dans :other.', - 'integer' => 'Le champ :attribute doit être un entier.', - 'ip' => 'Le champ :attribute doit être une adresse IP valide.', - 'ipv4' => 'Le champ :attribute doit être une adresse IPv4 valide.', - 'ipv6' => 'Le champ :attribute doit être une adresse IPv6 valide.', - 'json' => 'Le champ :attribute doit être un document JSON valide.', - 'lowercase' => 'Le champ :attribute doit être en minuscules.', - 'lt' => [ - 'array' => 'Le tableau :attribute doit contenir moins de :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être inférieure à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être inférieure à :value.', - 'string' => 'Le texte :attribute doit contenir moins de :value caractères.', - ], - 'lte' => [ - 'array' => 'Le tableau :attribute doit contenir au plus :value éléments.', - 'file' => 'La taille du fichier de :attribute doit être inférieure ou égale à :value kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être inférieure ou égale à :value.', - 'string' => 'Le texte :attribute doit contenir au plus :value caractères.', - ], - 'mac_address' => 'Le champ :attribute doit être une adresse MAC valide.', - 'max' => [ - 'array' => 'Le tableau :attribute ne peut pas contenir plus que :max éléments.', - 'file' => 'La taille du fichier de :attribute ne peut pas dépasser :max kilo-octets.', - 'numeric' => 'La valeur de :attribute ne peut pas être supérieure à :max.', - 'string' => 'Le texte de :attribute ne peut pas contenir plus de :max caractères.', - ], - 'max_digits' => 'Le champ :attribute ne doit pas avoir plus de :max chiffres.', - 'mimes' => 'Le champ :attribute doit être un fichier de type : :values.', - 'mimetypes' => 'Le champ :attribute doit être un fichier de type : :values.', - 'min' => [ - 'array' => 'Le tableau :attribute doit contenir au moins :min éléments.', - 'file' => 'La taille du fichier de :attribute doit être supérieure ou égale à :min kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être supérieure ou égale à :min.', - 'string' => 'Le texte de :attribute doit contenir au moins :min caractères.', - ], - 'min_digits' => 'Le champ :attribute doit avoir au moins :min chiffres.', - 'missing' => 'Le champ :attribute doit être manquant.', - 'missing_if' => 'Le champ :attribute doit être manquant quand :other a la valeur :value.', - 'missing_unless' => 'Le champ :attribute doit être manquant sauf si :other a la valeur :value.', - 'missing_with' => 'Le champ :attribute doit être manquant quand :values est présent.', - 'missing_with_all' => 'Le champ :attribute doit être manquant quand :values sont présents.', - 'multiple_of' => 'La valeur de :attribute doit être un multiple de :value', - 'not_in' => 'Le champ :attribute sélectionné n\'est pas valide.', - 'not_regex' => 'Le format du champ :attribute n\'est pas valide.', - 'numeric' => 'Le champ :attribute doit contenir un nombre.', - 'password' => [ - 'letters' => 'Le champ :attribute doit contenir au moins une lettre.', - 'mixed' => 'Le champ :attribute doit contenir au moins une majuscule et une minuscule.', - 'numbers' => 'Le champ :attribute doit contenir au moins un chiffre.', - 'symbols' => 'Le champ :attribute doit contenir au moins un symbole.', - 'uncompromised' => 'La valeur du champ :attribute est apparue dans une fuite de données. Veuillez choisir une valeur différente.', - ], - 'present' => 'Le champ :attribute doit être présent.', - 'prohibited' => 'Le champ :attribute est interdit.', - 'prohibited_if' => 'Le champ :attribute est interdit quand :other a la valeur :value.', - 'prohibited_unless' => 'Le champ :attribute est interdit à moins que :other est l\'une des valeurs :values.', - 'prohibits' => 'Le champ :attribute interdit :other d\'être présent.', - 'regex' => 'Le format du champ :attribute est invalide.', - 'relatable' => ':attribute n\'est sans doute pas associé(e) avec cette donnée.', - 'required' => 'Le champ :attribute est obligatoire.', - 'required_array_keys' => 'Le champ :attribute doit contenir des entrées pour : :values.', - 'required_if' => 'Le champ :attribute est obligatoire quand la valeur de :other est :value.', - 'required_if_accepted' => 'Le champ :attribute est obligatoire quand le champ :other a été accepté.', - 'required_unless' => 'Le champ :attribute est obligatoire sauf si :other est :values.', - 'required_with' => 'Le champ :attribute est obligatoire quand :values est présent.', - 'required_with_all' => 'Le champ :attribute est obligatoire quand :values sont présents.', - 'required_without' => 'Le champ :attribute est obligatoire quand :values n\'est pas présent.', - 'required_without_all' => 'Le champ :attribute est requis quand aucun de :values n\'est présent.', - 'same' => 'Les champs :attribute et :other doivent être identiques.', - 'size' => [ - 'array' => 'Le tableau :attribute doit contenir :size éléments.', - 'file' => 'La taille du fichier de :attribute doit être de :size kilo-octets.', - 'numeric' => 'La valeur de :attribute doit être :size.', - 'string' => 'Le texte de :attribute doit contenir :size caractères.', - ], - 'starts_with' => 'Le champ :attribute doit commencer avec une des valeurs suivantes : :values', - 'string' => 'Le champ :attribute doit être une chaîne de caractères.', - 'timezone' => 'Le champ :attribute doit être un fuseau horaire valide.', - 'ulid' => 'Le champ :attribute doit être un ULID valide.', - 'unique' => 'La valeur du champ :attribute est déjà utilisée.', - 'uploaded' => 'Le fichier du champ :attribute n\'a pu être téléversé.', - 'uppercase' => 'Le champ :attribute doit être en majuscules.', - 'url' => 'Le format de l\'URL de :attribute n\'est pas valide.', - 'uuid' => 'Le champ :attribute doit être un UUID valide', - 'attributes' => [ - 'address' => 'adresse', - 'age' => 'âge', - 'amount.day' => 'Montant (par jour)', - 'amount.default' => 'Montant', - 'announce_type' => 'type d\'annonce', - 'area' => 'zone', - 'available' => 'disponible', - 'birthday' => 'anniversaire', - 'body' => 'corps', - 'brandname' => 'Nom de la marque', - 'city' => 'ville', - 'color' => 'couleur', - 'comment' => 'Commentaire', - 'company_id' => 'Sociétés', - 'content' => 'contenu', - 'country' => 'pays', - 'created_at' => 'créé à', - 'creator' => 'créateur', - 'current_password' => 'mot de passe actuel', - 'date' => 'Date', - 'date_of_birth' => 'date de naissance', - 'day' => 'jour', - 'deleted_at' => 'supprimé à', - 'description' => 'la description', - 'district' => 'quartier', - 'duration' => 'durée', - 'email' => 'adresse e-mail', - 'excerpt' => 'extrait', - 'filter' => 'filtre', - 'first_name' => 'prénom', - 'firstname' => 'prénom', - 'gender' => 'genre', - 'gitlab_project_id' => 'id du dépôt Gitlab', - 'group' => 'groupe', - 'hour' => 'heure', - 'image' => 'image', - 'invoiced_to_id' => 'Entité à facturer', - 'label' => 'label', - 'last_name' => 'nom', - 'lastname' => 'nom', - 'lesson' => 'leçon', - 'line_address_1' => 'ligne d\'adresse 1', - 'line_address_2' => 'ligne d\'adresse 2', - 'message' => 'message', - 'middle_name' => 'deuxième prénom', - 'minute' => 'minute', - 'mobile' => 'portable', - 'month' => 'mois', - 'name' => 'nom', - 'national_code' => 'code national', - 'number' => 'numéro', - 'object' => 'objet', - 'operation' => 'opération', - 'password' => 'mot de passe', - 'password_confirmation' => 'confirmation du mot de passe', - 'person' => 'personne', - 'phone' => 'téléphone', - 'photo' => 'photo', - 'place' => 'lieu', - 'postal_code' => 'code postal', - 'price' => 'prix', - 'province' => 'région', - 'recaptcha_response_field' => 'champ de réponse recaptcha', - 'ref' => 'Réference', - 'remember' => 'se souvenir', - 'restored_at' => 'restauré à', - 'result_text_under_image' => 'texte de résultat sous l\'image', - 'role' => 'rôle', - 'second' => 'seconde', - 'sent_accounting_date' => 'Date d\'envoi compta', - 'sent_client_date' => 'Date d\'envoi client', - 'sex' => 'sexe', - 'short_text' => 'texte court', - 'show_days' => 'Afficher les jours', - 'signed_date' => 'Date de signature', - 'site' => 'site', - 'sites' => 'sites', - 'size' => 'taille', - 'solde' => 'Solde', - 'state' => 'état', - 'status' => 'statut', - 'street' => 'rue', - 'student' => 'étudiant', - 'subject' => 'sujet', - 'tasks' => 'Tâches', - 'teacher' => 'professeur', - 'template' => 'Template', - 'terms' => 'conditions', - 'test_description' => 'description test', - 'test_locale' => 'localisation test', - 'test_name' => 'nom test', - 'text' => 'texte', - 'time' => 'heure', - 'title' => 'titre', - 'todo' => 'à faire', - 'total' => 'Montant total', - 'total_days' => 'Montant total (jours)', - 'type' => 'Type', - 'updated_at' => 'mis à jour à', - 'url_prod' => 'Url de PROD', - 'url_re7' => 'Url de RECETTE', - 'username' => 'nom d\'utilisateur', - 'year' => 'année', - 'id' => 'identifiant' - ], - 'custom' => [ - 'type' => 'type', - 'tickets' => 'étiquettes', - 'assigned_to' => 'assigné à', - 'order' => 'ordre', - 'priority' => 'priorité', - 'default' => 'défaut', - 'date_mep' => 'MEP souhaitée', - 'published' => 'publication', - 'all' => 'Tout', - 'estimate' => 'estimation', - ] -]; diff --git a/resources/sass/back/_fonts.scss b/resources/sass/back/_fonts.scss new file mode 100644 index 0000000..268f722 --- /dev/null +++ b/resources/sass/back/_fonts.scss @@ -0,0 +1,125 @@ +/* Figtree - Light */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 300; + src: url('&/fonts/Figtree/Figtree-Light.ttf') format('truetype'); +} + +/* Figtree - Light Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 500; + src: url('&/fonts/Figtree/Figtree-LightItalic.ttf') format('truetype'); +} + +/* Figtree - Regular */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 400; + src: url('&/fonts/Figtree/Figtree-Regular.ttf') format('truetype'); +} + +/* Figtree - Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 400; + src: url('&/fonts/Figtree/Figtree-Italic.ttf') format('truetype'); +} + +/* Figtree - Medium */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 500; + src: url('&/fonts/Figtree/Figtree-Medium.ttf') format('truetype'); +} + +/* Figtree - Medium Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 500; + src: url('&/fonts/Figtree/Figtree-MediumItalic.ttf') format('truetype'); +} + +/* Figtree - Semi Bold */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 600; + src: url('&/fonts/Figtree/Figtree-SemiBold.ttf') format('truetype'); +} + +/* Figtree - Semi Bold Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 600; + src: url('&/fonts/Figtree/Figtree-SemiBoldItalic.ttf') format('truetype'); +} + +/* Figtree - Bold */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 700; + src: url('&/fonts/Figtree/Figtree-Bold.ttf') format('truetype'); +} + +/* Figtree - Bold Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 700; + src: url('&/fonts/Figtree/Figtree-BoldItalic.ttf') format('truetype'); +} + +/* Figtree - Extra Bold */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 800; + src: url('&/fonts/Figtree/Figtree-ExtraBold.ttf') format('truetype'); +} + +/* Figtree - Extra Bold Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 800; + src: url('&/fonts/Figtree/Figtree-ExtraBoldItalic.ttf') format('truetype'); +} + +/* Figtree - Black */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: normal; + font-weight: 900; + src: url('&/fonts/Figtree/Figtree-Black.ttf') format('truetype'); +} + +/* Figtree - Black Italic */ +@font-face { + font-display: swap; + font-family: Figtree; + font-style: italic; + font-weight: 900; + src: url('&/fonts/Figtree/Figtree-BlackItalic.ttf') format('truetype'); +} diff --git a/resources/sass/back/app.scss b/resources/sass/back/app.scss new file mode 100644 index 0000000..37dabc5 --- /dev/null +++ b/resources/sass/back/app.scss @@ -0,0 +1,133 @@ +@use '/node_modules/flag-icons/css/flag-icons.min.css'; +@use './fonts'; +@use './inputs/wysiwyg'; +@use './../common'; + +@layer base { + .light { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --muted: 210 40% 96.1%; + --muted-foreground: 215.4 16.3% 46.9%; + --popover: 0 0% 100%; + --popover-foreground: 222.2 84% 4.9%; + --card: 0 0% 100%; + --card-foreground: 222.2 84% 4.9%; + --border: 214.3 31.8% 91.4%; + --input: 214.3 31.8% 91.4%; + --primary: 211.62 98.82% 33.14%; + --primary-foreground: 0 0% 96%; + --secondary: 210 40% 96.1%; + --secondary-foreground: 222.2 47.4% 11.2%; + --accent: 210 40% 96.1%; + --accent-foreground: 222.2 47.4% 11.2%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 210 40% 98%; + --successive: 113 100% 38%; + --successive-foreground: 210 40% 98%; + --informative: 207 69% 48%; + --informative-foreground: 210 40% 98%; + --preventive: 46 100% 50%; + --preventive-foreground: 210 40% 98%; + --ring: 222.2 84% 4.9%; + --radius: 0.5rem; + --sidebar-background: 211.62 98.82% 33.14%; + --sidebar-foreground: 0 0% 96%; + --sidebar-primary: 240 5.9% 10%; + --sidebar-primary-foreground: 0 0% 98%; + --sidebar-accent: 240 4.8% 95.9%; + --sidebar-accent-foreground: 240 5.9% 10%; + --sidebar-border: 220 13% 91%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + + .dark { + --background: 240 5.9% 10%; + --foreground: 210 40% 98%; + --muted: 217.2 32.6% 17.5%; + --muted-foreground: 215 20.2% 65.1%; + --popover: 222.2 84% 4.9%; + --popover-foreground: 210 40% 98%; + --card: 240 5.9% 10%; + --card-foreground: 210 40% 98%; + --border: 217.2 32.6% 17.5%; + --input: 217.2 32.6% 17.5%; + --primary: 222.2 84% 4.9%; + --primary-foreground: 210 40% 98%; + --secondary: 217.2 32.6% 17.5%; + --secondary-foreground: 210 40% 98%; + --accent: 217.2 32.6% 17.5%; + --accent-foreground: 210 40% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 40% 98%; + --successive: 128 63% 31%; + --successive-foreground: 210 40% 98%; + --informative: 212 50% 45%; + --informative-foreground: 210 40% 98%; + --preventive: 41 64% 56%; + --preventive-foreground: 210 40% 98%; + --ring: 212.7 26.8% 83.9%; + --radius: 0.5rem; + --sidebar-background: 222.2 84% 4.9%; + --sidebar-foreground: 210 40% 98%; + --sidebar-primary: 224.3 76.3% 48%; + --sidebar-primary-foreground: 0 0% 100%; + --sidebar-accent: 240 3.7% 15.9%; + --sidebar-accent-foreground: 240 4.8% 95.9%; + --sidebar-border: 240 3.7% 15.9%; + --sidebar-ring: 217.2 91.2% 59.8%; + } + + * { + @apply border-border; + } + + body { + @apply bg-background text-foreground; + } +} + +html { + scroll-behavior: smooth; +} + +.animation-transition { + animation: 0.4s animation-transition linear; +} + +@keyframes animation-transition { + 0% { + opacity: 0; + } + + 50% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +.table-actions { + th:last-child, + td:last-child { + @apply bg-gray-50 dark:bg-gray-900 sticky top-0 right-0 w-[72px]; + } +} + +.richtext-outline, +.richtext-outline-1, +.richtext-shadow { + all: unset !important; +} + +// Wysiwyg classes. +.reactjs-tiptap-editor { + @apply rounded-md border border-input bg-background; +} + +/* stylelint-disable-next-line selector-class-pattern */ +.ProseMirror-focused { + @apply rounded-b ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2; +} diff --git a/resources/sass/back/inputs/_color.scss b/resources/sass/back/inputs/_color.scss new file mode 100644 index 0000000..15f7746 --- /dev/null +++ b/resources/sass/back/inputs/_color.scss @@ -0,0 +1,101 @@ +.sketch-picker { + display: flex; + width: 100% !important; + flex-direction: column; + padding: 0 !important; + border: 0 !important; + box-shadow: none !important; +} + +.sketch-picker, +.sketch-picker .flexbox-fix { + gap: 0.375rem; +} + +.sketch-picker > div, +.sketch-picker .flexbox-fix > div { + padding: 0 !important; + margin: 0 !important; +} + +.sketch-picker > div:first-child { + border-radius: calc(var(--radius) - 2px); + aspect-ratio: 1 / 1; +} + +.sketch-picker > div:last-child { + justify-content: space-between; + padding-top: 0.375rem !important; +} + +.sketch-picker > div:nth-child(3) > div { + flex: auto !important; +} + +.sketch-picker > div:last-child > div { + width: 20px !important; + height: 20px !important; +} + +.sketch-picker > div:last-child > div > span > div { + border-radius: calc(var(--radius) - 2px) !important; + box-shadow: none !important; + outline: 1px solid hsl(var(--input)) !important; +} + +.sketch-picker > div:nth-child(2) > div:first-child { + display: flex; + flex-direction: column; + gap: 0.375rem; +} + +.sketch-picker > div:nth-child(2) > div:last-child { + display: none; +} + +.sketch-picker > div:nth-child(3) > div:first-child { + width: 16rem; +} + +.sketch-picker > div:nth-child(2) > div:first-child > div { + height: 20px !important; + border-radius: calc(var(--radius) - 2px); + margin: 0 !important; + cursor: pointer; + outline: 1px solid hsl(var(--input)); +} + +/* stylelint-disable-next-line selector-max-compound-selectors */ +.sketch-picker > div:first-child > div > div > div:last-child > div { + width: 10px !important; + height: 10px !important; + border-radius: 50% !important; + background-color: #fff; + box-shadow: none !important; + transform: translate(-5px, -5px) !important; +} + +/* stylelint-disable-next-line selector-max-compound-selectors */ +.sketch-picker > div:nth-child(2) > div:first-child > div > div > div > div > div { + width: 0.5rem !important; + height: 20px !important; + border: 1px hsl(var(--input)) solid; + border-radius: 0 !important; + margin-top: 0 !important; + background: #fff !important; + box-shadow: none !important; + transform: translateX(-4px) !important; +} + +.sketch-picker input { + width: 100% !important; + height: 2.5rem; + padding: 0.5rem 0.75rem !important; + border: 1px hsl(var(--input)) solid !important; + border-radius: calc(var(--radius) - 2px) !important; + background-color: hsl(var(--background)); + box-shadow: none !important; + color: var(--foreground); + outline: none; + text-align: center; +} diff --git a/resources/sass/back/inputs/_wysiwyg.scss b/resources/sass/back/inputs/_wysiwyg.scss new file mode 100644 index 0000000..5ddd75f --- /dev/null +++ b/resources/sass/back/inputs/_wysiwyg.scss @@ -0,0 +1,26 @@ +// * Custom css. +.tiptap { + @apply px-3 py-2; + + display: flow-root; + min-height: 180px; + + .link { + @apply cursor-pointer; + } + + [data-type='taskList'] > li { + @apply flex flex-row justify-start items-center gap-1.5; + } + + .is-editor-empty:first-child::before { + @apply float-left text-muted-foreground h-0 pointer-events-none; + + content: attr(data-placeholder); + } +} + +/* stylelint-disable-next-line selector-class-pattern */ +.ProseMirror-focused { + @apply rounded-b ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2; +} diff --git a/resources/sass/bo/base/_common.scss b/resources/sass/bo/base/_common.scss deleted file mode 100644 index 9044e4f..0000000 --- a/resources/sass/bo/base/_common.scss +++ /dev/null @@ -1,40 +0,0 @@ -.container-xxl { - max-width: 1600px !important; -} - -#app { - padding-bottom: 8.5rem; -} - -.btn-xs, -.btn-group-xs > .btn { - padding: 0.1rem 0.4rem; - border-radius: 0.3rem; - font-size: 0.8rem; -} - -// Tickets Labels -.ticket-index-labels { - overflow: hidden; - max-width: 15rem; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; -} - -.w-fit { - width: fit-content !important; -} - -.btn-md { - height: 38px; -} - -.pagination-custom .dropdown-menu { - overflow: auto; - min-width: 5rem; - max-height: 12rem; -} - -.table-col-sorter { - height: 3rem; -} diff --git a/resources/sass/bo/bo.scss b/resources/sass/bo/bo.scss deleted file mode 100644 index fc6e245..0000000 --- a/resources/sass/bo/bo.scss +++ /dev/null @@ -1,14 +0,0 @@ -@charset "UTF-8"; - -// * UTILITIES -@import "./utilities/variables"; - -// * VENDOR -@import "./vendor/bootstrap"; -@import "./vendor/bootswatch"; -@import "./vendor/ckEditorContent"; -@import "./vendor/complement"; -@import "./vendor/glightbox"; - -// * BASE -@import "base/common"; diff --git a/resources/sass/bo/utilities/_bootstrap-custom.scss b/resources/sass/bo/utilities/_bootstrap-custom.scss deleted file mode 100644 index 50438f2..0000000 --- a/resources/sass/bo/utilities/_bootstrap-custom.scss +++ /dev/null @@ -1,44 +0,0 @@ -@use "sass:list"; -@import "mixins"; - -// SET SOME CLASSES WITH BOOTSTRAP BREAKPOINTS -// * Reponsive borders -@each $breakpoint in map-keys($grid-breakpoints) { - @include media-breakpoint-up($breakpoint) { - $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - - @include generate-bs-borders($infix, $prefix); - - @each $color, $value in $theme-colors { - @include generate-bs-borders($infix, $prefix, $color); - } - } -} - -// * Responsive sizings (used in laravel errors layouts) -@each $breakpoint in map-keys($grid-breakpoints) { - @include media-breakpoint-up($breakpoint) { - $infix: breakpoint-infix($breakpoint, $grid-breakpoints); - - .w#{$infix}-25 { - width: 25% !important; - } - .w#{$infix}-50 { - width: 50% !important; - } - .w#{$infix}-75 { - width: 75% !important; - } - .w#{$infix}-100 { - width: 100% !important; - } - - @each $prop, $unit in (width: vw, height: vh) { - @each $size in [25, 50, 75, 100] { - .#{$unit}#{$infix}-#{$size} { - #{$prop}: #{$size}#{$unit} !important; - } - } - } - } -} diff --git a/resources/sass/bo/utilities/_mixins.scss b/resources/sass/bo/utilities/_mixins.scss deleted file mode 100644 index b0fc0d1..0000000 --- a/resources/sass/bo/utilities/_mixins.scss +++ /dev/null @@ -1,54 +0,0 @@ -@mixin generate-bs-borders($infix, $prefix, $color:null) { - $color-var: var(--#{$prefix}border-color); - - @if $color { - $color-var: rgba(var(--#{$prefix}#{$color}-rgb)); - $color: "-#{$color}"; - } - - .border#{$infix}#{$color}-top { - border-top: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-end { - border-right: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-bottom { - border-bottom: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-start { - border-left: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - - .border#{$infix}#{$color}-0 { border: 0 !important; } - .border#{$infix}#{$color}-top-0 { border-top: 0 !important; } - .border#{$infix}#{$color}-end-0 { border-right: 0 !important; } - .border#{$infix}#{$color}-bottom-0 { border-bottom: 0 !important; } - .border#{$infix}#{$color}-start-0 { border-left: 0 !important; } - - @each $idx, $b-width in $border-widths { - $pidx: list.index(($border-widths), ($idx $b-width)); - - .border#{$infix}#{$color}-top-#{$idx} { - border-top: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-end-#{$idx} { - border-right: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-bottom-#{$idx} { - border-bottom: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - .border#{$infix}#{$color}-start-#{$idx} { - border-left: $b-width var(--#{$prefix}border-style) #{$color-var} !important; - } - } - - .border#{$infix}#{$color}-x { - border-right: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - border-left: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } - - .border#{$infix}#{$color}-y { - border-top: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - border-bottom: $border-width var(--#{$prefix}border-style) #{$color-var} !important; - } -} diff --git a/resources/sass/bo/utilities/_variables.scss b/resources/sass/bo/utilities/_variables.scss deleted file mode 100644 index 461f10e..0000000 --- a/resources/sass/bo/utilities/_variables.scss +++ /dev/null @@ -1,106 +0,0 @@ -@use "sass:color"; - -// Lumen 5.1.3 -// Bootswatch - -$theme: "lumen" !default; - -// Color system -$lightness: -20%; -$saturation: -5%; - -@function lower-color($color) { - @return color.scale($color, $lightness: $lightness, $saturation: $saturation); -} - -@function lower-brightness($color) { - @return color.scale($color, $lightness: $lightness + 10%); -} - -$white: #fffcf5 !default; -$gray-100: lower-brightness(#f8f9fa) !default; -$gray-200: lower-brightness(#e9ecef) !default; -$gray-300: lower-brightness(#dee2e6) !default; -$gray-400: lower-brightness(#ced4da) !default; -$gray-500: lower-brightness(#adb5bd) !default; -$gray-600: lower-brightness(#6c757d) !default; -$gray-700: lower-brightness(#495057) !default; -$gray-800: lower-brightness(#343a40) !default; -$gray-900: lower-brightness(#212529) !default; -$black: #000 !default; -$blue: lower-color(#337ab7) !default; -$indigo: lower-color(#6610f2) !default; -$purple: lower-color(#6f42c1) !default; -$pink: lower-color(#b7337a) !default; -$red: lower-color(#d9534f) !default; -$orange: lower-color(#fd7e14) !default; -$yellow: lower-color(#f0ad4e) !default; -$green: lower-color(#5cb85c) !default; -$teal: lower-color(#20c997) !default; -$cyan: lower-color(#5bc0de) !default; -$primary: $blue !default; -$secondary: $gray-600 !default; -$success: $green !default; -$info: $teal !default; -$warning: $yellow !default; -$danger: $red !default; -$discovery: $cyan !default; -$light: $gray-100 !default; -$dark: $gray-900 !default; -$body-bg: $white; -$min-contrast-ratio: 1.95 !default; -$theme-colors: ( - "primary": $primary, - "secondary": $secondary, - "success": $success, - "info": $info, - "warning": $warning, - "danger": $danger, - "light": $light, - "dark": $dark, - "discovery": $cyan -); - - -// Fonts -// stylelint-disable-next-line value-keyword-case -$font-family-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", - arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default; - -// Tables -$table-bg-scale: 0% !default; - -// Buttons -$btn-font-weight: 700 !default; - -// Dropdowns -$dropdown-link-color: rgb(0 0 0 / 50%) !default; - -// Navs -$nav-tabs-border-color: $gray-200 !default; -$nav-tabs-link-hover-border-color: $nav-tabs-border-color !default; -$nav-tabs-link-active-color: $gray-900 !default; -$nav-tabs-link-active-border-color: $nav-tabs-border-color !default; - -// Pagination -$pagination-color: $gray-700 !default; -$pagination-bg: $white !default; -$pagination-hover-color: $pagination-color !default; -$pagination-hover-bg: $pagination-bg !default; -$pagination-active-border-color: color.adjust($primary, $lightness: -5%) !default; -$pagination-disabled-color: $gray-600 !default; -$pagination-disabled-bg: $pagination-bg !default; - -// Breadcrumbs -$breadcrumb-padding-y: 0.375rem !default; -$breadcrumb-padding-x: 0.75rem !default; -$breadcrumb-bg: $pagination-bg !default; -$breadcrumb-border-radius: 0.25rem !default; - -// Modals -$modal-content-border-color: rgba($black, 0.1) !default; - -// Close -$btn-close-color: $white !default; -$btn-close-opacity: 0.4 !default; -$btn-close-hover-opacity: 1 !default; diff --git a/resources/sass/bo/vendor/_bootstrap.scss b/resources/sass/bo/vendor/_bootstrap.scss deleted file mode 100644 index 6518b8e..0000000 --- a/resources/sass/bo/vendor/_bootstrap.scss +++ /dev/null @@ -1,43 +0,0 @@ -// 1. Include functions first (so you can manipulate colors, SVGs, calc, etc) -@import "~/bootstrap/scss/functions"; - -// 2. Include remainder of required Bootstrap stylesheets -@import "~/bootstrap/scss/variables"; -@import "~/bootstrap/scss/variables-dark"; - -// 3. Include remainder of required parts -@import "~/bootstrap/scss/maps"; -@import "~/bootstrap/scss/mixins"; -@import "~/bootstrap/scss/root"; - -// 4. Optionally include any other parts as needed -@import "~/bootstrap/scss/alert"; -@import "~/bootstrap/scss/buttons"; -@import "~/bootstrap/scss/button-group"; -@import "~/bootstrap/scss/containers"; -@import "~/bootstrap/scss/dropdown"; -@import "~/bootstrap/scss/forms"; -@import "~/bootstrap/scss/grid"; -@import "~/bootstrap/scss/helpers"; -@import "~/bootstrap/scss/images"; -@import "~/bootstrap/scss/list-group"; -@import "~/bootstrap/scss/nav"; -@import "~/bootstrap/scss/navbar"; -@import "~/bootstrap/scss/pagination"; -@import "~/bootstrap/scss/reboot"; -@import "~/bootstrap/scss/tables"; -@import "~/bootstrap/scss/tooltip"; -@import "~/bootstrap/scss/type"; -@import "~/bootstrap/scss/utilities"; -@import "~/bootstrap/scss/modal"; -@import "~/bootstrap/scss/close"; -@import "~/bootstrap/scss/card"; -@import "~/bootstrap/scss/breadcrumb"; -@import "~/bootstrap/scss/badge"; -@import "~/bootstrap/scss/transitions"; - -// 5. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss` -@import "~/bootstrap/scss/utilities/api"; - -// 6 Overload bootstrap classes -@import "./../utilities/bootstrap-custom"; diff --git a/resources/sass/bo/vendor/_bootswatch.scss b/resources/sass/bo/vendor/_bootswatch.scss deleted file mode 100644 index 5e7ba8f..0000000 --- a/resources/sass/bo/vendor/_bootswatch.scss +++ /dev/null @@ -1,321 +0,0 @@ -// Lumen 5.1.3 -// Bootswatch - -$web-font-path: 'https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,300;0,400;0,700;1,400&display=swap' !default; -@if $web-font-path { - @import url($web-font-path); -} - -// Mixins - -@mixin shadow($width: 4px) { - border-style: solid; - border-width: 0 1px $width 1px; -} - -// Navbar - -.navbar { - @include shadow(); - - @each $color, $value in $theme-colors { - &.bg-#{$color} { - border-color: shade-color($value, 10%); - } - } -} - -// Buttons - -.btn { - @include shadow(); - text-transform: uppercase; - - &:not(.disabled):hover { - border-bottom-width: 3px; - margin-top: 1px; - } - - &:not(.disabled):active { - @include box-shadow(none); - border-bottom-width: 2px; - margin-top: 2px; - } - - @each $color, $value in $theme-colors { - &-#{$color} { - &:hover, - &:active, - &:focus { - background-color: $value; - } - - &, - &:not(.disabled):hover, - &:not(.disabled):active, - &:focus { - border-color: shade-color($value, 10%); - } - } - } -} - -[class*='btn-outline'] { - border-top-width: 1px; -} - -.btn-group-vertical { - .btn + .btn { - &:hover { - border-top-width: 1px; - margin-top: -1px; - } - - &:active { - border-top-width: 2px; - margin-top: -1px; - } - } -} - -// Typography - -.text-secondary { - color: $gray-700 !important; -} - -.blockquote-footer { - color: $gray-600; -} - -// Forms - -.form-control { - box-shadow: inset 0 2px 0 rgba(0, 0, 0, 0.075); -} - -// Navs - -.nav { - .open > a, - .open > a:hover, - .open > a:focus { - border-color: transparent; - } -} - -.nav-tabs { - .nav-link { - color: $body-color; - - &, - &.disabled, - &.disabled:hover, - &.disabled:focus { - border-color: $nav-tabs-border-color; - margin-top: 6px; - transition: padding-bottom 0.2s ease-in-out, margin-top 0.2s ease-in-out, border-bottom 0.2s ease-in-out; - } - - &:not(.disabled):hover, - &:not(.disabled):focus, - &.active { - border-bottom-color: transparent; - margin-top: 0; - padding-bottom: add(0.5rem, 6px); - } - } - - &.nav-justified > li { - vertical-align: bottom; - } -} - -.dropdown-menu { - @include shadow(); - @include box-shadow(none); - border-top-width: 1px; - margin-top: 0; -} - -.breadcrumb { - @include shadow(); - border-color: shade-color($breadcrumb-bg, 10%); -} - -.pagination { - > li > a, - > li > span { - @include shadow(); - color: $pagination-color; - font-weight: 700; - position: relative; - text-transform: uppercase; - top: 0; - - &:hover, - &:focus { - border-bottom-width: 3px; - text-decoration: none; - top: 1px; - } - - &:active { - border-bottom-width: 2px; - top: 2px; - } - } - - > .disabled > a, - > .disabled > span { - &:hover { - @include shadow(); - top: 0; - } - - &:active { - @include shadow(); - top: 0; - } - } -} - -.pager { - > li > a, - > li > span, - > .disabled > a, - > .disabled > span { - &, - &:hover, - &:active { - border-left-width: 2px; - border-right-width: 2px; - } - } -} - -// Indicators - -.btn-close { - opacity: 0.4; - text-decoration: none; - - &:hover, - &:focus { - opacity: 1; - } -} - -.alert { - @include shadow(); - color: $white; - - &-primary { - background-color: $primary; - border-color: shade-color($primary, 10%); - } - - &-secondary { - background-color: $secondary; - border-color: shade-color($secondary, 10%); - } - - &-success { - background-color: $success; - border-color: shade-color($success, 10%); - } - - &-info { - background-color: $info; - border-color: shade-color($info, 10%); - } - - &-danger { - background-color: $danger; - border-color: shade-color($danger, 10%); - } - - &-warning { - background-color: $warning; - border-color: shade-color($warning, 10%); - } - - &-dark { - background-color: $dark; - border-color: shade-color($dark, 10%); - } - - &-light { - background-color: $light; - border-color: shade-color($light, 10%); - } - - .alert-link { - color: $white; - font-weight: 400; - text-decoration: underline; - } - - &-secondary, - &-light { - &, - a, - .alert-link { - color: $body-color; - } - } -} - -.badge { - &.bg-secondary, - &.bg-light { - color: $dark; - } -} - -// Containers - -a.list-group-item { - &-success { - &.active { - background-color: $success; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($success, 10%); - } - } - - &-warning { - &.active { - background-color: $warning; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($warning, 10%); - } - } - - &-danger { - &.active { - background-color: $danger; - } - - &.active:hover, - &.active:focus { - background-color: shade-color($danger, 10%); - } - } -} - -.modal { - color: #1e2125; - - & .toast { - .btn-close { - background-image: url("data:image/svg+xml,"); - } - } -} diff --git a/resources/sass/bo/vendor/_ckEditorContent.scss b/resources/sass/bo/vendor/_ckEditorContent.scss deleted file mode 100644 index d9ebd78..0000000 --- a/resources/sass/bo/vendor/_ckEditorContent.scss +++ /dev/null @@ -1,417 +0,0 @@ -// CKeditor fix in alert -.ck-editor__main { - color: initial; -} - -// CK Content -/* - * CKEditor 5 (v32.0.0) content styles. - * Generated on Thu, 17 Feb 2022 10:21:25 GMT. - * For more information, check out https://ckeditor.com/docs/ckeditor5/latest/builds/guides/integration/content-styles.html - */ - -:root { - --ck-color-image-caption-background: hsl(0, 0%, 97%); - --ck-color-image-caption-text: hsl(0, 0%, 20%); - --ck-color-mention-background: hsla(341, 100%, 30%, 0.1); - --ck-color-mention-text: hsl(341, 100%, 30%); - --ck-color-table-caption-background: hsl(0, 0%, 97%); - --ck-color-table-caption-text: hsl(0, 0%, 20%); - --ck-highlight-marker-blue: hsl(201, 97%, 72%); - --ck-highlight-marker-green: hsl(120, 93%, 68%); - --ck-highlight-marker-pink: hsl(345, 96%, 73%); - --ck-highlight-marker-yellow: hsl(60, 97%, 73%); - --ck-highlight-pen-green: hsl(112, 100%, 27%); - --ck-highlight-pen-red: hsl(0, 85%, 49%); - --ck-image-style-spacing: 1.5em; - --ck-inline-image-style-spacing: calc(var(--ck-image-style-spacing) / 2); - --ck-todo-list-checkmark-size: 16px; -} - -/* ckeditor5-block-quote/theme/blockquote.css */ -.ck-content blockquote { - border-left: solid 5px hsl(0, 0%, 80%); - font-style: italic; - margin-left: 0; - margin-right: 0; - overflow: hidden; - padding-left: 1.5em; - padding-right: 1.5em; -} -/* ckeditor5-block-quote/theme/blockquote.css */ -.ck-content[dir="rtl"] blockquote { - border-left: 0; - border-right: solid 5px hsl(0, 0%, 80%); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-yellow { - background-color: var(--ck-highlight-marker-yellow); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-green { - background-color: var(--ck-highlight-marker-green); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-pink { - background-color: var(--ck-highlight-marker-pink); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .marker-blue { - background-color: var(--ck-highlight-marker-blue); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-red { - background-color: transparent; - color: var(--ck-highlight-pen-red); -} -/* ckeditor5-highlight/theme/highlight.css */ -.ck-content .pen-green { - background-color: transparent; - color: var(--ck-highlight-pen-green); -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-tiny { - font-size: 0.7em; -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-small { - font-size: 0.85em; -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-big { - font-size: 1.4em; -} -/* ckeditor5-font/theme/fontsize.css */ -.ck-content .text-huge { - font-size: 1.8em; -} -/* ckeditor5-basic-styles/theme/code.css */ -.ck-content code { - background-color: hsla(0, 0%, 78%, 0.3); - border-radius: 2px; - padding: 0.15em; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image { - clear: both; - display: table; - margin: 0.9em auto; - min-width: 50px; - text-align: center; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image img { - display: block; - margin: 0 auto; - max-width: 100%; - min-width: 100%; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image-inline { - align-items: flex-start; - /* - * Normally, the .image-inline would have "display: inline-block" and "img { width: 100% }" (to follow the wrapper while resizing).; - * Unfortunately, together with "srcset", it gets automatically stretched up to the width of the editing root. - * This strange behavior does not happen with inline-flex. - */ - display: inline-flex; - max-width: 100%; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture { - display: flex; -} -/* ckeditor5-image/theme/image.css */ -.ck-content .image-inline picture, -.ck-content .image-inline img { - flex-grow: 1; - flex-shrink: 1; - max-width: 100%; -} -/* ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized { - box-sizing: border-box; - display: block; - max-width: 100%; -} -/* ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized img { - width: 100%; -} -/* ckeditor5-image/theme/imageresize.css */ -.ck-content .image.image_resized > figcaption { - display: block; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left, -.ck-content .image-style-block-align-right { - max-width: calc(100% - var(--ck-image-style-spacing)); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left, -.ck-content .image-style-align-right { - clear: none; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-side { - float: right; - margin-left: var(--ck-image-style-spacing); - max-width: 50%; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-left { - float: left; - margin-right: var(--ck-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-center { - margin-left: auto; - margin-right: auto; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-align-right { - float: right; - margin-left: var(--ck-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-right { - margin-left: auto; - margin-right: 0; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-style-block-align-left { - margin-left: 0; - margin-right: auto; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content p + .image-style-align-left, -.ck-content p + .image-style-align-right, -.ck-content p + .image-style-side { - margin-top: 0; -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left, -.ck-content .image-inline.image-style-align-right { - margin-bottom: var(--ck-inline-image-style-spacing); - margin-top: var(--ck-inline-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-left { - margin-right: var(--ck-inline-image-style-spacing); -} -/* ckeditor5-image/theme/imagestyle.css */ -.ck-content .image-inline.image-style-align-right { - margin-left: var(--ck-inline-image-style-spacing); -} -/* ckeditor5-image/theme/imagecaption.css */ -.ck-content .image > figcaption { - background-color: var(--ck-color-image-caption-background); - caption-side: bottom; - color: var(--ck-color-image-caption-text); - display: table-caption; - font-size: 0.75em; - outline-offset: -1px; - padding: 0.6em; - word-break: break-word; -} -/* ckeditor5-language/theme/language.css */ -.ck-content span[lang] { - font-style: italic; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list { - list-style: none; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li { - margin-bottom: 5px; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list li .todo-list { - margin-top: 5px; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input { - appearance: none; - border: 0; - display: inline-block; - height: var(--ck-todo-list-checkmark-size); - left: -25px; - margin-left: 0; - margin-right: -15px; - position: relative; - right: 0; - vertical-align: middle; - width: var(--ck-todo-list-checkmark-size); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::before { - border: 1px solid hsl(0, 0%, 20%); - border-radius: 2px; - box-sizing: border-box; - content: ""; - display: block; - height: 100%; - position: absolute; - transition: 250ms ease-in-out box-shadow, 250ms ease-in-out background, 250ms ease-in-out border; - width: 100%; -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input::after { - border-color: transparent; - border-style: solid; - border-width: 0 calc(var(--ck-todo-list-checkmark-size) / 8) calc(var(--ck-todo-list-checkmark-size) / 8) 0; - box-sizing: content-box; - content: ""; - display: block; - height: calc(var(--ck-todo-list-checkmark-size) / 2.6); - left: calc(var(--ck-todo-list-checkmark-size) / 3); - pointer-events: none; - position: absolute; - top: calc(var(--ck-todo-list-checkmark-size) / 5.3); - transform: rotate(45deg); - width: calc(var(--ck-todo-list-checkmark-size) / 5.3); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::before { - background: hsl(126, 64%, 41%); - border-color: hsl(126, 64%, 41%); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label > input[checked]::after { - border-color: hsl(0, 0%, 100%); -} -/* ckeditor5-list/theme/todolist.css */ -.ck-content .todo-list .todo-list__label .todo-list__label__description { - vertical-align: middle; -} -/* ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break { - align-items: center; - clear: both; - display: flex; - justify-content: center; - padding: 5px 0; - position: relative; -} -/* ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break::after { - border-bottom: 2px dashed hsl(0, 0%, 77%); - content: ""; - position: absolute; - width: 100%; -} -/* ckeditor5-page-break/theme/pagebreak.css */ -.ck-content .page-break__label { - background: hsl(0, 0%, 100%); - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - box-shadow: 2px 2px 1px hsla(0, 0%, 0%, 0.15); - color: hsl(0, 0%, 20%); - display: block; - font-family: Helvetica, Arial, Tahoma, Verdana, Sans-Serif; - font-size: 0.75em; - font-weight: bold; - padding: 0.3em 0.6em; - position: relative; - text-transform: uppercase; - user-select: none; - user-select: none; - user-select: none; - user-select: none; - z-index: 1; -} -/* ckeditor5-table/theme/tablecaption.css */ -.ck-content .table > figcaption { - background-color: var(--ck-color-table-caption-background); - caption-side: top; - color: var(--ck-color-table-caption-text); - display: table-caption; - font-size: 0.75em; - outline-offset: -1px; - padding: 0.6em; - text-align: center; - word-break: break-word; -} -/* ckeditor5-media-embed/theme/mediaembed.css */ -.ck-content .media { - clear: both; - display: block; - margin: 0.9em 0; - min-width: 15em; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table { - display: table; - margin: 0.9em auto; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table table { - border: 1px double hsl(0, 0%, 70%); - border-collapse: collapse; - border-spacing: 0; - height: 100%; - width: 100%; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table table td, -.ck-content .table table th { - border: 1px solid hsl(0, 0%, 75%); - min-width: 2em; - padding: 0.4em; -} -/* ckeditor5-table/theme/table.css */ -.ck-content .table table th { - background: hsla(0, 0%, 0%, 5%); - font-weight: bold; -} -/* ckeditor5-table/theme/table.css */ -.ck-content[dir="rtl"] .table th { - text-align: right; -} -/* ckeditor5-table/theme/table.css */ -.ck-content[dir="ltr"] .table th { - text-align: left; -} -/* ckeditor5-horizontal-line/theme/horizontalline.css */ -.ck-content hr { - background: hsl(0, 0%, 87%); - border: 0; - height: 4px; - margin: 15px 0; -} -/* ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre { - background: hsla(0, 0%, 78%, 0.3); - border: 1px solid hsl(0, 0%, 77%); - border-radius: 2px; - color: hsl(0, 0%, 20.8%); - direction: ltr; - font-style: normal; - min-width: 200px; - padding: 1em; - tab-size: 4; - text-align: left; - white-space: pre-wrap; -} -/* ckeditor5-code-block/theme/codeblock.css */ -.ck-content pre code { - background: unset; - border-radius: 0; - padding: 0; -} -/* ckeditor5-mention/theme/mention.css */ -.ck-content .mention { - background: var(--ck-color-mention-background); - color: var(--ck-color-mention-text); -} -@media print { - /* ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break { - padding: 0; - } - /* ckeditor5-page-break/theme/pagebreak.css */ - .ck-content .page-break::after { - display: none; - } -} diff --git a/resources/sass/bo/vendor/_complement.scss b/resources/sass/bo/vendor/_complement.scss deleted file mode 100644 index 17bc6cb..0000000 --- a/resources/sass/bo/vendor/_complement.scss +++ /dev/null @@ -1,244 +0,0 @@ -// @function strip-unit($value) -// @param {number with unit} $value -@function strip-unit($value) { - @return ($value / ($value * 0 + 1)); -} - -// @function pow($base, $exponents) -// Helper: Raise a number the power of another number -// Adapted from: https://gist.github.com/hail2u/1964056 -// -// @param {number} $base — The base number -// @param {number} $exponents — The exponent to which to raise $base -@function pow($base, $exponents) { - $raised: 1; - @for $i from 1 through $exponents { - $raised: $raised * $base; - } - @return $raised; -} - -// @function luminance($color) -// Helper: Calculate Luminance of a single color -// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 -// White luminance is 1, Black luminance is 0 -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { luminance: luminance(#c00); } -// Output: -// .sample { luminance: 0.1283736922; } -// -@function luminance($color) { - // Thanks voxpelli for a very concise implementation of luminance measure in sass - // Adapted from: https://gist.github.com/voxpelli/6304812 - $rgba: red($color), green($color), blue($color); - $rgba2: (); - @for $i from 1 through 3 { - $rgb: nth($rgba, $i); - $rgb: calc($rgb / 255); - $rgb: if($rgb < 0.03928, calc($rgb / 12.92), pow(calc(($rgb + 0.055) / 1.055), 2)); - $rgba2: append($rgba2, $rgb); - } - @return (0.2126 * nth($rgba2, 1) + 0.7152 * nth($rgba2, 2) + 0.0722 * nth($rgba2, 3)) * 100; -} - -// @function contrast-ratio($fg, $bg) -// Helper: Calculate "readability" as defined by WCAG 2.1 -// Adapted from: https://github.com/LeaVerou/contrast-ratio/blob/gh-pages/color.js -// Formula: http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { color-contrast: contrast-ratio(#c00, #fff); } -// Output: -// .sample { color-contrast: 5.89; } -// -@function contrast-ratio($fg, $bg) { - $luminance1: luminance($fg) + 0.05; - $luminance2: luminance($bg) + 0.05; - $ratio: calc($luminance1 / $luminance2); - @if $luminance2 > $luminance1 { - $ratio: calc(1 / $ratio); - } - // Round to a hundreth because 6.96 should not pass a ratio of 7.0 - $ratio: calc(round($ratio * 100) / 100); - @return $ratio; -} - -// @function validate-font-size($size) -// Helper: Depending on the unit recalculate a font size value into pixels if possible -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { validate-font-size: validate-font-size(1em); } -// Output: -// .sample { validate-font-size: 16; } -// -@function validate-font-size($size) { - @if unit($size) == "em" or unit($size) == "rem" or unit($size) == "px" or unit($size) == "" { - // Check if a flexible unit - @if unit($size) == "em" or unit($size) == "rem" { - // Need to convert to a pixel value. Let's not overcomplicate it with possible EM inheritence scale factors - @return strip-unit($size * 16); - } - @if unit($size) == "px" { - // We expect PX, so strip the value and return it - @return strip-unit($size); - } - @if unit($size) == "" { - @return $size; - } - } @else { - @error "validate-font-size(): An unexpected font size unit was supplied."; - } -} - -// @function get-ratio($level: 'AA', $size: 16, $bold: false) -// Helper: Determine the correct ratio value to use based on font-size and WCAG Level -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { get-ratio: get-ratio('AAA', 19, true); } -// Output: -// .sample { get-ratio: 4.5; } -// -@function get-ratio($level: "AA", $size: 16, $bold: false) { - // Default ratio - $ratio: 4.5; - @if $level == "AAA" { - $ratio: 7; - } - - // Make sure the size is valid. If the value is not EM, REM, or PX (preferred), we can't help - $size: validate-font-size($size); - - // Check font size - @if $size < 24 { - // Small text, use defaults - // But: - @if $size >= 19 and $bold == true { - // Special case: Small text but also bold - @if $level == "AAA" { - $ratio: 4.5; - } @else { - $ratio: 3; - } - } - } @else { - // Larger than 24 - $ratio: 3; - @if $level == "AAA" { - $ratio: 4.5; - } - } - @return $ratio; -} - -// @function light-or-dark($color) -// Helper: Use contrast against white or black to determine if a color is "light" or "dark" -// Adapted from: https://medium.com/dev-channel/using-sass-to-automatically-pick-text-colors-4ba7645d2796 -// To be used in other functions or mixins — creates non-standard CSS output: -// Usage: -// .sample { light-or-dark: light-or-dark(#c00); } -// Output: -// .sample { light-or-dark: "light"; } -// -@function light-or-dark($color) { - $light-contrast: contrast-ratio($color, $white); - $dark-contrast: contrast-ratio($color, $black); - - @if $light-contrast > $dark-contrast { - // Contrast against white is higher than against black, so, this is a dark color - @return "dark"; - } @else { - @return "light"; - } -} - -// @function color-contrast($color) -// Helper: Returns black or white compared to a color, whichever produces the highest contrast -// Usage: -// .sample { -// background-color: #c00; -// color: color-contrast(#c00); -// } -// Output: -// .sample { -// background-color: #c00; -// color: #fff; -// } -// -// Named for the forthcoming CSS Module 5 spec function color-contrast(); -// See https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-contrast() -// -@function color-contrast($color) { - $color-lod: light-or-dark($color); - - @if ($color-lod == "dark") { - @return $white; - } @else { - @return $black; - } -} - -// @function a11y-color($fg, $bg, $level: 'AA', $size: 16, $bold: false) -// Goal: Return a color that passes for the chosen WCAG level without changing the Hue of the color -// Usage: -// .sample { -// background-color: #000; -// color: a11y-color(#c0c, #000); -// } -// Output: -// .sample { -// background-color: #000; -// color: #d200d2; -// } -// -@function a11y-color($fg, $bg, $level: "AA", $size: 16, $bold: false) { - // Helper: make sure the font size value is acceptable - $font-size: validate-font-size($size); - // Helper: With the level, font size, and bold boolean, return the proper target ratio. 3.0, 4.5, or 7.0 expected - $ratio: get-ratio($level, $font-size, $bold); - // Calculate the first contrast ratio of the given pair - $original-contrast: contrast-ratio($fg, $bg); - - @if $original-contrast >= $ratio { - // If we pass the ratio already, return the original color - @return $fg; - } @else { - // Doesn't pass. Time to get to work - // Should the color be lightened or darkened? - $fg-lod: light-or-dark($fg); - $bg-lod: light-or-dark($bg); - - // Set a "step" value to lighten or darken a color - // Note: Higher percentage steps means faster compile time, but we might overstep the required threshold too far with something higher than 4% - $step: 1%; - - // Run through some cases where we want to darken, or use a negative step value - @if $fg-lod == "light" and $bg-lod == "light" { - // Both are light colors, darken the fg - $step: -$step; - } @else if $fg-lod == "dark" and $bg-lod == "light" { - // bg is light, fg is dark but does not pass, darken more - $step: -$step; - } - // Keeping the rest of the logic here, but our default values do not change, so this logic is not needed - //@else if $fg-lod == 'light' and $bg-lod == 'dark' { - // // bg is dark, fg is light but does not pass, lighten further - // $step: $step; - //} @else if $fg-lod == 'dark' and $bg-lod == 'dark' { - // // Both are dark, so lighten the fg - // $step: $step; - //} - - // The magic happens here - // Loop through with a @while statement until the color combination passes our required ratio. Scale the color by our step value until the expression is false - // This might loop 100 times or more depending on the colors - @while contrast-ratio($fg, $bg) < $ratio { - $sat-step: 0%; - @if saturation($fg) > 10 { - $sat-step: $step; - } - $fg: scale-color($fg, $lightness: $step, $saturation: $sat-step); - } - @return $fg; - } -} diff --git a/resources/sass/bo/vendor/_glightbox.scss b/resources/sass/bo/vendor/_glightbox.scss deleted file mode 100644 index 0504b34..0000000 --- a/resources/sass/bo/vendor/_glightbox.scss +++ /dev/null @@ -1 +0,0 @@ -@import "~/glightbox/dist/css/glightbox.css"; diff --git a/resources/sass/common.scss b/resources/sass/common.scss new file mode 100644 index 0000000..b5c61c9 --- /dev/null +++ b/resources/sass/common.scss @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; diff --git a/resources/sass/front/app.scss b/resources/sass/front/app.scss new file mode 100644 index 0000000..5fd50ea --- /dev/null +++ b/resources/sass/front/app.scss @@ -0,0 +1,20 @@ +// * COMMON CSS. +@use './../common'; + +body { + height: 100vh; + padding: 1.5rem; + margin: 0; + background-color: #f3f4f6; + + > div { + display: flex; + height: 100%; + flex-direction: column; + align-items: center; + justify-content: center; + border-radius: 0.5rem; + background-color: #fff; + box-shadow: 0 1px 2px 0 #0000000d; + } +} diff --git a/resources/ts/app.tsx b/resources/ts/app.tsx new file mode 100644 index 0000000..481904a --- /dev/null +++ b/resources/ts/app.tsx @@ -0,0 +1,29 @@ +import { createInertiaApp } from "@inertiajs/react"; +import { resolvePageComponent } from "laravel-vite-plugin/inertia-helpers"; +import { createRoot } from "react-dom/client"; +import axios from "axios"; + +// @ts-expect-error Env is always present. +const appName = import.meta.env.VITE_APP_NAME || "Laravel"; + +createInertiaApp({ + title: (title) => `${title} - ${appName}`, + resolve: (name) => + resolvePageComponent( + `./${name}.tsx`, + // @ts-expect-error Glob error. + import.meta.glob("./*/Pages/**/*.tsx"), + ), + setup({ el, App, props }) { + const root = createRoot(el); + + // eslint-disable-next-line react/jsx-filename-extension, react/jsx-props-no-spreading + root.render(); + }, + progress: { + color: "#4B5563", + }, +}); + +window.axios = axios; +window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest"; diff --git a/resources/ts/back/Components/ApplicationLogo.tsx b/resources/ts/back/Components/ApplicationLogo.tsx new file mode 100644 index 0000000..ede39c3 --- /dev/null +++ b/resources/ts/back/Components/ApplicationLogo.tsx @@ -0,0 +1,49 @@ +// * Packages +import { Link } from "@inertiajs/react"; +import { route } from "ziggy-js"; +// * Other +import { useTheme } from "@/back/providers/ThemeProvider"; +import logoUwilCMSLight from "&/images/logos/uwil-cms-light.svg"; +import logoUwilCMSDark from "&/images/logos/uwil-cms-dark.svg"; +import logoTinyUwilCMS from "&/images/logos/uwil-cms-light-icon.svg"; + +type ApplicationLogoProps = { + forceLight?: boolean; + isCollapsed?: boolean; +}; + +/** + * Get the logo. + * + * @param isCollapsed boolean + * @param forceLight boolean + * @param theme string + * @return string + */ +function getLogo(isCollapsed: boolean, forceLight: boolean, theme: string) { + if (isCollapsed) return logoTinyUwilCMS; + if (forceLight || theme === "dark") return logoUwilCMSLight; + return logoUwilCMSDark; +} + +export default function ApplicationLogo({ + forceLight = false, + isCollapsed = false, +}: ApplicationLogoProps) { + const { theme } = useTheme(); + const wrapperClasses = isCollapsed ? "h-8" : "w-full max-w-[10rem] mx-auto"; + const logo = getLogo(isCollapsed, forceLight, theme); + + return ( + + UWIL CMS logo + + ); +} diff --git a/resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx b/resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx new file mode 100644 index 0000000..78f3265 --- /dev/null +++ b/resources/ts/back/Components/BtnOptionnalLinkWithTooltip.tsx @@ -0,0 +1,87 @@ +// * Packages +import { Link } from "@inertiajs/react"; +import { + ButtonHTMLAttributes, + CSSProperties, + MouseEventHandler, + ReactNode, +} from "react"; +import { VariantProps } from "class-variance-authority"; +// * Components shadcn +import { Button, buttonVariants } from "@/components/ui/button"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; + +type ButtonVariant = VariantProps["variant"]; +type ButtonSize = VariantProps["size"]; +type ButtonType = ButtonHTMLAttributes["type"]; + +type BtnOptionnalLinkWithTooltipProps = { + link?: string | null; + content: ReactNode; + tooltipContent: ReactNode; + className?: string; + type?: ButtonType; + size?: ButtonSize; + variant?: ButtonVariant; + externalLink?: boolean; + disabled?: boolean; + style?: CSSProperties; + onClick?: MouseEventHandler; +}; + +export default function BtnOptionnalLinkWithTooltip({ + link = null, + content, + tooltipContent, + className = "", + type = "button", + size = "icon", + variant = "default", + externalLink = false, + disabled = false, + style, + onClick, + ...props +}: BtnOptionnalLinkWithTooltipProps) { + let innerContent: ReactNode = content; + + if (link !== null) { + if (externalLink) { + innerContent = disabled ? ( + + ) : ( + + {content} + + ); + } else { + innerContent = {content}; + } + } + + return ( + + + + + {tooltipContent} + + ); +} diff --git a/resources/ts/back/Components/CustomSidebarTrigger.tsx b/resources/ts/back/Components/CustomSidebarTrigger.tsx new file mode 100644 index 0000000..b35e6e9 --- /dev/null +++ b/resources/ts/back/Components/CustomSidebarTrigger.tsx @@ -0,0 +1,43 @@ +// * Packages +import { PanelRightOpenIcon, PanelRightCloseIcon } from "lucide-react"; +// * Components shadcn +import { Button } from "@/components/ui/button"; +import { useSidebar } from "@/components/ui/sidebar"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +// * Other +import useTrans from "@/hooks/use-translations"; + +export default function CustomSidebarTrigger() { + const { toggleSidebar, state } = useSidebar(); + + if (state === "collapsed") { + localStorage.setItem("vite-ui-collapsed", "true"); + } else { + localStorage.removeItem("vite-ui-collapsed"); + } + return ( + + + + + +

{useTrans("uwil-backend::back.sidebar_trigger_tooltip")}

+ + + ); +} diff --git a/resources/ts/back/Components/FieldsetWrapper.tsx b/resources/ts/back/Components/FieldsetWrapper.tsx new file mode 100644 index 0000000..94fd10c --- /dev/null +++ b/resources/ts/back/Components/FieldsetWrapper.tsx @@ -0,0 +1,54 @@ +// * Packages +import { ReactNode } from "react"; +// * Components shadcn +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +// * Other +import { cn } from "@/lib/utils"; + +export default function FieldsetWrapper({ + title, + icon, + description, + className, + inline, + children, +}: { + title: string; + icon: ReactNode; + description: string; + className?: string; + inline?: boolean; + children: ReactNode; +}) { + return ( + + + + {icon && icon} + {title} + + {description} + + + {children} + + + ); +} diff --git a/resources/ts/back/Components/Filters/EnumFilter.tsx b/resources/ts/back/Components/Filters/EnumFilter.tsx new file mode 100644 index 0000000..59f0bdf --- /dev/null +++ b/resources/ts/back/Components/Filters/EnumFilter.tsx @@ -0,0 +1,44 @@ +// * Packages +import { route } from "ziggy-js"; +// * Other +import EnumSelect from "@/back/Components/Inputs/EnumSelect"; +import { LaravelEnum } from "@/types/global"; +import addFilterToUrl from "@/back/lib/filters"; + +type Props = { + enums: LaravelEnum; + fieldName: string; + modelName: string; + label: string; + placeholder: string; +}; + +function EnumFilter(props: Props) { + const { enums, fieldName, modelName, label, placeholder } = props; + + const selectedEnumParam = Object.values(enums).find( + (status) => status.name === route().params.status, + ); + return ( + { + const selectedStatusName = Object.values(enums).find( + (enumValue) => enumValue.value === value, + )?.name; + const params = { + ...route().params, + [name]: selectedStatusName, + }; + addFilterToUrl({ modelName, params }); + }} + /> + ); +} + +export default EnumFilter; diff --git a/resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx b/resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx new file mode 100644 index 0000000..2da0781 --- /dev/null +++ b/resources/ts/back/Components/Filters/MultiSelectRelationFilter.tsx @@ -0,0 +1,58 @@ +// * Packages +import { route } from "ziggy-js"; +// * Other +import { ModelSelect } from "@/back/Components/Inputs/ModelSelect"; +import addFilterToUrl from "@/back/lib/filters"; + +type Props = { + fieldName: string; + modelName: string; + label: string; + placeholder: string; + /** Model target to display options */ + targetModel?: string; +}; + +function MultiSelectRelationFilter(props: Props) { + const { targetModel, fieldName, label, placeholder, modelName } = props; + + const valuesFromUrl: string[] = + typeof route().params[fieldName] === "string" + ? route().params[fieldName].split(",") + : []; + + return ( + { + const valuesArray = Array.isArray(value) ? value : [value]; + const params = { + ...route().params, + [name]: valuesArray.length ? valuesArray.join(",") : undefined, + }; + addFilterToUrl({ modelName, params }); + }} + defaultValue={valuesFromUrl} + responsive={{ + mobile: { + maxCount: 3, + }, + tablet: { + maxCount: 4, + }, + desktop: { + maxCount: 5, + }, + }} + /> + ); +} + +export default MultiSelectRelationFilter; diff --git a/resources/ts/back/Components/Filters/SwitchFilter.tsx b/resources/ts/back/Components/Filters/SwitchFilter.tsx new file mode 100644 index 0000000..ab48a14 --- /dev/null +++ b/resources/ts/back/Components/Filters/SwitchFilter.tsx @@ -0,0 +1,33 @@ +// * Packages +import { route } from "ziggy-js"; +// * Other +import SimpleSwitch from "@/back/Components/Inputs/SimpleSwitch"; +import addFilterToUrl from "@/back/lib/filters"; + +type Props = { + fieldName: string; + modelName: string; + label: string; +}; + +function SwitchFilter(props: Props) { + const { label, fieldName, modelName } = props; + return ( + { + const params = { + ...route().params, + [name]: value, + }; + addFilterToUrl({ modelName, params }); + }} + /> + ); +} + +export default SwitchFilter; diff --git a/resources/ts/back/Components/FiltersWrapper.tsx b/resources/ts/back/Components/FiltersWrapper.tsx new file mode 100644 index 0000000..984c38f --- /dev/null +++ b/resources/ts/back/Components/FiltersWrapper.tsx @@ -0,0 +1,58 @@ +// * Packages +import { Filter } from "lucide-react"; +import { ReactNode } from "react"; +// * Components shadcn +import { + Sheet, + SheetContent, + SheetDescription, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; + +function FiltersWrapper({ children }: { children: ReactNode }) { + return ( +
+
+ + + } + tooltipContent={ +

+ {str( + useTrans("uwil-backend::back.model_filters.button_tooltip"), + ) + .ucFirst() + .value()} +

+ } + type="button" + size="icon" + variant="outline" + /> +
+ + + + {str(useTrans("uwil-backend::back.model_filters.sheet_title")) + .ucFirst() + .value()} + + + +
{children}
+
+
+
+
+
+ ); +} + +export default FiltersWrapper; diff --git a/resources/ts/back/Components/GoToFrontView.tsx b/resources/ts/back/Components/GoToFrontView.tsx new file mode 100644 index 0000000..baff1a4 --- /dev/null +++ b/resources/ts/back/Components/GoToFrontView.tsx @@ -0,0 +1,106 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { ExternalLinkIcon } from "lucide-react"; +// * Components shadcn +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +// * Other +import { AppEnv } from "@/types/global"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { cn, GetTranslation } from "@/lib/utils"; + +interface GoToFrontViewProps { + /** Model Name used to translate the helper */ + modelName: string; + + /** Field data to build path */ + pathField: string; + + /** Additionnal segment used in the url */ + additionalGroupPath?: string | null; + + /** Does the actual page status available in front */ + isAvailable?: boolean; + + /** Set visually in column */ + isColumn?: boolean; +} + +export default function GoToFrontView({ + modelName, + pathField, + additionalGroupPath = null, + isAvailable = false, + isColumn = false, +}: GoToFrontViewProps) { + const { url } = usePage().props.appEnv as AppEnv; + + const anchorAccessPage = useTrans("uwil-backend::back.access_model", { + params: { + model: modelName, + }, + }); + + const cleanUrl = url.endsWith("/") ? url.slice(0, -1) : url; + + const definitivePath = [cleanUrl, additionalGroupPath, pathField] + .filter(Boolean) + .join("/"); + + return ( + + {isAvailable ? ( + <> + {str( + GetTranslation("uwil-backend::back.access_to_front_page", { + params: { + model: modelName, + }, + }), + ) + .ucFirst() + .value()} + + + +

{definitivePath}

+ +
+
+ {anchorAccessPage} +
+ + ) : ( + <> + {str( + GetTranslation( + "uwil-backend::back.access_to_front_page_when_published", + { + params: { + model: modelName, + }, + }, + ), + ) + .ucFirst() + .value()} + :{definitivePath} + + )} +
+ ); +} diff --git a/resources/ts/back/Components/InputError.tsx b/resources/ts/back/Components/InputError.tsx new file mode 100644 index 0000000..8a2616d --- /dev/null +++ b/resources/ts/back/Components/InputError.tsx @@ -0,0 +1,41 @@ +// * Packages +import { AlertCircleIcon } from "lucide-react"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; +// * Other +import useTrans from "@/hooks/use-translations"; +import { cn } from "@/lib/utils"; + +export default function InputError({ + all, + message, +}: { + all?: boolean; + message?: string; +}) { + const { errors } = usePage().props; + const errorsTrans = useTrans("uwil-backend::back.errors"); + let messages = {} as Array; + if (message) { + messages = Object.values([message]); + } else if (Object.values(errors).length && all) { + messages = Object.values(errors); + } + if (messages.length) { + return ( + + + {all && {errorsTrans}} + + {messages.map((errorMessage) => { + return

{errorMessage}

; + })} +
+
+ ); + } +} diff --git a/resources/ts/back/Components/Inputs/CompleteInputFile.tsx b/resources/ts/back/Components/Inputs/CompleteInputFile.tsx new file mode 100644 index 0000000..20be367 --- /dev/null +++ b/resources/ts/back/Components/Inputs/CompleteInputFile.tsx @@ -0,0 +1,423 @@ +// * Packages +import { ReactNode, useCallback, useEffect, useState } from "react"; +import { FileCheck, RefreshCwIcon, Trash, UploadIcon } from "lucide-react"; +import { ErrorCode, FileWithPath, useDropzone } from "react-dropzone"; +import "react-image-crop/dist/ReactCrop.css"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { Button } from "@/components/ui/button"; +// * Other +import InputError from "@/back/Components/InputError"; +import ImageCropper from "@/back/Components/Inputs/ImageCropper"; +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { useToast } from "@/hooks/use-toast"; +import { AppEnv } from "@/types/global"; +import { cn, GetTranslation } from "@/lib/utils"; + +type FileWithPreview = FileWithPath & { + preview: string; +}; + +type FileValidation = { + validationRules?: { + width: string | null; + height: string | null; + } | null; + maxFileSize: string | null; + allowedFormats: string | null; + inputType?: "image" | "file"; +}; + +/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */ +type CompleteInputFileProps = FileValidation & { + name: string; + value?: string | File | null; + /** Original data is the data directly from the model, not in the form state */ + originalData?: string | undefined; + /** Add custom event when refresh to the originalData */ + onRefreshFile?: () => void; + label?: ReactNode | string; + required?: boolean; + fileName?: string; + hasRefreshBtn?: boolean; + parentErrors?: Record | null; + setData: (name: string, value: File | string | null) => void; + reset: (name?: string) => void; + hasFile?: (hasFile: boolean) => void; +}; +/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */ + +export default function CompleteInputFile(props: CompleteInputFileProps) { + const { + value, + setData, + originalData, + name = "defaultName", + onRefreshFile, + label = "defaultLabel", + required = false, + maxFileSize, + validationRules, + allowedFormats, + reset, + inputType = "image", + fileName = "image", + hasRefreshBtn = true, + hasFile, + parentErrors, + } = props; + const { toast } = useToast(); + const { errors } = usePage().props; + const { url } = usePage().props.appEnv as AppEnv; + const [isReset, setIsReset] = useState(false); + const [isDialogOpen, setDialogOpen] = useState(false); + const [accept, setAccept] = useState>>({ + "image/*": [], + }); + const [extensions, setExtensions] = useState(); + + const finalFileName = `${fileName}.png`; + const isRefreshDisabled = value != null && typeof value === "string"; + const localErrors = parentErrors ?? errors; + + const localValidationRules = { + width: validationRules?.width ? parseInt(validationRules.width, 10) : 250, + height: validationRules?.height + ? parseInt(validationRules?.height, 10) + : 250, + }; + + const localMaxFileSize = maxFileSize + ? parseInt(maxFileSize, 10) * 1024 + : 50000; + + /** + * Get the fileName from the path given by the database value + * @param path string|null + * @return string|null + */ + const getFileNameFromPath = (path?: string | null): string | null => { + if (!path || typeof path !== "string") return null; + const cleanPath = path.replace(/\/+$/, ""); + const segments = cleanPath.split("/"); + const last = segments[segments.length - 1] || ""; + return last || null; + }; + + const transValueIntoFile = (localData: string | undefined | null) => { + if (localData) { + const currentFileName = getFileNameFromPath(localData); + return { + preview: `${url}/${localData}`, + name: currentFileName ?? "", + } as FileWithPreview; + } + return null; + }; + + const [selectedFile, setSelectedFile] = useState( + () => { + // When there is an image selected but not stored yet. + if (value instanceof File) { + return Object.assign(value, { + preview: URL.createObjectURL(value), + }); + } + + // When there is already an image stored. + return transValueIntoFile(value); + }, + ); + + // Fonction utilitaire pour formater la taille de fichier + const formatFileSize = (bytes: number): string => { + if (bytes === 0) return "0 Bytes"; + const k = 1024; + const sizes = ["Bytes", "KB", "MB", "GB"]; + const i = Math.floor(Math.log(bytes) / Math.log(k)); + const currentSize = sizes[i]; + const currentBytes = parseFloat((bytes / k ** i).toFixed(2)); + return `${currentBytes} ${currentSize}`; + }; + + // Translations + const transSelectImgZone = useTrans( + inputType === "file" + ? "uwil-backend::back.image_cropper.select_file_zone" + : "uwil-backend::back.image_cropper.select_img_zone", + ); + const transValidationAllFormats = str( + useTrans("uwil-backend::back.image_cropper.validation.all_formats"), + ) + .ucFirst() + .value(); + const transCropperFileUploaded = useTrans( + "uwil-backend::back.image_cropper.state_file_uploaded", + ); + const transCancel = useTrans("uwil-backend::back.cancel"); + const transRulesWeight = useTrans( + "uwil-backend::back.image_cropper.validation.rules_weight", + { + params: { + size: formatFileSize(localMaxFileSize).toString(), + }, + }, + ); + const transRefresh = useTrans( + "uwil-backend::back.image_cropper.refresh_original", + ); + const getTransValidationAllowedFormats = (targetExtensions: string) => { + return str( + GetTranslation( + "uwil-backend::back.image_cropper.validation.allowed_formats", + { + params: { + formats: targetExtensions, + }, + }, + ), + ) + .ucFirst() + .value(); + }; + + const buildDropzoneAccept = (): Record => { + if (!allowedFormats) return {}; + + const currentExtensions = allowedFormats.split(","); + setExtensions(allowedFormats); + const mimeMap: Record = { + jpg: "image/jpeg", + jpeg: "image/jpeg", + png: "image/png", + gif: "image/gif", + pdf: "application/pdf", + svg: "image/svg+xml", + webp: "image/webp", + }; + + const result: Record> = {}; + + currentExtensions.forEach((ext) => { + const cleanExt = ext.trim().toLowerCase(); + const mime = mimeMap[cleanExt]; + if (mime) { + if (!result[mime]) { + result[mime] = new Set(); + } + result[mime].add(`.${cleanExt}`); + } + }); + + // Convert Set to Array for React Dropzone + const currentAccept: Record = {}; + Object.entries(result).forEach(([mime, extSet]) => { + currentAccept[mime] = Array.from(extSet); + }); + setAccept(currentAccept); + return currentAccept; + }; + + useEffect(() => { + buildDropzoneAccept(); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + useEffect(() => { + hasFile?.(!!selectedFile); + }, [selectedFile, hasFile]); + + // This error message for the useDropZone can not be used directly in the hook because or react hook error, + // they have to be used as they actually are. + const dropErrorMessages = { + noFile: str(useTrans("uwil-backend::back.image_cropper.toast.no_file")) + .ucFirst() + .value(), + tooLarge: str( + useTrans("uwil-backend::back.image_cropper.toast.too_big", { + params: { + maxSize: formatFileSize(localMaxFileSize), + }, + }), + ) + .ucFirst() + .value(), + forbidden: str( + useTrans("uwil-backend::back.image_cropper.toast.forbidden_file"), + ) + .ucFirst() + .value(), + tooMany: str(useTrans("uwil-backend::back.image_cropper.toast.too_many")) + .ucFirst() + .value(), + default: str( + useTrans("uwil-backend::back.image_cropper.toast.defaultError"), + ) + .ucFirst() + .value(), + }; + + const onDrop = useCallback( + (acceptedFiles: FileWithPath[]) => { + const file = acceptedFiles[0]; + if (!file) { + toast({ + title: "Oups !", + description: dropErrorMessages.noFile, + }); + return; + } + const fileWithPreview = Object.assign(file, { + preview: URL.createObjectURL(file), + }); + + setSelectedFile(fileWithPreview); + if (inputType === "file") { + setData(name, file); + } + setDialogOpen(true); + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [maxFileSize, formatFileSize], + ); + + const { getRootProps, getInputProps } = useDropzone({ + onDrop, + accept, + multiple: false, + maxSize: localMaxFileSize, + onDropRejected: (fileRejections) => { + const rejection = fileRejections[0]; + const rejectionCode = rejection?.errors?.[0]?.code; + if (rejectionCode === ErrorCode.FileTooLarge) { + toast({ + title: "Oups !", + description: `${dropErrorMessages.tooLarge} (${formatFileSize(rejection.file.size)}).`, + }); + } else if (rejectionCode === ErrorCode.FileInvalidType) { + toast({ + title: "Oups !", + description: dropErrorMessages.forbidden, + }); + } else if (rejectionCode === ErrorCode.TooManyFiles) { + toast({ + title: "Oups !", + description: dropErrorMessages.tooMany, + }); + } else { + toast({ + title: "Oups !", + description: dropErrorMessages.default, + }); + } + }, + }); + + return ( +
+
+
+ + {selectedFile ? ( +
+ {inputType === "image" && ( + + )} + {inputType === "file" && ( +
+
+ +

+ {str(transCropperFileUploaded).ucFirst().value()} +

+ {selectedFile.name} +
+
+ )} + } + onClick={() => { + setSelectedFile(null); + setData(name, null); + }} + tooltipContent={str(transCancel).ucFirst().value()} + /> +
+ ) : ( + + )} +
+ + {hasRefreshBtn && originalData && ( + { + setData(name, originalData); + setSelectedFile(transValueIntoFile(originalData)); + if (onRefreshFile) { + onRefreshFile(); + } + }} + content={} + tooltipContent={str(transRefresh).ucFirst().value()} + /> + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/EnumSelect.tsx b/resources/ts/back/Components/Inputs/EnumSelect.tsx new file mode 100644 index 0000000..3232607 --- /dev/null +++ b/resources/ts/back/Components/Inputs/EnumSelect.tsx @@ -0,0 +1,243 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { useEffect, useState } from "react"; +import { CheckIcon, ChevronsUpDownIcon, SearchIcon, XIcon } from "lucide-react"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { Input } from "@/components/ui/input"; +import { Button } from "@/components/ui/button"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import { AppEnv } from "@/types/global"; +import { cn } from "@/lib/utils"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; + +type EnumSelectProps = { + name: string; + label: string; + options?: Record; + placeholder?: string; + exclude?: number[]; + selected?: number | null; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: number | null) => void; + // eslint-disable-next-line no-unused-vars + onSelectValue?: (value: number | null) => void; +}; + +export default function EnumSelect({ + name, + label, + options = {}, + placeholder = "ex: John Doe", + exclude = [], + selected = null, + required = true, + disabled = false, + parentErrors = null, + setData, + onSelectValue, +}: EnumSelectProps) { + const { locale } = usePage().props.appEnv as AppEnv; + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + // List of options. + const initalOptions = Object.fromEntries( + Object.entries(options).filter(([, item]) => !exclude.includes(item.value)), + ); + const [currentOptions, setCurrentOptions] = + useState>( + initalOptions, + ); + + // Model key selected. + const initial = + selected === 0 || selected === null || selected === undefined + ? null + : Number(selected); + const [selectedEnum, setSelectedEnum] = useState(initial); + + // String research in models collection. + const [search, setSearch] = useState(""); + + // Component states. + const [open, setOpen] = useState(false); + + const transNoResults = useTrans("uwil-backend::back.table_no_results"); + const transDelete = useTrans("uwil-backend::crud.actions.delete"); + + /** + * Get the identification field of specific option. + * @param value number + * @return string + */ + const getEnumLabel = (value: number): string => { + const targetEnum = Object.values(initalOptions).find( + (option) => option.value === value, + ); + if (!targetEnum) return String(value); + if (typeof value === "object") + return String( + targetEnum.label[locale as keyof typeof targetEnum.label] ?? "", + ); + return targetEnum.label; + }; + + /** + * Updates when selecting new value. + * @param value number + * @return void + */ + const handleSelect = (value: number) => { + setSelectedEnum(value); + setData(name, value); + onSelectValue?.(value); + setOpen(false); + }; + + /** + * Updates when clear the selected value. + * @return void + */ + const handleClear = () => { + setSelectedEnum(null); + setData(name, null); + onSelectValue?.(null); + }; + + /** + * Reset the search. + * @return void + */ + const handleClearSearch = () => { + setSearch(""); + }; + + // Fetch with debounce. + useEffect(() => { + // Reset options list if empty search or null + if (search.length === 0) { + setCurrentOptions(initalOptions); + return; + } + + const optionsFiltered = Object.fromEntries( + Object.entries(initalOptions).filter(([, item]) => + item.label.toLowerCase().includes(search), + ), + ); + + // Get updated options list with search. + setCurrentOptions(optionsFiltered); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [search, options]); + + return ( +
+ +
+ + + + + +
+
+ +
+ setSearch(e.target.value)} + className="w-[calc(100%-2.5rem-40px)] border-0 mx-9" + /> + } + tooltipContent={ +

+ {str(useTrans("uwil-backend::crud.actions.delete")) + .ucFirst() + .value()} +

+ } + type="button" + variant="ghost" + size="icon" + className="absolute top-1/2 right-0 transform -translate-y-1/2 text-muted-foreground" + onClick={handleClearSearch} + disabled={search.length < 1 || disabled} + /> +
+
5 ? "h-[225px]" : "h-auto"}`, + )} + > + {Object.values(currentOptions).length === 0 && ( +

+ {transNoResults} +

+ )} +
+ {Object.values(currentOptions).map((option) => ( + + ))} +
+
+
+
+ {!required && selectedEnum !== null && ( + } + tooltipContent={

{str(transDelete).ucFirst().value()}

} + type="button" + variant="destructive" + size="icon" + onClick={handleClear} + /> + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/ImageCropper.tsx b/resources/ts/back/Components/Inputs/ImageCropper.tsx new file mode 100644 index 0000000..4afa24b --- /dev/null +++ b/resources/ts/back/Components/Inputs/ImageCropper.tsx @@ -0,0 +1,1005 @@ +// * Packages +import { + Dispatch, + MouseEvent, + SetStateAction, + useEffect, + useRef, + useState, + type SyntheticEvent, +} from "react"; +import { + ChevronDownIcon, + CropIcon, + FlipHorizontalIcon, + FlipVerticalIcon, + RotateCcwIcon, + RotateCwIcon, + Trash2Icon, + Upload, + ZoomInIcon, + ZoomOutIcon, + RefreshCwIcon, +} from "lucide-react"; +import { usePage } from "@inertiajs/react"; +import ReactCrop, { type Crop, type PixelCrop } from "react-image-crop"; +import { FileWithPath } from "react-dropzone"; +import "react-image-crop/dist/ReactCrop.css"; +import { route } from "ziggy-js"; +// * Components shadcn +import { Button } from "@/components/ui/button"; +import { + Dialog, + DialogClose, + DialogContent, + DialogDescription, + DialogFooter, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { + Collapsible, + CollapsibleContent, + CollapsibleTrigger, +} from "@/components/ui/collapsible"; +import { Slider } from "@/components/ui/slider"; +import { + Tooltip, + TooltipContent, + TooltipTrigger, +} from "@/components/ui/tooltip"; +// * Other +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import useDeviceType from "@/hooks/use-device-type"; +import { cn, GetTranslation } from "@/lib/utils"; + +interface CropValidationRules { + width: number; + height: number; +} + +type FileWithPreview = FileWithPath & { + preview: string; +}; + +/* eslint-disable no-unused-vars, @typescript-eslint/no-unused-vars */ +interface ImageCropperProps { + dialogOpen: boolean; + name: string; + value?: string | File | null; + selectedFile: FileWithPreview | null; + validationRules: CropValidationRules; + isReset: boolean; + url: string; + finalFileName: string; + setData: (name: string, value: File | string | null) => void; + setDialogOpen: Dispatch>; + reset: (name?: string) => void; + setIsReset: (value: boolean) => void; +} +/* eslint-enable no-unused-vars, @typescript-eslint/no-unused-vars */ + +export default function ImageCropper({ + dialogOpen, + setDialogOpen, + selectedFile, + validationRules, + setData, + name, + value, + reset, + setIsReset, + isReset, + url, + finalFileName, +}: ImageCropperProps) { + const { errors } = usePage().props; + + const aspect = 1; + const { isDesktop } = useDeviceType(); + const imgRef = useRef(null); + + const isDuplicating = route().current("uwil-backend::back.*.duplicate"); + + // Zone of the crop in %. + const [cropZone, setCropZone] = useState(); + const [croppedImage, setCroppedImage] = useState(""); + const [rotation, setRotation] = useState(0); + const [flipX, setFlipX] = useState(false); + const [flipY, setFlipY] = useState(false); + const [zoom, setZoom] = useState(0); + const [scaleFactor, setScaleFactor] = useState(1); + const [imagePosition, setImagePosition] = useState({ x: 0, y: 0 }); + const [isDragging, setIsDragging] = useState(false); + const [dragStart, setDragStart] = useState({ x: 0, y: 0 }); + const [originalDimensions, setOriginalDimensions] = useState({ + width: 0, + height: 0, + }); + + // États pour les filtres + const [brightness, setBrightness] = useState(100); + const [contrast, setContrast] = useState(100); + const [saturation, setSaturation] = useState(100); + const [sepia, setSepia] = useState(0); + const [grayscale, setGrayscale] = useState(0); + const [filtersOpen, setFiltersOpen] = useState(false); + + const maxContainerHeight = isDesktop ? 550 : 350; + const maxContainerWidth = isDesktop ? 900 : 450; + + /** + * Generate imge from canvas with all crop options. + * @param image HTMLImageElement Ref. of the image tag. + * @param cropLocalization Crop localization in the image. + * @return string + */ + function getCroppedImg(image: HTMLImageElement, crop: PixelCrop): string { + const canvas = document.createElement("canvas"); + canvas.width = validationRules.width; + canvas.height = validationRules.height; + const ctx = canvas.getContext("2d")!; + + // Calculer le ratio entre l'affichage et les dimensions originales + const displayScale = scaleFactor * (1 + zoom); + + // Position de l'image affichée avec zoom + const displayedWidth = originalDimensions.width * displayScale; + const displayedHeight = originalDimensions.height * displayScale; + const offsetX = + imagePosition.x - + (displayedWidth - originalDimensions.width * scaleFactor) / 2; + const offsetY = + imagePosition.y - + (displayedHeight - originalDimensions.height * scaleFactor) / 2; + + // Centre de l'image dans le container d'affichage + const imageCenterX = offsetX + displayedWidth / 2; + const imageCenterY = offsetY + displayedHeight / 2; + + // Centre du crop dans le container d'affichage + const cropCenterX = crop.x + crop.width / 2; + const cropCenterY = crop.y + crop.height / 2; + + // Distance du centre du crop au centre de l'image (en pixels d'affichage) + const deltaX = cropCenterX - imageCenterX; + const deltaY = cropCenterY - imageCenterY; + + // Taille du canvas temporaire basée sur la résolution originale de la zone croppée + // On limite toutefois pour éviter des canvas trop grands (max 4x la taille finale) + const tmpWidth = Math.ceil(crop.width / displayScale); + const tmpHeight = Math.ceil(crop.height / displayScale); + + // Créer un canvas temporaire à haute résolution + const tmpCanvas = document.createElement("canvas"); + tmpCanvas.width = tmpWidth; + tmpCanvas.height = tmpHeight; + const tmpCtx = tmpCanvas.getContext("2d")!; + + tmpCtx.save(); + + // Appliquer les filtres + tmpCtx.filter = `brightness(${brightness}%) contrast(${contrast}%) saturate(${saturation}%) sepia(${sepia}%) grayscale(${grayscale}%)`; + + // Translater au centre du canvas temporaire + tmpCtx.translate(tmpWidth / 2, tmpHeight / 2); + + // Appliquer rotation et flip + tmpCtx.rotate((rotation * Math.PI) / 180); + tmpCtx.scale(flipX ? -1 : 1, flipY ? -1 : 1); + + // Calculer où dessiner l'image pour que la zone croppée soit centrée + // deltaX/deltaY sont en pixels d'affichage, on les convertit en pixels originaux + const originalDeltaX = deltaX / displayScale; + const originalDeltaY = deltaY / displayScale; + + // Dessiner l'image originale à sa pleine résolution + tmpCtx.drawImage( + image, + -originalDimensions.width / 2 - originalDeltaX, + -originalDimensions.height / 2 - originalDeltaY, + originalDimensions.width, + originalDimensions.height, + ); + + tmpCtx.restore(); + + // Redimensionner vers la taille finale en une seule opération + ctx.drawImage( + tmpCanvas, + 0, + 0, + tmpWidth, + tmpHeight, + 0, + 0, + canvas.width, + canvas.height, + ); + + return canvas.toDataURL("image/png"); + } + + /** + * Generate base64 from an url. + * @param targetUrl string + * @param callback (base64: string | ArrayBuffer | null) => void + * @param errorCallback (error: string) => void + */ + function urlToBase64( + targetUrl: string, + // eslint-disable-next-line no-unused-vars + callback: (base64: string | ArrayBuffer | null) => void, + // eslint-disable-next-line no-unused-vars + errorCallback?: (error: string) => void, + ): void { + fetch(targetUrl) + .then((response) => response.blob()) + .then((blob) => { + const reader = new FileReader(); + + reader.onloadend = () => callback(reader.result); + reader.readAsDataURL(blob); + }) + .catch((error) => { + if (errorCallback) errorCallback(error); + }); + } + + /** + * Generate file from the base64. + * @param dataUrl base64 string + * @param filename name of your file + * @return File + */ + function base64ToFile(dataUrl: string): File { + const [meta, base64] = dataUrl.split(","); + const mimeMatch = meta.match(/:(.*?);/); + const mime = mimeMatch ? mimeMatch[1] : "image/png"; + const decodedBase64 = atob(base64); + const { length } = decodedBase64; + const u8arr = new Uint8Array(length); + + for (let i = 0; i < length; i += 1) { + u8arr[i] = decodedBase64.charCodeAt(i); + } + + return new File([u8arr], finalFileName, { type: mime }); + } + + // Fonctions de gestion du drag + function handleMouseDown(e: MouseEvent) { + setIsDragging(true); + setDragStart({ + x: e.clientX - imagePosition.x, + y: e.clientY - imagePosition.y, + }); + } + + function handleMouseMove(e: MouseEvent) { + if (!isDragging) return; + + setImagePosition({ + x: e.clientX - dragStart.x, + y: e.clientY - dragStart.y, + }); + } + + function handleMouseUp() { + setIsDragging(false); + } + + // Reset de la position et dimensions quand l'image change + useEffect(() => { + setImagePosition({ x: 0, y: 0 }); + setOriginalDimensions({ width: 0, height: 0 }); + }, [selectedFile]); + + useEffect(() => { + if (!value || !isDuplicating) return; + const pathFileBase = `${url}/${value}`; + urlToBase64( + pathFileBase, + (base64) => { + if (typeof base64 === "string") { + const file = base64ToFile(base64); + setData(name, file); + } + }, + (err) => console.error(err), + ); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + + /** + * Crop the image with all options. + * @return Promise + */ + async function onCrop(): Promise { + try { + if (imgRef.current && cropZone) { + // Recalculer les coordonnées en pixels à partir de cropZone actuel + // cropZone est en % par rapport au container de ReactCrop + const cropX = (cropZone.x / 100) * maxContainerWidth; + const cropY = (cropZone.y / 100) * maxContainerHeight; + const cropWidth = (cropZone.width / 100) * maxContainerWidth; + const cropHeight = (cropZone.height / 100) * maxContainerHeight; + + // Créer l'objet cropLocalization mis à jour + const currentCropLocalization: PixelCrop = { + unit: "px", + x: cropX, + y: cropY, + width: cropWidth, + height: cropHeight, + }; + + const finalImage = getCroppedImg( + imgRef.current, + currentCropLocalization, + ); + setCroppedImage(finalImage); + const file = base64ToFile(finalImage); + if (!isReset) { + setData(name, file); + } else { + reset(name); + } + setDialogOpen(false); + } + } catch (error: Error | unknown) { + throw new Error(`Something went wrong : ${error}`); + } + } + + /** + * Set the crop zone. + * @param width number + * @param height number + * @param currentScaleFactor number + */ + function placeCropZone( + width: number, + height: number, + currentScaleFactor: number, + ): void { + const displayedWidth = width * currentScaleFactor; + const displayedHeight = height * currentScaleFactor; + + // Calculer l'offset pour centrer l'image dans le container + const centerOffsetX = (maxContainerWidth - displayedWidth) / 2; + const centerOffsetY = (maxContainerHeight - displayedHeight) / 2; + + // Initialiser la position centrée (seulement si imagePosition est à 0,0) + if (imagePosition.x === 0 && imagePosition.y === 0) { + setImagePosition({ x: centerOffsetX, y: centerOffsetY }); + } + + // Zone de crop simple : garder les dimensions d'origine, réduire seulement si ça dépasse le container + let finalCropWidth = validationRules.width; + let finalCropHeight = validationRules.height; + + // Si la zone dépasse le container, la réduire proportionnellement + if ( + finalCropWidth > maxContainerWidth * 0.9 || + finalCropHeight > maxContainerHeight * 0.9 + ) { + const containerWidthRatio = (maxContainerWidth * 0.9) / finalCropWidth; + const containerHeightRatio = (maxContainerHeight * 0.9) / finalCropHeight; + const reductionRatio = Math.min( + containerWidthRatio, + containerHeightRatio, + ); + + finalCropWidth = validationRules.width * reductionRatio; + finalCropHeight = validationRules.height * reductionRatio; + } + + // Convertir en pourcentage par rapport au CONTAINER (pas à l'image) + const cropWidthPercent = (finalCropWidth / maxContainerWidth) * 100; + const cropHeightPercent = (finalCropHeight / maxContainerHeight) * 100; + + setCropZone( + cropZone ?? { + unit: "%", + width: cropWidthPercent, + height: cropHeightPercent, + x: (100 - cropWidthPercent) / 2, // Centrer horizontalement + y: (100 - cropHeightPercent) / 2, // Centrer verticalement + }, + ); + } + + /** + * Load image when open the dialog. + * @param e SyntheticEvent + * @return void + */ + function onImageLoad(e: SyntheticEvent): void { + const { naturalWidth: width, naturalHeight: height } = e.currentTarget; + + // STOCKER les dimensions naturelles originales + setOriginalDimensions({ width, height }); + + // Calculer le facteur d'échelle pour l'image + const imageWidthRatio = maxContainerWidth / width; + const imageHeightRatio = maxContainerHeight / height; + const imageScaleFactor = Math.min(imageWidthRatio, imageHeightRatio, 1); // Ne pas agrandir l'image + + setScaleFactor(imageScaleFactor); + placeCropZone(width, height, imageScaleFactor); + } + + /** + * Reset function to return to initial state. + * @return void + */ + function resetToInitialState(): void { + // Options reset. + setRotation(0); + setFlipX(false); + setFlipY(false); + setZoom(0); + setBrightness(100); + setContrast(100); + setSaturation(100); + setSepia(0); + setGrayscale(0); + if (value) setIsReset(true); + + // Recalculer et forcer le centrage de l'image ET de la zone de crop + if (imgRef.current && originalDimensions.width > 0) { + const displayedWidth = originalDimensions.width * scaleFactor; + const displayedHeight = originalDimensions.height * scaleFactor; + + // Calculer l'offset pour centrer l'image dans le container + const centerOffsetX = (maxContainerWidth - displayedWidth) / 2; + const centerOffsetY = (maxContainerHeight - displayedHeight) / 2; + + // Forcer la position centrée + setImagePosition({ x: centerOffsetX, y: centerOffsetY }); + + // IMPORTANT: Recalculer la zone de crop centrée + let finalCropWidth = validationRules.width; + let finalCropHeight = validationRules.height; + + // Si la zone dépasse le container, la réduire proportionnellement + if ( + finalCropWidth > maxContainerWidth * 0.9 || + finalCropHeight > maxContainerHeight * 0.9 + ) { + const containerWidthRatio = (maxContainerWidth * 0.9) / finalCropWidth; + const containerHeightRatio = + (maxContainerHeight * 0.9) / finalCropHeight; + const reductionRatio = Math.min( + containerWidthRatio, + containerHeightRatio, + ); + + finalCropWidth = validationRules.width * reductionRatio; + finalCropHeight = validationRules.height * reductionRatio; + } + + // Convertir en pourcentage et centrer + const cropWidthPercent = (finalCropWidth / maxContainerWidth) * 100; + const cropHeightPercent = (finalCropHeight / maxContainerHeight) * 100; + + setCropZone({ + unit: "%", + width: cropWidthPercent, + height: cropHeightPercent, + x: (100 - cropWidthPercent) / 2, // Centrer horizontalement + y: (100 - cropHeightPercent) / 2, // Centrer verticalement + }); + } else { + // Si pas d'image, remettre à 0,0 + setImagePosition({ x: 0, y: 0 }); + } + } + + // Translations. + const transBrightness = str( + useTrans("uwil-backend::back.image_cropper.filters.brightness"), + ) + .ucFirst() + .value(); + const transContrast = str( + useTrans("uwil-backend::back.image_cropper.filters.contrast"), + ) + .ucFirst() + .value(); + const transSaturation = str( + useTrans("uwil-backend::back.image_cropper.filters.saturation"), + ) + .ucFirst() + .value(); + const transSepia = str( + useTrans("uwil-backend::back.image_cropper.filters.sepia"), + ) + .ucFirst() + .value(); + const transGrayscale = str( + useTrans("uwil-backend::back.image_cropper.filters.grayscale"), + ) + .ucFirst() + .value(); + const transRotation = str( + useTrans("uwil-backend::back.image_cropper.filters.rotation"), + ) + .ucFirst() + .value(); + const transZoom = str( + useTrans("uwil-backend::back.image_cropper.filters.zoom"), + ) + .ucFirst() + .value(); + + // Filters (brightness, contrast, saturation, sepia, grayscale). + const imageFilterOptions = [ + { + label: () => `${transBrightness}: ${brightness}%`, + tooltip: "brightness", + slider: { + min: 0, + max: 200, + step: 1, + value: [brightness], + onValueChange: (e: number[]) => { + setIsReset(false); + setBrightness(parseInt(e[0].toString(), 10)); + }, + }, + }, + { + label: () => `${transContrast}: ${contrast}%`, + tooltip: "contrast", + slider: { + min: 0, + max: 200, + step: 1, + value: [contrast], + onValueChange: (e: number[]) => { + setContrast(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + { + label: () => `${transSaturation}: ${saturation}%`, + tooltip: "saturation", + slider: { + min: 0, + max: 200, + step: 1, + value: [saturation], + onValueChange: (e: number[]) => { + setSaturation(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + { + label: () => `${transSepia}: ${sepia}%`, + tooltip: "sepia", + slider: { + min: 0, + max: 100, + step: 1, + value: [sepia], + onValueChange: (e: number[]) => { + setSepia(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + { + label: () => `${transGrayscale}: ${grayscale}%`, + tooltip: "grayscale", + slider: { + min: 0, + max: 100, + step: 1, + value: [grayscale], + onValueChange: (e: number[]) => { + setGrayscale(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + }, + ]; + + // Main options (rotation, zoom). + const mainOptions = [ + { + label: () => `${transRotation}: ${rotation}°`, + tooltip: "rotation", + slider: { + min: -180, + max: 180, + step: 1, + value: [rotation], + onValueChange: (e: number[]) => { + setRotation(parseInt(e[0].toString(), 10)); + setIsReset(false); + }, + }, + buttons: [ + { + icon: RotateCcwIcon, + tooltip: "rotation_back", + fn: () => setRotation((r) => r - 10), + }, + { + icon: RotateCwIcon, + tooltip: "rotation_forward", + fn: () => setRotation((r) => r + 10), + }, + ], + }, + { + label: () => `${transZoom}: ${Math.round((1 + zoom) * 100)}%`, + tooltip: "zoom", + slider: { + min: -0.99, + max: 500, + step: 0.1, + value: [Math.round((1 + zoom) * 100)], + onValueChange: (e: number[]) => { + setZoom(e[0] / 100 - 1); + setIsReset(false); + }, + }, + buttons: [ + { + icon: ZoomOutIcon, + tooltip: "zoomOut", + fn: () => { + setZoom((currentValue) => { + const newValue = currentValue - 0.1; + return newValue < -0.99 ? -0.99 : parseFloat(newValue.toFixed(1)); + }); + setIsReset(false); + }, + }, + { + icon: ZoomInIcon, + tooltip: "zoomIn", + fn: () => { + setZoom((currentValue) => { + const newValue = currentValue + 0.1; + return newValue > 4 ? 4 : parseFloat(newValue.toFixed(1)); + }); + setIsReset(false); + }, + }, + ], + }, + ]; + + // Other options (reset, horizontal and vertical flip) + const otherOptions = [ + { + icon: FlipHorizontalIcon, + fn: () => setFlipX((prev) => !prev), + tooltip: "horizontal_flip", + }, + { + icon: FlipVerticalIcon, + fn: () => setFlipY((prev) => !prev), + tooltip: "vertical_flip", + }, + { + icon: RefreshCwIcon, + fn: resetToInitialState, + tooltip: "reset", + }, + ]; + + return ( + +
+ + + +
+ + + {useTrans("uwil-backend::back.image_cropper.modale_title")} + +
+ {/* Cropper content */} +
+ setCropZone(percentCrop)} + aspect={aspect} + className="w-full" + locked + > +
+ {useTrans( 0 + ? `${originalDimensions.width * scaleFactor}px` + : "auto", + height: + originalDimensions.height > 0 + ? `${originalDimensions.height * scaleFactor}px` + : "auto", + transform: `scale(${1 + zoom}) rotate(${rotation}deg) scaleX(${flipX ? -1 : 1}) scaleY(${flipY ? -1 : 1})`, + filter: `brightness(${brightness}%) contrast(${contrast}%) saturate(${saturation}%) sepia(${sepia}%) grayscale(${grayscale}%)`, + transformOrigin: "center center", + transition: !isDragging + ? "transform 0.2s ease, filter 0.2s ease" + : "none", + cursor: isDragging ? "grabbing" : "grab", + userSelect: "none", + }} + draggable={false} + /> +
+
+
+ {/* Cropper filters */} +
+
+ + {useTrans( + "uwil-backend::back.image_cropper.modale_description", + )} + + {mainOptions.map((option) => ( +
+
+ + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${option.tooltip}`, + ), + ) + .ucFirst() + .value()} + + +
+
+ {option.buttons.map((currentOption) => ( + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${currentOption.tooltip}`, + ), + ) + .ucFirst() + .value()} + + + ))} +
+
+ ))} + {/* FILTRES - Collapsible */} + + + + + +
+ {imageFilterOptions.map((option) => ( +
+ + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${option.tooltip}`, + ), + ) + .ucFirst() + .value()} + + +
+ ))} +
+
+
+ {/* Others actions */} +
+ {otherOptions.map((option) => { + return ( + + + + + + {str( + GetTranslation( + `uwil-backend::back.image_cropper.filters.${option.tooltip}`, + ), + ) + .ucFirst() + .value()} + + + ); + })} +
+
+ + + + + + + + {str( + useTrans( + "uwil-backend::back.image_cropper.action_the_crop", + { + params: { + action: str(useTrans("uwil-backend::back.cancel")) + .ucFirst() + .value(), + }, + }, + ), + ) + .ucFirst() + .value()} + + + + + + + + + {str( + useTrans( + "uwil-backend::back.image_cropper.action_the_crop", + { + params: { + action: str(useTrans("uwil-backend::back.validate")) + .ucFirst() + .value(), + }, + }, + ), + ) + .ucFirst() + .value()} + + + +
+
+
+
+ ); +} diff --git a/resources/ts/back/Components/Inputs/ModelSelect.tsx b/resources/ts/back/Components/Inputs/ModelSelect.tsx new file mode 100644 index 0000000..0712bd3 --- /dev/null +++ b/resources/ts/back/Components/Inputs/ModelSelect.tsx @@ -0,0 +1,1676 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { + ButtonHTMLAttributes, + CSSProperties, + forwardRef, + KeyboardEvent, + ReactNode, + useCallback, + useEffect, + useId, + useImperativeHandle, + useRef, + useState, +} from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { + CheckIcon, + XCircleIcon, + XIcon, + WandSparklesIcon, + SearchIcon, + ChevronsUpDownIcon, + ChevronLeftIcon, + ChevronRightIcon, +} from "lucide-react"; +import axios, { isAxiosError } from "axios"; +import { route } from "ziggy-js"; +// * Components shadcn +import { Separator } from "@/components/ui/separator"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandItem, + CommandList, +} from "@/components/ui/command"; +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +import { Skeleton } from "@/components/ui/skeleton"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import str from "@/hooks/use-string"; +import { cn, GetTranslation } from "@/lib/utils"; +import { AppEnv } from "@/types/global"; +import { DefaultModel, Paginator } from "@/back/types/global"; + +/** + * Animation types and configurations + */ +export interface AnimationConfig { + /** Badge animation type */ + badgeAnimation?: "bounce" | "pulse" | "wiggle" | "fade" | "slide" | "none"; + /** Popover animation type */ + popoverAnimation?: "scale" | "slide" | "fade" | "flip" | "none"; + /** Option hover animation type */ + optionHoverAnimation?: "highlight" | "scale" | "glow" | "none"; + /** Animation duration in seconds */ + duration?: number; + /** Animation delay in seconds */ + delay?: number; +} + +/** + * Variants for the multi-select component to handle different styles. + * Uses class-variance-authority (cva) to define different styles based on "variant" prop. + */ +const modelSelectVariants = cva("transition-all duration-300 ease-in-out", { + variants: { + variant: { + default: "border-foreground/10 text-foreground bg-card hover:bg-card/80", + ghost: "border-none text-foreground bg-background", + secondary: + "border-foreground/10 bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + inverted: "inverted", + }, + badgeAnimation: { + bounce: "hover:-translate-y-1 hover:scale-110", + pulse: "hover:animate-pulse", + wiggle: "hover:animate-wiggle", + fade: "hover:opacity-80", + slide: "hover:translate-x-1", + none: "", + }, + }, + defaultVariants: { + variant: "default", + badgeAnimation: "none", + }, +}); + +/** + * Props for MultiSelect component + */ +interface ModelSelectProps + extends + Omit, "animationConfig">, + VariantProps { + /** + * Callback function triggered when the selected values change. + * Receives an array of the new selected values. + */ + // eslint-disable-next-line no-unused-vars + onValueChange?: (value: number[]) => void; + + /** + * Callback function triggered when the selected values change. + * Receives a single or array of selected Model(s). + */ + // eslint-disable-next-line no-unused-vars + onModelChange?: (value: DefaultModel[]) => void; + + /** The default selected values when the component mounts. */ + defaultValues?: number[]; + + /** + * Placeholder text to be displayed when no values are selected. + * Optional, defaults to "Select options". + */ + placeholder?: string; + + /** + * Animation duration in seconds for the visual effects (e.g., bouncing badges). + * Optional, defaults to 0 (no animation). + */ + animation?: number; + + /** + * Advanced animation configuration for different component parts. + * Optional, allows fine-tuning of various animation effects. + */ + animationConfig?: AnimationConfig; + + /** + * Maximum number of items to display. Extra selected items will be summarized. + * Optional, defaults to 3. + */ + maxCount?: number; + + /** + * The modality of the popover. When set to true, interaction with outside elements + * will be disabled and only popover content will be visible to screen readers. + * Optional, defaults to false. + */ + modalPopover?: boolean; + + /** + * If true, renders the multi-select component as a child of another component. + * Optional, defaults to false. + */ + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild?: boolean; + + /** + * Additional class names to apply custom styles to the multi-select component. + * Optional, can be used to add custom styles. + */ + className?: string; + + /** + * If true, disables the select all functionality. + * Optional, defaults to false. + */ + hideSelectAll?: boolean; + + /** + * If true, shows search functionality in the popover. + * If false, hides the search input completely. + * Optional, defaults to true. + */ + searchable?: boolean; + + /** + * Custom empty state message when no options match search. + * Optional, defaults to "No results found." + */ + emptyIndicator?: ReactNode; + + /** + * If true, allows the component to grow and shrink with its content. + * If false, uses fixed width behavior. + * Optional, defaults to false. + */ + autoSize?: boolean; + + /** + * If true, shows badges in a single line with horizontal scroll. + * If false, badges wrap to multiple lines. + * Optional, defaults to false. + */ + singleLine?: boolean; + + /** + * Custom CSS class for the popover content. + * Optional, can be used to customize popover appearance. + */ + popoverClassName?: string; + + /** + * If true, disables the component completely. + * Optional, defaults to false. + */ + disabled?: boolean; + + /** + * Responsive configuration for different screen sizes. + * Allows customizing maxCount and other properties based on viewport. + * Can be boolean true for default responsive behavior or an object for custom configuration. + */ + responsive?: + | boolean + | { + /** Configuration for mobile devices (< 640px) */ + mobile?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for tablet devices (640px - 1024px) */ + tablet?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for desktop devices (> 1024px) */ + desktop?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + }; + + /** + * Minimum width for the component. + * Optional, defaults to auto-sizing based on content. + * When set, component will not shrink below this width. + */ + minWidth?: string; + + /** + * Maximum width for the component. + * Optional, defaults to 100% of container. + * Component will not exceed container boundaries. + */ + maxWidth?: string; + + /** + * If true, automatically removes duplicate options based on their value. + * Optional, defaults to false (shows warning in dev mode instead). + */ + deduplicateOptions?: boolean; + + /** + * If true, the component will reset its internal state when defaultValue changes. + * Useful for React Hook Form integration and form reset functionality. + * Optional, defaults to true. + */ + resetOnDefaultValueChange?: boolean; + + /** + * If true, automatically closes the popover after selecting an option. + * Useful for single-selection-like behavior or mobile UX. + * Optional, defaults to false. + */ + closeOnSelect?: boolean; + + /** + * The name of the field to complete + */ + name: string; + + /** + * Label of the field + */ + label: ReactNode | string; + + /** + * Does the field required + */ + required?: boolean; + + /** + * The fonction to set the data in useForm inertia + */ + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: number[] | number | null) => void; + + /** + * Does the field is multiple ? If yes return will be array, if not it will be single value + */ + multiple?: boolean; + + /** + * Minimum number of selections required (only when multiple is true) + * Optional, defaults to undefined (no minimum) + */ + minSelection?: number; + + /** + * Maximum number of selections allowed (only when multiple is true) + * Optional, defaults to undefined (no maximum) + */ + maxSelection?: number; + + /** + * Helper for the input + * Optional, defaults to empty + */ + helper?: string; + + /** + * Make the Close button visible + * Optional, defaults to empty + */ + closeButtonVisible?: boolean; + + /** + * Model name + * Take the name of the model to fetch in the backend, using ajax function + */ + targetModel?: string; + + /** + * Field name used to find data in the option of the models(optional) + */ + field?: string; + + /** Exclude id in the model options (optionnal) */ + exclude?: number | null; + + parentErrors?: Record | null; +} + +/** + * Imperative methods exposed through ref + */ +export interface ModelSelectRef { + /** + * Programmatically reset the component to its default value + */ + reset: () => void; + /** + * Get current selected values + */ + getSelectedValues: () => number[]; + /** + * Set selected values programmatically + */ + // eslint-disable-next-line no-unused-vars + setSelectedValues: (values: number[]) => void; + /** + * Clear all selected values + */ + clear: () => void; + /** + * Focus the component + */ + focus: () => void; +} + +export const ModelSelect = forwardRef( + ( + { + name, + label, + required = true, + setData, + multiple = true, + minSelection, + maxSelection, + helper, + onValueChange, + onModelChange, + variant, + defaultValues = [], + placeholder = "Select options", + animation = 0, + animationConfig, + maxCount = 3, + modalPopover = false, + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild = false, + className, + hideSelectAll = false, + searchable = true, + emptyIndicator, + autoSize = false, + singleLine = false, + popoverClassName, + disabled = false, + responsive, + minWidth, + maxWidth, + deduplicateOptions = false, + resetOnDefaultValueChange = true, + closeOnSelect = false, + closeButtonVisible = false, + targetModel, + field, + exclude = null, + parentErrors = null, + ...props + }, + ref, + ) => { + const [selectedValues, setSelectedValues] = + useState(defaultValues); + + const [selectedModels, setSelectedModels] = useState([]); + + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const [isAnimating, setIsAnimating] = useState(false); + const [searchValue, setSearchValue] = useState(""); + + const [politeMessage, setPoliteMessage] = useState(""); + const [assertiveMessage, setAssertiveMessage] = useState(""); + const prevSelectedCount = useRef(selectedValues.length); + const prevIsOpen = useRef(isPopoverOpen); + const prevSearchValue = useRef(searchValue); + + const { errors } = usePage().props; + const [errorAjax, setErrorsAjax] = useState | null>( + null, + ); + + const localErrors = parentErrors ?? errors; + + // Pagination. + const [page, setPage] = useState(1); + const [pageSize] = useState(5); + const [lastPage, setLastPage] = useState(1); + + // Search identification. + const requestIdRef = useRef(0); + + const [loading, setLoading] = useState(false); + const [initialLoading, setInitialLoading] = useState(true); + const [options, setOptions] = useState([]); + const [optionsMerged, setOptionsMerged] = useState([]); + // Custom by field parameter or predefined values (title, name or label). + const [dynamicField, setDynamicField] = useState( + field ?? null, + ); + + const { locale } = usePage().props.appEnv as AppEnv; + + /** + * Set call ajax. + * @param pageNumber number + * @return + */ + const fetchOptions = async (pageNumber: number) => { + const csrfToken = + document + .querySelector('meta[name="csrf-token"]') + ?.getAttribute("content") || ""; + + const response = await axios.post( + route("back.model.list"), + { + model: targetModel, + selectedIds: selectedValues, + search: searchValue, + field: dynamicField, + page: pageNumber, + pageSize, + exclude, + }, + { + headers: { + "Content-Type": "application/json", + Accept: "application/json", + "X-Requested-With": "XMLHttpRequest", + "X-Inertia": "false", + "X-CSRF-TOKEN": csrfToken, + }, + }, + ); + return response.data; + }; + + /** + * Get new options list with his target field. + * @param pageNumber number + * @return void + */ + const getData = async (pageNumber = 1) => { + // Increment search id. + requestIdRef.current += 1; + const requestId = requestIdRef.current; + setLoading(true); + try { + const data = (await fetchOptions(pageNumber)) as { + items: Paginator; + field: string; + model: DefaultModel[]; + }; + // Ignore obsolete answers. + if (requestId !== requestIdRef.current) return; + const dataModel: DefaultModel[] = data.model + ? Object.values(data.model) + : []; + const dataItems: DefaultModel[] = Array.isArray(data?.items?.data) + ? data.items.data + : []; + setOptionsMerged(() => { + const merged = [...dataModel, ...dataItems] + // Supprime les éléments undefined ou sans id + .filter( + (item): item is DefaultModel => !!item && item.id !== undefined, + ) + // Supprime les doublons par id + .filter( + (item, index, self) => + index === self.findIndex((i) => i.id === item.id), + ); + return merged; + }); + setSelectedModels(dataModel); + setDynamicField(data.field); + setOptions(data.items.data ?? []); + setPage(data.items.current_page); + setLastPage(data.items.last_page ?? 1); + } catch (err: unknown) { + // Ignore obsolete errors. + if (requestId !== requestIdRef.current) return; + console.error(err); + if (isAxiosError(err) && err.response?.data?.errors) { + setErrorsAjax(err.response?.data?.errors); + } + + setOptions([]); + setLastPage(1); + } finally { + // Only the last call can stop the loading. + if (requestId === requestIdRef.current) { + setLoading(false); + } + setInitialLoading(false); + } + }; + + /** + * Get specific page. + * @param pageNumber number + * @return void + */ + const goToPage = async (pageNumber: number) => { + if (pageNumber < 1 || pageNumber > lastPage) return; + await getData(pageNumber); + }; + + useEffect(() => { + if (disabled) { + return undefined; + } + + // Reset options list if empty search or null + if (targetModel && searchValue.length === 0) { + getData(); + return undefined; + } + + // Nothing to do if search is below 3 caracters. + if (searchValue.length < 3) return undefined; + + // Get updated options list with search. + const handler = setTimeout(() => getData(), 300); + + function cleanup(): void { + if (handler) { + clearTimeout(handler); + } + } + + return cleanup; + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [searchValue, targetModel]); + + const announce = useCallback( + (message: string, priority: "polite" | "assertive" = "polite") => { + if (priority === "assertive") { + setAssertiveMessage(message); + setTimeout(() => setAssertiveMessage(""), 100); + } else { + setPoliteMessage(message); + setTimeout(() => setPoliteMessage(""), 100); + } + }, + [], + ); + + const multiSelectId = useId(); + const listboxId = `${multiSelectId}-listbox`; + const triggerDescriptionId = `${multiSelectId}-description`; + const selectedCountId = `${multiSelectId}-count`; + + // Translations. + const transDelete = GetTranslation("uwil-backend::crud.actions.delete"); + const transClose = GetTranslation("uwil-backend::back.close"); + const transClear = GetTranslation("uwil-backend::back.clear"); + const transNoResults = GetTranslation( + "uwil-backend::back.table_no_results", + ); + const transSearchOptions = GetTranslation( + "uwil-backend::back.multi_select.search_options", + ); + const transSelectAll = GetTranslation( + "uwil-backend::back.multi_select.select_all", + ); + const transMore = GetTranslation("uwil-backend::back.multi_select.more"); + const transClosePopover = GetTranslation( + "uwil-backend::back.multi_select.close_popover", + ); + const transClearList = GetTranslation( + "uwil-backend::back.multi_select.clear_list", + ); + + const prevDefaultValueRef = useRef(defaultValues); + + const arraysEqual = useCallback((a: number[], b: number[]): boolean => { + if (a.length !== b.length) return false; + const sortedA = [...a].sort(); + const sortedB = [...b].sort(); + return sortedA.every((val, index) => val === sortedB[index]); + }, []); + + const resetToDefault = useCallback(() => { + setSelectedValues(defaultValues); + setIsPopoverOpen(false); + setSearchValue(""); + if (onValueChange) { + onValueChange(defaultValues); + } + setData(name, multiple ? defaultValues : defaultValues[0]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [defaultValues, onValueChange]); + + const buttonRef = useRef(null); + + useImperativeHandle( + ref, + () => ({ + reset: resetToDefault, + getSelectedValues: () => selectedValues, + setSelectedValues: (values: number[]) => { + setSelectedValues(values); + if (onValueChange) { + onValueChange(values); + } + setData(name, multiple ? values : values[0]); + }, + clear: () => { + setSelectedValues([]); + if (onValueChange) { + onValueChange([]); + } + setData(name, multiple ? [] : null); + }, + focus: () => { + if (buttonRef.current) { + buttonRef.current.focus(); + const originalOutline = buttonRef.current.style.outline; + const originalOutlineOffset = buttonRef.current.style.outlineOffset; + buttonRef.current.style.outline = "2px solid hsl(var(--ring))"; + buttonRef.current.style.outlineOffset = "2px"; + setTimeout(() => { + if (buttonRef.current) { + buttonRef.current.style.outline = originalOutline; + buttonRef.current.style.outlineOffset = originalOutlineOffset; + } + }, 1000); + } + }, + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [resetToDefault, selectedValues, onValueChange], + ); + + const [screenSize, setScreenSize] = useState< + "mobile" | "tablet" | "desktop" + >("desktop"); + + useEffect(() => { + if (typeof window === "undefined") return undefined; + const handleResize = () => { + const width = window.innerWidth; + if (width < 640) { + setScreenSize("mobile"); + } else if (width < 1024) { + setScreenSize("tablet"); + } else { + setScreenSize("desktop"); + } + }; + handleResize(); + window.addEventListener("resize", handleResize); + return () => { + if (typeof window !== "undefined") { + window.removeEventListener("resize", handleResize); + } + }; + }, []); + + const getResponsiveSettings = () => { + if (!responsive) { + return { + maxCount, + hideIcons: false, + compactMode: false, + }; + } + if (responsive === true) { + const defaultResponsive = { + mobile: { + maxCount: 2, + hideIcons: false, + compactMode: true, + }, + tablet: { + maxCount: 4, + hideIcons: false, + compactMode: false, + }, + desktop: { + maxCount: 6, + hideIcons: false, + compactMode: false, + }, + }; + const currentSettings = defaultResponsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + } + const currentSettings = responsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + }; + + const responsiveSettings = getResponsiveSettings(); + + const getBadgeAnimationClass = () => { + if (animationConfig?.badgeAnimation) { + switch (animationConfig.badgeAnimation) { + case "bounce": + return isAnimating + ? "animate-bounce" + : "hover:-translate-y-1 hover:scale-110"; + case "pulse": + return "hover:animate-pulse"; + case "wiggle": + return "hover:animate-wiggle"; + case "fade": + return "hover:opacity-80"; + case "slide": + return "hover:translate-x-1"; + case "none": + return ""; + default: + return ""; + } + } + return isAnimating ? "animate-bounce" : ""; + }; + + const getPopoverAnimationClass = () => { + if (animationConfig?.popoverAnimation) { + switch (animationConfig.popoverAnimation) { + case "scale": + return "animate-scaleIn"; + case "slide": + return "animate-slideInDown"; + case "fade": + return "animate-fadeIn"; + case "flip": + return "animate-flipIn"; + case "none": + return ""; + default: + return ""; + } + } + return ""; + }; + + const getAllOptions = useCallback((): DefaultModel[] => { + if (optionsMerged.length === 0) return []; + const allOptions: DefaultModel[] = optionsMerged; + const valueSet = new Set(); + const duplicates: string[] = []; + const uniqueOptions: DefaultModel[] = []; + allOptions.forEach((option) => { + if (valueSet.has(option.id.toString())) { + duplicates.push(option.id.toString()); + if (!deduplicateOptions) { + uniqueOptions.push(option); + } + } else { + valueSet.add(option.id.toString()); + uniqueOptions.push(option); + } + }); + if (process.env.NODE_ENV === "development" && duplicates.length > 0) { + const action = deduplicateOptions + ? "automatically removed" + : "detected"; + console.warn( + `MultiSelect: Duplicate option values ${action}: ${duplicates.join( + ", ", + )}. ` + + `${ + deduplicateOptions + ? "Duplicates have been removed automatically." + : "This may cause unexpected behavior. Consider setting 'deduplicateOptions={true}' or ensure all option values are unique." + }`, + ); + } + return deduplicateOptions ? uniqueOptions : allOptions; + }, [optionsMerged, deduplicateOptions]); + + const getOptionByValue = useCallback( + (id: number): DefaultModel | undefined => { + const option = getAllOptions().find((opt) => opt.id === id); + if (!option && process.env.NODE_ENV === "development") { + console.warn( + `MultiSelect: Option with value "${id}" not found in options list`, + ); + } + return option; + }, + [getAllOptions], + ); + + const handleInputKeyDown = (event: KeyboardEvent) => { + if (event.key === "Enter") { + setIsPopoverOpen(true); + } else if (event.key === "Backspace" && !event.currentTarget.value) { + const newSelectedValues = [...selectedValues]; + const newSelectedModels = [...selectedModels]; + newSelectedValues.pop(); + newSelectedModels.pop(); + setSelectedValues(newSelectedValues); + setSelectedModels(newSelectedModels); + if (onValueChange) { + onValueChange(newSelectedValues); + } + if (onModelChange) { + onModelChange(newSelectedModels); + } + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + } + }; + + const toggleOption = (option: DefaultModel) => { + if (disabled) return; + // MODE SINGLE SELECT + if (!multiple) { + const newSelectedValues = selectedValues.includes(option.id) + ? [] + : [option.id]; + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = selectedModels?.includes(option) + ? [] + : [option]; + setSelectedModels(newSelectedModels); + if (onModelChange) { + onModelChange(newSelectedModels); + } + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + if (closeOnSelect) { + setIsPopoverOpen(false); + } + return; + } + + // MODE MULTIPLE SELECT + const isCurrentlySelected = selectedValues.includes(option.id); + + if (isCurrentlySelected) { + if (minSelection && selectedValues.length <= minSelection) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + const newSelectedValues = selectedValues.filter( + (value) => value !== option.id, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = selectedModels?.filter( + (value) => value.id !== option.id, + ); + if (onModelChange) { + onModelChange(newSelectedModels ?? []); + } + setSelectedModels(newSelectedModels); + + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + } else { + if (maxSelection && selectedValues.length >= maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + const newSelectedValues = [...selectedValues, option.id]; + + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = [...(selectedModels || []), option]; + if (onModelChange) { + onModelChange(newSelectedModels); + } + setSelectedModels(newSelectedModels); + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + } + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + const handleClear = () => { + if (disabled) return; + if (multiple && minSelection && minSelection > 0) { + announce(`Minimum ${minSelection} selection(s) required`, "assertive"); + return; + } + setSelectedValues([]); + + if (onValueChange) { + onValueChange([]); + } + setSelectedModels([]); + if (onModelChange) { + onModelChange([]); + } + setData(name, multiple ? [] : null); + }; + + const handleTogglePopover = () => { + if (disabled) return; + setIsPopoverOpen((prev) => !prev); + }; + + const clearExtraOptions = () => { + if (disabled) return; + const newSelectedValues = selectedValues.slice( + 0, + responsiveSettings.maxCount, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + const newSelectedModels = selectedModels.slice( + 0, + responsiveSettings.maxCount, + ); + setSelectedModels(newSelectedModels); + if (onModelChange) { + onModelChange(newSelectedModels); + } + setData(name, multiple ? newSelectedValues : newSelectedValues[0]); + }; + + const toggleAll = () => { + if (disabled || !multiple) return; + const allOptions = getAllOptions(); + + if (selectedValues.length === allOptions.length) { + if (minSelection && minSelection > 0) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + handleClear(); + } else { + const allValues = allOptions.map((option) => option.id); + if (maxSelection && allValues.length > maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + setSelectedValues(allValues); + if (onValueChange) { + onValueChange(allValues); + } + setSelectedModels(allOptions); + if (onModelChange) { + onModelChange(allOptions); + } + setData(name, multiple ? allValues : allValues[0]); + } + + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + useEffect(() => { + if (!resetOnDefaultValueChange) return; + const prevDefaultValue = prevDefaultValueRef.current; + if (!arraysEqual(prevDefaultValue, defaultValues)) { + if (!arraysEqual(selectedValues, defaultValues)) { + setSelectedValues(defaultValues); + } + prevDefaultValueRef.current = [...defaultValues]; + } + }, [defaultValues, selectedValues, arraysEqual, resetOnDefaultValueChange]); + + const getWidthConstraints = () => { + const defaultMinWidth = screenSize === "mobile" ? "0px" : "200px"; + const effectiveMinWidth = minWidth || defaultMinWidth; + const effectiveMaxWidth = maxWidth || "100%"; + return { + minWidth: effectiveMinWidth, + maxWidth: effectiveMaxWidth, + width: autoSize ? "auto" : "100%", + }; + }; + + const widthConstraints = getWidthConstraints(); + + useEffect(() => { + if (!isPopoverOpen) { + setSearchValue(""); + } + }, [isPopoverOpen]); + + useEffect( + () => { + const selectedCount = selectedValues.length; + const allOptions = getAllOptions(); + const totalOptions = allOptions.length; + if (selectedCount !== prevSelectedCount.current) { + const diff = selectedCount - prevSelectedCount.current; + if (diff > 0) { + const addedItems = selectedValues.slice(-diff); + const addedLabels = addedItems + .map( + (value) => + allOptions.find((opt) => opt.id === value)?.[ + dynamicField as keyof DefaultModel + ], + ) + .filter(Boolean); + + if (addedLabels.length === 1) { + announce( + `${addedLabels[0]} selected. ${selectedCount} of ${totalOptions} options selected.`, + ); + } else { + announce( + `${addedLabels.length} options selected. ${selectedCount} of ${totalOptions} total selected.`, + ); + } + } else if (diff < 0) { + announce( + `Option removed. ${selectedCount} of ${totalOptions} options selected.`, + ); + } + prevSelectedCount.current = selectedCount; + } + + if (isPopoverOpen !== prevIsOpen.current) { + if (isPopoverOpen) { + announce( + `Dropdown opened. ${totalOptions} options available. Use arrow keys to navigate.`, + ); + } else { + announce("Dropdown closed."); + } + prevIsOpen.current = isPopoverOpen; + } + + if ( + searchValue !== prevSearchValue.current && + searchValue !== undefined + ) { + if (searchValue && isPopoverOpen) { + const filteredCount = allOptions.length; + + announce( + `${filteredCount} option${ + filteredCount === 1 ? "" : "s" + } found for "${searchValue}"`, + ); + } + prevSearchValue.current = searchValue; + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [selectedValues, isPopoverOpen, searchValue, announce, getAllOptions], + ); + + useEffect(() => { + if ( + minSelection !== undefined && + maxSelection !== undefined && + minSelection > maxSelection + ) { + console.error( + "MultiSelect: minSelection cannot be greater than maxSelection", + ); + } + if ( + !multiple && + (minSelection !== undefined || maxSelection !== undefined) + ) { + console.warn( + "MultiSelect: minSelection and maxSelection are ignored when multiple is false", + ); + } + if (minSelection !== undefined && minSelection < 0) { + console.error("MultiSelect: minSelection cannot be negative"); + } + if (maxSelection !== undefined && maxSelection < 1) { + console.error("MultiSelect: maxSelection must be at least 1"); + } + }, [minSelection, maxSelection, multiple]); + + const getModelField = (option: DefaultModel): string => { + const value = option[dynamicField as keyof DefaultModel] as unknown as + | Record + | string; + if (typeof value === "object") return String(value[locale] ?? ""); + return String(value ?? ""); + }; + + const buttonProps = { + ...props, + options: options + .map((option) => getModelField(option)) + .filter(Boolean) + .join(", "), + }; + + return ( +
+
+
+ {politeMessage} +
+
+ {assertiveMessage} +
+
+ + +
+ Multi-select dropdown. Use arrow keys to navigate, Enter to select, + and Escape to close. +
+
+ {selectedValues.length === 0 + ? "No options selected" + : `${selectedValues.length} option${ + selectedValues.length === 1 ? "" : "s" + } selected: ${selectedValues + .map((value) => { + const option = getOptionByValue(value); + if (!option) return undefined; + return getModelField(option); + }) + .filter(Boolean) + .join(", ")}`} +
+ + + )} + +
+ + ))} + + + setIsPopoverOpen(false)} + > + + {searchable && ( +
+
+ +
+ setSearchValue(e.target.value)} + onKeyDown={handleInputKeyDown} + className="w-[calc(100%-2.5rem-40px)] border-0 mx-9" + /> + } + tooltipContent={

{str(transDelete).ucFirst().value()}

} + type="button" + variant="ghost" + size="icon" + className="absolute top-1/2 right-0 transform -translate-y-1/2 text-muted-foreground" + onClick={() => setSearchValue("")} + disabled={searchValue.length < 1 || disabled} + /> +
+ )} + {searchable && ( +
+ Type to filter options. Use arrow keys to navigate results. +
+ )} + + {!loading && !initialLoading && ( + + {emptyIndicator || transNoResults} + + )} + {/* First option for select all items */} + {!hideSelectAll && !searchValue && multiple && ( + + + + + ({str(transSelectAll).ucFirst().value()} + {getAllOptions().length > 20 + ? ` - ${getAllOptions().length} options` + : ""} + ) + + + + )} + {/* List of items */} + + {loading + ? [...Array(pageSize)].map(() => ( + + )) + : options.map((option) => { + const isSelected = selectedValues.includes(option.id); + return ( + { + toggleOption(option); + }} + role="option" + aria-selected={isSelected} + aria-label={`${getModelField(option)}${ + isSelected ? ", selected" : ", not selected" + } + `} + className={cn( + "cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10", + )} + > + + {getModelField(option)} + + ); + })} + + + + {/* Pagination boutons */} + {options.length > 0 && lastPage !== 1 && ( +
+ + + {GetTranslation("uwil-backend::pagination.previous")} + + } + tooltipContent={ +

+ {GetTranslation( + "uwil-backend::pagination.specific_page", + { + params: { + id: String(page - 1), + }, + }, + )} +

+ } + type="button" + variant="ghost" + size="sm" + onClick={() => goToPage(page - 1)} + disabled={page <= 1 || loading} + /> + {loading ? ( + + ) : ( +
+

+ {page}/{lastPage} +

+
+ )} + + {GetTranslation("uwil-backend::pagination.next")} + + + } + tooltipContent={ +

+ {GetTranslation( + "uwil-backend::pagination.specific_page", + { + params: { + id: String(page + 1), + }, + }, + )} +

+ } + type="button" + variant="ghost" + size="sm" + onClick={() => goToPage(page + 1)} + disabled={page >= lastPage || loading} + /> +
+ )} + + {(closeButtonVisible || selectedValues.length > 0) && ( + +
+ {selectedValues.length > 0 && ( + {str(transClearList).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="sm" + onClick={handleClear} + disabled={disabled} + /> + )} + {closeButtonVisible && selectedValues.length > 0 && ( + + )} + {closeButtonVisible && ( + {str(transClosePopover).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="sm" + onClick={() => setIsPopoverOpen(false)} + disabled={disabled} + /> + )} +
+
+ )} +
+
+ {animation > 0 && selectedValues.length > 0 && ( + setIsAnimating(!isAnimating)} + /> + )} + + {helper && {helper}} + + + ); + }, +); + +ModelSelect.displayName = "ModelSelect"; +export type { ModelSelectProps }; diff --git a/resources/ts/back/Components/Inputs/MultiSelect.tsx b/resources/ts/back/Components/Inputs/MultiSelect.tsx new file mode 100644 index 0000000..9af188c --- /dev/null +++ b/resources/ts/back/Components/Inputs/MultiSelect.tsx @@ -0,0 +1,1487 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { + ButtonHTMLAttributes, + ComponentType, + CSSProperties, + forwardRef, + KeyboardEvent, + ReactNode, + useCallback, + useEffect, + useId, + useImperativeHandle, + useMemo, + useRef, + useState, +} from "react"; +import { cva, type VariantProps } from "class-variance-authority"; +import { + CheckIcon, + XCircleIcon, + XIcon, + WandSparklesIcon, + SearchIcon, + ChevronsUpDownIcon, +} from "lucide-react"; +// * Components shadcn +import { Separator } from "@/components/ui/separator"; +import { Button } from "@/components/ui/button"; +import { Badge } from "@/components/ui/badge"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { + Command, + CommandEmpty, + CommandGroup, + CommandItem, + CommandList, +} from "@/components/ui/command"; +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { cn } from "@/lib/utils"; + +/** + * Animation types and configurations + */ +export interface AnimationConfig { + /** Badge animation type */ + badgeAnimation?: "bounce" | "pulse" | "wiggle" | "fade" | "slide" | "none"; + /** Popover animation type */ + popoverAnimation?: "scale" | "slide" | "fade" | "flip" | "none"; + /** Option hover animation type */ + optionHoverAnimation?: "highlight" | "scale" | "glow" | "none"; + /** Animation duration in seconds */ + duration?: number; + /** Animation delay in seconds */ + delay?: number; +} + +/** + * Variants for the multi-select component to handle different styles. + * Uses class-variance-authority (cva) to define different styles based on "variant" prop. + */ +const multiSelectVariants = cva("transition-all duration-300 ease-in-out", { + variants: { + variant: { + default: "border-foreground/10 text-foreground bg-card hover:bg-card/80", + secondary: + "border-foreground/10 bg-secondary text-secondary-foreground hover:bg-secondary/80", + destructive: + "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80", + inverted: "inverted", + }, + badgeAnimation: { + bounce: "hover:-translate-y-1 hover:scale-110", + pulse: "hover:animate-pulse", + wiggle: "hover:animate-wiggle", + fade: "hover:opacity-80", + slide: "hover:translate-x-1", + none: "", + }, + }, + defaultVariants: { + variant: "default", + badgeAnimation: "none", + }, +}); + +/** + * Option interface for MultiSelect component + */ +export interface MultiSelectOption { + /** The text to display for the option. */ + label: string; + /** The unique value associated with the option. */ + value: string; + /** Optional icon component to display alongside the option. */ + icon?: ComponentType<{ className?: string }>; + /** Whether this option is disabled */ + disabled?: boolean; + /** Custom styling for the option */ + style?: { + /** Custom badge color */ + badgeColor?: string; + /** Custom icon color */ + iconColor?: string; + /** Gradient background for badge */ + gradient?: string; + }; +} + +/** + * Group interface for organizing options + */ +interface MultiSelectGroup { + /** Group heading */ + heading: string; + /** Options in this group */ + options: MultiSelectOption[]; +} + +/** + * Props for MultiSelect component + */ +interface MultiSelectProps + extends + Omit, "animationConfig">, + VariantProps { + /** + * An array of option objects or groups to be displayed in the multi-select component. + */ + options: MultiSelectOption[] | MultiSelectGroup[]; + /** + * Callback function triggered when the selected values change. + * Receives an array of the new selected values. + */ + // eslint-disable-next-line no-unused-vars + onValueChange?: (value: string[]) => void; + + /** The default selected values when the component mounts. */ + defaultValue?: string[]; + + /** + * Placeholder text to be displayed when no values are selected. + * Optional, defaults to "Select options". + */ + placeholder?: string; + + /** + * Animation duration in seconds for the visual effects (e.g., bouncing badges). + * Optional, defaults to 0 (no animation). + */ + animation?: number; + + /** + * Advanced animation configuration for different component parts. + * Optional, allows fine-tuning of various animation effects. + */ + animationConfig?: AnimationConfig; + + /** + * Maximum number of items to display. Extra selected items will be summarized. + * Optional, defaults to 3. + */ + maxCount?: number; + + /** + * The modality of the popover. When set to true, interaction with outside elements + * will be disabled and only popover content will be visible to screen readers. + * Optional, defaults to false. + */ + modalPopover?: boolean; + + /** + * If true, renders the multi-select component as a child of another component. + * Optional, defaults to false. + */ + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild?: boolean; + + /** + * Additional class names to apply custom styles to the multi-select component. + * Optional, can be used to add custom styles. + */ + className?: string; + + /** + * If true, disables the select all functionality. + * Optional, defaults to false. + */ + hideSelectAll?: boolean; + + /** + * If true, shows search functionality in the popover. + * If false, hides the search input completely. + * Optional, defaults to true. + */ + searchable?: boolean; + + /** + * Custom empty state message when no options match search. + * Optional, defaults to "No results found." + */ + emptyIndicator?: ReactNode; + + /** + * If true, allows the component to grow and shrink with its content. + * If false, uses fixed width behavior. + * Optional, defaults to false. + */ + autoSize?: boolean; + + /** + * If true, shows badges in a single line with horizontal scroll. + * If false, badges wrap to multiple lines. + * Optional, defaults to false. + */ + singleLine?: boolean; + + /** + * Custom CSS class for the popover content. + * Optional, can be used to customize popover appearance. + */ + popoverClassName?: string; + + /** + * If true, disables the component completely. + * Optional, defaults to false. + */ + disabled?: boolean; + + /** + * Responsive configuration for different screen sizes. + * Allows customizing maxCount and other properties based on viewport. + * Can be boolean true for default responsive behavior or an object for custom configuration. + */ + responsive?: + | boolean + | { + /** Configuration for mobile devices (< 640px) */ + mobile?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for tablet devices (640px - 1024px) */ + tablet?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + /** Configuration for desktop devices (> 1024px) */ + desktop?: { + maxCount?: number; + hideIcons?: boolean; + compactMode?: boolean; + }; + }; + + /** + * Minimum width for the component. + * Optional, defaults to auto-sizing based on content. + * When set, component will not shrink below this width. + */ + minWidth?: string; + + /** + * Maximum width for the component. + * Optional, defaults to 100% of container. + * Component will not exceed container boundaries. + */ + maxWidth?: string; + + /** + * If true, automatically removes duplicate options based on their value. + * Optional, defaults to false (shows warning in dev mode instead). + */ + deduplicateOptions?: boolean; + + /** + * If true, the component will reset its internal state when defaultValue changes. + * Useful for React Hook Form integration and form reset functionality. + * Optional, defaults to true. + */ + resetOnDefaultValueChange?: boolean; + + /** + * If true, automatically closes the popover after selecting an option. + * Useful for single-selection-like behavior or mobile UX. + * Optional, defaults to false. + */ + closeOnSelect?: boolean; + + /** + * The name of the field to complete + */ + name: string; + + /** + * Label of the field + */ + label: ReactNode | string; + + /** + * Does the field required + */ + required?: boolean; + + /** + * The fonction to set the data in useForm inertia + */ + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string[]) => void; + + /** + * Does the field required + */ + multiple?: boolean; + + /** + * Minimum number of selections required (only when multiple is true) + * Optional, defaults to undefined (no minimum) + */ + minSelection?: number; + + /** + * Maximum number of selections allowed (only when multiple is true) + * Optional, defaults to undefined (no maximum) + */ + maxSelection?: number; + + /** + * Helper for the input + * Optional, defaults to empty + */ + helper?: string; + + /** + * Make the Close button visible + * Optional, defaults to empty + */ + closeButtonVisible?: boolean; +} + +/** + * Imperative methods exposed through ref + */ +export interface MultiSelectRef { + /** + * Programmatically reset the component to its default value + */ + reset: () => void; + /** + * Get current selected values + */ + getSelectedValues: () => string[]; + /** + * Set selected values programmatically + */ + // eslint-disable-next-line no-unused-vars + setSelectedValues: (values: string[]) => void; + /** + * Clear all selected values + */ + clear: () => void; + /** + * Focus the component + */ + focus: () => void; +} + +export const MultiSelect = forwardRef( + ( + { + name, + label, + required = true, + setData, + multiple = true, + minSelection, + maxSelection, + helper, + options, + onValueChange, + variant, + defaultValue = [], + placeholder = "Select options", + animation = 0, + animationConfig, + maxCount = 3, + modalPopover = false, + // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars + asChild = false, + className, + hideSelectAll = false, + searchable = true, + emptyIndicator, + autoSize = false, + singleLine = false, + popoverClassName, + disabled = false, + responsive, + minWidth, + maxWidth, + deduplicateOptions = false, + resetOnDefaultValueChange = true, + closeOnSelect = false, + closeButtonVisible = false, + ...props + }, + ref, + ) => { + const [selectedValues, setSelectedValues] = + useState(defaultValue); + const [isPopoverOpen, setIsPopoverOpen] = useState(false); + const [isAnimating, setIsAnimating] = useState(false); + const [searchValue, setSearchValue] = useState(""); + + const [politeMessage, setPoliteMessage] = useState(""); + const [assertiveMessage, setAssertiveMessage] = useState(""); + const prevSelectedCount = useRef(selectedValues.length); + const prevIsOpen = useRef(isPopoverOpen); + const prevSearchValue = useRef(searchValue); + + const { errors } = usePage().props; + + const announce = useCallback( + (message: string, priority: "polite" | "assertive" = "polite") => { + if (priority === "assertive") { + setAssertiveMessage(message); + setTimeout(() => setAssertiveMessage(""), 100); + } else { + setPoliteMessage(message); + setTimeout(() => setPoliteMessage(""), 100); + } + }, + [], + ); + + const multiSelectId = useId(); + const listboxId = `${multiSelectId}-listbox`; + const triggerDescriptionId = `${multiSelectId}-description`; + const selectedCountId = `${multiSelectId}-count`; + + // Translations. + const transDelete = useTrans("uwil-backend::crud.actions.delete"); + const transClose = useTrans("uwil-backend::back.close"); + const transClear = useTrans("uwil-backend::back.clear"); + const transNoResults = useTrans("uwil-backend::back.table_no_results"); + const transSearchOptions = useTrans( + "uwil-backend::back.multi_select.search_options", + ); + const transSelectAll = useTrans( + "uwil-backend::back.multi_select.select_all", + ); + const transMore = useTrans("uwil-backend::back.multi_select.more"); + const transClosePopover = useTrans( + "uwil-backend::back.multi_select.close_popover", + ); + const transClearList = useTrans( + "uwil-backend::back.multi_select.clear_list", + ); + + const prevDefaultValueRef = useRef(defaultValue); + + const isGroupedOptions = useCallback( + ( + opts: MultiSelectOption[] | MultiSelectGroup[], + ): opts is MultiSelectGroup[] => { + return opts.length > 0 && "heading" in opts[0]; + }, + [], + ); + + const arraysEqual = useCallback((a: string[], b: string[]): boolean => { + if (a.length !== b.length) return false; + const sortedA = [...a].sort(); + const sortedB = [...b].sort(); + return sortedA.every((val, index) => val === sortedB[index]); + }, []); + + const resetToDefault = useCallback(() => { + setSelectedValues(defaultValue); + setIsPopoverOpen(false); + setSearchValue(""); + if (onValueChange) { + onValueChange(defaultValue); + } + setData(name, defaultValue); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [defaultValue, onValueChange]); + + const buttonRef = useRef(null); + + useImperativeHandle( + ref, + () => ({ + reset: resetToDefault, + getSelectedValues: () => selectedValues, + setSelectedValues: (values: string[]) => { + setSelectedValues(values); + if (onValueChange) { + onValueChange(values); + } + setData(name, values); + }, + clear: () => { + setSelectedValues([]); + if (onValueChange) { + onValueChange([]); + } + setData(name, []); + }, + focus: () => { + if (buttonRef.current) { + buttonRef.current.focus(); + const originalOutline = buttonRef.current.style.outline; + const originalOutlineOffset = buttonRef.current.style.outlineOffset; + buttonRef.current.style.outline = "2px solid hsl(var(--ring))"; + buttonRef.current.style.outlineOffset = "2px"; + setTimeout(() => { + if (buttonRef.current) { + buttonRef.current.style.outline = originalOutline; + buttonRef.current.style.outlineOffset = originalOutlineOffset; + } + }, 1000); + } + }, + }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [resetToDefault, selectedValues, onValueChange], + ); + + const [screenSize, setScreenSize] = useState< + "mobile" | "tablet" | "desktop" + >("desktop"); + + useEffect(() => { + if (typeof window === "undefined") return undefined; + const handleResize = () => { + const width = window.innerWidth; + if (width < 640) { + setScreenSize("mobile"); + } else if (width < 1024) { + setScreenSize("tablet"); + } else { + setScreenSize("desktop"); + } + }; + handleResize(); + window.addEventListener("resize", handleResize); + return () => { + if (typeof window !== "undefined") { + window.removeEventListener("resize", handleResize); + } + }; + }, []); + + const getResponsiveSettings = () => { + if (!responsive) { + return { + maxCount, + hideIcons: false, + compactMode: false, + }; + } + if (responsive === true) { + const defaultResponsive = { + mobile: { + maxCount: 2, + hideIcons: false, + compactMode: true, + }, + tablet: { + maxCount: 4, + hideIcons: false, + compactMode: false, + }, + desktop: { + maxCount: 6, + hideIcons: false, + compactMode: false, + }, + }; + const currentSettings = defaultResponsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + } + const currentSettings = responsive[screenSize]; + return { + maxCount: currentSettings?.maxCount ?? maxCount, + hideIcons: currentSettings?.hideIcons ?? false, + compactMode: currentSettings?.compactMode ?? false, + }; + }; + + const responsiveSettings = getResponsiveSettings(); + + const getBadgeAnimationClass = () => { + if (animationConfig?.badgeAnimation) { + switch (animationConfig.badgeAnimation) { + case "bounce": + return isAnimating + ? "animate-bounce" + : "hover:-translate-y-1 hover:scale-110"; + case "pulse": + return "hover:animate-pulse"; + case "wiggle": + return "hover:animate-wiggle"; + case "fade": + return "hover:opacity-80"; + case "slide": + return "hover:translate-x-1"; + case "none": + return ""; + default: + return ""; + } + } + return isAnimating ? "animate-bounce" : ""; + }; + + const getPopoverAnimationClass = () => { + if (animationConfig?.popoverAnimation) { + switch (animationConfig.popoverAnimation) { + case "scale": + return "animate-scaleIn"; + case "slide": + return "animate-slideInDown"; + case "fade": + return "animate-fadeIn"; + case "flip": + return "animate-flipIn"; + case "none": + return ""; + default: + return ""; + } + } + return ""; + }; + + const getAllOptions = useCallback((): MultiSelectOption[] => { + if (options.length === 0) return []; + let allOptions: MultiSelectOption[]; + if (isGroupedOptions(options)) { + allOptions = options.flatMap((group) => group.options); + } else { + allOptions = options; + } + const valueSet = new Set(); + const duplicates: string[] = []; + const uniqueOptions: MultiSelectOption[] = []; + allOptions.forEach((option) => { + if (valueSet.has(option.value)) { + duplicates.push(option.value); + if (!deduplicateOptions) { + uniqueOptions.push(option); + } + } else { + valueSet.add(option.value); + uniqueOptions.push(option); + } + }); + if (process.env.NODE_ENV === "development" && duplicates.length > 0) { + const action = deduplicateOptions + ? "automatically removed" + : "detected"; + console.warn( + `MultiSelect: Duplicate option values ${action}: ${duplicates.join( + ", ", + )}. ` + + `${ + deduplicateOptions + ? "Duplicates have been removed automatically." + : "This may cause unexpected behavior. Consider setting 'deduplicateOptions={true}' or ensure all option values are unique." + }`, + ); + } + return deduplicateOptions ? uniqueOptions : allOptions; + }, [options, deduplicateOptions, isGroupedOptions]); + + const getOptionByValue = useCallback( + (value: string): MultiSelectOption | undefined => { + const option = getAllOptions().find((opt) => opt.value === value); + if (!option && process.env.NODE_ENV === "development") { + console.warn( + `MultiSelect: Option with value "${value}" not found in options list`, + ); + } + return option; + }, + [getAllOptions], + ); + + const filteredOptions = useMemo(() => { + if (!searchable || !searchValue) return options; + if (options.length === 0) return []; + if (isGroupedOptions(options)) { + return options + .map((group) => ({ + ...group, + options: group.options.filter( + (option) => + option.label + .toLowerCase() + .includes(searchValue.toLowerCase()) || + option.value.toLowerCase().includes(searchValue.toLowerCase()), + ), + })) + .filter((group) => group.options.length > 0); + } + return options.filter( + (option) => + option.label.toLowerCase().includes(searchValue.toLowerCase()) || + option.value.toLowerCase().includes(searchValue.toLowerCase()), + ); + }, [options, searchValue, searchable, isGroupedOptions]); + + const handleInputKeyDown = (event: KeyboardEvent) => { + if (event.key === "Enter") { + setIsPopoverOpen(true); + } else if (event.key === "Backspace" && !event.currentTarget.value) { + const newSelectedValues = [...selectedValues]; + newSelectedValues.pop(); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + } + }; + + const toggleOption = (optionValue: string) => { + if (disabled) return; + const option = getOptionByValue(optionValue); + if (option?.disabled) return; + + // MODE SINGLE SELECT + if (!multiple) { + const newSelectedValues = selectedValues.includes(optionValue) + ? [] + : [optionValue]; + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + if (closeOnSelect) { + setIsPopoverOpen(false); + } + return; + } + + // MODE MULTIPLE SELECT + const isCurrentlySelected = selectedValues.includes(optionValue); + + if (isCurrentlySelected) { + if (minSelection && selectedValues.length <= minSelection) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + const newSelectedValues = selectedValues.filter( + (value) => value !== optionValue, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + } else { + if (maxSelection && selectedValues.length >= maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + const newSelectedValues = [...selectedValues, optionValue]; + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + } + + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + const handleClear = () => { + if (disabled) return; + if (multiple && minSelection && minSelection > 0) { + announce(`Minimum ${minSelection} selection(s) required`, "assertive"); + return; + } + setSelectedValues([]); + if (onValueChange) { + onValueChange([]); + } + setData(name, []); + }; + + const handleTogglePopover = () => { + if (disabled) return; + setIsPopoverOpen((prev) => !prev); + }; + + const clearExtraOptions = () => { + if (disabled) return; + const newSelectedValues = selectedValues.slice( + 0, + responsiveSettings.maxCount, + ); + setSelectedValues(newSelectedValues); + if (onValueChange) { + onValueChange(newSelectedValues); + } + setData(name, newSelectedValues); + }; + + const toggleAll = () => { + if (disabled || !multiple) return; + const allOptions = getAllOptions().filter((option) => !option.disabled); + + if (selectedValues.length === allOptions.length) { + if (minSelection && minSelection > 0) { + announce( + `Minimum ${minSelection} selection(s) required`, + "assertive", + ); + return; + } + handleClear(); + } else { + const allValues = allOptions.map((option) => option.value); + if (maxSelection && allValues.length > maxSelection) { + announce(`Maximum ${maxSelection} selection(s) allowed`, "assertive"); + return; + } + setSelectedValues(allValues); + if (onValueChange) { + onValueChange(allValues); + } + setData(name, allValues); + } + + if (closeOnSelect) { + setIsPopoverOpen(false); + } + }; + + useEffect(() => { + if (!resetOnDefaultValueChange) return; + const prevDefaultValue = prevDefaultValueRef.current; + if (!arraysEqual(prevDefaultValue, defaultValue)) { + if (!arraysEqual(selectedValues, defaultValue)) { + setSelectedValues(defaultValue); + } + prevDefaultValueRef.current = [...defaultValue]; + } + }, [defaultValue, selectedValues, arraysEqual, resetOnDefaultValueChange]); + + const getWidthConstraints = () => { + const defaultMinWidth = screenSize === "mobile" ? "0px" : "200px"; + const effectiveMinWidth = minWidth || defaultMinWidth; + const effectiveMaxWidth = maxWidth || "100%"; + return { + minWidth: effectiveMinWidth, + maxWidth: effectiveMaxWidth, + width: autoSize ? "auto" : "100%", + }; + }; + + const widthConstraints = getWidthConstraints(); + + useEffect(() => { + if (!isPopoverOpen) { + setSearchValue(""); + } + }, [isPopoverOpen]); + + useEffect(() => { + const selectedCount = selectedValues.length; + const allOptions = getAllOptions(); + const totalOptions = allOptions.filter((opt) => !opt.disabled).length; + if (selectedCount !== prevSelectedCount.current) { + const diff = selectedCount - prevSelectedCount.current; + if (diff > 0) { + const addedItems = selectedValues.slice(-diff); + const addedLabels = addedItems + .map( + (value) => allOptions.find((opt) => opt.value === value)?.label, + ) + .filter(Boolean); + + if (addedLabels.length === 1) { + announce( + `${addedLabels[0]} selected. ${selectedCount} of ${totalOptions} options selected.`, + ); + } else { + announce( + `${addedLabels.length} options selected. ${selectedCount} of ${totalOptions} total selected.`, + ); + } + } else if (diff < 0) { + announce( + `Option removed. ${selectedCount} of ${totalOptions} options selected.`, + ); + } + prevSelectedCount.current = selectedCount; + } + + if (isPopoverOpen !== prevIsOpen.current) { + if (isPopoverOpen) { + announce( + `Dropdown opened. ${totalOptions} options available. Use arrow keys to navigate.`, + ); + } else { + announce("Dropdown closed."); + } + prevIsOpen.current = isPopoverOpen; + } + + if ( + searchValue !== prevSearchValue.current && + searchValue !== undefined + ) { + if (searchValue && isPopoverOpen) { + const filteredCount = allOptions.filter( + (opt) => + opt.label.toLowerCase().includes(searchValue.toLowerCase()) || + opt.value.toLowerCase().includes(searchValue.toLowerCase()), + ).length; + + announce( + `${filteredCount} option${ + filteredCount === 1 ? "" : "s" + } found for "${searchValue}"`, + ); + } + prevSearchValue.current = searchValue; + } + }, [selectedValues, isPopoverOpen, searchValue, announce, getAllOptions]); + + useEffect(() => { + if ( + minSelection !== undefined && + maxSelection !== undefined && + minSelection > maxSelection + ) { + console.error( + "MultiSelect: minSelection cannot be greater than maxSelection", + ); + } + if ( + !multiple && + (minSelection !== undefined || maxSelection !== undefined) + ) { + console.warn( + "MultiSelect: minSelection and maxSelection are ignored when multiple is false", + ); + } + if (minSelection !== undefined && minSelection < 0) { + console.error("MultiSelect: minSelection cannot be negative"); + } + if (maxSelection !== undefined && maxSelection < 1) { + console.error("MultiSelect: maxSelection must be at least 1"); + } + }, [minSelection, maxSelection, multiple]); + + return ( +
+
+
+ {politeMessage} +
+
+ {assertiveMessage} +
+
+ + +
+ Multi-select dropdown. Use arrow keys to navigate, Enter to select, + and Escape to close. +
+
+ {selectedValues.length === 0 + ? "No options selected" + : `${selectedValues.length} option${ + selectedValues.length === 1 ? "" : "s" + } selected: ${selectedValues + .map((value) => getOptionByValue(value)?.label) + .filter(Boolean) + .join(", ")}`} +
+ + + +
+ + ) : ( +
+

+ {placeholder} +

+ +
+ )} + + + setIsPopoverOpen(false)} + > + + {searchable && ( +
+
+ +
+ setSearchValue(e.target.value)} + onKeyDown={handleInputKeyDown} + className="w-[calc(100%-2.5rem-40px)] border-0 mx-9" + /> + } + tooltipContent={

{str(transDelete).ucFirst().value()}

} + type="button" + variant="ghost" + size="icon" + className="absolute top-1/2 right-0 transform -translate-y-1/2 text-muted-foreground" + onClick={() => setSearchValue("")} + disabled={searchValue.length < 1 || disabled} + /> +
+ )} + {searchable && ( +
+ Type to filter options. Use arrow keys to navigate results. +
+ )} + + {emptyIndicator || transNoResults} + {/* First option for select all items */} + {!hideSelectAll && !searchValue && multiple && ( + + !opt.disabled).length + } + aria-label={`Select all ${ + getAllOptions().length + } options`} + className="cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10" + > +
!opt.disabled) + .length + ? "bg-primary text-primary-foreground" + : "opacity-50 [&_svg]:invisible", + )} + aria-hidden="true" + > + +
+ + ({str(transSelectAll).ucFirst().value()} + {getAllOptions().length > 20 + ? ` - ${getAllOptions().length} options` + : ""} + ) + +
+
+ )} + {/* List of items */} + {isGroupedOptions(filteredOptions) ? ( + filteredOptions.map((group) => ( + + {group.options.map((option) => { + const isSelected = selectedValues.includes( + option.value, + ); + return ( + toggleOption(option.value)} + role="option" + aria-selected={isSelected} + aria-disabled={option.disabled} + aria-label={`${option.label}${ + isSelected ? ", selected" : ", not selected" + }${option.disabled ? ", disabled" : ""}`} + className={cn( + "cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10", + option.disabled && + "opacity-50 cursor-not-allowed", + )} + disabled={option.disabled} + > + + {option.icon && ( + + ); + })} + + )) + ) : ( + + {filteredOptions.map((option) => { + const isSelected = selectedValues.includes(option.value); + return ( + toggleOption(option.value)} + role="option" + aria-selected={isSelected} + aria-disabled={option.disabled} + aria-label={`${option.label}${ + isSelected ? ", selected" : ", not selected" + }${option.disabled ? ", disabled" : ""}`} + className={cn( + "cursor-pointer gap-1.5 px-4 py-2 w-full h-auto min-h-10", + option.disabled && "opacity-50 cursor-not-allowed", + )} + disabled={option.disabled} + > + + {option.icon && ( + + ); + })} + + )} +
+ {(closeButtonVisible || selectedValues.length > 0) && ( + +
+ {selectedValues.length > 0 && ( + {str(transClearList).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="default" + onClick={handleClear} + disabled={disabled} + /> + )} + {closeButtonVisible && selectedValues.length > 0 && ( + + )} + {closeButtonVisible && ( + {str(transClosePopover).ucFirst().value()}

+ } + className="w-full" + type="button" + variant="ghost" + size="default" + onClick={() => setIsPopoverOpen(false)} + disabled={disabled} + /> + )} +
+
+ )} +
+
+ {animation > 0 && selectedValues.length > 0 && ( + setIsAnimating(!isAnimating)} + /> + )} + + {helper && {helper}} + + + ); + }, +); + +MultiSelect.displayName = "MultiSelect"; +export type { MultiSelectOption, MultiSelectGroup, MultiSelectProps }; diff --git a/resources/ts/back/Components/Inputs/SimpleColorPicker.tsx b/resources/ts/back/Components/Inputs/SimpleColorPicker.tsx new file mode 100644 index 0000000..c2d949e --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleColorPicker.tsx @@ -0,0 +1,285 @@ +// * Packages +import { useState, useEffect, useRef, ReactNode } from "react"; +import { usePage } from "@inertiajs/react"; +import { SketchPicker, ColorResult } from "react-color"; +import { RefreshCwIcon, TrashIcon, ShuffleIcon } from "lucide-react"; +import { PresetColor } from "react-color/lib/components/sketch/Sketch"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { Input } from "@/components/ui/input"; +import { + Popover, + PopoverTrigger, + PopoverContent, +} from "@/components/ui/popover"; +// * Other +import BtnOptionnalLinkWithTooltip from "@/back/Components/BtnOptionnalLinkWithTooltip"; +import InputError from "@/back/Components/InputError"; +import useTrans from "@/hooks/use-translations"; +import str from "@/hooks/use-string"; +import { cn } from "@/lib/utils"; + +type SimpleColorPickerProps = { + className?: string; + name: string; + id?: string; + label: ReactNode | string; + value: string | null; + placeholder?: string; + presetColors?: PresetColor[]; + randomize?: boolean; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + /* eslint-disable no-unused-vars */ + setData: (name: string, value: string | null) => void; +}; + +export default function SimpleColorPicker({ + className, + name, + id = name, + label, + value = null, + placeholder = "#ffffffff", + presetColors = [ + "#000000", // Black + "#ffffff", // White + "#ff0000", // Red + "#00ff00", // Vert + "#008080", // Teal + "#8a2be2", // Violet + "#0000ff", // Blue + "#ff7f50", // Coral + "#ffa500", // Orange + "#ffff00", // Yellow + ], + required = true, + disabled = false, + randomize = true, + parentErrors = null, + setData, +}: SimpleColorPickerProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + // Colors. + const [color, setColor] = useState(value); + const initialColor = useRef(value ?? "#ffffffff"); + + // Popover status. + const [open, setOpen] = useState(false); + + // Translations. + const transSelect = useTrans("uwil-backend::back.simple_color_picker.select"); + const transReset = useTrans("uwil-backend::back.simple_color_picker.reset"); + const transDelete = useTrans("uwil-backend::back.simple_color_picker.delete"); + + /** + * Check the format/structure of the selected color. + * + * @param val string + * @return boolean + */ + function isHex(val: string): boolean { + return /^#([0-9A-Fa-f]{3,4}|[0-9A-Fa-f]{6}|[0-9A-Fa-f]{8})$/.test(val); + } + + /** + * Convert ColorResult → HEXA. + * + * @param targetColor ColorResult + * @return string + */ + function toHEXA(targetColor: ColorResult): string { + const r = targetColor.rgb.r.toString(16).padStart(2, "0"); + const g = targetColor.rgb.g.toString(16).padStart(2, "0"); + const b = targetColor.rgb.b.toString(16).padStart(2, "0"); + const a = + Math.round((targetColor.rgb.a ?? 1) * 255) + .toString(16) + .padStart(2, "0") ?? "ff"; + return `#${r}${g}${b}${a}`; + } + + /** + * Generate random HEXA color. + */ + function randomColor(): string { + const r = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); + const g = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); + const b = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); + const a = Math.floor(Math.random() * 256) + .toString(16) + .padStart(2, "0"); // alpha + return `#${r}${g}${b}${a}`; + } + + /** + * Generate random color. + */ + function handleRandom(): void { + const hex = randomColor(); + setColor(hex); + setData(name, hex); + } + + /** + * On change color via picker. + * + * @param color ColorResult + * @return void + */ + function handleChange(c: ColorResult): void { + const hex = toHEXA(c); + setColor(hex); + } + + /** + * Update color via picker. + * + * @param targetColor ColorResult + * @return void + */ + function handleChangeComplete(targetColor: ColorResult): void { + const hex = toHEXA(targetColor); + setColor(hex); + setData(name, hex); + } + + /** + * Reset input color. + * + * @return void + */ + function handleReset(): void { + setColor(initialColor.current); + setData(name, initialColor.current); + } + + /** + * Clear input color. + * + * @return void + */ + function handleClear(): void { + setColor(null); + setData(name, null); + setOpen(false); + } + + /** + * Change color manually. + * + * @param val string + * @returns void + */ + function handleInput(val: string): void { + if (val === "") { + setColor(null); + setData(name, null); + return; + } + setColor(val); + + // Validate format. + if (isHex(val)) { + setData(name, val); + } + } + + useEffect(() => { + if (value !== color) setColor(value); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [value]); + + return ( +
+ +
+ {/* POPUP PICKER */} + + {/* Preview */} + + + + {/* Input HEX / RGBA */} + handleInput(e.target.value)} + placeholder={placeholder} + disabled={disabled} + className="flex-1" + /> + {/* POPUP CONTENT */} + + handleChange(newColor)} + onChangeComplete={(newCompleteColor) => + handleChangeComplete(newCompleteColor) + } + disableAlpha={false} + presetColors={presetColors} + /> + + + {/* Random Color */} + {randomize && ( + } + tooltipContent="Couleur aléatoire" + type="button" + variant="secondary" + size="icon" + onClick={() => handleRandom()} + disabled={disabled} + /> + )} + {/* RESET/DELETE */} + } + tooltipContent={str(transReset).ucFirst().value()} + type="button" + variant="secondary" + size="icon" + onClick={() => handleReset()} + disabled={disabled} + /> + {!required && ( + } + tooltipContent={str(transDelete).ucFirst().value()} + type="button" + variant="destructive" + size="icon" + onClick={() => handleClear()} + disabled={disabled} + /> + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleDatePicker.tsx b/resources/ts/back/Components/Inputs/SimpleDatePicker.tsx new file mode 100644 index 0000000..b307406 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleDatePicker.tsx @@ -0,0 +1,219 @@ +// * Other +import { fr, enUS } from "date-fns/locale"; +import { usePage } from "@inertiajs/react"; +import { CalendarIcon, RefreshCcw } from "lucide-react"; +import { ReactNode } from "react"; +// * Components shadcn +import { Calendar } from "@/components/ui/calendar"; +import { + Popover, + PopoverContent, + PopoverTrigger, +} from "@/components/ui/popover"; +import { Button } from "@/components/ui/button"; +import { Label } from "@/components/ui/label"; +import { Separator } from "@/components/ui/separator"; +import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +// * Other +import InputError from "@/back/Components/InputError"; +import { cn, GetFormatedDate } from "@/lib/utils"; +import str from "@/hooks/use-string"; +import useLocale from "@/store/use-locale-store"; +import useTrans from "@/hooks/use-translations"; + +type SimpleDatePickerProps = { + name: string; + placeholder?: string; + date?: Date | null; + required?: boolean; + disabled?: boolean; + className?: string; + label: ReactNode | string; + hasTime?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: Date | null) => void; +}; + +export default function SimpleDatePicker({ + name, + placeholder = "Sélectionner une date", + date, + required = false, + disabled = false, + className, + label, + hasTime = false, + parentErrors = null, + setData, +}: SimpleDatePickerProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + let calendarLocale = fr; + switch (usePage().props.locale) { + case "en": + calendarLocale = enUS; + break; + default: + calendarLocale = fr; + break; + } + + const parsedDate = date ? new Date(date) : undefined; + const hours = Array.from({ length: 24 }, (_, i) => i); + const minutes = Array.from({ length: 12 }, (_, i) => i * 5); + const handleDateSelect = (selectedDate: Date | undefined) => { + if (selectedDate) { + setData(name, selectedDate); + } + }; + + const resetDate = () => { + setData(name, null); + }; + + function handleTimeChange(type: "hour" | "minute", value: string) { + const currentDate = parsedDate || new Date(); + const newDate = new Date(currentDate); + if (type === "hour") { + const hour = parseInt(value, 10); + newDate.setHours(hour); + } else if (type === "minute") { + newDate.setMinutes(parseInt(value, 10)); + } + setData(name, newDate); + } + + return ( +
+ + + + + + +
+ + {hasTime && ( +
+ +
+ {hours.map((hour) => ( + + ))} +
+ +
+ +
+ {minutes.map((minute) => ( + + ))} +
+ +
+
+ )} +
+
+ + +
+
+
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleNumber.tsx b/resources/ts/back/Components/Inputs/SimpleNumber.tsx new file mode 100644 index 0000000..e6e6418 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleNumber.tsx @@ -0,0 +1,92 @@ +// * Packages +import { useState, useEffect, ReactNode } from "react"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +// * Other +import InputError from "@/back/Components/InputError"; +import { cn } from "@/lib/utils"; +import useTrans from "@/hooks/use-translations"; + +type SimpleNumberProps = { + className?: string; + name: string; + label: ReactNode | string; + value?: number; + id?: string; + step?: number; + limits?: Record; + placeholder?: string; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string) => void; +}; + +export default function SimpleNumber({ + className, + value = 0, + name, + label, + id = name, + step = 1, + limits, + placeholder = "uwil-backend::back.enter_number_here", + required = true, + disabled = false, + parentErrors = null, + setData, +}: SimpleNumberProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + const localLimits = { + min: limits?.min ? limits.min : 1, + max: limits?.max ? limits.max : 1000, + }; + const safeValue = + value >= localLimits.min && value <= localLimits.max + ? value + : localLimits.min; + + const [inputValue, setInputValue] = useState(safeValue); + + useEffect(() => { + setInputValue(safeValue); + setData(name, String(safeValue)); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [safeValue]); + + return ( +
+ +
+ { + setInputValue(Number(e.target.value)); + setData(name, e.target.value); + }} + required={required} + disabled={disabled} + className={cn("w-full", { + "border-destructive/50": localErrors[name], + })} + /> +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleString.tsx b/resources/ts/back/Components/Inputs/SimpleString.tsx new file mode 100644 index 0000000..e305877 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleString.tsx @@ -0,0 +1,111 @@ +// * Packages +import { EyeIcon, EyeOffIcon } from "lucide-react"; +import { useState, useEffect, useRef, ReactNode } from "react"; +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Input } from "@/components/ui/input"; +import { Label } from "@/components/ui/label"; +import { Button } from "@/components/ui/button"; +// * Other +import InputError from "@/back/Components/InputError"; +import WordCounter from "@/back/Components/WordCounter"; +import { cn } from "@/lib/utils"; +import useTrans from "@/hooks/use-translations"; + +type SimpleStringProps = { + className?: string; + name: string; + label: ReactNode | string; + value?: string; + id?: string; + type?: string; + placeholder?: string; + wordCounter?: boolean; + required?: boolean; + disabled?: boolean; + /** Pattern is regex without antislash */ + pattern?: string; + checkVisibility?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string) => void; +}; + +export default function SimpleString({ + className, + value = "", + name, + label, + id = name, + type = "text", + placeholder = "uwil-backend::back.enter_text_here", + wordCounter = true, + required = true, + disabled = false, + pattern, + checkVisibility = false, + parentErrors = null, + setData, +}: SimpleStringProps) { + const [isVisible, setIsVisible] = useState(checkVisibility); + const inputRef = useRef(null); + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + useEffect(() => { + if (inputRef.current && inputRef.current.value !== value) { + inputRef.current.value = value; + } + }, [value]); + + return ( +
+ + {wordCounter && } +
+ { + setData(name, e.target.value); + }} + required={required} + disabled={disabled} + className={cn( + type === "password" || checkVisibility + ? "w-[calc(100%-40px-0.25rem)]" + : "w-full", + { "border-destructive/50": localErrors[name] }, + )} + pattern={pattern ?? undefined} + /> + {(type === "password" || checkVisibility) && ( + + )} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleSwitch.tsx b/resources/ts/back/Components/Inputs/SimpleSwitch.tsx new file mode 100644 index 0000000..e10d164 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleSwitch.tsx @@ -0,0 +1,66 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +import { ReactNode } from "react"; +// * Components shadcn +import { Switch } from "@/components/ui/switch"; +import { Label } from "@/components/ui/label"; +// * Other +import InputError from "@/back/Components/InputError"; +import { cn } from "@/lib/utils"; + +type SimpleSwitchProps = { + name: string; + checked?: boolean; + label?: ReactNode | string; + leftHelper?: string; + rightHelper?: string; + className?: string; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: boolean) => void; +}; + +export default function SimpleSwitch({ + name, + checked, + label, + leftHelper, + rightHelper, + className = "", + required = false, + disabled = false, + parentErrors = null, + setData, +}: SimpleSwitchProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + return ( +
+ {label && ( + + )} +
+ {leftHelper && {leftHelper}} + setData(name, value)} + required={required} + checked={checked} + disabled={disabled} + className={cn({ + "border-destructive/50": localErrors[name], + })} + /> + {rightHelper && {rightHelper}} +
+ +
+ ); +} diff --git a/resources/ts/back/Components/Inputs/SimpleTextarea.tsx b/resources/ts/back/Components/Inputs/SimpleTextarea.tsx new file mode 100644 index 0000000..03d8ed1 --- /dev/null +++ b/resources/ts/back/Components/Inputs/SimpleTextarea.tsx @@ -0,0 +1,74 @@ +// * Packages +import { usePage } from "@inertiajs/react"; +// * Components shadcn +import { Label } from "@/components/ui/label"; +import { Textarea } from "@/components/ui/textarea"; +// * Other +import InputError from "@/back/Components/InputError"; +import WordCounter from "@/back/Components/WordCounter"; +import useTrans from "@/hooks/use-translations"; +import { cn } from "@/lib/utils"; + +type SimpleTextareaProps = { + className?: string; + name: string; + label: string; + value?: string; + id?: string; + placeholder?: string; + wordCounter?: boolean; + required?: boolean; + disabled?: boolean; + parentErrors?: Record | null; + // eslint-disable-next-line no-unused-vars + setData: (name: string, value: string) => void; +}; + +export default function SimpleTextarea({ + className, + name, + label, + value = "", + id = name, + placeholder = "uwil-backend::back.enter_text_here", + wordCounter = true, + required = true, + disabled = false, + parentErrors = null, + setData, +}: SimpleTextareaProps) { + const { errors } = usePage().props; + const localErrors = parentErrors ?? errors; + + return ( +
+ + {wordCounter && } +
+ -
- -@for ($i = 1; $i < 6; $i++) -

Fichier joint {{ $i }}

-
- - @if (isset($ticket) and $ticket->file !== null) - @php - $fileNumber = 'file'. $i; - @endphp -
- -
- @endif -
-
-@endfor - -@can('changeInternalStatus', App\Models\Ticket::class) -
- is_internal)) checked @endif> - -
-@endcan diff --git a/resources/views/bo/pages/tickets/index.blade.php b/resources/views/bo/pages/tickets/index.blade.php deleted file mode 100644 index 208d498..0000000 --- a/resources/views/bo/pages/tickets/index.blade.php +++ /dev/null @@ -1,445 +0,0 @@ -@extends('layout.app') - -@section('title', __('models.classes.tickets')) -@section('description', __('Liste de tous les :model', ['model' => __('models.classes.tickets')])) -@section('bodyClass', 'content ticketsIndex') - -@section('content') - @php - $userPr = Auth::user()->sites ?? collect([]); - @endphp -
-
-
-

{{ __('Tickets') }} - @if (Session::get('tickets.st') == \App\Enums\Tickets\TicketStatusEnum::archived->value) - (Archivés) - @endif -

- @if (session('tickets.pr')) - @php - $site = \App\Models\Site::query()->find(session('tickets.pr')); - $projectManager = $site ? $site->projectManager : false; - @endphp - @if ($projectManager) -

{{ __('Chef de projet') }} : {{ $projectManager->name }}

- @endif - @endif -
- -
-
-
-
-
-
-
-
- {{-- All sites --}} -
-
- - - @push('scripts') - - @endpush -
-
- {{-- All types --}} -
-
- - - @push('scripts') - - @endpush -
-
- {{-- All status --}} -
-
- - - @push('scripts') - - @endpush -
-
- {{-- All assigned to --}} - @can('assignTickets', App\Models\Ticket::class) -
-
- - - @push('scripts') - - @endpush -
-
- @endcan - {{-- Search form --}} -
-
-
- - - -
- @push('scripts') - - @endpush -
-
-
-
-
-
-
-
- @if (session('tickets.pr') && session('tickets.st') != \App\Enums\Tickets\TicketStatusEnum::archived->value) - @if (session('tickets.or')) - -   {{ __('see_mode', ['mode' => __('validation.custom.default')]) }} - - @else - -   {{ __('see_mode', ['mode' => __('validation.custom.priority')]) }} - - @endif - @endif - @if (session('tickets.st') == \App\Enums\Tickets\TicketStatusEnum::archived->value) - - - - @else - - - - @endif - -  {{ __(' le tri') }} - -
-
-
-
-
-
- - - @php - $cols = []; - if (session('tickets.or')) { - $cols = array_merge($cols, [ - 'order' => Str::ucfirst(__('validation.custom.priority')), - ]); - } - $cols = array_merge($cols, [ - 'id' => '#', - ]); - if (!session()->has('tickets.pr') && !session('tickets.or')) { - $cols = array_merge($cols, [ - 'site' => Str::ucfirst(__('Website')), - ]); - } - $cols = array_merge($cols, [ - 'type' => Str::ucfirst(__('validation.custom.type')), - 'status' => Str::ucfirst(__('validation.attributes.status')), - 'title' => Str::ucfirst(__('validation.attributes.name')), - ]); - if (session()->has('tickets.ty') && intval(session('tickets.ty')) === \App\Enums\Tickets\TicketTypeEnum::evolution->value) { - $cols = array_merge($cols, [ - 'estimate' => Str::ucfirst(__('validation.custom.estimate')), - ]); - } - if (Auth::user()->isAdmin()) { - $cols = array_merge($cols, [ - 'tickets' => Str::ucfirst(__('validation.custom.tickets')), - 'assigned_to' => Str::ucfirst(__('validation.custom.assigned_to')), - ]); - } - $cols = array_merge($cols, [ - 'date_mep' => Str::ucfirst(__('validation.custom.date_mep')), - 'created_at' => Str::ucfirst(__('validation.attributes.created_at')), - ]); - @endphp - @include('bo.modules.table-col-sorter', [ - 'cols' => $cols, - 'ignore' => session('tickets.or') ? array_keys($cols) : ['id', 'site', 'status', 'tickets', 'estimate'], - ]) - - - @if (!count($tickets)) - - - - @endif - @foreach ($tickets as $key => $ticket) - - {{-- order --}} - @if (session('tickets.or')) - @include('bo.modules.change-model-order-select', [ - 'model' => $ticket, - 'value' => $key + 1 + ($tickets->currentPage() - 1) * $tickets->perPage(), - ]) - @endif - {{-- id --}} - - @if (!session()->has('tickets.pr') && !session('tickets.or')) - {{-- site --}} - - @endif - {{-- type --}} - - {{-- status --}} - - {{-- title --}} - - {{-- estimate --}} - @if (session()->has('tickets.ty') && intval(session('tickets.ty')) === \App\Enums\Tickets\TicketTypeEnum::evolution->value) - - @endif - {{-- tag --}} - @php - $routeName = request()->route()->getName(); - @endphp - @can('assignLabels', App\Models\Ticket::class) - - @endcan - {{-- assigned_to / date_mep --}} - @if (Auth::user()->isAdmin()) - - @endif - - - - - @endforeach - -
-

{{ __('Aucun ticket') }}

-
-
- {{ $ticket->id }}   - @if ($ticket->is_internal) - - @endif - -
-
-
- @if (Auth::user()->isAdmin()) - {{ $ticket->site->name }} - @else - {{ $ticket->site->name }} - @endif -
-
- {{ $ticket->type->label() }} - -
- - - {{ $ticket->status->label() }} - - -
-
- {{ $ticket->title }} - - {{ $ticket->estimation?->amount ? sprintf('%sj', $ticket->estimation->amount) : 'En cours' }} - - - @foreach ($ticket->labels as $label) - {{ $label->name }} - @endforeach - - {{ $ticket->assignedUser ? $ticket->assignedUser->name : __('Personne') }} - - {{ is_null($ticket->date_mep) ? '-' : $ticket->date_mep->format('d/m/Y') }} - {{ Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i') }} -
-
-
- @php - $ticket_files = $ticket->getFiles(); - @endphp - @foreach ($ticket_files as $key => $file) - @if ($file !== null && (\App\Lib\Helpers\ToolboxHelper::isImageFile($file) || \App\Lib\Helpers\ToolboxHelper::isPdfFile($file))) - - - @break - @endif - @endforeach - {{-- Modal du ticket --}} - - - - @if (auth()->user()->isAdmin()) - - @endif - @can('changeStatus', $ticket) - @if (!$ticket->status->equals(\App\Enums\Tickets\TicketStatusEnum::archived)) -
- @method('PUT') - @csrf - -
- @endif - @endcan -
-
- - -
-
- {{ $tickets->withQueryString()->links() }} -
-
-
-
-
-
-@endsection diff --git a/resources/views/bo/pages/tickets/show.blade.php b/resources/views/bo/pages/tickets/show.blade.php deleted file mode 100644 index 587e197..0000000 --- a/resources/views/bo/pages/tickets/show.blade.php +++ /dev/null @@ -1,355 +0,0 @@ -@extends('layout.app') - -@section('title', __('Aperçu d\'un :model', ['model' => Str::singular(__('models.classes.tickets'))])) -@section('description', __('Aperçu d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.tickets'))])) -@section('bodyClass', 'content ticketsShow') - -@section('content') -
-

- - {{ $ticket->full_name }} - @if ($ticket->is_internal)@endif - {{ $ticket->type->label() }} - @if (auth()->user()->isAdmin()) - - @endif -

-
- @can('suscribeToTicket', $ticket) -
- @csrf -
- - -
- @push('scripts') - - @endpush -
- @endcan - @can('assignTo', $ticket) -
- @csrf -
- - - @push('scripts') - - @endpush -
-
- @endcan - @can('changeStatus', $ticket) -
- @csrf -
- - - @push('scripts') - - @endpush -
-
- @endcan - @if ($ticket->status->equals(\App\Enums\Tickets\TicketStatusEnum::archived)) - @can('reopen', $ticket) -
- @csrf - -
- @endcan - @endif -
-
-

{{ $ticket->title }}

- @can('assignLabels', App\Models\Ticket::class) -
-
- @foreach ($ticket->labels as $label) - {{ $label->name }} - @endforeach -
-
- @endcan -
- @if ($ticket->estimation) - @include('estimations.pendingCard', ['ticket' => $ticket, 'estimation' => $ticket->estimation]) -
- @endif -
-
- @if ($ticket->site->projectManager) -

- {{ __("Chef de projet") }} : {{ $ticket->site->projectManager->name }} -

- @endif -
- @can('estimate', $ticket) - {{ __('Estimation') }} - @endcan - @can('createMessage', $ticket) - - @endcan -
-
- {{-- if the user can create message, the modal is displayed --}} - @can('createMessage', $ticket) - - @endcan - {{-- modal end --}} - {{-- Section to display the messages --}} - @foreach ($messages as $message) - @if ($message->type->equals(\App\Enums\MessageTypeEnum::public) || Auth::user()->can('createPrivateMessage', $ticket)) - @if ($message->user_id === null) -
- {!! nl2br(clean($message->message)) !!} - Le - {{ \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i') }} - ({{ __('Message système') }}) -
- @else -
- @if ($message->type->equals(\App\Enums\MessageTypeEnum::private)) -    - @endif - {!! \App\Lib\Helpers\ToolboxHelper::plainToHtml($message->message) !!} - @foreach ([$message->file, $message->file2, $message->file3] as $file) - @if ($file !== null) -
Ouvrir la pièce jointe - @endif - @endforeach -

- - {!! __('Créé le :date par :userName', [ - 'date' => \Carbon\Carbon::parse($message->created_at)->format('d/m/Y à H:i'), - 'userName' => $message->user ? $message->user->name : __('Utilisateur supprimé'), - ]) !!} - - @if ($message->user_id === Auth::user()->id) - @can('updateMessage', $ticket, $message) - - - @endcan - @endif -
- @endif - @endif - @endforeach - {{-- End display message --}} -
-
-

{{ __('Description') }}

-

{!! clean(\App\Lib\Helpers\ToolboxHelper::plainToHtml($ticket->text)) !!}

- {!! __('Créé le :date par :userName', [ - 'date' => \Carbon\Carbon::parse($ticket->created_at)->format('d/m/Y à H:i'), - 'userName' => $ticket->user ? $ticket->user->name : __('Utilisateur supprimé'), - ]) !!} -
- @php - $ticket_files = $ticket->getFiles(); - @endphp - @if (!empty(Arr::whereNotNull($ticket_files))) -
-

{{ __('Pièces jointes') }}

- @foreach ($ticket_files as $key => $file) - @if (!is_null($file)) - - @endif - @endforeach -
- @endif - @php - $linkedTickets = $ticket->linkedTickets; - @endphp - @if (!$linkedTickets->isEmpty() or auth()->user()->can('linkTicket', $ticket)) -
-
-
-

{{ __('Tickets liés') }}

-
- @can('linkTicket', $ticket) -
- -
- @endcan -
- @foreach ($linkedTickets as $linked) -
- @can('linkTicket', $ticket) - - @endcan -
- @endforeach -
- @endif -
-
- @can('createGitlabIssue', $ticket) -
- @csrf - -
- @else - @can('isAdmin') - @if (!\is_null($ticket->gitlab_issue)) -
-

- {{ __("Lien vers l'issue Gitlab : ") }} - {{ __('Ouvrir') }} -

- @endif - @endcan - @endcan -
-@endsection diff --git a/resources/views/bo/pages/users/create.blade.php b/resources/views/bo/pages/users/create.blade.php deleted file mode 100644 index e9341f2..0000000 --- a/resources/views/bo/pages/users/create.blade.php +++ /dev/null @@ -1,46 +0,0 @@ -@extends('layout.app', ['brParam' => $userModel]) - -@section('title', __('Création d\'un :model', ['model' => Str::singular(__('models.classes.users'))])) -@section('description', __('Création d\'un tout nouveau :model', ['model' => Str::singular(__('models.classes.users'))])) -@section('breadcrumb', request()->route()->getName()) - -@section('content') -
-
- - - - @include('breadcrumbs.breadcrumb-body', ['brParam' => $userModel]) -
-
- -
-
-
- @csrf - @include('bo.pages.users.form-inputs') -
-
- -
-
-
-@endsection diff --git a/resources/views/bo/pages/users/edit.blade.php b/resources/views/bo/pages/users/edit.blade.php deleted file mode 100644 index cc5f621..0000000 --- a/resources/views/bo/pages/users/edit.blade.php +++ /dev/null @@ -1,62 +0,0 @@ -@extends('layout.app', ['brParam' => $userModel]) - -@section('title', __('Édition d\'un :model', ['model' => Str::singular(__('models.classes.users'))])) -@section('description', __('Édition d\'un :model déjà existant', ['model' => Str::singular(__('models.classes.users'))])) -@section('breadcrumb', request()->route()->getName()) - -@section('content') -
-
- - - - @include('breadcrumbs.breadcrumb-body', ['brParam' => $userModel]) -
-
-
- @csrf - @method('DELETE') -
- - -
-
-
-
-
- @csrf - @method('PUT') - @include('bo.pages.users.form-inputs') -
-
- -
-
-
-@endsection diff --git a/resources/views/bo/pages/users/form-inputs.blade.php b/resources/views/bo/pages/users/form-inputs.blade.php deleted file mode 100644 index ee0e1e0..0000000 --- a/resources/views/bo/pages/users/form-inputs.blade.php +++ /dev/null @@ -1,154 +0,0 @@ -
- {{-- NAME --}} -
-
- {{ Str::ucfirst(__('validation.attributes.name')) }} -
-
- @include('bo.partials.inputs.varchar', [ - 'id' => 'userName', - 'label' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.name')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'hasWordCounter' => true, - 'name' => 'name', - 'required' => true, - 'model' => $userModel ?? null, - 'helper' => __('validation.between.string', [ - 'attribute' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.name')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'min' => 3, - 'max' => 255, - ]), - 'placeholder' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.name')), - 'model' => Str::singular(__('models.classes.users')), - ]), - ]) -
-
-
-
- {{-- EMAIL --}} -
-
- {{ Str::ucfirst(__('validation.attributes.email')) }} -
-
- @include('bo.partials.inputs.varchar', [ - 'id' => 'userEmail', - 'label' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.email')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'hasWordCounter' => true, - 'name' => 'email', - 'required' => true, - 'model' => $userModel ?? null, - 'helper' => __('validation.between.string', [ - 'attribute' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.email')), - 'model' => Str::singular(__('models.classes.users')), - ]), - 'min' => 3, - 'max' => 255, - ]), - 'placeholder' => __(':field de l\':model', [ - 'field' => Str::ucfirst(__('validation.attributes.email')), - 'model' => Str::singular(__('models.classes.users')), - ]), - ]) -
-
-
-
- {{-- ROLE --}} -
-
- {{ __('Role') }} -
-
- @include('bo.partials.inputs.tinyint-enum', [ - 'id' => 'userRole', - 'label' => __('crud.minicrud.associated', [ - 'entity' => 'Role', - ]), - 'name' => 'role', - 'model' => $userModel ?? null, - 'required' => true, - 'associatedModels' => \App\Enums\Users\RoleEnum::toArray(), - 'helper' => __('crud.minicrud.select', [ - 'entity' => 'role', - ]), - ]) -
-
-
-
- {{-- SITES --}} -
-
- {{ __('models.classes.sites') }} -
-
- @include('bo.partials.inputs.pivot-belongsToMany', [ - 'id' => 'userSites', - 'label' => __(':model associés', [ - 'model' => __('models.classes.sites') - ]), - 'name' => 'sites', - 'model' => $userModel ?? null, - 'itemsList' => $siteModels, - 'itemLimit' => [0, count($siteModels)], - 'placeholder' => __('Rechercher un :model', [ - 'model' => Str::singular(__('models.classes.sites')), - ]), - 'helper' => __('Séléctionnez le ou les :model1 à associer à cet :model2 (minimum :min, maximum :max)', [ - 'model1' => __('models.classes.sites'), - 'model2' => Str::singular(__('models.classes.users')), - 'min' => 0, - 'max' => count($siteModels), - ]), - 'required' => true, - ]) -
-
-
-
- {{-- GITLAB_USER_ID --}} -
-
- {{ __("ID de l'utilisateur Gitlab") }} -
-
- @include('bo.partials.inputs.int-number', [ - 'id' => 'siteGitlabUserId', - 'label' => __("ID de l'utilisateur Gitlab"), - 'name' => 'gitlab_id', - 'required' => false, - 'model' => $userModel ?? null, - 'helper' => __("ID de l'utilisateur Gitlab"), - 'step' => 1, - ]) -
-
-
-
-
- -@push('scripts') - -@endpush diff --git a/resources/views/bo/pages/users/index.blade.php b/resources/views/bo/pages/users/index.blade.php deleted file mode 100644 index aa2bb66..0000000 --- a/resources/views/bo/pages/users/index.blade.php +++ /dev/null @@ -1,70 +0,0 @@ -@extends('layout.app') - -@section('title', __('models.classes.users')) -@section('description', __('Liste de tous les :model', ['model' => __('models.classes.users')])) - -@section('content') -
- @include('breadcrumbs.breadcrumb-body') - - - -
-@include('bo.modules.search-bar') - - @if (count($userModels) > 0) - - @include('bo.modules.table-col-sorter', [ - 'cols' => [ - 'name' => Str::ucfirst(__('validation.attributes.name')), - 'email' => Str::ucfirst(__('validation.attributes.email')), - 'role' => Str::ucfirst(__('validation.attributes.role')), - 'sites' => Str::ucfirst(__('validation.attributes.sites')) - ], - ]) - - - @foreach ($userModels as $userModel) - - - - - - - - @endforeach - - @else - - - - @endif -
{{ $userModel->name }}{{ $userModel->email }}{{ $userModel->role->label() }}{{ collect(json_decode($userModel->sites))->implode('name', ', ') }} -
- - - - @csrf - @method('DELETE') - -
-
{{ __('crud.other.no_model_found', ['model' => Str::singular(__('models.classes.users'))]) }}
-{!! $userModels->links() !!} -@endsection diff --git a/resources/views/bo/pages/users/settings.blade.php b/resources/views/bo/pages/users/settings.blade.php deleted file mode 100644 index d408ab9..0000000 --- a/resources/views/bo/pages/users/settings.blade.php +++ /dev/null @@ -1,66 +0,0 @@ -@extends('layout.app') - -@section('title', __('Paramètres')) -@section('description', __('Paramètres de l\':model :user', ['model' => Str::singular(__('models.classes.users')), 'user' => auth()->user()->name])) - -@section('content') -
-
-
-
-
{{ __('Définir un site comme favori') }}
- -
- @php - $user = auth()->user(); - @endphp -
- @csrf -
-
- - -
-
-
-
-
-
-
{{ __('Réinitialisation de mot de passe') }}
- -
- @if (session('status')) - - @endif - @error('email') - - @endif - - -
- @csrf -
-
- -
-
-
-
-
-
-
-
-@endsection diff --git a/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php b/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php deleted file mode 100644 index dcf9d41..0000000 --- a/resources/views/bo/partials/inputs/bigint-foreign-id.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@if(!empty($label)) - -@endif - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/date.blade.php b/resources/views/bo/partials/inputs/date.blade.php deleted file mode 100644 index d5a69c2..0000000 --- a/resources/views/bo/partials/inputs/date.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/int-color.blade.php b/resources/views/bo/partials/inputs/int-color.blade.php deleted file mode 100644 index b42f1e9..0000000 --- a/resources/views/bo/partials/inputs/int-color.blade.php +++ /dev/null @@ -1,71 +0,0 @@ - -@if(!empty($label)) - -@endif -@if(isset($appendText)) -
- @endif - - @if(isset($appendText)) - -
-@endif -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) - -@push('scripts') - -@endpush diff --git a/resources/views/bo/partials/inputs/int-number.blade.php b/resources/views/bo/partials/inputs/int-number.blade.php deleted file mode 100644 index 7e1b841..0000000 --- a/resources/views/bo/partials/inputs/int-number.blade.php +++ /dev/null @@ -1,42 +0,0 @@ -@if(!empty($label)) - -@endif -
- - @if(isset($appendText)) - - @endif -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id.'Help', - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php b/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php deleted file mode 100644 index 10f1ea4..0000000 --- a/resources/views/bo/partials/inputs/pivot-belongsToMany.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -@if(!empty($label)) - -@endif -@php -$data = [ - 'name' => $name, - 'value' => old($name, $model->{$name} ?? []) ?? [], - 'placeholder' => $placeholder, - 'itemsList' => $itemsList, - 'itemLimit' => $itemLimit ?? null, - 'errors' => $errors->getBag('default')->getMessages() ?? [] -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper, -]) diff --git a/resources/views/bo/partials/inputs/publish-dates.blade.php b/resources/views/bo/partials/inputs/publish-dates.blade.php deleted file mode 100644 index cedd68e..0000000 --- a/resources/views/bo/partials/inputs/publish-dates.blade.php +++ /dev/null @@ -1,16 +0,0 @@ - - - - @include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => (isset($model) and $model->{$name}) ? __('Leave empty for immediate display of the slider.') : __('Empty for immediate display of the slider.') - ]) diff --git a/resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php b/resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php deleted file mode 100644 index 571de8e..0000000 --- a/resources/views/bo/partials/inputs/search-belongs-to-dropdown.blade.php +++ /dev/null @@ -1,28 +0,0 @@ - -@php -if (old($name)) { - $model = $targetModel::find(old($name, [])); - $modelSelected = [ - 'id' => $model->id, - 'name' => $model->name, - 'value' => $model->id, - ]; -} -$data = [ - 'readonly' => $readonly, - 'name' => $name, - 'targetModel' => $targetModel, - 'routeName' => $routeName, - 'modelRelated' => $modelRelated, - 'modelSelected' => $modelSelected, - 'placeholder' => $placeholder, -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper, -]) diff --git a/resources/views/bo/partials/inputs/select-multiple-enum.blade.php b/resources/views/bo/partials/inputs/select-multiple-enum.blade.php deleted file mode 100644 index a4f3dfc..0000000 --- a/resources/views/bo/partials/inputs/select-multiple-enum.blade.php +++ /dev/null @@ -1,16 +0,0 @@ -@php -$data = [ - "name" => $name, - "label" => $label, - "value" => $value ?? [], - "placeholder" => $placeholder, - "itemsSelected" => $itemsSelected, - "itemsList" => $itemsList, - "itemLimit" => $itemLimit, - "showSpecificItem" => $showSpecificItem ?? null, - "errors" => $errors->getBag("default")->getMessages() ?? [], - 'helper' => $helper, - 'required' => $required -]; -@endphp -
diff --git a/resources/views/bo/partials/inputs/text-html.blade.php b/resources/views/bo/partials/inputs/text-html.blade.php deleted file mode 100644 index 17b9af0..0000000 --- a/resources/views/bo/partials/inputs/text-html.blade.php +++ /dev/null @@ -1,20 +0,0 @@ -@if(!empty($label)) - -@endif -@php -$data = [ - 'name' => $name, - 'text' => old($name, $model->{$name} ?? $value ?? '') -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper ?? __('crud.minicrud.text_warning', ['number' => 15]) . '. ' . __('validation.min.string', [ - 'attribute' => $input['label'], - 'min' => 15 - ]), -]) diff --git a/resources/views/bo/partials/inputs/text-list-items.blade.php b/resources/views/bo/partials/inputs/text-list-items.blade.php deleted file mode 100644 index 5641ec9..0000000 --- a/resources/views/bo/partials/inputs/text-list-items.blade.php +++ /dev/null @@ -1,31 +0,0 @@ -
-
-
- -
-
-
-
- @php - $data = [ - 'itemList' => old($name, $model->{$name} ?? []) ?? [], - 'itemColumns' => $itemColumns, - 'itemType' => $itemType, - 'itemLimit' => $itemLimit ?? [], - 'inputName' => $name, - 'inputPlaceholder' => $inputPlaceholder, - 'header' => $header ?? false, - 'errors' => $errors->getBag('default')->getMessages() ?? [] - ]; - @endphp -
- @include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper, - ]) -
-
-
diff --git a/resources/views/bo/partials/inputs/timestamp-datetime.blade.php b/resources/views/bo/partials/inputs/timestamp-datetime.blade.php deleted file mode 100644 index ea9c701..0000000 --- a/resources/views/bo/partials/inputs/timestamp-datetime.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/tinyint-boolean.blade.php b/resources/views/bo/partials/inputs/tinyint-boolean.blade.php deleted file mode 100644 index 5e4440d..0000000 --- a/resources/views/bo/partials/inputs/tinyint-boolean.blade.php +++ /dev/null @@ -1,14 +0,0 @@ -
- - {$name} ?? false)))) checked @endif> -
-@include('modules.input-error', [ - 'inputName' => $name, 'helperId' => $id."Help", 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/tinyint-enum.blade.php b/resources/views/bo/partials/inputs/tinyint-enum.blade.php deleted file mode 100644 index 302f187..0000000 --- a/resources/views/bo/partials/inputs/tinyint-enum.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@if(!empty($label)) - -@endif - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/varchar-multiline.blade.php b/resources/views/bo/partials/inputs/varchar-multiline.blade.php deleted file mode 100644 index 6906f56..0000000 --- a/resources/views/bo/partials/inputs/varchar-multiline.blade.php +++ /dev/null @@ -1,27 +0,0 @@ -{{-- $id : id de l'input --}} -{{-- $label : Libellé de l'input --}} -{{-- $name : name de l'input --}} -{{-- $model : instance du model --}} -{{-- $required : l'input est obligatoire ? (true/false) --}} -{{-- $placeholder : texte visible dans l'input lorsque son contenu est vide --}} -{{-- $helper : texte visible en dessous de l'input --}} - -@php -$data = [ - 'id' => $id, - 'class' => 'form-control', - 'name' => $name, - 'placeholder' => $placeholder, - 'ariaDescribedby' => "{$id}Help", - 'required' => $required, - 'value' => old($name, $model->{$name} ?? '') -]; -@endphp -
-@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/bo/partials/inputs/varchar-picture.blade.php b/resources/views/bo/partials/inputs/varchar-picture.blade.php deleted file mode 100644 index c054913..0000000 --- a/resources/views/bo/partials/inputs/varchar-picture.blade.php +++ /dev/null @@ -1,15 +0,0 @@ -@php -$data = [ - 'id' => $id, - 'name' => $name, - 'helper' => $helper, - 'width' => $width, - 'height' => $height, - 'value' => $model->{$name} ?? $value ?? '', - 'preview' => $preview ?? false, - 'browseEvent' => $browseEvent ?? false, - 'required' => $required ?? false, -]; -@endphp -
-@include('modules.input-error', ['inputName' => $name, 'helper' => null]) diff --git a/resources/views/bo/partials/inputs/varchar.blade.php b/resources/views/bo/partials/inputs/varchar.blade.php deleted file mode 100644 index fa79d0a..0000000 --- a/resources/views/bo/partials/inputs/varchar.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@if(!empty($label)) - -@endif -@if(!empty($hasWordCounter ?? false)) -
$id])'>
-@endif - -@include('modules.input-error', [ - 'inputName' => $name, - 'helperId' => $id."Help", - 'helper' => $helper -]) diff --git a/resources/views/breadcrumbs/breadcrumb-body.blade.php b/resources/views/breadcrumbs/breadcrumb-body.blade.php deleted file mode 100644 index 2f17974..0000000 --- a/resources/views/breadcrumbs/breadcrumb-body.blade.php +++ /dev/null @@ -1,12 +0,0 @@ -@hasSection('breadcrumb') -@if(Breadcrumbs::exists(app()->view->getSections()['breadcrumb'])) -{{ call_user_func_array('Breadcrumbs::render', array_merge( - [app()->view->getSections()['breadcrumb']], - !empty($brParam) ? (is_array($brParam) ? $brParam : [$brParam]) : [] -)) }} -@endif -@elseif(request()->route() != null) -@if(Breadcrumbs::exists(request()->route()->getName())) -{{ Breadcrumbs::render(request()->route()->getName()) }} -@endif -@endif diff --git a/resources/views/breadcrumbs/breadcrumb-head.blade.php b/resources/views/breadcrumbs/breadcrumb-head.blade.php deleted file mode 100644 index b2d8502..0000000 --- a/resources/views/breadcrumbs/breadcrumb-head.blade.php +++ /dev/null @@ -1,9 +0,0 @@ -@hasSection('breadcrumb') -@if(Breadcrumbs::exists(app()->view->getSections()['breadcrumb'])) -{{ Breadcrumbs::view('breadcrumbs::json-ld', app()->view->getSections()['breadcrumb'], $brParam ?? null) }} -@endif -@elseif(request()->route() != null) -@if (Breadcrumbs::exists(request()->route()->getName())) -{{ Breadcrumbs::view('breadcrumbs::json-ld', request()->route()->getName()) }} -@endif -@endif diff --git a/resources/views/breadcrumbs/breadcrumb-layout.blade.php b/resources/views/breadcrumbs/breadcrumb-layout.blade.php deleted file mode 100644 index e9ff09d..0000000 --- a/resources/views/breadcrumbs/breadcrumb-layout.blade.php +++ /dev/null @@ -1,17 +0,0 @@ -@if (count($breadcrumbs)) - -@endif diff --git a/resources/views/emails/mail-created-plain.blade.php b/resources/views/emails/mail-created-plain.blade.php deleted file mode 100644 index b987446..0000000 --- a/resources/views/emails/mail-created-plain.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -Bonjour {{ $user->name }}, -Votre compte {{ config('app.name') }} vient d'être créé. - -Vous pouvez vous y connecter sur {{ config('app.url') }} - -Votre identifiant est votre email. -Votre mot de passe est le suivant: {{$pwd }} -Merci d'enregistrer celui-ci dans un gestionnaire de mot de passe et de supprimer cet email au plus vite. diff --git a/resources/views/emails/mail-created.blade.php b/resources/views/emails/mail-created.blade.php deleted file mode 100644 index c60da03..0000000 --- a/resources/views/emails/mail-created.blade.php +++ /dev/null @@ -1,15 +0,0 @@ - - - - {{ config('app.name') }} - - - -

Bonjour {{ $user->name }},

-

Votre compte {{ config('app.name') }} vient d'être créé


-

Vous pouvez vous y connecter sur {{ config('app.url') }}


-

Votre identifiant est votre email.

-

Votre mot de passe est le suivant : {{$pwd }}

-

Merci d'enregistrer celui-ci dans un gestionnaire de mot de passe et de supprimer cet email au plus vite.

- - diff --git a/resources/views/emails/new-ticket.blade.php b/resources/views/emails/new-ticket.blade.php deleted file mode 100644 index bf19818..0000000 --- a/resources/views/emails/new-ticket.blade.php +++ /dev/null @@ -1,13 +0,0 @@ -

Bonjour,

-

Un nouveau ticket (n°{{ $ticket->id }}) a été créé sur le support :

-
    -
  • Projet : {{ $ticket->site->name }}
  • -
  • Titre : {{ $ticket->title }}
  • -
  • Type : {{ $ticket->type->label() }}
  • -
  • Créé par : {{ $ticket->user()->withTrashed()->firstOrFail()->name }}
  • -
-

- Description :
- {!! clean(nl2br($ticket->text)) !!} -

-

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/emails/ticket-mention.blade.php b/resources/views/emails/ticket-mention.blade.php deleted file mode 100644 index 6c19367..0000000 --- a/resources/views/emails/ticket-mention.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -

Bonjour,

-

Vous avez été mentionné sur le ticket n°{{ $ticket->id }}:

-
    -
  • Projet : {{ $ticket->site->name }}
  • -
  • Titre : {{ $ticket->title }}
  • -
  • Type : {{ $ticket->label }}
  • -
  • Créé par : {{ $ticket->user()->withTrashed()->firstOrFail()->name }}
  • -
-

{!! clean(nl2br($corpsMaj)) !!}

-

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/emails/ticket-update.blade.php b/resources/views/emails/ticket-update.blade.php deleted file mode 100644 index 69c0951..0000000 --- a/resources/views/emails/ticket-update.blade.php +++ /dev/null @@ -1,10 +0,0 @@ -

Bonjour,

-

Le ticket n°{{ $ticket->id }} à été mis à jour :

-
    -
  • Projet : {{ $ticket->site->name }}
  • -
  • Titre : {{ $ticket->title }}
  • -
  • Type : {{ $ticket->type->label() }}
  • -
  • Créé par : {{ $ticket->user()->withTrashed()->firstOrFail()->name }}
  • -
-

{!! clean(nl2br($corpsMaj)) !!}

-

Lien vers le ticket : Ouvrir dans un nouvel onglet

diff --git a/resources/views/errors/401.blade.php b/resources/views/errors/401.blade.php deleted file mode 100644 index 294412e..0000000 --- a/resources/views/errors/401.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Unauthorized')) -@section('code', '401') -@section('message', __('Unauthorized')) diff --git a/resources/views/errors/403.blade.php b/resources/views/errors/403.blade.php deleted file mode 100644 index 1ed034e..0000000 --- a/resources/views/errors/403.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Accès interdit')) -@section('code', '403') -@section('message', __($exception->getMessage() ?: 'Vous n\'êtes pas autorisé à acceder à cette page.')) diff --git a/resources/views/errors/404.blade.php b/resources/views/errors/404.blade.php deleted file mode 100644 index 9e23a71..0000000 --- a/resources/views/errors/404.blade.php +++ /dev/null @@ -1,6 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Page non trouvée')) -@section('code', '404') -@section('message', __('Oups.. Cette page n\'est pas ou plus disponible.')) -@section('redirect', true) diff --git a/resources/views/errors/419.blade.php b/resources/views/errors/419.blade.php deleted file mode 100644 index 4c96f0b..0000000 --- a/resources/views/errors/419.blade.php +++ /dev/null @@ -1,6 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Page expirée')) -@section('code', '419') -@section('message', __('Cette page à expiré, vous devrez peut être vous reconnecter afin d\'y accéder.')) -@section('redirect', true) diff --git a/resources/views/errors/429.blade.php b/resources/views/errors/429.blade.php deleted file mode 100644 index a0ac50f..0000000 --- a/resources/views/errors/429.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Trop de requêtes')) -@section('code', '429') -@section('message', __('Il semblerait que votre navigateur ai essayé de charge cette page trop de fois dans un temps rapproché. Merci de réessayer plus tard.')) diff --git a/resources/views/errors/500.blade.php b/resources/views/errors/500.blade.php deleted file mode 100644 index db471e6..0000000 --- a/resources/views/errors/500.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Erreur serveur')) -@section('code', '500') -@section('message', __('Oups, une erreur est survenue. L\'équipe est déjà prévenu par mail. Inutile d\'appeler quelqu\'un est déjà dessus. Merci de réessayer dans un moment.')) diff --git a/resources/views/errors/503.blade.php b/resources/views/errors/503.blade.php deleted file mode 100644 index 0963aeb..0000000 --- a/resources/views/errors/503.blade.php +++ /dev/null @@ -1,5 +0,0 @@ -@extends('errors::layout') - -@section('title', __('Service non disponible')) -@section('code', '503') -@section('message', __('Veuillez nous excuser pour la gêne occasionnée, le service est en maintenance. Inutile d\'appeler quelqu\'un est déjà dessus. Merci de réessayer dans un moment.')) diff --git a/resources/views/errors/illustrated-layout.blade.php b/resources/views/errors/illustrated-layout.blade.php deleted file mode 100644 index 0c8de1a..0000000 --- a/resources/views/errors/illustrated-layout.blade.php +++ /dev/null @@ -1,486 +0,0 @@ - - - - - - - @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 deleted file mode 100644 index 07521b6..0000000 --- a/resources/views/errors/layout.blade.php +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - @yield('title') - - - - - - - - - -
- {{-- FIXME Mettre nouveau logo UWIL --}} -
-
- @yield('message') -
- @hasSection('redirect') - - - - @endif -
-
- - diff --git a/resources/views/errors/minimal.blade.php b/resources/views/errors/minimal.blade.php deleted file mode 100644 index 8534a57..0000000 --- a/resources/views/errors/minimal.blade.php +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - @yield('title') - - - - - - - - - - -
-
-
-
- @yield('code') -
- -
- @yield('message') -
-
-
-
- - diff --git a/resources/views/estimations/create.blade.php b/resources/views/estimations/create.blade.php deleted file mode 100644 index 3d1da93..0000000 --- a/resources/views/estimations/create.blade.php +++ /dev/null @@ -1,26 +0,0 @@ -@extends('layout.app') - -@section('bodyClass', 'col-md-8') - -@section('content') -
-
-

- - {{ $ticket->full_name }} - @if ($ticket->is_internal)@endif - {{ $ticket->type->label() }} -  {{ __('Créer une estimation') }} -

-
-
-
- @csrf - @include('estimations.form-inputs') -
- -
-
-
-
-@endsection diff --git a/resources/views/estimations/form-inputs.blade.php b/resources/views/estimations/form-inputs.blade.php deleted file mode 100644 index c467b0a..0000000 --- a/resources/views/estimations/form-inputs.blade.php +++ /dev/null @@ -1,21 +0,0 @@ -
- - - @include('modules.input-error', [ - 'inputName' => 'amount', 'helperId' => 'amountHelper' , 'helper' => __('Le montant en homme jour estimé.') - ]) -
-
- - - @include('modules.input-error', [ - 'inputName' => 'brand_id', 'helperId' => 'creditAccountHelp' , 'helper' => __('Le compte de la marque à débiter') - ]) -
diff --git a/resources/views/estimations/pendingCard.blade.php b/resources/views/estimations/pendingCard.blade.php deleted file mode 100644 index d0688df..0000000 --- a/resources/views/estimations/pendingCard.blade.php +++ /dev/null @@ -1,58 +0,0 @@ -
-
- {{ __('Estimation faite par :user', ['user' => optional($estimation->estimator)->name ?? 'utilisateur supprimé']) }} -
-
-
-
-
- {{ __('Temps estimé :time jours/homme', ['time' => $estimation->amount]) }} -
- @if($estimation->status->equals(App\Enums\Credit\EstimationStatusEnum::pending)) -
- {{ __('En attente') }} -
- @endif - @if($estimation->status->equals(App\Enums\Credit\EstimationStatusEnum::accepted)) -
- {{ __('Validé par :user', ['user' => optional($estimation->validator)->name ?? 'utilisateur supprimé']) }} -
- @endif - @if($estimation->status->equals(App\Enums\Credit\EstimationStatusEnum::refused)) -
- {{ __('Refusé par :user', ['user' => optional($estimation->validator)->name ?? 'utilisateur supprimé']) }} -
- @endif - @can('validateEstimate', $ticket) - @can('answer', $estimation) -
-
- @csrf - - -
- @if (auth()->user()->role->equals(App\Enums\Users\RoleEnum::developper)) -
- @csrf - -
- @else -
- @csrf - - -
- @endif -
- @endcan - @endcan -
-
-
-
diff --git a/resources/views/front/app.blade.php b/resources/views/front/app.blade.php new file mode 100644 index 0000000..4d009ad --- /dev/null +++ b/resources/views/front/app.blade.php @@ -0,0 +1,29 @@ + + + + + + + + {{ config('app.name') }} + + + + + + + + + @routes(nonce: $nonce ?? '') + @if (app()->hasDebugModeEnabled()) + @viteReactRefresh + @endif + @vite(["resources/ts/{$page['component']}.tsx", 'resources/sass/front/app.scss']) + @inertiaHead + + + + @inertia + + + diff --git a/resources/views/layout/app.blade.php b/resources/views/layout/app.blade.php deleted file mode 100644 index d657902..0000000 --- a/resources/views/layout/app.blade.php +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - {{ config('app.name') }} - @yield('title') - - - - - - - - - - - - - - - - - - - - - @vite(['resources/sass/bo/bo.scss']) - @stack('styles') - - - - @include('layout.nav') -
-
-
-
- @auth - @foreach ($informations as $information) - - @endforeach - @endauth - - @include('modules.flash-messages') - @yield('content') -
-
-
-
- @include('layout.footer') - @stack('scriptsConstants') - @include('modules.script-constants') - @vite(['resources/ts/bo/bo.ts']) - - @stack('scripts') - - - diff --git a/resources/views/layout/footer.blade.php b/resources/views/layout/footer.blade.php deleted file mode 100644 index d6710d2..0000000 --- a/resources/views/layout/footer.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -
-
- {{ $name }} - {{ $version }} - - - UWIL - © {{ date('Y') }} -
-
diff --git a/resources/views/layout/nav.blade.php b/resources/views/layout/nav.blade.php deleted file mode 100644 index 8991ccb..0000000 --- a/resources/views/layout/nav.blade.php +++ /dev/null @@ -1,125 +0,0 @@ - diff --git a/resources/views/modules/flash-messages.blade.php b/resources/views/modules/flash-messages.blade.php deleted file mode 100644 index 2b99fd2..0000000 --- a/resources/views/modules/flash-messages.blade.php +++ /dev/null @@ -1,40 +0,0 @@ -@if ($message = Session::get('success', Session::get('bo.success'))) - -@endif - -@if ($message = Session::get('error', Session::get('bo.error'))) - -@endif - -@if ($message = Session::get('warning', Session::get('bo.warning'))) - -@endif - -@if ($message = Session::get('info', Session::get('bo.info'))) - -@endif - -@if ($errors->any()) - -@endif diff --git a/resources/views/modules/input-error.blade.php b/resources/views/modules/input-error.blade.php deleted file mode 100644 index 5a17ab3..0000000 --- a/resources/views/modules/input-error.blade.php +++ /dev/null @@ -1,8 +0,0 @@ -@if($errors->has($inputName)) -
- {{ implode(',', $errors->get($inputName)) }} -
-@endif -@if(isset($helper)) -{{ $helper }} -@endif diff --git a/resources/views/modules/script-constants.blade.php b/resources/views/modules/script-constants.blade.php deleted file mode 100644 index 9dbbeaa..0000000 --- a/resources/views/modules/script-constants.blade.php +++ /dev/null @@ -1,27 +0,0 @@ - diff --git a/resources/views/vendor/mail/html/header.blade.php b/resources/views/vendor/mail/html/header.blade.php deleted file mode 100644 index c2441c4..0000000 --- a/resources/views/vendor/mail/html/header.blade.php +++ /dev/null @@ -1,8 +0,0 @@ - - - - {{-- FIXME Changer le logo par uwil --}} - - - - diff --git a/routes/api.php b/routes/api.php deleted file mode 100644 index b3d9bbc..0000000 --- a/routes/api.php +++ /dev/null @@ -1 +0,0 @@ -push(__('models.classes.packages'), route('bo.packages.index')); -}); -Breadcrumbs::for('bo.packages.create', function (Generator $trail) { - $trail->parent('bo.packages.index'); - $trail->push(__('crud.actions.create'), route('bo.packages.create')); -}); -Breadcrumbs::for('bo.packages.edit', function (Generator $trail, Package $package) { - $trail->parent('bo.packages.index'); - $trail->push(__('crud.actions.edit'), route('bo.packages.edit', $package->id)); -}); - -// * INFORMATIONS -Breadcrumbs::for('bo.informations.index', function (Generator $trail) { - $trail->push(__('models.classes.informations'), route('bo.informations.index')); -}); -Breadcrumbs::for('bo.informations.create', function (Generator $trail) { - $trail->parent('bo.informations.index'); - $trail->push(__('crud.actions.create'), route('bo.informations.create')); -}); -Breadcrumbs::for('bo.informations.edit', function (Generator $trail, Information $information) { - $trail->parent('bo.informations.index'); - $trail->push(__('crud.actions.edit'), route('bo.informations.edit', $information->id)); -}); - -// * USERS -Breadcrumbs::for('bo.users.index', function (Generator $trail) { - $trail->push(__('models.classes.users'), route('bo.users.index')); -}); -Breadcrumbs::for('bo.users.create', function (Generator $trail) { - $trail->parent('bo.users.index'); - $trail->push(__('crud.actions.create'), route('bo.users.create')); -}); -Breadcrumbs::for('bo.users.edit', function (Generator $trail, User $user) { - $trail->parent('bo.users.index'); - $trail->push(__('crud.actions.edit'), route('bo.users.edit', $user->id)); -}); - -// * TICKET_TYPES -Breadcrumbs::for('bo.ticket_types.index', function (Generator $trail) { - $trail->push(trans_choice('models.classes.ticket_types', 2), route('bo.ticket_types.index')); -}); -Breadcrumbs::for('bo.ticket_types.create', function (Generator $trail) { - $trail->parent('bo.ticket_types.index'); - $trail->push(__('crud.actions.create'), route('bo.ticket_types.create')); -}); -Breadcrumbs::for('bo.ticket_types.edit', function (Generator $trail, TicketType $ticket_type) { - $trail->parent('bo.ticket_types.index'); - $trail->push(__('crud.actions.edit'), route('bo.ticket_types.edit', $ticket_type->id)); -}); - -// * COMPANIES -Breadcrumbs::for('bo.companies.index', function (Generator $trail) { - $trail->push(__('models.classes.companies'), route('bo.companies.index')); -}); -Breadcrumbs::for('bo.companies.create', function (Generator $trail) { - $trail->parent('bo.companies.index'); - $trail->push(__('crud.actions.create'), route('bo.companies.create')); -}); -Breadcrumbs::for('bo.companies.edit', function (Generator $trail, Company $company) { - $trail->parent('bo.companies.index'); - $trail->push(__('crud.actions.edit'), route('bo.companies.edit', $company->id)); -}); - -// * INVOICES -Breadcrumbs::for('bo.invoices.index', function (Generator $trail) { - $trail->push(__('models.classes.invoices'), route('bo.invoices.index', ['status' => InvoiceStatusEnum::opened])); -}); -Breadcrumbs::for('bo.invoices.create', function (Generator $trail) { - $trail->parent('bo.invoices.index'); - $trail->push(__('crud.actions.create'), route('bo.invoices.create')); -}); -Breadcrumbs::for('bo.invoices.edit', function (Generator $trail, Invoice $invoice) { - $trail->parent('bo.invoices.index'); - $trail->push(__('crud.actions.edit'), route('bo.invoices.edit', $invoice->id)); -}); -Breadcrumbs::for('bo.invoices.show', function (Generator $trail, Invoice $invoice) { - $trail->parent('bo.invoices.index'); - $trail->push(__('crud.actions.show'), route('bo.invoices.show', $invoice->id)); -}); - -// * SITES -Breadcrumbs::for('bo.sites.index', function (Generator $trail) { - $trail->push(__('models.classes.sites'), route('bo.sites.index')); -}); -Breadcrumbs::for('bo.sites.create', function (Generator $trail) { - $trail->parent('bo.sites.index'); - $trail->push(__('crud.actions.create'), route('bo.sites.create')); -}); -Breadcrumbs::for('bo.sites.edit', function (Generator $trail, Site $site) { - $trail->parent('bo.sites.index'); - $trail->push(__('crud.actions.edit'), route('bo.sites.edit', $site->id)); -}); -Breadcrumbs::for('bo.sites.show', function (Generator $trail, Site $site) { - $trail->parent('bo.sites.index'); - $trail->push(__('crud.actions.show'), route('bo.sites.show', $site->id)); -}); - -// * BRANDS -Breadcrumbs::for('bo.brands.index', function (Generator $trail) { - $trail->push(__('models.classes.brands'), route('bo.brands.index')); -}); -Breadcrumbs::for('bo.brands.create', function (Generator $trail) { - $trail->parent('bo.brands.index'); - $trail->push(__('crud.actions.create'), route('bo.brands.create')); -}); -Breadcrumbs::for('bo.brands.edit', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.index'); - $trail->push(__('crud.actions.edit'), route('bo.brands.edit', $brand->id)); -}); -Breadcrumbs::for('bo.brands.show', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.index'); - $trail->push(__('crud.actions.show'), route('bo.brands.show', $brand->id)); -}); - -// * ACCOUNTS -Breadcrumbs::for('bo.credit_accounts.index', function (Generator $trail) { - $trail->push(__('models.classes.accounts'), route('bo.credit_accounts.index')); -}); -Breadcrumbs::for('bo.credit_accounts.credit_logs.index', function (Generator $trail) { - $trail->parent('bo.credit_accounts.index'); - $trail->push(__('crud.actions.historic')); -}); - -Breadcrumbs::for('bo.brands.credit_accounts.index', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.index'); - $trail->push(__('models.classes.accounts'), route('bo.brands.credit_accounts.index', $brand)); -}); -Breadcrumbs::for('bo.brands.credit_accounts.create', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.credit_accounts.index', $brand); - $trail->push(__('crud.actions.create')); -}); -Breadcrumbs::for('bo.brands.credit_accounts.credit_logs.index', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.credit_accounts.index', $brand); - $trail->push(__('crud.actions.historic')); -}); -Breadcrumbs::for('bo.brands.credit_accounts.credit_logs.create', function (Generator $trail, Brand $brand) { - $trail->parent('bo.brands.credit_accounts.index', $brand); - $trail->push(__('crud.actions.credit')); -}); - -// * LABELS -Breadcrumbs::for('bo.labels.index', function (Generator $trail) { - $trail->push(__('models.classes.labels'), route('bo.labels.index')); -}); -Breadcrumbs::for('bo.labels.create', function (Generator $trail) { - $trail->parent('bo.labels.index'); - $trail->push(trans('crud.actions.create'), route('bo.labels.create')); -}); -Breadcrumbs::for('bo.labels.edit', function (Generator $trail, Label $label) { - $trail->parent('bo.labels.index'); - $trail->push(trans('crud.actions.edit'), route('bo.labels.edit', $label->id)); -}); diff --git a/routes/breadcrumbs/front.php b/routes/breadcrumbs/front.php new file mode 100644 index 0000000..ee863e7 --- /dev/null +++ b/routes/breadcrumbs/front.php @@ -0,0 +1,13 @@ +push( + Str::ucfirst(trans('front.homepage')), + route('front.homepage') + ); +}); diff --git a/routes/console.php b/routes/console.php deleted file mode 100644 index b3d9bbc..0000000 --- a/routes/console.php +++ /dev/null @@ -1 +0,0 @@ -group(function () { - - Route::namespace('\App\Http\Controllers\Bo') - ->withoutMiddleware([SecureHeaders::class]) - ->group(function () { - Auth::routes( - [ - 'login' => true, - 'logout' => true, - 'register' => false, - 'reset' => true, - 'confirm' => false, - 'verify' => false - ] - ); - }); - - Route::name('bo.') - ->group(function () { - Route::middleware('auth:backend') - ->group(function () { - // * HOME - Route::get('/', function () { - return redirect()->route('bo.ticket.index'); - })->name('dashboard'); - - Route::middleware(['can:isAdmin']) - ->group(function () { - // * RESOURCES - Route::resource('users', UserController::class)->except('show'); - Route::resource('informations', InformationController::class)->except('show'); - Route::resource('ticket_types', TicketTypeController::class) - ->only(['index', 'edit', 'update']) - ->withoutMiddleware('htmlsanitize') - ->middleware('htmlsanitize:template') - ->parameters(['ticket_types' => 'ticket_type']); - Route::resource('packages', PackageController::class)->except('show'); - Route::patch('/packages/{package}/change-published', [PackageController::class, 'changePublished']) - ->name('packages.change-published'); - Route::resource('invoices', InvoiceController::class) - ->withoutMiddleware('htmlsanitize') - ->middleware(['htmlsanitize:comment']); - Route::resource('companies', CompanyController::class)->except('show'); - Route::resource('brands', BrandController::class); - Route::resource('brands.credit_accounts', AccountController::class) - ->only(['index', 'create', 'store']) - ->parameters(['credit_accounts' => 'account']); - Route::resource('brands.credit_accounts.credit_logs', CreditLogController::class) - ->only(['index', 'create', 'store']) - ->parameters(['credit_accounts' => 'account', 'credit_logs' => 'credit_log']); - Route::resource('labels', LabelController::class)->except('show'); - - // * INVOICES - Route::get('/invoices/json/paginate', [InvoiceController::class, 'jsonPaginate']) - ->name('invoices.json-paginate'); - Route::get('/invoices/{invoice}/download', [InvoiceController::class, 'download']) - ->name('invoices.download'); - - // * SITES - Route::resource('sites', SiteController::class)->except('index'); - Route::get('/sites/json/paginate', [SiteController::class, 'jsonPaginate']) - ->name('sites.json-paginate'); - - // * TICKETS - Route::get('/tickets/json/paginate', [TicketController::class, 'jsonPaginate']) - ->name('tickets.json-paginate'); - Route::post( - '/ticket/{ticket}/create-issue', - [TicketController::class, 'createGitlabIssue'] - ) - ->middleware('can:createGitlabIssue,ticket') - ->name('ticket.create-issue'); - Route::patch('/tickets/{ticket}/change-priority', [ - TicketController::class, - 'changePriority' - ])->name('ticket.change-priority'); - }); - Route::resource('credit_accounts', AccountController::class) - ->only(['index']) - ->parameters(['credit_accounts' => 'account']); - Route::resource('credit_accounts.credit_logs', CreditLogController::class) - ->only(['index']) - ->parameters(['credit_accounts' => 'account', 'credit_logs' => 'credit_log']); - - // * USERS - Route::get('/users/settings', [UserController::class, 'settings']) - ->name('users.settings'); - Route::post('/users/favourite-site', [UserController::class, 'favouriteSiteSubmit']) - ->name('users.favouriteSiteSubmit'); - Route::post('/users/change-password', [UserController::class, 'passwordResetSubmit']) - ->name('users.passwordResetSubmit'); - - // * SITES - Route::resource('sites', SiteController::class)->only('index'); - - // * TICKETS - Route::resource('ticket', TicketController::class)->except(['destroy']); - Route::prefix('/ticket') - ->name('ticket.') - ->group(function () { - // * Estimation - Route::name('estimation.')->group(function () { - Route::get('/{ticket}/estimate', [EstimationController::class, 'estimate']) - ->middleware('can:estimate,ticket') - ->name('estimate'); - Route::post('/{ticket}/estimate', [EstimationController::class, 'estimateSubmit']) - ->middleware('can:estimate,ticket') - ->name('estimateSubmit'); - Route::post('/{ticket}/estimate/answer', [ - EstimationController::class, 'estimatePendingSubmit' - ]) - ->middleware('can:validateEstimate,ticket') - ->name('estimatePendingSubmit'); - Route::post('/{ticket}/estimate/cancel', [ - EstimationController::class, - 'estimateCancelSubmit' - ]) - ->middleware('can:cancelEstimate,ticket') - ->name('estimateCancelSubmit'); - }); - - Route::post('/{ticket}/assignTo', [TicketController::class, 'assignTo']) - ->middleware('can:assignTo,ticket') - ->name('assignTo'); - Route::post('/{ticket}/reopen', [TicketController::class, 'reopen']) - ->middleware('can:reopen,ticket') - ->name('reopen'); - Route::post('/{ticket}/status', [TicketController::class, 'changeStatus']) - ->middleware('can:changeStatus,ticket') - ->name('changeStatus'); - Route::post('/{ticket}/subscribe', [TicketController::class, 'subscribe']) - ->middleware('can:suscribeToTicket,ticket') - ->name('subscribe'); - Route::post('/{ticket}/link', [TicketController::class, 'linkTicket']) - ->middleware('can:linkTicket,ticket') - ->name('link'); - Route::delete( - '/{ticket}/unlink/{linkedTicket}', - [TicketController::class, 'unlinkTicket'] - ) - ->middleware('can:linkTicket,ticket') - ->name('unlink'); - Route::put('/{ticket}/archive', [TicketController::class, 'setToArchive']) - ->middleware('can:changeStatus,ticket') - ->name('archive'); - Route::put('/{ticket}/message/create', [TicketController::class, 'createMessage']) - ->middleware('can:createMessage,ticket') - ->name('message.create'); - Route::put('/{ticket}/message/{message}/update', [ - TicketController::class, - 'updateMessage' - ])->middleware('can:updateMessage,ticket,message') - ->name('message.update'); - }); - }); - - // * Session Ping - Route::get('/ping', function () { - if (request()->isJson()) { - abort(404); - } - return auth()->check() ? response()->json() : response()->json([], 401); - })->withoutMiddleware('auth'); - }); - }); diff --git a/routes/web-front.php b/routes/web-front.php new file mode 100644 index 0000000..0430511 --- /dev/null +++ b/routes/web-front.php @@ -0,0 +1,6 @@ +name('homepage'); diff --git a/storage/app/.gitignore b/storage/app/.gitignore index 8f4803c..fedb287 100644 --- a/storage/app/.gitignore +++ b/storage/app/.gitignore @@ -1,3 +1,4 @@ * +!private/ !public/ !.gitignore diff --git a/storage/app/private/.gitignore b/storage/app/private/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/storage/app/private/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/samlidp/config.php b/storage/samlidp/config.php deleted file mode 100644 index c30ac2d..0000000 --- a/storage/samlidp/config.php +++ /dev/null @@ -1,25 +0,0 @@ - 'https://le-gaulois-pro.s-web.test' - }; - } -} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..d33e644 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,135 @@ +import defaultTheme from "tailwindcss/defaultTheme"; +import forms from "@tailwindcss/forms"; +import typography from "@tailwindcss/typography"; + +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ['class'], + content: [ + './vendor/laravel/framework/src/Illuminate/Pagination/resources/views/*.blade.php', + './storage/framework/views/*.php', + './resources/views/**/*.blade.php', + './resources/ts/**/*.tsx', + './resources/js/Components/ui/**/*.{js,ts,jsx,tsx}' + ], + theme: { + extend: { + typography: { + DEFAULT: { + css: { + p: { color: 'hsl(var(--card-foreground))', margin: '0' }, + }, + }, + }, + fontFamily: { + sans: [ + 'Figtree', + ...defaultTheme.fontFamily.sans + ] + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + }, + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + successive: { + DEFAULT: 'hsl(var(--successive))', + foreground: 'hsl(var(--successive-foreground))' + }, + informative: { + DEFAULT: 'hsl(var(--informative))', + foreground: 'hsl(var(--informative-foreground))' + }, + preventive: { + DEFAULT: 'hsl(var(--preventive))', + foreground: 'hsl(var(--preventive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + }, + sidebar: { + DEFAULT: 'hsl(var(--sidebar-background))', + foreground: 'hsl(var(--sidebar-foreground))', + primary: 'hsl(var(--sidebar-primary))', + 'primary-foreground': 'hsl(var(--sidebar-primary-foreground))', + accent: 'hsl(var(--sidebar-accent))', + 'accent-foreground': 'hsl(var(--sidebar-accent-foreground))', + border: 'hsl(var(--sidebar-border))', + ring: 'hsl(var(--sidebar-ring))' + } + }, + keyframes: { + 'accordion-down': { + from: { height: 0 }, + to: { height: 'var(--radix-accordion-content-height)' }, + }, + 'accordion-up': { + from: { height: 'var(--radix-accordion-content-height)' }, + to: { height: 0 }, + }, + }, + animation: { + 'accordion-down': 'accordion-down 0.2s ease-out', + 'accordion-up': 'accordion-up 0.2s ease-out', + }, + } + }, + safelist: [ + 'bg-successive', + 'text-successive-foreground', + 'hover:bg-successive/90', + 'bg-destructive', + 'text-destructive-foreground', + 'hover:bg-destructive/90', + 'bg-informative', + 'text-informative-foreground', + 'hover:bg-informative/90', + 'bg-preventive', + 'text-preventive-foreground', + 'hover:bg-preventive/90', + ], + plugins: [ + forms, + require("tailwindcss-animate"), + require('@tailwindcss/typography'), + typography, + ], +}; diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php deleted file mode 100644 index ab92402..0000000 --- a/tests/CreatesApplication.php +++ /dev/null @@ -1,22 +0,0 @@ -make(Kernel::class)->bootstrap(); - - return $app; - } -} diff --git a/tests/Feature/ExampleTest.php b/tests/Feature/ExampleTest.php deleted file mode 100644 index 8fbf370..0000000 --- a/tests/Feature/ExampleTest.php +++ /dev/null @@ -1,20 +0,0 @@ -get('/'); - - $response->assertStatus(200); - } -} diff --git a/tests/TestCase.php b/tests/TestCase.php deleted file mode 100644 index 2932d4a..0000000 --- a/tests/TestCase.php +++ /dev/null @@ -1,10 +0,0 @@ -assertTrue(true); - } -} diff --git a/tsconfig.json b/tsconfig.json index b061908..c7898b8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,29 @@ { - "extends": "@vue/tsconfig/tsconfig.dom.json", - "sourceMap": true, "compilerOptions": { - "lib": ["ESNEXT", "DOM", "DOM.Iterable"], "baseUrl": ".", + "allowJs": true, + "module": "ESNext", + "moduleResolution": "bundler", + "jsx": "react-jsx", + "strict": true, + "isolatedModules": true, + "target": "ESNext", + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "noEmit": true, + "skipLibCheck": true, "paths": { - "~/*": ["node_modules/*", "node_modules/@types/*"], - "@/*": ["resources/assets/*"] + "@/*": [ + "resources/ts/*" + ], + "&/*": [ + "resources/assets/*" + ] } }, - "include": ["resources/**/*.js", "resources/**/*.ts", "resources/**/*.vue"], - "exclude": ["node_modules"] + "include": [ + "resources/ts/**/*.ts", + "resources/ts/**/*.tsx", + "resources/ts/**/*.d.ts" + ] } diff --git a/vite.config.ts b/vite.config.ts index 3fae383..adf5ec0 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,117 +1,44 @@ -import legacy from "@vitejs/plugin-legacy"; -import vue from "@vitejs/plugin-vue"; -import laravel from "laravel-vite-plugin"; +import { defineConfig } from 'vite'; +import copy from "rollup-plugin-copy"; +import laravel from 'laravel-vite-plugin'; import path from "path"; -import { defineConfig } from "vite"; -import checker from "vite-plugin-checker"; -import eslint from "vite-plugin-eslint"; -import stylelint from "vite-plugin-stylelint"; +import react from '@vitejs/plugin-react'; export default defineConfig({ - build: { - rollupOptions: { - output: { - entryFileNames: `assets/${ - process.env.NODE_ENV === "local" ? "[name]-" : "" - }[hash].js`, - chunkFileNames: `assets/${ - process.env.NODE_ENV === "local" ? "[name]-" : "" - }[hash].js`, - assetFileNames: `assets/${ - process.env.NODE_ENV === "local" ? "[name]-" : "" - }[hash].[ext]`, - }, - }, - emptyOutDir: true, - sourcemap: process.env.NODE_ENV === "local" ? "inline" : false, - }, - css: { - devSourcemap: process.env.NODE_ENV === "local" ? true : false, - postcss: { - map: { - inline: true, - }, - plugins: [ - require("postcss-discard-comments")({ - removeAll: true, - }), - ], - }, - }, plugins: [ - checker({ - enableBuild: true, - vueTsc: { - root: ".", - tsconfigPath: "tsconfig.json", - }, - typescript: { - root: ".", - tsconfigPath: "tsconfig.json", - }, - eslint: { - lintCommand: - "eslint --fix --quiet -c .eslintrc.json \"./resources\"", - }, - stylelint: { - lintCommand: - "stylelint -q --config \"./.stylelintrc.json\" --fix \"**/resources/**/*.scss\"", - }, - }), laravel({ input: [ - "resources/sass/bo/bo.scss", - "resources/ts/bo/bo.ts", + 'resources/ts/app.tsx', + 'resources/sass/front/app.scss', + 'resources/sass/back/app.scss', ], + refresh: true, }), - stylelint({ - dev: false, - build: true, - cache: false, - chokidar: true, - quiet: false, - include: ["**/resources/**/*.scss", "**/resources/**/*.css"], - exclude: ["node_modules", "vendor"], - lintOnStart: false, - emitError: true, - emitWarning: true, - emitErrorAsWarning: false, - emitWarningAsError: true, - }), - eslint({ - cache: false, - extensions: ["js", "ts"], - include: "**/*.ts", - exclude: ["node_modules", "vendor"], - lintOnStart: false, - emitWarning: true, - emitError: true, - failOnWarning: false, - failOnError: false, - }), - vue({ - isProduction: process.env.NODE_ENV !== "local" ? true : false, - exclude: ["node_modules", "vendor"], - }), - legacy({ - targets: "last 3 version, not dead, >0.3%", - renderLegacyChunks: false, + react(), + copy({ + targets: [ + { + src: path.normalize("resources/favicons/front/*"), + dest: path.normalize("public/") + }, + { + src: path.normalize("resources/favicons/back/*"), + dest: path.normalize("public/favicon-back") + }, + ], + copyOnce: true, + verbose: true }), ], resolve: { - extensions: ["*", ".js", ".ts", ".vue"], alias: [ { - find: "vue", - replacement: "vue/dist/vue.runtime.esm-bundler.js", - }, - { - find: "@", + find: "&", replacement: "/resources/assets", }, { - find: "~", - replacement: path.resolve(__dirname, "./node_modules"), + find: "@", + replacement: "/resources/ts", }, ], },

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 diff --git a/resources/imageSources/supportweb_favico.png b/resources/imageSources/supportweb_favico.png deleted file mode 100644 index 5d70c73b6694db76e89dffa518fe728eb1ee462b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122662 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 V7FAlj&)?|)l0RidtA+Ig{s#aVm2v<8 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/android-icon-36x36.png b/resources/favicons/back/android-icon-36x36.png new file mode 100644 index 0000000000000000000000000000000000000000..de42461b67b810c4b20c92dc690cfa5b7962a57a GIT binary patch literal 2533 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 Gjei5}7~-@5 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/android-icon-72x72.png b/resources/favicons/back/android-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/android-icon-96x96.png b/resources/favicons/back/android-icon-96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..f2732bf543f3495cf358ee83f9a4ad5c4d18f98d GIT binary patch literal 6559 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 D3F$gh literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-120x120.png b/resources/favicons/back/apple-icon-120x120.png new file mode 100644 index 0000000000000000000000000000000000000000..86811dc1b5a8942a2f1e423193b6ab2d204619cc GIT binary patch literal 8157 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-152x152.png b/resources/favicons/back/apple-icon-152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..ff41715245508dd72d1c66b5a6bc91a77bc86603 GIT binary patch literal 11508 zcmcI~byQnH)MpBzcyTC{;uhQ~ZbgE-dkBys!KHW#v_Nq!?pEC0rNyN!P`tQ16yNka z`^njJ_UvDKl6mto^Si%0nVEa%&U+KCp{9U~MS%qX0C2&IZ?%wl>c52X9C>}&OGAsy zfVR@A(f~kB4EDVx8uB*{L{Uo>0C>*?00e~q0Jq4ZpdA3fgBt+Yvj6}@kOXAT8LgUP z$cpDy$_j4*PyaqS9mNUA5=>`BLpJ~boA6(HHoX*Zk1RxY2dm1V@1hW3Kc`zwiZ}-V zK)K+z(mLM14>Nt-O@3x>OI~+gmnrGSE8SU*M6w&#)&dI2*pC-u?w%|O6A8Hov2 zQ%mK${3)P6=FIo==KDyMvQMWT3CXtC?I^uk-1@VVXCbg{749Zuzb?nvw#RMd3ucuz z%TR6X=|>D&X#_qY?cpF9%3T^UY#WFXoJdnpzpthg(%q?Euq1l)CMj95?P!@EXt&!{ zH&d6*sFv1=x!91G*45ceI)AX zCwFFUObmluIV44j-I!AEm;`>2Xlv^#-sPI{%hpwa+jv6@59GB`XxT%w1gAozK%w>1 z;H_mgf@G+EUhTm?);5J=u9R?>_7z;3R+j=?eJm$(Es9H@>DRVv_$CA;L!rxx%@k|5(l?%8}v;LuFrvC+psPU+6#=<~%9(B=1SXAzUAeJl=+TV2A$OdMW4r)2=UVvdU$E9{?M=42 z8?7gMnaNkGwOw3$a=K8l-2O=eqYd?_?AmR6R~X7c6mxj~nN|NWZqGq34jWl=Z3$}# zZ$-_stB~~KntH16RZ5i4#Ab-y^9rZJiSe)PywhO=I)R+3RVDsft zP$FV49xxWER8uY%J4Pjg)wA5mVmcMF9o0xjdX2|G=UBqLrg8J>;D6;Gdr*^m{Q#&3{sn+A)hy#lpOoAr8Hxz!vD{+pl|B zIEssIgVWRPRA8W0Q{nb073P!Xsgb}>ayuE~rGqbJKb<$T-kyakmOUak&S3*KBNEfGPjN6zD6^7>-X+hph#>3*6mIGZ|FW|ErEr^>5;#+^i? z9GoU2p%OE*lv4fj%OJV`3k(}$=5oif9Dd5~4Cy^Ad#=H3)u@I@6E=i>Yjm19xLv`87oZi^fy~T!GtjQp0 z?bCqi+9=eb+)meNIaajXpmCBB*34%EH#7s|>@ivxA_|0*SCg&1a-q33EIWP5!I0d! zbZ&47(hi3)dkT;az_6`8K3+yrFRhb{T1ByzPIfrUBtVh&CD^EaMqGv;=JVUyQnt2! z@*`(QE~4%4l9kbg!IhYI*;mP8Js9>^EJHox5G5l;S}i>?jM*!7>mC2aO83!epFfv4 z*n2n$yEWT30_y}{y1pyro|?7{t8n`_oMdJZ+(N(;%si0@k%88Jf98o${K|KQD~Jy> z1$<{ezOv*yW4#-}GWe-6ICAVEy$Bp?Cz~}fEK4+OaHMjG`ogJP+)=3Vg+IpMtK5tO zW}KsBX`EYBZsW+OTiTLb_imK%M{R{(VKs-eG@bUZ+(uYqVk1G}LYp#nA_V+3@u8M7 zyx)#ILi^R3FqRE`&oQ9eBHG;6g5fBT68N5|eW|#9Tf%pZ7m(RHmdnigW6(-`O_6ik^2LRk=Qx;SeGcqtl#@{_ z6pE8|NRUbeeT!n6{HFw_$=Cqm&>qJmy?_xXqN_`$eiK~KDaD=-->pi}ik*dJ4>H$LtjzzvkdhWbH;Ss#~2WWMc?UN z9v?zwaZ*VODB(kt=1ak?;%)AkX3(uso-yHHDDQforEPy~ado*#)cvI+jb%W3M(|7E zx#|d!y*?%m>wx8m73SGS8Aa6yFWQ8~VLaB>FVZ}4_)6?wk6`4*9XFfyboXkg%6?p- zNa9E!n~4Wm#0lbNK%D}%EzoPnJ%By z0>$M)k^9P;$w?GppjlKQT-N;+oMWwRFGMr!)N>!;Pah5{D=U@LsA~h$hS(m_5Zcuc zf6#8uh47G_q-v>Kup|c_Q^idFl1$sDQxOI>hI>LLa}<(nZc>+vxfMSVvHY9qEja&(R2l& zKy4+S;`*S-SHl`vXjt_f$; zopsmrsOe3Tsa7BEbSIKP%T|9)_;smen)k6$8wJ0fxC}z{P<|v$gvn}PhIN9i7 zYDZd$_=szfk8kD|%8527LWhdS0OhsJkK1omKs}3w%e5^7{No@x*n6TIIjooA z=?8BFzd0{vxZH9V5{GI{8(4U=!Wf(lq!~UU13IprM7o{XW-GAVaMq*A8dFW3V=PhJ z+-Gfl8k*J5eJInOMVBaqJ9-hMNo`K9!ft)v{@|ooT`&;~p%gZEM3b(dBhbyfbMw5Hy$sY} z-##A#IB+!gtj8rBNq9Zf9)cpHHAy^q7^NewIAc2Fh#DrYG&4}|8K)$zTaz70mi%7C z4sFig?^FImKA(+fy8Dhyb-NVv>XZ#@C7)sp;?oda;P30DBpGKph%j21mt|-{(62`p zbYGh+kI)5G&XaweJqj?MkkiZOt(g$6ONSZs;zqsM6y7SaPrGrUg-pN?JPEHIKlH1@ z*Gslgi8b=Tr0DJwD9_vC@I^_oZdKISdJbYOB8KTC$+*~SD%iv*bXc$(n-q3lp9T<3 z`AKPDk>0uExcpW$NRScY`((lC*J^DF3C*uOu{kwPsP3{)h4As$1G-JJ3p9w3s|4WU zLoxQsj5;^-@?P4lR#{&_Je3dSzSg8@yoIlCNI{`ZM%2r>CF}4l%~3Z>TYLxEw^a;( z>WM}<6ji}NBp#OW%Rnmtu&B^Gzae{S!~M`L&Y0L9p%v2}wfJR&<;q}`O+~b)yP=Z1 zxjc7tIix$^jyH_SyUHzfJ?^EqU2rTHODv*VfgsX^p<2AFL&gk$6qmz!3PGqOD={HB z880&_Ol-SQ(?j0!*AYWnu`ir<3pakXG%5fI9Qd<`A6bSazVwwD#=0yfvbt-7c>`!t zKF1E$ZxpSR4;&n$bHNgD6gsmBZ^rre8iE#MMaV!R;kOU_%l7#{^c3)o&KIg7NI zlL$%?O4Ot{^ZA2=l7qQJ4zAwr=T1IjW%+vn>8{^7|0cS8C@nKO$w@dU$mUq`VoFC_ zu{R$|PYcA(bbS z_j_r>XHgxC#)|bSnn_$&$zCc6FeXc$9SC&8YHBWv4J*S3bJ1yuf|ykXloc{2QMO@{ zyJw{wmaYt0Z?8)zNv~ErBgi>>02&&G8<0x`;q^%dO?8`@ELLNK+}w(PKwCW{al3E^ zjTK1U(+V}+VnC`?n~!hMgqaN(axap?&dRtmE4Kf)O^|@7|4y zwKs&vW`t-u`7Hg)?>E_cDA_AOR!*>Bp*<|iu0omaWZ91PSph$@tN0?VcFJ%Uy0tNh zcy1e4arL=(SX^HG`S}P}ltPlma0M5{y!ob8a-?nfjH|oI!WsFtl(TxVh#Y%!0 z8&)i74U8@9;H`P8Ho>!G3oI6_m*s{UdrN{rFzmjrrIoS9tDYaHH$j%lrzTGX~;QT5>Y6#VU2p-&iL|;%cVaBwV7EsryC!`Q&*e%$-cj-4|(DAzfO1#zlsyN&%^V)ddEpIQj_;I+}6&rcT}aA56H)B==1iw+lcj9Q8fBL@w|?wRED39Z0xb6pFU z5mTs&!>&g-)2YugS3#2g=Kci;d-=`cka*0|pE)VYrAZp$2!ZJsl3jVZJ53wP5Ge|Y zdJRl@Fr!g3ia5Tj(RUfeCQCB(1*>0i^5(-LXIBr}=ufDlOk9kcKfG`lE#;sDq|(Uef}9O!?sRP2<`Wb#zSP)aUW~3E%=>rC|!1A*vdwK#UgiAxiYA z#3=l+t!gV@(_v2ovOo`TcPyxle};d)*@fQx>2?;x&MpQiElSL5Xh`b1{n}-<|Et0- zEqTwCVS(Brj-L^-M$b@PRXL!O{)He!Mw#idYJCTVYl$8vfod+IWBu z9ZNV}9beXppOWl`o+S#8drvw#qYbNAUDn6#z#tnP`lq_H+V!_0N}O$&9nCm8$@tXc zUy~{Kn1z1~(Qv=vV@qQoO4 z_ZR7JGw=-I@;@Y5|$(K<#0@>c;x|lPI{~hoOK| zYxMox9Oa&=OGI|PlTiA?T)KEb!WokD^=srY{PvkD znOT2rk$gd|<6|A3&0#xyzBW{W+CR}-EDLlQ;ykE>LgXvI|GN^?_JF}XD((u>e#d3L z{r5Offmg)JTz&RqW;u~-mcS3!kPgWkTIR;bU|qa>4(iU+=Mp*C?U5iK*A4L=!0&|x zpVeS=??2(piVP;DNoJ+)HJSuQHi^v~L_&XgA) zR%J~tce!et`M>pAN&ZB8ZrLT@O)eDN(IY)nqt|)YaqM!jGxeE2#Zjhl$sy{Qrj-x}5RqW7PoFl^R!llsG# zk~g<2bxvz2zse00&ILz}5iRi9uT`CCduD^O7{Rd=^19-k!XuLrN{2mvzX47g{rh96 zr5K6UiR3{EJ%?QQM(@ejB4-y)1)0z3uobU7raErSL8k3E70sWg3gmw1dtmIEE;yQQC+KmQ=?FK0QdZ?4o_gK6&aGD(H^_rh5BviL=3 z-3M!aC6SsX5&!EYulafy5uW%3erRZ@u;UPNIqBZnVNn-51r9~O9$_slV;eR+jgz#6 z-;jLD!z!>0!pDGG;a>C9pZh#FdqCULfZO!SSiHc)pRWnc+f1SNe=Ps7nb6zfWicTb zEqVRMBk&dk^mMlmmU@Tc#vrq>E=jlibG)FCtTCVpzHN-t+2tj(tQpaZ7HQz~q+il; zYveZ|cg0SmVS_LTmKdt9*rXv;@AJk!)&ftaA`!`@-;R)=_ywC)sg#lZzw& zPduAOI0M~?YjQ2I4ZHkhD_-^Ab+0@!V(UaxkenFR_G-_E&(T|g<+^4>Sd zILhG@+v{f|T(-;YJ_bsf=2RQO`=oBC?N;g5tAmOP&t-sQRbQIl(jVe$e(xN2U;`z{ ztTd+V1l+(v5*g?p>Lo8RrW%voK6!7e$vP$+VHy&l&{|*Fzd1)G4xnv5En@?5ad?c2 zDnS*j@Ls&IdA;yHyqzKSPVnmTGERkwS*38PkYrPSl>njZ7ID)S!)__3N)YZsN?-)T z?ZpV%lHGyrC$-|Sxm1!?pt!k*TopfNt|dRXcRf-rRY~l-&)SX{h5q3G{3l-JxiF;5 z0FKAJ?2VagueM|@p#bvbi`aMX8QS`xVQdI)ZcdGlC+uD0UUN>(%cGOYousZxlL3Xo zZ1A>N3j2?#BcIV%kLAveVxNz_qPY2e{Gz%}9AT-L2qi2rRvL)PMrC^@BZ578l}`1} zp>cM1JSQ*o2e%R%SpGJ%LDE^5I{%P^^6^v>|9HQbGP5}}N|RXr7PbGqS~Hs1&jhIi z;$K{iWCt@|QkqzNBE4D1{;zh=wXfsSPf|i0WsI4MpldUXLLq)8)clj%6WezyPZAye z{vh5K)7^MRWu}G=55aH72vt%i5`kHg^RfL`H$xmBy(^7nJirLu_Y)>I;eaAf2>zg%^(R=yuJA0y^uhrInns~kXo-2*CPqu~j zE%#7OjesdeVonDdSG%VWIeI$%=M=mv2(%2x0}!uZ4GVZ(%e&mu8mfdOaP7F z^AvLzIlTwV+Z7X9uC{M=p`wEZ!o{(0KX*(aQw?Z3_zNj3fdZp^4Iz(?6){Q7{8By} z<3zvbXf1}$MDbQW^$j>y zXGQ^+FX0l-)K$xFLTyhs>Ffd991;wKf6+<{OHMBn?6nFZ@&q_0&*LysXv9~rpk>4CVzez2v7^M;?5GN+DncABE#FmQ|Su?uvMRHh6 z(X{w+;wbM*_LY_=WIdZXgyz@mNcgPz+S0LqI(+43+wUF{I2aRn54k#CP~d;Z1}jXQ zcbszlOgPupnB> zo`G#+O(sm`gsw-*-|R0(V!s#RbH79+*3gx{-iOH#)9>GCeG!U7tl>Ljit~E0PjUZ| zSerz{W%pxA%NFU7&JBAZV>C1spCO(}!t^Y-A?0-HGDYkC{fyZ8g6&+p51;S#QDJd0 zGjw>Pav_>}wW+D;eCaqKWqH|*%I`#acx1%Q>^hJb_+j)l4{0*6`S{GouQ~U#`SJc% z;jaLZFb8d#u7E9fjUuqKG?9SNqV!$WBgrU(637pl^keCYY$w!mXxZV+r(tOrn5;#t z*z+f+CyDXdFVY*9DaJf&@+f7Bn|@}A9%FdNK;4AIh<#PZV3xS=&hc^63^-k`H86jQ zMe<=+9mK`8J!1aI+q1ecmc;Zyk^<4<%pvW8%UQ;vMaW3n_dQFC^wZgiPD!lY zEJ%z;`bvrWHN3ijhxgIQ@|Aa$Vc`*660bZ`%PnT*NH>E@hCb@&Kv=dBRlSBnG0}N5Nx#{6dYNyvI-M7sDCMPt5k<6+q$o&+UF8_pv#plsjU9391O zF5s_sAzpQyag{Aw6qRj9t>y8|rV4syX5-9~H{gKt^cClm)gH`iPcJV%F|qrhCemHf z=GN9U4VM0s6X(4&(XhD&d$Jk>ob2Nb(S4S}PXkuSK#VWRsg(g=hTC>LBk?A}U)?hb zfp4MsUG>t^sjEJ$a_x;QIP$UiyTzgv3yeU3gU|^;Ld#u1lcS7Cqbcu;=?(Zzz!J9` zOB)=^6gNjTi*j<~SLzpa<1u$5>3u?j)TTP4rWAc4;y#u))D>F<%ep|*bt>^<28_+q zaba#*J>K8^`0>NK-QOv+9T^(7Ki=;Dn~{d-rAIB|zE>w33F>O8s)osOEW}pd;~B}L ztBVo%t0{;UG!YMJh>DSgC?ZwKvd~3AB#K^>!HOq~vpUmOllho)X^Jdte^p3|}t z@{PyOpFbVus)JL^-h*%q^`b(j~Ai8A=Fi+razSS8m>wm0}(s47o~|aJd=jx>t5;*(9xO z{)4r*x2I)l$w0U^nJX)HH3t#9UUV}&+{41cYX18t67yppxksIcIT_ylhNId1LTFOG zhKz=}@wb)78zqT=OS=2P4Qs7s!coVQ1*f(s=4`+C?d(7a-JadK8VGuu*RdKJqYLJ* zsVQl8(h(5?4W*j*m+zc9Z??3f*TmRH7>+zJH?Hqmkh8+)pk~N>JJXAaMKu(^zOnIa zQWozN{&WS`(bX+v*ZCM0hU`8X!f+LDmqmBZ_7j<3Rpye(vS=NBE{|(uZ9XouE+OW! z!qy^lg56C|D^8r{T#(B@-_ZiTBR6&=hQ`JtWLa_1i(N z6qdr0uV2?Y?~c|H*qo_HbXkOBV`F|tZrSVqT)DWoxS_x~vb*o@w13}S)Y`B~Nn4}2vGgJR&NC9Hu7@j-fU)o^MNrFnwCLYnvQDIe&5+vcvio@) z+$1d>Jw4Z_hif7+GE!n4G_k(|J(bukrM4@8joUDai8j*A|Tp1_>R1*&)z!ExF7AM&GJ zk#7Zakk7Ppcta8sA~(~nfo^QdvmSyDb5alpeYy~Q>vV|PcDB;=ZN4Tu8{Y=>y(~po z57M4mE`J&SOE3qAjFYYCkG`f#U*fiQ1H4*!3)(&xF7#)!n$iM$EMk$4FjBz&*U1lU z_0xX|*$Di|0j5N8?w18fmpV8o zk9;W5SEl>5q_T3{&t5(5k^1ojJ>YgG+h(*g1pj4N&yv@Qs+*e|(j{yy@T&^Kmq+;~ z#1iN#@li%pYhuV3T5coDD2fHc?M zUYU3A-r3pN<+QYXNn+F2GBwRKA{QokPtOx@auE=4^~dr(y8P*#M`cS%*d5$>e7g0d zVC?re8=^&V!j<<+e=R%vh!R2XPiOnIu*!XMihI6bs3FWUkJs|0ygZo@d1?`uS9pqZ zh4J{y#stSlWh4Dp$B!N(hf0IrQ_SNOS);FGT=OKAG=qEEhw-1u%6|Het|`fdnOufd zZ2xVm+qul%HqGf5mMFSyxOSna;dEA|-?rZ41xg!pzajZ%)+{hx?kE3G(5t>Z)g;uUJg)qcMc6ph`pt&HH|FX(b>|;=SJU02+2YF zpB&auH;60D*&POV0=Q`@$k2f0WCeMI1qC^HIeGLeek&lsO#caXv~=>Yv4psLxI$e4 zNFa@!ySuXp7nhfp7bgq~;e^;x1_D%&5<>qa0k?)a{0H>ENNL_eZ7e+;+-d%4gTNi& z97t zNDSHk;Q8MeeVDbo9RLZLDW}CiLdgFIL>1-;b@y?G0{){_T+U9mlC^qj{|Aq%4iW|6 z5#kdT66WT6BPbrR*MWrK{SO{(*n22|TSg`^PvQVsrT0IobhW?$8<+zW`PaD|o!lMZ zwp=!ro-hd9$&Ks3Cl(hER1hL81hsr4U}-JL%lpRC25QA`&0__HLU{RYc)2-|5}e5P UUB7&thSY!@5Vg0JG8Tyc1$BJ7YXATM literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-180x180.png b/resources/favicons/back/apple-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa31604462c87b078efdde730c38c66f26cf9f8 GIT binary patch literal 14509 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 Q8zuoZAga=}AhXc_1>QfvmH+?% literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-57x57.png b/resources/favicons/back/apple-icon-57x57.png new file mode 100644 index 0000000000000000000000000000000000000000..1713575f8212e64d3f9c37b47e7670afd4f6ed89 GIT binary patch literal 3888 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-60x60.png b/resources/favicons/back/apple-icon-60x60.png new file mode 100644 index 0000000000000000000000000000000000000000..17d0fbf34b56b443552be4fbf33cdd1f51f8458d GIT binary patch literal 4033 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 F{{q&=K8pYV literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-72x72.png b/resources/favicons/back/apple-icon-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..4510fa04ec74d36d47b4de2dde5c534d9d2dbcea GIT binary patch literal 4808 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/apple-icon-76x76.png b/resources/favicons/back/apple-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..7248415fc0a921037e0b1dc5c71b545ce2f2487d GIT binary patch literal 5040 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/favicon.ico b/resources/favicons/back/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..467711c2328e4e5a1acf14f73cc865d9c40ef007 GIT binary patch literal 1150 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/resources/favicons/back/ms-icon-150x150.png b/resources/favicons/back/ms-icon-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..78c8cd00ccc9308179074a3d5c3b2c6101e833ca GIT binary patch literal 11255 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 literal 0 HcmV?d00001 diff --git a/resources/favicons/back/ms-icon-310x310.png b/resources/favicons/back/ms-icon-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d5a8795cd5a159c1dc21baae7654e0449ed104 GIT binary patch literal 33000 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 IZW#1G02b5c&j0`b literal 0 HcmV?d00001 diff --git a/resources/favicons/back/ms-icon-70x70.png b/resources/favicons/back/ms-icon-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..ca90a5b24c3521fa96325447e082ec9c455c1a59 GIT binary patch literal 4672 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�N&zA7c!V+a*+Syhvjl_d@pyWa~%r!15aA97fLWTUyZ%$E1R>#Z666K7R`8^SmA4>FnqGz4`rAZQ_6ZxXUARU%L7MNSLHL zFTf&+SoLkXfWbaDgoPbXUaMj=XV@J|y}Lu&-G8b)zS?-GkLF5}{SZa*{d~7Y^(6FG z{10JW_uXL@W|Bhb!&uJ)R?pu*bu6r`vU6Tm4WvjSu<%QWsH?;O`ObW&uZK#OhxnJJ zG1|7( zWWKJzOsG=6AeyyKMYS^SfbNg?3}^XI<_F5--Bm?z4>KLqLBx;^4EKjDif?3HUELls z`=a$;c0;eJsj*)C;A-oF%*qn)18f;EXuckP{_=GzQB+&J6M>SnT!>8nbrx+r_h{h4 zKAQtE)po||ahxCDe(R8&-7>L|-13DLGo-hJI%r)6#~IVUg5jwA;HnXCRt5M0foMH~!u z@&wy0`mCzzYifQwX64;^?PeXgzDJ?%K#J^WJlAE#QjUBL$ORJ;1~2R}hUXD3~o00d-aW-day6_U&x zU02$*UDxl($;pQX62nV9-^7In?B3xt6~?+3(H&wFU>WKdkE~FwD*0MksElE9e*6dMa-^-gR6kB*Mcw|hCf_pvI0g~5*;A&}ylnuLM^N+f|R zASFj4sHmvOZKlzEM@7HROkGP$>#!|m)Nw(8^Ymo1YAy-Bz^kTbl=Wr8eBxJgI_cfK z(nw6b1!x=N18k8RE@1dEOXF|lo!SgcncgWZY9MPs>fFar6G)Exa)C1rKPbby#EYIO z4)tvj!w>dduwW1d7W)6|I@d!m+OyiVxn-|^*X0;IoW0;b-UK zVdoaq<>nUQ5)k1LVCCWx;o@S5U;TH@?!N_`Tx=k=zW;Xt-D%r)q=3-B5g^vqBGxXh zzU~k^dryGufBvFowq~K`78VwwRswrFf;~OiH7%_jEZuFWWnG+HEuDQ42EKww9W?)` z!v^eO?GADEgt#~ZJhT;MsFmeq1-OL;1lV~vxD9F+6_H@Z{{%Z(I(yk#T6=oAgWUm0 zAho@xr>h7jr?zFZiw)TEKcN4mlv)mKYw6|aN&Rm$YZpfs zFL!DWS4(R!H9Pe`3*>Z^s*ozE|EchBvGw$}bO!_e4dj6w3F2gF2Syf%wF8HXyItqx z>wF}Z^dDB&-pk2KL`2TT+RF*->?tCmiG+FpxGSGJIR6if@;@yiB1+)@m^^M_9w}2d zJtT(Yf9Uz&7z2onr#%1(fmhRjkPx!}0a1rIfjxa)!GQm;iqqBEP7;_Sis-^AkN1`AjV3xX|$_$_S&czA>?ZNXN2Hr!TVur&{#Ee{t5Qi20% U-wo;O9OMYd1<{bJm9Yr>Ut0=p;{X5v literal 0 HcmV?d00001 diff --git a/resources/favicons/front/android-icon-192x192.png b/resources/favicons/front/android-icon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..2d53c6ea91e02180b82474bb4cf1c512190f7ed3 GIT binary patch literal 14197 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