From 0772010119abb149bac3b6c2f1a5729b284b9fab Mon Sep 17 00:00:00 2001 From: James Collins Date: Mon, 27 Nov 2023 08:29:48 +1000 Subject: [PATCH] init --- README.md | 18 +- .../Conductors/AnalyticsConductor.php | 0 .../Conductors/ArticleConductor.php | 0 {app => app.old}/Conductors/Conductor.php | 0 .../Conductors/EventConductor.php | 0 .../Conductors/MediaConductor.php | 0 .../Conductors/MediaJobConductor.php | 0 .../Conductors/ShortlinkConductor.php | 0 .../Conductors/SubscriptionConductor.php | 0 {app => app.old}/Conductors/UserConductor.php | 0 .../Console/Commands/CleanupTempFiles.php | 0 .../Console/Commands/RemoveStaleMediaJobs.php | 0 app.old/Console/Kernel.php | 34 + {app => app.old}/Enum/CurlErrorCodes.php | 0 {app => app.old}/Enum/Enum.php | 0 {app => app.old}/Enum/HttpResponseCodes.php | 0 app.old/Exceptions/Handler.php | 98 + .../Filters/SubscriptionFilter.php | 0 {app => app.old}/Helpers/Array.php | 0 {app => app.old}/Helpers/Temp.php | 0 {app => app.old}/Helpers/TypeValue.php | 0 .../Controllers/Api/AnalyticsController.php | 0 .../Http/Controllers/Api/ApiController.php | 0 .../Controllers/Api/ArticleController.php | 0 .../Http/Controllers/Api/AuthController.php | 0 .../Controllers/Api/ContactController.php | 0 .../Http/Controllers/Api/EventController.php | 0 .../Http/Controllers/Api/InfoController.php | 0 .../Http/Controllers/Api/LogController.php | 0 .../Http/Controllers/Api/MediaController.php | 0 .../Controllers/Api/MediaJobController.php | 0 .../Http/Controllers/Api/OCRController.php | 0 .../Controllers/Api/ShortlinkController.php | 0 .../Http/Controllers/Api/UserController.php | 0 app.old/Http/Controllers/Controller.php | 13 + app.old/Http/Kernel.php | 73 + app.old/Http/Middleware/Authenticate.php | 23 + app.old/Http/Middleware/EncryptCookies.php | 17 + .../Http/Middleware/ForceJsonResponse.php | 0 .../Http/Middleware/LogRequest.php | 0 .../PreventRequestsDuringMaintenance.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 33 + app.old/Http/Middleware/TrimStrings.php | 19 + app.old/Http/Middleware/TrustHosts.php | 20 + app.old/Http/Middleware/TrustProxies.php | 25 + .../Http/Middleware/UnmangleRequest.php | 0 .../Http/Middleware/UseSanctumGuard.php | 0 app.old/Http/Middleware/ValidateSignature.php | 22 + app.old/Http/Middleware/VerifyCsrfToken.php | 17 + .../Http/Requests/AnalyticsRequest.php | 0 .../Http/Requests/ArticleRequest.php | 0 .../Http/Requests/AuthLoginRequest.php | 0 .../Http/Requests/BaseRequest.php | 0 .../Http/Requests/ContactSendRequest.php | 0 .../Http/Requests/EventRequest.php | 0 .../Http/Requests/MediaRequest.php | 0 .../Http/Requests/ShortlinkRequest.php | 0 .../Http/Requests/SubscriptionRequest.php | 0 .../Requests/UserForgotPasswordRequest.php | 0 .../Http/Requests/UserRegisterRequest.php | 0 .../Http/Requests/UserRequest.php | 0 .../Requests/UserResendVerifyEmailRequest.php | 0 .../Requests/UserResetPasswordRequest.php | 0 .../Http/Requests/UserVerifyEmailRequest.php | 0 {app => app.old}/Jobs/MediaWorkerJob.php | 0 app.old/Jobs/SendEmailJob.php | 57 + {app => app.old}/Mail/ChangeEmailVerify.php | 0 {app => app.old}/Mail/ChangedEmail.php | 0 {app => app.old}/Mail/ChangedPassword.php | 0 {app => app.old}/Mail/Contact.php | 0 {app => app.old}/Mail/EmailVerify.php | 0 {app => app.old}/Mail/ExceptionMail.php | 0 {app => app.old}/Mail/ForgotPassword.php | 0 {app => app.old}/Mail/SubscriptionConfirm.php | 0 .../Mail/SubscriptionUnsubscribed.php | 0 .../Models/AnalyticsItemRequest.php | 0 {app => app.old}/Models/AnalyticsSession.php | 0 {app => app.old}/Models/Article.php | 0 {app => app.old}/Models/Attachment.php | 0 {app => app.old}/Models/Event.php | 0 {app => app.old}/Models/EventUsers.php | 0 {app => app.old}/Models/Gallery.php | 0 app.old/Models/Media.php | 1064 +++ {app => app.old}/Models/MediaJob.php | 0 {app => app.old}/Models/Permission.php | 0 {app => app.old}/Models/Shortlink.php | 0 {app => app.old}/Models/Subscription.php | 0 app.old/Models/User.php | 246 + {app => app.old}/Models/UserCode.php | 0 {app => app.old}/Models/UserLogins.php | 0 app.old/Providers/AppServiceProvider.php | 53 + app.old/Providers/AuthServiceProvider.php | 29 + .../Providers/BroadcastServiceProvider.php | 21 + app.old/Providers/EventServiceProvider.php | 46 + app.old/Providers/RouteServiceProvider.php | 90 + {app => app.old}/Rules/Recaptcha.php | 0 {app => app.old}/Rules/UniqueFileName.php | 0 {app => app.old}/Rules/Uniqueish.php | 0 {app => app.old}/Traits/HasAttachments.php | 0 {app => app.old}/Traits/HasGallery.php | 0 {app => app.old}/Traits/Uuids.php | 0 app/Console/Kernel.php | 9 +- app/Exceptions/Handler.php | 72 +- app/Http/Controllers/AccountController.php | 29 + app/Http/Controllers/Controller.php | 3 +- app/Http/Controllers/HomeController.php | 15 + app/Http/Controllers/MediaController.php | 10 + app/Http/Controllers/PostController.php | 10 + app/Http/Controllers/UserController.php | 196 + app/Http/Controllers/WorkshopController.php | 16 + app/Http/Kernel.php | 15 +- app/Http/Middleware/Authenticate.php | 12 +- .../Middleware/RedirectIfAuthenticated.php | 11 +- app/Http/Middleware/TrustProxies.php | 11 +- app/Jobs/SendEmailJob.php | 2 +- app/Mail/UserEmailVerify.php | 70 + app/Models/Media.php | 1053 --- app/Models/Post.php | 11 + app/Models/User.php | 211 +- app/Models/VerificationCode.php | 68 + app/Models/Workshop.php | 33 + app/Providers/AppServiceProvider.php | 31 +- app/Providers/AuthServiceProvider.php | 5 +- app/Providers/BroadcastServiceProvider.php | 2 - app/Providers/EventServiceProvider.php | 8 - app/Providers/RouteServiceProvider.php | 58 +- composer.json | 42 +- composer.lock | 2667 +----- database/factories/UserFactory.php | 21 +- database/factories/UserFactory.php.old | 49 + database/factories/WorkshopFactory.php | 33 + .../2014_10_12_000000_create_users_table.php | 11 +- ...000_create_password_reset_tokens_table.php | 28 + ...01_create_personal_access_tokens_table.php | 2 +- ...23_11_21_090337_create_workshops_table.php | 33 + .../2023_11_21_090406_create_posts_table.php | 27 + .../2023_11_21_090751_create_media_table.php | 27 + ...094913_create_verification_codes_table.php | 30 + .../2023_11_23_033746_create_jobs_table.php | 32 + database/seeders/DatabaseSeeder.php | 17 +- database/seeders/DatabaseSeeder.php.old | 30 + package-lock.json | 8016 +++++------------ package.json | 52 +- phpunit.xml | 2 +- postcss.config.cjs | 7 + public/images/android-chrome-192x192.png | Bin 0 -> 20338 bytes public/images/android-chrome-512x512.png | Bin 0 -> 76262 bytes public/images/apple-touch-icon.png | Bin 0 -> 18187 bytes public/images/favicon-16x16.png | Bin 0 -> 683 bytes public/images/favicon-32x32.png | Bin 0 -> 1587 bytes public/images/favicon.ico | Bin 0 -> 15406 bytes public/images/hero.webp | Bin 0 -> 146254 bytes public/images/logo-copy.svg | 1 + public/images/logo-old.svg | 13 + public/images/logo.svg | 1 + public/images/minecraft-icon.png | Bin 0 -> 24536 bytes public/scripts/svg-inject.min.js | 10 + resources/css/app.css | 200 + resources/js/app.ts | 2 + resources/js/bootstrap.ts | 29 + resources/js/stemmech.ts | 302 + resources/views/account/index.blade.php | 40 + resources/views/account/users-index.blade.php | 54 + resources/views/account/users-show.blade.php | 35 + resources/views/components/banner.blade.php | 23 + resources/views/components/card.blade.php | 10 + .../views/components/flash-message.blade.php | 25 + resources/views/components/layout.blade.php | 34 + .../views/components/workshop-card.blade.php | 10 + .../emails/users/email-verify-plain.blade.php | 18 + .../views/emails/users/email-verify.blade.php | 114 + resources/views/home.blade.php | 18 + .../views/partials/email-verify.blade.php | 55 + resources/views/partials/footer.blade.php | 43 + resources/views/partials/hero.blade.php | 9 + resources/views/partials/nav.blade.php | 77 + resources/views/partials/search.blade.php | 15 + resources/views/users/login.blade.php | 43 + resources/views/users/register.blade.php | 104 + resources/views/users/verify.blade.php | 13 + .../vendor/pagination/bootstrap-4.blade.php | 46 + .../vendor/pagination/bootstrap-5.blade.php | 88 + .../views/vendor/pagination/default.blade.php | 46 + .../vendor/pagination/semantic-ui.blade.php | 36 + .../pagination/simple-bootstrap-4.blade.php | 27 + .../pagination/simple-bootstrap-5.blade.php | 29 + .../pagination/simple-default.blade.php | 19 + .../pagination/simple-tailwind.blade.php | 29 + .../vendor/pagination/tailwind.blade.php | 46 + resources/views/workshops/index.blade.php | 20 + routes/web.php | 25 +- scripts/keras.py | 13 - tailwind.config.js | 49 + tsconfig.json | 2 +- vite.config.ts | 45 +- 195 files changed, 7153 insertions(+), 9787 deletions(-) rename {app => app.old}/Conductors/AnalyticsConductor.php (100%) rename {app => app.old}/Conductors/ArticleConductor.php (100%) rename {app => app.old}/Conductors/Conductor.php (100%) rename {app => app.old}/Conductors/EventConductor.php (100%) rename {app => app.old}/Conductors/MediaConductor.php (100%) rename {app => app.old}/Conductors/MediaJobConductor.php (100%) rename {app => app.old}/Conductors/ShortlinkConductor.php (100%) rename {app => app.old}/Conductors/SubscriptionConductor.php (100%) rename {app => app.old}/Conductors/UserConductor.php (100%) rename {app => app.old}/Console/Commands/CleanupTempFiles.php (100%) rename {app => app.old}/Console/Commands/RemoveStaleMediaJobs.php (100%) create mode 100644 app.old/Console/Kernel.php rename {app => app.old}/Enum/CurlErrorCodes.php (100%) rename {app => app.old}/Enum/Enum.php (100%) rename {app => app.old}/Enum/HttpResponseCodes.php (100%) create mode 100644 app.old/Exceptions/Handler.php rename {app => app.old}/Filters/SubscriptionFilter.php (100%) rename {app => app.old}/Helpers/Array.php (100%) rename {app => app.old}/Helpers/Temp.php (100%) rename {app => app.old}/Helpers/TypeValue.php (100%) rename {app => app.old}/Http/Controllers/Api/AnalyticsController.php (100%) rename {app => app.old}/Http/Controllers/Api/ApiController.php (100%) rename {app => app.old}/Http/Controllers/Api/ArticleController.php (100%) rename {app => app.old}/Http/Controllers/Api/AuthController.php (100%) rename {app => app.old}/Http/Controllers/Api/ContactController.php (100%) rename {app => app.old}/Http/Controllers/Api/EventController.php (100%) rename {app => app.old}/Http/Controllers/Api/InfoController.php (100%) rename {app => app.old}/Http/Controllers/Api/LogController.php (100%) rename {app => app.old}/Http/Controllers/Api/MediaController.php (100%) rename {app => app.old}/Http/Controllers/Api/MediaJobController.php (100%) rename {app => app.old}/Http/Controllers/Api/OCRController.php (100%) rename {app => app.old}/Http/Controllers/Api/ShortlinkController.php (100%) rename {app => app.old}/Http/Controllers/Api/UserController.php (100%) create mode 100644 app.old/Http/Controllers/Controller.php create mode 100644 app.old/Http/Kernel.php create mode 100644 app.old/Http/Middleware/Authenticate.php create mode 100644 app.old/Http/Middleware/EncryptCookies.php rename {app => app.old}/Http/Middleware/ForceJsonResponse.php (100%) rename {app => app.old}/Http/Middleware/LogRequest.php (100%) create mode 100644 app.old/Http/Middleware/PreventRequestsDuringMaintenance.php create mode 100644 app.old/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app.old/Http/Middleware/TrimStrings.php create mode 100644 app.old/Http/Middleware/TrustHosts.php create mode 100644 app.old/Http/Middleware/TrustProxies.php rename {app => app.old}/Http/Middleware/UnmangleRequest.php (100%) rename {app => app.old}/Http/Middleware/UseSanctumGuard.php (100%) create mode 100644 app.old/Http/Middleware/ValidateSignature.php create mode 100644 app.old/Http/Middleware/VerifyCsrfToken.php rename {app => app.old}/Http/Requests/AnalyticsRequest.php (100%) rename {app => app.old}/Http/Requests/ArticleRequest.php (100%) rename {app => app.old}/Http/Requests/AuthLoginRequest.php (100%) rename {app => app.old}/Http/Requests/BaseRequest.php (100%) rename {app => app.old}/Http/Requests/ContactSendRequest.php (100%) rename {app => app.old}/Http/Requests/EventRequest.php (100%) rename {app => app.old}/Http/Requests/MediaRequest.php (100%) rename {app => app.old}/Http/Requests/ShortlinkRequest.php (100%) rename {app => app.old}/Http/Requests/SubscriptionRequest.php (100%) rename {app => app.old}/Http/Requests/UserForgotPasswordRequest.php (100%) rename {app => app.old}/Http/Requests/UserRegisterRequest.php (100%) rename {app => app.old}/Http/Requests/UserRequest.php (100%) rename {app => app.old}/Http/Requests/UserResendVerifyEmailRequest.php (100%) rename {app => app.old}/Http/Requests/UserResetPasswordRequest.php (100%) rename {app => app.old}/Http/Requests/UserVerifyEmailRequest.php (100%) rename {app => app.old}/Jobs/MediaWorkerJob.php (100%) create mode 100644 app.old/Jobs/SendEmailJob.php rename {app => app.old}/Mail/ChangeEmailVerify.php (100%) rename {app => app.old}/Mail/ChangedEmail.php (100%) rename {app => app.old}/Mail/ChangedPassword.php (100%) rename {app => app.old}/Mail/Contact.php (100%) rename {app => app.old}/Mail/EmailVerify.php (100%) rename {app => app.old}/Mail/ExceptionMail.php (100%) rename {app => app.old}/Mail/ForgotPassword.php (100%) rename {app => app.old}/Mail/SubscriptionConfirm.php (100%) rename {app => app.old}/Mail/SubscriptionUnsubscribed.php (100%) rename {app => app.old}/Models/AnalyticsItemRequest.php (100%) rename {app => app.old}/Models/AnalyticsSession.php (100%) rename {app => app.old}/Models/Article.php (100%) rename {app => app.old}/Models/Attachment.php (100%) rename {app => app.old}/Models/Event.php (100%) rename {app => app.old}/Models/EventUsers.php (100%) rename {app => app.old}/Models/Gallery.php (100%) create mode 100644 app.old/Models/Media.php rename {app => app.old}/Models/MediaJob.php (100%) rename {app => app.old}/Models/Permission.php (100%) rename {app => app.old}/Models/Shortlink.php (100%) rename {app => app.old}/Models/Subscription.php (100%) create mode 100644 app.old/Models/User.php rename {app => app.old}/Models/UserCode.php (100%) rename {app => app.old}/Models/UserLogins.php (100%) create mode 100644 app.old/Providers/AppServiceProvider.php create mode 100644 app.old/Providers/AuthServiceProvider.php create mode 100644 app.old/Providers/BroadcastServiceProvider.php create mode 100644 app.old/Providers/EventServiceProvider.php create mode 100644 app.old/Providers/RouteServiceProvider.php rename {app => app.old}/Rules/Recaptcha.php (100%) rename {app => app.old}/Rules/UniqueFileName.php (100%) rename {app => app.old}/Rules/Uniqueish.php (100%) rename {app => app.old}/Traits/HasAttachments.php (100%) rename {app => app.old}/Traits/HasGallery.php (100%) rename {app => app.old}/Traits/Uuids.php (100%) create mode 100644 app/Http/Controllers/AccountController.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/MediaController.php create mode 100644 app/Http/Controllers/PostController.php create mode 100644 app/Http/Controllers/UserController.php create mode 100644 app/Http/Controllers/WorkshopController.php create mode 100644 app/Mail/UserEmailVerify.php create mode 100644 app/Models/Post.php create mode 100644 app/Models/VerificationCode.php create mode 100644 app/Models/Workshop.php create mode 100644 database/factories/UserFactory.php.old create mode 100644 database/factories/WorkshopFactory.php create mode 100644 database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php create mode 100644 database/migrations/2023_11_21_090337_create_workshops_table.php create mode 100644 database/migrations/2023_11_21_090406_create_posts_table.php create mode 100644 database/migrations/2023_11_21_090751_create_media_table.php create mode 100644 database/migrations/2023_11_22_094913_create_verification_codes_table.php create mode 100644 database/migrations/2023_11_23_033746_create_jobs_table.php create mode 100644 database/seeders/DatabaseSeeder.php.old create mode 100644 postcss.config.cjs create mode 100644 public/images/android-chrome-192x192.png create mode 100644 public/images/android-chrome-512x512.png create mode 100644 public/images/apple-touch-icon.png create mode 100644 public/images/favicon-16x16.png create mode 100644 public/images/favicon-32x32.png create mode 100644 public/images/favicon.ico create mode 100644 public/images/hero.webp create mode 100644 public/images/logo-copy.svg create mode 100644 public/images/logo-old.svg create mode 100644 public/images/logo.svg create mode 100644 public/images/minecraft-icon.png create mode 100644 public/scripts/svg-inject.min.js create mode 100644 resources/css/app.css create mode 100644 resources/js/app.ts create mode 100644 resources/js/bootstrap.ts create mode 100644 resources/js/stemmech.ts create mode 100644 resources/views/account/index.blade.php create mode 100644 resources/views/account/users-index.blade.php create mode 100644 resources/views/account/users-show.blade.php create mode 100644 resources/views/components/banner.blade.php create mode 100644 resources/views/components/card.blade.php create mode 100644 resources/views/components/flash-message.blade.php create mode 100644 resources/views/components/layout.blade.php create mode 100644 resources/views/components/workshop-card.blade.php create mode 100644 resources/views/emails/users/email-verify-plain.blade.php create mode 100644 resources/views/emails/users/email-verify.blade.php create mode 100644 resources/views/home.blade.php create mode 100644 resources/views/partials/email-verify.blade.php create mode 100644 resources/views/partials/footer.blade.php create mode 100644 resources/views/partials/hero.blade.php create mode 100644 resources/views/partials/nav.blade.php create mode 100644 resources/views/partials/search.blade.php create mode 100644 resources/views/users/login.blade.php create mode 100644 resources/views/users/register.blade.php create mode 100644 resources/views/users/verify.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/default.blade.php create mode 100644 resources/views/vendor/pagination/semantic-ui.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-4.blade.php create mode 100644 resources/views/vendor/pagination/simple-bootstrap-5.blade.php create mode 100644 resources/views/vendor/pagination/simple-default.blade.php create mode 100644 resources/views/vendor/pagination/simple-tailwind.blade.php create mode 100644 resources/views/vendor/pagination/tailwind.blade.php create mode 100644 resources/views/workshops/index.blade.php delete mode 100644 scripts/keras.py create mode 100644 tailwind.config.js diff --git a/README.md b/README.md index bf0ddd9..1824fc1 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@

Laravel Logo

-Build Status +Build Status Total Downloads Latest Stable Version License @@ -31,23 +31,23 @@ If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Lar ## Laravel Sponsors -We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the Laravel [Patreon page](https://patreon.com/taylorotwell). +We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com). ### Premium Partners - **[Vehikl](https://vehikl.com/)** - **[Tighten Co.](https://tighten.co)** +- **[WebReinvent](https://webreinvent.com/)** - **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)** - **[64 Robots](https://64robots.com)** -- **[Cubet Techno Labs](https://cubettech.com)** -- **[Cyber-Duck](https://cyber-duck.co.uk)** -- **[Many](https://www.many.co.uk)** -- **[Webdock, Fast VPS Hosting](https://www.webdock.io/en)** -- **[DevSquad](https://devsquad.com)** - **[Curotec](https://www.curotec.com/services/technologies/laravel/)** +- **[Cyber-Duck](https://cyber-duck.co.uk)** +- **[DevSquad](https://devsquad.com/hire-laravel-developers)** +- **[Jump24](https://jump24.co.uk)** +- **[Redberry](https://redberry.international/laravel/)** +- **[Active Logic](https://activelogic.com)** +- **[byte5](https://byte5.de)** - **[OP.GG](https://op.gg)** -- **[WebReinvent](https://webreinvent.com/?utm_source=laravel&utm_medium=github&utm_campaign=patreon-sponsors)** -- **[Lendio](https://lendio.com)** ## Contributing diff --git a/app/Conductors/AnalyticsConductor.php b/app.old/Conductors/AnalyticsConductor.php similarity index 100% rename from app/Conductors/AnalyticsConductor.php rename to app.old/Conductors/AnalyticsConductor.php diff --git a/app/Conductors/ArticleConductor.php b/app.old/Conductors/ArticleConductor.php similarity index 100% rename from app/Conductors/ArticleConductor.php rename to app.old/Conductors/ArticleConductor.php diff --git a/app/Conductors/Conductor.php b/app.old/Conductors/Conductor.php similarity index 100% rename from app/Conductors/Conductor.php rename to app.old/Conductors/Conductor.php diff --git a/app/Conductors/EventConductor.php b/app.old/Conductors/EventConductor.php similarity index 100% rename from app/Conductors/EventConductor.php rename to app.old/Conductors/EventConductor.php diff --git a/app/Conductors/MediaConductor.php b/app.old/Conductors/MediaConductor.php similarity index 100% rename from app/Conductors/MediaConductor.php rename to app.old/Conductors/MediaConductor.php diff --git a/app/Conductors/MediaJobConductor.php b/app.old/Conductors/MediaJobConductor.php similarity index 100% rename from app/Conductors/MediaJobConductor.php rename to app.old/Conductors/MediaJobConductor.php diff --git a/app/Conductors/ShortlinkConductor.php b/app.old/Conductors/ShortlinkConductor.php similarity index 100% rename from app/Conductors/ShortlinkConductor.php rename to app.old/Conductors/ShortlinkConductor.php diff --git a/app/Conductors/SubscriptionConductor.php b/app.old/Conductors/SubscriptionConductor.php similarity index 100% rename from app/Conductors/SubscriptionConductor.php rename to app.old/Conductors/SubscriptionConductor.php diff --git a/app/Conductors/UserConductor.php b/app.old/Conductors/UserConductor.php similarity index 100% rename from app/Conductors/UserConductor.php rename to app.old/Conductors/UserConductor.php diff --git a/app/Console/Commands/CleanupTempFiles.php b/app.old/Console/Commands/CleanupTempFiles.php similarity index 100% rename from app/Console/Commands/CleanupTempFiles.php rename to app.old/Console/Commands/CleanupTempFiles.php diff --git a/app/Console/Commands/RemoveStaleMediaJobs.php b/app.old/Console/Commands/RemoveStaleMediaJobs.php similarity index 100% rename from app/Console/Commands/RemoveStaleMediaJobs.php rename to app.old/Console/Commands/RemoveStaleMediaJobs.php diff --git a/app.old/Console/Kernel.php b/app.old/Console/Kernel.php new file mode 100644 index 0000000..61d0d1a --- /dev/null +++ b/app.old/Console/Kernel.php @@ -0,0 +1,34 @@ +command('inspire')->hourly(); + $schedule->command('app:cleanup-temp-files')->everyThirtyMinutes(); + $schedule->command('app:remove-stale-media-jobs')->everyThirtyMinutes(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands(): void + { + $this->load(__DIR__ . '/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Enum/CurlErrorCodes.php b/app.old/Enum/CurlErrorCodes.php similarity index 100% rename from app/Enum/CurlErrorCodes.php rename to app.old/Enum/CurlErrorCodes.php diff --git a/app/Enum/Enum.php b/app.old/Enum/Enum.php similarity index 100% rename from app/Enum/Enum.php rename to app.old/Enum/Enum.php diff --git a/app/Enum/HttpResponseCodes.php b/app.old/Enum/HttpResponseCodes.php similarity index 100% rename from app/Enum/HttpResponseCodes.php rename to app.old/Enum/HttpResponseCodes.php diff --git a/app.old/Exceptions/Handler.php b/app.old/Exceptions/Handler.php new file mode 100644 index 0000000..74672f9 --- /dev/null +++ b/app.old/Exceptions/Handler.php @@ -0,0 +1,98 @@ + + */ + protected $dontFlash = [ + 'current_password', + 'password', + 'password_confirmation', + ]; + + + /** + * Register the exception handling callbacks for the application. + * + * @return void + */ + public function register(): void + { + // $this->renderable(function (HttpException $e, $request) { + // if ($request->is('api/*')) { + // $message = $e->getMessage(); + // if ($message === '') { + // $message = HttpResponseCodes::$statusTexts[$e->getStatusCode()]; + // } + + // return response()->json([ + // 'message' => $message + // ], $e->getStatusCode()); + // } + // }); + + $this->renderable(function (NotFoundHttpException $e, $request) { + if ($request->is('api/*') === true) { + return response()->json([ + 'message' => 'Resource not found' + ], 404); + } + }); + + $this->renderable(function (PDOException $e, $request) { + if ($request->is('api/*') === true) { + return response()->json([ + 'message' => 'The server is currently unavailable' + ], 503); + } + }); + + $this->reportable(function (Throwable $e) { + if ($this->shouldReport($e) === true) { + if (App::runningUnitTests() === false) { + $this->sendEmail($e); + } + } + }); + } + + /** + * Send email + * + * @param Throwable $exception Throwable object. + * @return void + */ + public function sendEmail(Throwable $exception) + { + try { + $e = FlattenException::createFromThrowable($exception); + $handler = new HtmlErrorRenderer(true); + $css = $handler->getStylesheet(); + $content = $handler->getBody($e); + + Mail::send('emails.exception', compact('css', 'content'), function ($message) { + $message + ->to('webmaster@stemmechanics.com.au') + ->subject('Exception Generated') + ; + }); + } catch (Throwable $ex) { + Log::error($ex); + } + } +} diff --git a/app/Filters/SubscriptionFilter.php b/app.old/Filters/SubscriptionFilter.php similarity index 100% rename from app/Filters/SubscriptionFilter.php rename to app.old/Filters/SubscriptionFilter.php diff --git a/app/Helpers/Array.php b/app.old/Helpers/Array.php similarity index 100% rename from app/Helpers/Array.php rename to app.old/Helpers/Array.php diff --git a/app/Helpers/Temp.php b/app.old/Helpers/Temp.php similarity index 100% rename from app/Helpers/Temp.php rename to app.old/Helpers/Temp.php diff --git a/app/Helpers/TypeValue.php b/app.old/Helpers/TypeValue.php similarity index 100% rename from app/Helpers/TypeValue.php rename to app.old/Helpers/TypeValue.php diff --git a/app/Http/Controllers/Api/AnalyticsController.php b/app.old/Http/Controllers/Api/AnalyticsController.php similarity index 100% rename from app/Http/Controllers/Api/AnalyticsController.php rename to app.old/Http/Controllers/Api/AnalyticsController.php diff --git a/app/Http/Controllers/Api/ApiController.php b/app.old/Http/Controllers/Api/ApiController.php similarity index 100% rename from app/Http/Controllers/Api/ApiController.php rename to app.old/Http/Controllers/Api/ApiController.php diff --git a/app/Http/Controllers/Api/ArticleController.php b/app.old/Http/Controllers/Api/ArticleController.php similarity index 100% rename from app/Http/Controllers/Api/ArticleController.php rename to app.old/Http/Controllers/Api/ArticleController.php diff --git a/app/Http/Controllers/Api/AuthController.php b/app.old/Http/Controllers/Api/AuthController.php similarity index 100% rename from app/Http/Controllers/Api/AuthController.php rename to app.old/Http/Controllers/Api/AuthController.php diff --git a/app/Http/Controllers/Api/ContactController.php b/app.old/Http/Controllers/Api/ContactController.php similarity index 100% rename from app/Http/Controllers/Api/ContactController.php rename to app.old/Http/Controllers/Api/ContactController.php diff --git a/app/Http/Controllers/Api/EventController.php b/app.old/Http/Controllers/Api/EventController.php similarity index 100% rename from app/Http/Controllers/Api/EventController.php rename to app.old/Http/Controllers/Api/EventController.php diff --git a/app/Http/Controllers/Api/InfoController.php b/app.old/Http/Controllers/Api/InfoController.php similarity index 100% rename from app/Http/Controllers/Api/InfoController.php rename to app.old/Http/Controllers/Api/InfoController.php diff --git a/app/Http/Controllers/Api/LogController.php b/app.old/Http/Controllers/Api/LogController.php similarity index 100% rename from app/Http/Controllers/Api/LogController.php rename to app.old/Http/Controllers/Api/LogController.php diff --git a/app/Http/Controllers/Api/MediaController.php b/app.old/Http/Controllers/Api/MediaController.php similarity index 100% rename from app/Http/Controllers/Api/MediaController.php rename to app.old/Http/Controllers/Api/MediaController.php diff --git a/app/Http/Controllers/Api/MediaJobController.php b/app.old/Http/Controllers/Api/MediaJobController.php similarity index 100% rename from app/Http/Controllers/Api/MediaJobController.php rename to app.old/Http/Controllers/Api/MediaJobController.php diff --git a/app/Http/Controllers/Api/OCRController.php b/app.old/Http/Controllers/Api/OCRController.php similarity index 100% rename from app/Http/Controllers/Api/OCRController.php rename to app.old/Http/Controllers/Api/OCRController.php diff --git a/app/Http/Controllers/Api/ShortlinkController.php b/app.old/Http/Controllers/Api/ShortlinkController.php similarity index 100% rename from app/Http/Controllers/Api/ShortlinkController.php rename to app.old/Http/Controllers/Api/ShortlinkController.php diff --git a/app/Http/Controllers/Api/UserController.php b/app.old/Http/Controllers/Api/UserController.php similarity index 100% rename from app/Http/Controllers/Api/UserController.php rename to app.old/Http/Controllers/Api/UserController.php diff --git a/app.old/Http/Controllers/Controller.php b/app.old/Http/Controllers/Controller.php new file mode 100644 index 0000000..f1406be --- /dev/null +++ b/app.old/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ + + */ + 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' => [ + \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, + ], + + 'api' => [ + // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, + \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', + \Illuminate\Routing\Middleware\SubstituteBindings::class, + // \App\Http\Middleware\ForceJsonResponse::class, + \App\Http\Middleware\UnmangleRequest::class, + 'useSanctumGuard', + \App\Http\Middleware\LogRequest::class, + ], + ]; + + /** + * The application's middleware aliases. + * + * Aliases may be used to conveniently assign middleware to routes and groups. + * + * @var array + */ + protected $middlewareAliases = [ + '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, + 'unmangle' => \App\Http\Middleware\UnmangleRequest::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, + 'useSanctumGuard' => \App\Http\Middleware\UseSanctumGuard::class + ]; +} diff --git a/app.old/Http/Middleware/Authenticate.php b/app.old/Http/Middleware/Authenticate.php new file mode 100644 index 0000000..9515a4a --- /dev/null +++ b/app.old/Http/Middleware/Authenticate.php @@ -0,0 +1,23 @@ +expectsJson() === false) { + return route('login'); + } + + return null; + } +} diff --git a/app.old/Http/Middleware/EncryptCookies.php b/app.old/Http/Middleware/EncryptCookies.php new file mode 100644 index 0000000..867695b --- /dev/null +++ b/app.old/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Middleware/ForceJsonResponse.php b/app.old/Http/Middleware/ForceJsonResponse.php similarity index 100% rename from app/Http/Middleware/ForceJsonResponse.php rename to app.old/Http/Middleware/ForceJsonResponse.php diff --git a/app/Http/Middleware/LogRequest.php b/app.old/Http/Middleware/LogRequest.php similarity index 100% rename from app/Http/Middleware/LogRequest.php rename to app.old/Http/Middleware/LogRequest.php diff --git a/app.old/Http/Middleware/PreventRequestsDuringMaintenance.php b/app.old/Http/Middleware/PreventRequestsDuringMaintenance.php new file mode 100644 index 0000000..74cbd9a --- /dev/null +++ b/app.old/Http/Middleware/PreventRequestsDuringMaintenance.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app.old/Http/Middleware/RedirectIfAuthenticated.php b/app.old/Http/Middleware/RedirectIfAuthenticated.php new file mode 100644 index 0000000..5ee6f4b --- /dev/null +++ b/app.old/Http/Middleware/RedirectIfAuthenticated.php @@ -0,0 +1,33 @@ +check() === true) { + return redirect(RouteServiceProvider::HOME); + } + } + + return $next($request); + } +} diff --git a/app.old/Http/Middleware/TrimStrings.php b/app.old/Http/Middleware/TrimStrings.php new file mode 100644 index 0000000..88cadca --- /dev/null +++ b/app.old/Http/Middleware/TrimStrings.php @@ -0,0 +1,19 @@ + + */ + protected $except = [ + 'current_password', + 'password', + 'password_confirmation', + ]; +} diff --git a/app.old/Http/Middleware/TrustHosts.php b/app.old/Http/Middleware/TrustHosts.php new file mode 100644 index 0000000..c9c58bd --- /dev/null +++ b/app.old/Http/Middleware/TrustHosts.php @@ -0,0 +1,20 @@ + + */ + public function hosts(): array + { + return [ + $this->allSubdomainsOfApplicationUrl(), + ]; + } +} diff --git a/app.old/Http/Middleware/TrustProxies.php b/app.old/Http/Middleware/TrustProxies.php new file mode 100644 index 0000000..3123f50 --- /dev/null +++ b/app.old/Http/Middleware/TrustProxies.php @@ -0,0 +1,25 @@ +|string|null + */ + protected $proxies; + + /** + * The headers that should be used to detect proxies. + * + * @var integer + */ + // @codingStandardsIgnoreStart + 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); + // @codingStandardsIgnoreEnd +} diff --git a/app/Http/Middleware/UnmangleRequest.php b/app.old/Http/Middleware/UnmangleRequest.php similarity index 100% rename from app/Http/Middleware/UnmangleRequest.php rename to app.old/Http/Middleware/UnmangleRequest.php diff --git a/app/Http/Middleware/UseSanctumGuard.php b/app.old/Http/Middleware/UseSanctumGuard.php similarity index 100% rename from app/Http/Middleware/UseSanctumGuard.php rename to app.old/Http/Middleware/UseSanctumGuard.php diff --git a/app.old/Http/Middleware/ValidateSignature.php b/app.old/Http/Middleware/ValidateSignature.php new file mode 100644 index 0000000..093bf64 --- /dev/null +++ b/app.old/Http/Middleware/ValidateSignature.php @@ -0,0 +1,22 @@ + + */ + protected $except = [ + // 'fbclid', + // 'utm_campaign', + // 'utm_content', + // 'utm_medium', + // 'utm_source', + // 'utm_term', + ]; +} diff --git a/app.old/Http/Middleware/VerifyCsrfToken.php b/app.old/Http/Middleware/VerifyCsrfToken.php new file mode 100644 index 0000000..9e86521 --- /dev/null +++ b/app.old/Http/Middleware/VerifyCsrfToken.php @@ -0,0 +1,17 @@ + + */ + protected $except = [ + // + ]; +} diff --git a/app/Http/Requests/AnalyticsRequest.php b/app.old/Http/Requests/AnalyticsRequest.php similarity index 100% rename from app/Http/Requests/AnalyticsRequest.php rename to app.old/Http/Requests/AnalyticsRequest.php diff --git a/app/Http/Requests/ArticleRequest.php b/app.old/Http/Requests/ArticleRequest.php similarity index 100% rename from app/Http/Requests/ArticleRequest.php rename to app.old/Http/Requests/ArticleRequest.php diff --git a/app/Http/Requests/AuthLoginRequest.php b/app.old/Http/Requests/AuthLoginRequest.php similarity index 100% rename from app/Http/Requests/AuthLoginRequest.php rename to app.old/Http/Requests/AuthLoginRequest.php diff --git a/app/Http/Requests/BaseRequest.php b/app.old/Http/Requests/BaseRequest.php similarity index 100% rename from app/Http/Requests/BaseRequest.php rename to app.old/Http/Requests/BaseRequest.php diff --git a/app/Http/Requests/ContactSendRequest.php b/app.old/Http/Requests/ContactSendRequest.php similarity index 100% rename from app/Http/Requests/ContactSendRequest.php rename to app.old/Http/Requests/ContactSendRequest.php diff --git a/app/Http/Requests/EventRequest.php b/app.old/Http/Requests/EventRequest.php similarity index 100% rename from app/Http/Requests/EventRequest.php rename to app.old/Http/Requests/EventRequest.php diff --git a/app/Http/Requests/MediaRequest.php b/app.old/Http/Requests/MediaRequest.php similarity index 100% rename from app/Http/Requests/MediaRequest.php rename to app.old/Http/Requests/MediaRequest.php diff --git a/app/Http/Requests/ShortlinkRequest.php b/app.old/Http/Requests/ShortlinkRequest.php similarity index 100% rename from app/Http/Requests/ShortlinkRequest.php rename to app.old/Http/Requests/ShortlinkRequest.php diff --git a/app/Http/Requests/SubscriptionRequest.php b/app.old/Http/Requests/SubscriptionRequest.php similarity index 100% rename from app/Http/Requests/SubscriptionRequest.php rename to app.old/Http/Requests/SubscriptionRequest.php diff --git a/app/Http/Requests/UserForgotPasswordRequest.php b/app.old/Http/Requests/UserForgotPasswordRequest.php similarity index 100% rename from app/Http/Requests/UserForgotPasswordRequest.php rename to app.old/Http/Requests/UserForgotPasswordRequest.php diff --git a/app/Http/Requests/UserRegisterRequest.php b/app.old/Http/Requests/UserRegisterRequest.php similarity index 100% rename from app/Http/Requests/UserRegisterRequest.php rename to app.old/Http/Requests/UserRegisterRequest.php diff --git a/app/Http/Requests/UserRequest.php b/app.old/Http/Requests/UserRequest.php similarity index 100% rename from app/Http/Requests/UserRequest.php rename to app.old/Http/Requests/UserRequest.php diff --git a/app/Http/Requests/UserResendVerifyEmailRequest.php b/app.old/Http/Requests/UserResendVerifyEmailRequest.php similarity index 100% rename from app/Http/Requests/UserResendVerifyEmailRequest.php rename to app.old/Http/Requests/UserResendVerifyEmailRequest.php diff --git a/app/Http/Requests/UserResetPasswordRequest.php b/app.old/Http/Requests/UserResetPasswordRequest.php similarity index 100% rename from app/Http/Requests/UserResetPasswordRequest.php rename to app.old/Http/Requests/UserResetPasswordRequest.php diff --git a/app/Http/Requests/UserVerifyEmailRequest.php b/app.old/Http/Requests/UserVerifyEmailRequest.php similarity index 100% rename from app/Http/Requests/UserVerifyEmailRequest.php rename to app.old/Http/Requests/UserVerifyEmailRequest.php diff --git a/app/Jobs/MediaWorkerJob.php b/app.old/Jobs/MediaWorkerJob.php similarity index 100% rename from app/Jobs/MediaWorkerJob.php rename to app.old/Jobs/MediaWorkerJob.php diff --git a/app.old/Jobs/SendEmailJob.php b/app.old/Jobs/SendEmailJob.php new file mode 100644 index 0000000..89d7d1f --- /dev/null +++ b/app.old/Jobs/SendEmailJob.php @@ -0,0 +1,57 @@ +to = $to; + $this->mailable = $mailable; + } + + /** + * Execute the job. + * + * @return void + */ + public function handle(): void + { + Mail::to($this->to)->send($this->mailable); + } +} diff --git a/app/Mail/ChangeEmailVerify.php b/app.old/Mail/ChangeEmailVerify.php similarity index 100% rename from app/Mail/ChangeEmailVerify.php rename to app.old/Mail/ChangeEmailVerify.php diff --git a/app/Mail/ChangedEmail.php b/app.old/Mail/ChangedEmail.php similarity index 100% rename from app/Mail/ChangedEmail.php rename to app.old/Mail/ChangedEmail.php diff --git a/app/Mail/ChangedPassword.php b/app.old/Mail/ChangedPassword.php similarity index 100% rename from app/Mail/ChangedPassword.php rename to app.old/Mail/ChangedPassword.php diff --git a/app/Mail/Contact.php b/app.old/Mail/Contact.php similarity index 100% rename from app/Mail/Contact.php rename to app.old/Mail/Contact.php diff --git a/app/Mail/EmailVerify.php b/app.old/Mail/EmailVerify.php similarity index 100% rename from app/Mail/EmailVerify.php rename to app.old/Mail/EmailVerify.php diff --git a/app/Mail/ExceptionMail.php b/app.old/Mail/ExceptionMail.php similarity index 100% rename from app/Mail/ExceptionMail.php rename to app.old/Mail/ExceptionMail.php diff --git a/app/Mail/ForgotPassword.php b/app.old/Mail/ForgotPassword.php similarity index 100% rename from app/Mail/ForgotPassword.php rename to app.old/Mail/ForgotPassword.php diff --git a/app/Mail/SubscriptionConfirm.php b/app.old/Mail/SubscriptionConfirm.php similarity index 100% rename from app/Mail/SubscriptionConfirm.php rename to app.old/Mail/SubscriptionConfirm.php diff --git a/app/Mail/SubscriptionUnsubscribed.php b/app.old/Mail/SubscriptionUnsubscribed.php similarity index 100% rename from app/Mail/SubscriptionUnsubscribed.php rename to app.old/Mail/SubscriptionUnsubscribed.php diff --git a/app/Models/AnalyticsItemRequest.php b/app.old/Models/AnalyticsItemRequest.php similarity index 100% rename from app/Models/AnalyticsItemRequest.php rename to app.old/Models/AnalyticsItemRequest.php diff --git a/app/Models/AnalyticsSession.php b/app.old/Models/AnalyticsSession.php similarity index 100% rename from app/Models/AnalyticsSession.php rename to app.old/Models/AnalyticsSession.php diff --git a/app/Models/Article.php b/app.old/Models/Article.php similarity index 100% rename from app/Models/Article.php rename to app.old/Models/Article.php diff --git a/app/Models/Attachment.php b/app.old/Models/Attachment.php similarity index 100% rename from app/Models/Attachment.php rename to app.old/Models/Attachment.php diff --git a/app/Models/Event.php b/app.old/Models/Event.php similarity index 100% rename from app/Models/Event.php rename to app.old/Models/Event.php diff --git a/app/Models/EventUsers.php b/app.old/Models/EventUsers.php similarity index 100% rename from app/Models/EventUsers.php rename to app.old/Models/EventUsers.php diff --git a/app/Models/Gallery.php b/app.old/Models/Gallery.php similarity index 100% rename from app/Models/Gallery.php rename to app.old/Models/Gallery.php diff --git a/app.old/Models/Media.php b/app.old/Models/Media.php new file mode 100644 index 0000000..2bcb6e8 --- /dev/null +++ b/app.old/Models/Media.php @@ -0,0 +1,1064 @@ + + */ + protected $fillable = [ + 'title', + 'user_id', + 'mime_type', + 'security_type', + 'security_data', + 'storage', + 'description', + 'name', + 'size', + ]; + + /** + * The attributes that are appended. + * + * @var array + */ + protected $appends = [ + 'url', + ]; + + /** + * The default attributes. + * + * @var string[] + */ + protected $attributes = [ + 'storage' => 'cdn', + 'variants' => '[]', + 'description' => '', + 'dimensions' => '', + 'security_type' => '', + 'security_data' => '', + 'thumbnail' => '', + ]; + + /** + * The storage file list cache. + * + * @var array + */ + protected static $storageFileListCache = []; + + /** + * Object variant details. + * + * @var int[][][] + */ + protected static $objectVariants = [ + 'image' => [ + 'small' => ['width' => 300, 'height' => 225], + 'medium' => ['width' => 768, 'height' => 576], + 'large' => ['width' => 1024, 'height' => 768], + 'xlarge' => ['width' => 1536, 'height' => 1152], + 'xxlarge' => ['width' => 2048, 'height' => 1536], + 'scaled' => ['width' => 2560, 'height' => 1920] + ] + ]; + + /** + * Staging file path of asset for processing. + * + * @var string + */ + private $stagingFilePath = ""; + + + /** + * Model Boot + * + * @return void + */ + protected static function boot(): void + { + parent::boot(); + + $clearCache = function ($media) { + Cache::forget("media:{$media->id}"); + }; + + static::updating(function ($media) use ($clearCache) { + $clearCache($media); + }); + + static::deleting(function ($media) use ($clearCache) { + $clearCache($media); + $media->deleteFile(); + }); + } + + /** + * Get Object Variants. + * + * @param string $type The variant object to get. + * @return array The variant data. + */ + public static function getObjectVariants(string $type): array + { + if (isset(self::$objectVariants[$type]) === true) { + return self::$objectVariants[$type]; + } + + return []; + } + + /** + * Variants Get Mutator. + * + * @param mixed $value The value to mutate. + * @param boolean $raw Values are not run through urlencode. + * @return array|null The mutated value. + */ + public function getVariantsAttribute(mixed $value, bool $raw = false): array|null + { + if (is_string($value) === true) { + $decodedValue = json_decode($value, true); + + // Check if the decoded value is an array + if ($raw === false && is_array($decodedValue) === true) { + // Loop through the array and encode each value + foreach ($decodedValue as &$item) { + if (is_string($item) === true) { + $item = rawurlencode($item); + } + } + } + + return $decodedValue; + } + + return []; + } + + /** + * Variants Set Mutator. + * + * @param mixed $value The value to mutate. + * @return void + */ + public function setVariantsAttribute(mixed $value): void + { + if (is_array($value) !== true) { + $value = []; + } + + $this->attributes['variants'] = json_encode(($value ?? [])); + } + + /** + * Get previous variant. + * + * @param string $type The variant type. + * @param string $variant The initial variant. + * @return string The previous variant name (or ''). + */ + public function getPreviousVariant(string $type, string $variant): string + { + if (isset(self::$objectVariants[$type]) === false) { + return ''; + } + + $variants = self::$objectVariants[$type]; + $keys = array_keys($variants); + + $currentIndex = array_search($variant, $keys); + if ($currentIndex === false || $currentIndex === 0) { + return ''; + } + + return $keys[($currentIndex - 1)]; + } + + /** + * Get next variant. + * + * @param string $type The variant type. + * @param string $variant The initial variant. + * @return string The next variant name (or ''). + */ + public function getNextVariant(string $type, string $variant): string + { + if (isset(self::$objectVariants[$type]) === false) { + return ''; + } + + $variants = self::$objectVariants[$type]; + $keys = array_keys($variants); + + $currentIndex = array_search($variant, $keys); + if ($currentIndex === false || $currentIndex === (count($keys) - 1)) { + return ''; + } + + return $keys[($currentIndex + 1)]; + } + + /** + * Get variant URL. + * + * @param string $variant The variant to find. + * @param boolean $returnNearest Return the nearest variant if request is not found. + * @return string The URL. + */ + public function getVariantURL(string $variant, bool $returnNearest = true): string + { + $variants = $this->variants; + if (isset($variants[$variant]) === true) { + return self::getUrlPath(['name' => $variants[$variant]]); + } + + if ($returnNearest === true) { + $variantType = explode('/', $this->mime_type)[0]; + $previousVariant = $variant; + while (empty($previousVariant) === false) { + $previousVariant = $this->getPreviousVariant($variantType, $previousVariant); + if (empty($previousVariant) === false && isset($variants[$previousVariant]) === true) { + return self::getUrlPath(['name' => $variants[$previousVariant]]); + } + } + } + + return ''; + } + + /** + * Delete file and associated files with the modal. + * + * @return void + */ + public function deleteFile(): void + { + if ( + strlen($this->storage) > 0 && strlen($this->name) > 0 && + Storage::disk($this->storage)->exists($this->name) === true + ) { + Storage::disk($this->storage)->delete($this->name); + } + + $this->deleteThumbnail(); + $this->deleteVariants(); + $this->invalidateCFCache(); + } + + /** + * Invalidate Cloudflare Cache. + * + * @return void + */ + private function invalidateCFCache(): void + { + $zone_id = env("CLOUDFLARE_ZONE_ID"); + $api_key = env("CLOUDFLARE_API_KEY"); + if ($zone_id !== null && $api_key !== null && $this->url !== "") { + $urls = [$this->url]; + + foreach ($this->variants as $variant => $name) { + $urls[] = str_replace($this->name, $name, $this->url); + } + + $curl = curl_init(); + curl_setopt_array($curl, [ + CURLOPT_URL => "https://api.cloudflare.com/client/v4/zones/" . $zone_id . "/purge_cache", + CURLOPT_RETURNTRANSFER => true, + CURLOPT_CUSTOMREQUEST => "DELETE", + CURLOPT_POSTFIELDS => json_encode(["files" => $urls]), + CURLOPT_HTTPHEADER => [ + "Content-Type: application/json", + "Authorization: Bearer " . $api_key + ], + ]); + curl_exec($curl); + curl_close($curl); + }//end if + } + + /** + * Get URL path + * + * @param array $replacements Replace variables in URL. + * @return string + */ + public function getUrlPath(array $replacements = []): string + { + $url = config("filesystems.disks.$this->storage.url"); + + if (empty($replacements) !== true) { + foreach ($replacements as $key => $value) { + $placeholder = '{' . $key . '}'; + $url = str_replace($placeholder, $value, $url); + } + } + + // Remove any remaining {x} placeholders + $url = preg_replace('/\{[^}]+\}/', '', $url); + + return "$url"; + } + + /** + * Return the file URL + * + * @return string + */ + public function getUrlAttribute(): string + { + $url = self::getUrlPath([ + 'id' => rawurlencode($this->id), + 'name' => rawurlencode($this->name) + ]); + + return $url; + } + + /** + * Return the file owner + * + * @return BelongsTo + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } + + /** + * Transform the media through the Media Job Queue + * + * @param array $transform The transform data. + * @return MediaJob + */ + public function transform(array $transform): MediaJob + { + $mediaJob = new MediaJob([ + 'media_id' => $this->media, + 'user_id' => auth()->user()?->id, + 'data' => json_encode(['transform' => $transform]), + ]); + + try { + MediaWorkerJob::dispatch($mediaJob)->onQueue('media'); + return $mediaJob; + } catch (\Exception $e) { + $this->error('Failed to transform media'); + throw $e; + }//end try + + return null; + } + + /** + * Get the server maximum upload size + * + * @return integer + */ + public static function getMaxUploadSize(): int + { + $sizes = [ + ini_get('upload_max_filesize'), + ini_get('post_max_size'), + ini_get('memory_limit') + ]; + + foreach ($sizes as &$size) { + $size = trim($size); + $last = strtolower($size[(strlen($size) - 1)]); + switch ($last) { + case 'g': + $size = (intval($size) * 1024); + // Size is in MB - fallthrough + case 'm': + $size = (intval($size) * 1024); + // Size is in KB - fallthrough + case 'k': + $size = (intval($size) * 1024); + // Size is in B - fallthrough + } + } + + return min($sizes); + } + + /** + * Generate a file name that is available within storage. + * + * @param string $fileName The proposed file name. + * @return string|boolean The available file name or false if failed. + */ + public static function generateUniqueFileName(string $fileName) + { + $index = 1; + $maxTries = 100; + $extension = pathinfo($fileName, PATHINFO_EXTENSION); + $fileName = static::sanitizeFilename(pathinfo($fileName, PATHINFO_FILENAME)); + + if ( + static::fileNameHasSuffix($fileName) === true || + static::fileExistsInStorage("$fileName.$extension") === true //|| + // Media::where('name', "$fileName.$extension")->where('status', 'not like', 'failed%')->exists() === true + ) { + $fileName .= '-'; + for ($i = 1; $i < $maxTries; $i++) { + $fileNameIndex = $fileName . $index; + if ( + static::fileExistsInStorage("$fileNameIndex.$extension") !== true && + Media::where('name', "$fileNameIndex.$extension") + // ->where('status', 'not like', 'Failed%') + ->exists() !== true + ) { + return "$fileNameIndex.$extension"; + } + + ++$index; + } + + return false; + } + + return "$fileName.$extension"; + } + + /** + * Determines if the file name exists in any of the storage disks. + * + * @param string $fileName The file name to check. + * @param boolean $ignoreCache Ignore the file list cache. + * @return boolean If the file exists on any storage disks. + */ + public static function fileExistsInStorage(string $fileName, bool $ignoreCache = false): bool + { + $disks = array_keys(Config::get('filesystems.disks')); + + if ($ignoreCache === false) { + if (count(static::$storageFileListCache) === 0) { + $disks = array_keys(Config::get('filesystems.disks')); + + foreach ($disks as $disk) { + try { + static::$storageFileListCache[$disk] = Storage::disk($disk)->allFiles(); + } catch (\Exception $e) { + Log::error("Cannot get a file list for storage device '$disk'. Error: " . $e->getMessage()); + continue; + } + } + } + + foreach (static::$storageFileListCache as $disk => $files) { + if (in_array($fileName, $files) === true) { + return true; + } + } + } else { + $disks = array_keys(Config::get('filesystems.disks')); + + foreach ($disks as $disk) { + try { + if (Storage::disk($disk)->exists($fileName) === true) { + return true; + } + } catch (\Exception $e) { + Log::error($e->getMessage()); + throw new \Exception("Cannot verify if file '$fileName' already exists in storage device '$disk'"); + } + } + }//end if + + return false; + } + + /** + * Test if the file name contains a special suffix. + * + * @param string $fileName The file name to test. + * @return boolean If the file name contains the special suffix. + */ + public static function fileNameHasSuffix(string $fileName): bool + { + $suffix = '/(-\d+x\d+|-scaled|-thumb)$/i'; + $fileNameWithoutExtension = pathinfo($fileName, PATHINFO_FILENAME); + + return preg_match($suffix, $fileNameWithoutExtension) === 1; + } + + /** + * Sanitize fileName for upload + * + * @param string $fileName Filename to sanitize. + * @return string + */ + private static function sanitizeFilename(string $fileName): string + { + /* + # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words + [<>:"/\\\|?*]| + + # control characters http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx + [\x00-\x1F]| + + # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN + [\x7F\xA0\xAD]| + + # URI reserved https://www.rfc-editor.org/rfc/rfc3986#section-2.2 + [#\[\]@!$&\'()+,;=]| + + # URL unsafe characters https://www.ietf.org/rfc/rfc1738.txt + [{}^\~`] + */ + + $fileName = preg_replace( + '~ + [<>:"/\\\|?*]| + [\x00-\x1F]| + [\x7F\xA0\xAD]| + [#\[\]@!$&\'()+,;=]| + [{}^\~`] + ~x', + '-', + $fileName + ); + + $fileName = ltrim($fileName, '.-'); + + $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, '.-'); + + $ext = pathinfo($fileName, PATHINFO_EXTENSION); + $fileName = mb_strcut( + pathinfo($fileName, PATHINFO_FILENAME), + 0, + (255 - ($ext !== '' ? strlen($ext) + 1 : 0)), + mb_detect_encoding($fileName) + ) . ($ext !== '' ? '.' . $ext : ''); + return $fileName; + } + + /** + * Get the Staging File path. + * + * @param boolean $create Create staging file if doesn't exist. + * @return string + */ + public function getStagingFilePath(bool $create = true): string + { + if ($this->stagingFilePath === "" && $create === true) { + $this->createStagingFile(); + } + + return $this->stagingFilePath; + } + + /** + * Set the Staging File for processing. + * + * @param string $path The path if the new staging file. + * @param boolean $overwrite Overwrite existing file. + * @return void + */ + public function setStagingFile(string $path, bool $overwrite = false): void + { + if ($this->stagingFilePath !== "") { + if ($overwrite === true) { + unlink($this->stagingFilePath); + } else { + // ignore request + return; + } + } + + $this->stagingFilePath = $path; + } + + /** + * Download temporary copy of the storage file for staging. + * + * @return boolean If download was successful. + */ + public function createStagingFile(): bool + { + if ($this->stagingFilePath === "") { + $readStream = Storage::disk($this->storage)->readStream($this->name); + $filePath = generateTempFilePath(pathinfo($this->name, PATHINFO_EXTENSION)); + + $writeStream = fopen($filePath, 'w'); + while (feof($readStream) !== true) { + fwrite($writeStream, fread($readStream, 8192)); + } + fclose($readStream); + fclose($writeStream); + + $this->stagingFilePath = $filePath; + }//end if + + return $this->stagingFilePath !== ""; + } + + /** + * Save the Staging File to storage + * + * @param boolean $delete Delete the existing staging file. + * @param boolean $silent Update the status field with the progress. + * @return void + */ + public function saveStagingFile(bool $delete = true, bool $silent = false): void + { + if ($this->stagingFilePath !== '') { + if (strlen($this->storage) > 0 && strlen($this->name) > 0) { + if (Storage::disk($this->storage)->exists($this->name) === true) { + Storage::disk($this->storage)->delete($this->name); + } + + /** @var Illuminate\Filesystem\FilesystemAdapter */ + $fileSystem = Storage::disk($this->storage); + $fileSystem->putFileAs('/', $this->stagingFilePath, $this->name); + } + + $this->generateThumbnail(); + $this->generateVariants(); + + if ($delete === true) { + $this->deleteStagingFile(); + } + }//end if + } + + /** + * Clean up temporary file. + * + * @return void + */ + public function deleteStagingFile(): void + { + if ($this->stagingFilePath !== "") { + unlink($this->stagingFilePath); + $this->stagingFilePath = ""; + } + } + + /** + * Change staging file, removing the old file if present + * + * @param string $newFile The new staging file. + * @return void + */ + public function changeStagingFile(string $newFile): void + { + if ($this->stagingFilePath !== "") { + unlink($this->stagingFilePath); + } + + $this->stagingFilePath = $newFile; + } + + /** + * Is a staging file present + * + * @return boolean + */ + public function hasStagingFile(): bool + { + return $this->stagingFilePath !== ""; + } + + /** + * Generate a Thumbnail for this media. + * + * @return boolean If generation was successful. + */ + public function generateThumbnail(): bool + { + $thumbnailWidth = 200; + $thumbnailHeight = 200; + + // delete existing thumbnail + if (strlen($this->thumbnail) !== 0) { + $path = pathinfo($this->thumbnail, PATHINFO_BASENAME); + if (strlen($path) > 0 && Storage::disk($this->storage)->exists($path) === true) { + Storage::disk($this->storage)->delete($path); + } + } + + $filePath = $this->getStagingFilePath(); + + $fileExtension = File::extension($this->name); + $tempImagePath = tempnam(sys_get_temp_dir(), 'thumb'); + $newFilename = pathinfo($this->name, PATHINFO_FILENAME) . "-" . uniqid() . "-thumb.webp"; + $success = false; + + if ($this->security_type === '') { + if (strpos($this->mime_type, 'image/') === 0) { + $image = Image::make($filePath); + $image->orientate(); + $image->resize($thumbnailWidth, $thumbnailHeight, function ($constraint) { + $constraint->aspectRatio(); + }); + $image->fit($thumbnailWidth, $thumbnailHeight); + $image->encode('webp', 75)->save($tempImagePath); + $success = true; + } elseif ($this->mime_type === 'application/pdf' && extension_loaded('imagick') === true) { + $pdfPreview = new \Imagick(); + $pdfPreview->setResolution(300, 300); + $pdfPreview->readImage($filePath . '[0]'); + $pdfPreview->setImageFormat('webp'); + $pdfPreview->thumbnailImage($thumbnailWidth, $thumbnailHeight, true); + file_put_contents($tempImagePath, $pdfPreview); + + $success = true; + } elseif ($this->mime_type === 'text/plain') { + $image = Image::canvas($thumbnailWidth, $thumbnailHeight, '#FFFFFF'); + + // Read the first few lines of the text file + $numLines = 5; + $text = file_get_contents($filePath); + $lines = explode("\n", $text); + $previewText = implode("\n", array_slice($lines, 0, $numLines)); + + // Center the text on the image + $fontSize = 8; + $textColor = '#000000'; // Black text color + + // Calculate the position to start drawing the text + $x = 10; // Left padding + $y = 10; // Top padding + + // Draw the text on the canvas with text wrapping + $lines = explode("\n", wordwrap($previewText, 30, "\n", true)); + foreach ($lines as $line) { + $image->text($line, $x, $y, function ($font) use ($fontSize, $textColor) { + $font->file(1); + $font->size($fontSize); + $font->color($textColor); + }); + + // Move to the next line + $y += ($fontSize + 4); // Add some vertical spacing between lines (adjust as needed) + } + + $image->encode('webp', 75)->save($tempImagePath); + + $success = true; + } elseif (strpos($this->mime_type, 'video/') === 0) { + $tempImagePath .= '.webp'; + + try { + $ffmpeg = FFMpeg::create(); + $video = $ffmpeg->open($filePath); + $frame = $video->frame(TimeCode::fromSeconds(5)); + $frame->save($tempImagePath); + } catch (\Exception $e) { + Log::error($e); + } + + $success = true; + }//end if + }//end if + + if ($success === true && file_exists($tempImagePath) === true) { + /** @var Illuminate\Filesystem\FilesystemAdapter */ + $fileSystem = Storage::disk($this->storage); + $fileSystem->putFileAs('/', new SplFileInfo($tempImagePath), $newFilename); + unlink($tempImagePath); + + $this->thumbnail = $this->getUrlPath(['name' => $newFilename]); + } else { + $iconExtension = 'unknown'; + if ($fileExtension !== '') { + $iconPath = public_path('assets/fileicons/' . $fileExtension . '.webp'); + if (file_exists($iconPath) === true) { + $iconExtension = $fileExtension; + } + } + + $this->thumbnail = asset('/assets/fileicons/' . $iconExtension . '.webp'); + } + + return $success; + } + + /** + * Delete Media Thumbnail from storage. + * + * @return void + */ + public function deleteThumbnail(): void + { + if (strlen($this->thumbnail) > 0) { + $path = pathinfo($this->thumbnail, PATHINFO_BASENAME); + + if (strlen($path) > 0 && Storage::disk($this->storage)->exists($path) === true) { + Storage::disk($this->storage)->delete($path); + $this->thumbnail = ''; // Clear the thumbnail property + } + } + } + + /** + * Generate variants for this media. + * + * @return void + */ + public function generateVariants(): void + { + // delete existing variants + if (is_array($this->variants) === true) { + foreach ($this->variants as $variantName => $variantFile) { + if (Storage::disk($this->storage)->exists($variantFile) === true) { + Storage::disk($this->storage)->delete($variantFile); + } + } + } + $this->variants = []; + + if ($this->security_type === '') { + if (strpos($this->mime_type, 'image/') === 0) { + // Generate additional image sizes + $sizes = Media::getObjectVariants('image'); + + // download original from CDN if no local file + $filePath = $this->getStagingFilePath(); + + $originalImage = Image::make($filePath); + + $imageSize = $originalImage->getSize(); + $isPortrait = $imageSize->getHeight() > $imageSize->getWidth(); + + // Swap width and height values for portrait images + foreach ($sizes as $variantName => &$size) { + if ($isPortrait === true) { + $temp = $size['width']; + $size['width'] = $size['height']; + $size['height'] = $temp; + } + } + + $dimensions = [$originalImage->getWidth(), $originalImage->getHeight()]; + $this->dimensions = implode('x', $dimensions); + + foreach ($sizes as $variantName => $size) { + $postfix = "{$size['width']}x{$size['height']}"; + if ($variantName === 'scaled') { + $postfix = 'scaled'; + } + + $newFilename = pathinfo($this->name, PATHINFO_FILENAME) . "-" . uniqid() . "-$postfix.webp"; + + // Get the largest available variant + if ($dimensions[0] >= $size['width'] && $dimensions[1] >= $size['height']) { + // Store the variant in the variants array + $variants[$variantName] = $newFilename; + + // Resize the image to the variant size if its dimensions are greater than the + // specified size + $image = clone $originalImage; + + $imageSize = $image->getSize(); + if ($imageSize->getWidth() > $size['width'] || $imageSize->getHeight() > $size['height']) { + $image->resize($size['width'], $size['height'], function ($constraint) { + $constraint->aspectRatio(); + $constraint->upsize(); + }); + $image->resizeCanvas($size['width'], $size['height'], 'center', false, 'rgba(0,0,0,0)'); + } + + $image->orientate(); + + // Optimize and store image + $tempImagePath = tempnam(sys_get_temp_dir(), 'optimize'); + $image->encode('webp', 75)->save($tempImagePath); + /** @var Illuminate\Filesystem\FilesystemAdapter */ + $fileSystem = Storage::disk($this->storage); + $fileSystem->putFileAs('/', new SplFileInfo($tempImagePath), $newFilename); + unlink($tempImagePath); + }//end if + }//end foreach + + // Set missing variants to the largest available variant + foreach ($sizes as $variantName => $size) { + if (isset($variants[$variantName]) === false) { + $variants[$variantName] = $this->name; + } + } + + $this->variants = $variants; + }//end if + }//end if + } + + /** + * Delete the Media variants from storage. + * + * @return void + */ + public function deleteVariants(): void + { + if (strlen($this->name) > 0 && strlen($this->storage) > 0) { + foreach ($this->variants as $variantName => $fileName) { + Storage::disk($this->storage)->delete($fileName); + } + + $this->variants = []; + } + } + + /** + * Set Media status to OK + * + * @return void + */ + public function ok(): void + { + // $this->status = "OK"; + $this->save(); + } + + /** + * Set Media status to an error + * @param string $error The error to set. + * @return void + */ + public function error(string $error = ""): void + { + // $this->status = "Error" . ($error !== "" ? ": {$error}" : ""); + $this->save(); + } + + /** + * Set Media status + * @param string $status The status to set. + * @return void + */ + public function status(string $status = ""): void + { + // $this->status = "Info: " . $status; + $this->save(); + } + + /** + * Get the associated job models + * + * @return HasMany + */ + public function jobs(): HasMany + { + return $this->hasMany(MediaJob::class, 'media_id'); + } + + /** + * Get the recommended storage ID based on mime and security + * + * @param string $mime_type The file mime type. + * @param string $security_type The security requested. + * @return string + */ + public static function recommendedStorage(string $mime_type, string $security_type): string + { + if ($security_type === '') { + if (strpos($mime_type, 'image/') === 0) { + return('local'); + } else { + return('cdn'); + } + } + + return('private'); + } + + /** + * Verify the storage exists. May change the storage value. + * + * @param mixed $mime_type File mime type. + * @param mixed $security_type Requested security type. + * @param mixed $storage Reference to the requested storage type. + * @return integer Error code. + */ + public static function verifyStorage(mixed $mime_type, mixed $security_type, mixed &$storage): int + { + if ($storage === '') { + if ($security_type === '') { + if (strpos($mime_type, 'image/') === 0) { + $storage = 'local'; + } else { + $storage = 'cdn'; + } + } else { + $storage = 'private'; + } + } else { + $disks = config('filesystems.disks'); + if (array_key_exists($storage, $disks) === false) { + return Media::STORAGE_NOT_FOUND; + } + + if ($security_type !== '' && strcasecmp($storage, 'private') !== 0) { + return Media::STORAGE_INVALID_SECURITY; + } + } + + return Media::STORAGE_VALID; + } +} diff --git a/app/Models/MediaJob.php b/app.old/Models/MediaJob.php similarity index 100% rename from app/Models/MediaJob.php rename to app.old/Models/MediaJob.php diff --git a/app/Models/Permission.php b/app.old/Models/Permission.php similarity index 100% rename from app/Models/Permission.php rename to app.old/Models/Permission.php diff --git a/app/Models/Shortlink.php b/app.old/Models/Shortlink.php similarity index 100% rename from app/Models/Shortlink.php rename to app.old/Models/Shortlink.php diff --git a/app/Models/Subscription.php b/app.old/Models/Subscription.php similarity index 100% rename from app/Models/Subscription.php rename to app.old/Models/Subscription.php diff --git a/app.old/Models/User.php b/app.old/Models/User.php new file mode 100644 index 0000000..ea17138 --- /dev/null +++ b/app.old/Models/User.php @@ -0,0 +1,246 @@ + + */ + protected $fillable = [ + 'first_name', + 'last_name', + 'email', + 'phone', + 'password', + 'display_name', + ]; + + /** + * The attributes that should be hidden for serialization. + * + * @var array + */ + protected $hidden = [ + 'password', + 'remember_token', + 'permissions' + ]; + + /** + * The attributes that should be cast. + * + * @var array + */ + protected $casts = [ + 'email_verified_at' => 'datetime', + ]; + + // protected $hidden = [ + // 'permissions' + // ]; + + /** + * The attributes to append. + * + * @var string[] + */ + protected $appends = [ + 'permissions' + ]; + + /** + * The default attributes. + * + * @var string[] + */ + protected $attributes = [ + 'phone' => '', + ]; + + + /** + * Boot the model. + * + * @return void + */ + protected static function boot(): void + { + parent::boot(); + + $clearCache = function ($user) { + Cache::forget( + "user:{$user->id}", + "user:{$user->id}:permissions" + ); + }; + + static::saving($clearCache); + static::deleting($clearCache); + } + + /** + * Get the list of permissions of the user + * + * @return Illuminate\Database\Eloquent\Relations\HasMany + */ + public function permissions(): HasMany + { + return $this->hasMany(Permission::class); + } + + /** + * Get the permission attribute + * + * @return array + */ + public function getPermissionsAttribute(): array + { + $cacheKey = "user:{$this->id}:permissions"; + return Cache::remember($cacheKey, now()->addDays(28), function () { + return $this->permissions()->pluck('permission')->toArray(); + }); + } + + /** + * Set the permission attribute + * + * @param array $newPermissions The new permissions to set to the user. + * @return void + */ + public function setPermissionsAttribute(array $newPermissions): void + { + $existingPermissions = $this->permissions->pluck('permission')->toArray(); + + $this->revokePermission(array_diff($this->permissions, $newPermissions)); + $this->givePermission(array_diff($newPermissions, $this->permissions)); + + $cacheKey = "user:{$this->id}:permissions"; + Cache::delete($cacheKey); + } + + /** + * Test if user has permission + * + * @param string $permission Permission to test. + * @return boolean + */ + public function hasPermission(string $permission): bool + { + return in_array($permission, $this->permissions); + } + + /** + * Give permissions to the user + * + * @param string|array $permissions The permission(s) to give. + * @return Illuminate\Database\Eloquent\Collection + */ + public function givePermission($permissions): Collection + { + if (is_array($permissions) === false) { + $permissions = [$permissions]; + } + + $newPermissions = array_map(function ($permission) { + return ['permission' => $permission]; + }, array_diff($permissions, $this->permissions)); + + $cacheKey = "user:{$this->id}:permissions"; + Cache::forget($cacheKey); + + return $this->permissions()->createMany($newPermissions); + } + + + /** + * Revoke permissions from the user + * + * @param string|array $permissions The permission(s) to revoke. + * @return integer + */ + public function revokePermission($permissions): int + { + if (is_array($permissions) === false) { + $permissions = [$permissions]; + } + + $cacheKey = "user:{$this->id}:permissions"; + Cache::forget($cacheKey); + + return $this->permissions() + ->whereIn('permission', $permissions) + ->delete(); + } + + /** + * Get the list of files of the user + * + * @return HasMany + */ + public function media(): HasMany + { + return $this->hasMany(Media::class); + } + + /** + * Get the list of files of the user + * + * @return HasMany + */ + public function articles(): HasMany + { + return $this->hasMany(Article::class); + } + + /** + * Get associated user codes + * + * @return HasMany + */ + public function codes(): HasMany + { + return $this->hasMany(UserCode::class); + } + + /** + * Get the list of logins of the user + * + * @return HasMany + */ + public function logins(): HasMany + { + return $this->hasMany(UserLogins::class); + } + + /** + * Get the events associated with the user. + * + * @return BelongsToMany + */ + public function events(): BelongsToMany + { + return $this->belongsToMany(Event::class, 'event_user', 'user_id', 'event_id'); + } +} diff --git a/app/Models/UserCode.php b/app.old/Models/UserCode.php similarity index 100% rename from app/Models/UserCode.php rename to app.old/Models/UserCode.php diff --git a/app/Models/UserLogins.php b/app.old/Models/UserLogins.php similarity index 100% rename from app/Models/UserLogins.php rename to app.old/Models/UserLogins.php diff --git a/app.old/Providers/AppServiceProvider.php b/app.old/Providers/AppServiceProvider.php new file mode 100644 index 0000000..30a0c2d --- /dev/null +++ b/app.old/Providers/AppServiceProvider.php @@ -0,0 +1,53 @@ + $newParam]; + } + + $paramArray = $this->all(); + foreach ($param as $oldParam => $newParam) { + if (isset($paramArray[$oldParam]) === true) { + $paramArray[$newParam] = $paramArray[$oldParam]; + unset($paramArray[$oldParam]); + } + } + + $this->replace($paramArray); + }); + + Storage::macro('public', function ($diskName) { + $public = config("filesystems.disks.{$diskName}.public", false); + return $public; + }); + } +} diff --git a/app.old/Providers/AuthServiceProvider.php b/app.old/Providers/AuthServiceProvider.php new file mode 100644 index 0000000..1f84312 --- /dev/null +++ b/app.old/Providers/AuthServiceProvider.php @@ -0,0 +1,29 @@ + + */ + protected $policies = [ + // 'App\Models\Model' => 'App\Policies\ModelPolicy', + ]; + + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot(): void + { + // + } +} diff --git a/app.old/Providers/BroadcastServiceProvider.php b/app.old/Providers/BroadcastServiceProvider.php new file mode 100644 index 0000000..229284c --- /dev/null +++ b/app.old/Providers/BroadcastServiceProvider.php @@ -0,0 +1,21 @@ +> + */ + protected $listen = [ + Registered::class => [ + SendEmailVerificationNotification::class, + ], + ]; + + + /** + * Register any events for your application. + * + * @return void + */ + public function boot(): void + { + // + } + + /** + * Determine if events and listeners should be automatically discovered. + * + * @return boolean + */ + public function shouldDiscoverEvents(): bool + { + return false; + } +} diff --git a/app.old/Providers/RouteServiceProvider.php b/app.old/Providers/RouteServiceProvider.php new file mode 100644 index 0000000..7113be9 --- /dev/null +++ b/app.old/Providers/RouteServiceProvider.php @@ -0,0 +1,90 @@ +by($request->user()?->id !== null ?: $request->ip()); + // }); + + $rateLimitEnabled = true; + /** @var \App\Models\User */ + $user = auth()->user(); + + if (app()->environment('testing') === true) { + $rateLimitEnabled = false; + } elseif ($user !== null && $user->hasPermission('admin/ratelimit') === true) { + // Admin users with the "admin/ratelimit" permission are not rate limited + $rateLimitEnabled = false; + } + + if ($rateLimitEnabled === true) { + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(800)->by(isset($request->user()->id) === true ?: $request->ip()); + }); + } else { + RateLimiter::for('api', function () { + return Limit::none(); + }); + } + + $this->routes(function () { + Route::middleware('api') + ->prefix('api') + ->group(base_path('routes/api.php')); + + Route::middleware('web') + ->group(base_path('routes/web.php')); + }); + + Route::macro('apiAddendumResource', function ($addendum, $uri, $controller) { + $singularUri = Str::singular($uri); + $signularAddendum = Str::singular((strtolower($addendum))); + $pluralAddendum = Str::plural($signularAddendum); + + Route::get("{$uri}/{{$singularUri}}/{$pluralAddendum}", [$controller, "{$signularAddendum}Index"]) + ->name("{$singularUri}.{$signularAddendum}.index"); + + Route::post("{$uri}/{{$singularUri}}/{$pluralAddendum}", [$controller, "{$signularAddendum}Store"]) + ->name("{$singularUri}.{$signularAddendum}.store"); + + Route::match( + ['put', 'patch'], + "{$uri}/{{$singularUri}}/{$pluralAddendum}", + [$controller, "{$signularAddendum}Update"] + ) + ->name("{$singularUri}.{$signularAddendum}.update"); + + Route::delete( + "{$uri}/{{$singularUri}}/{$pluralAddendum}/{medium}", + [$controller,"{$signularAddendum}Delete"] + ) + ->name("{$singularUri}.{$signularAddendum}.destroy"); + }); + } +} diff --git a/app/Rules/Recaptcha.php b/app.old/Rules/Recaptcha.php similarity index 100% rename from app/Rules/Recaptcha.php rename to app.old/Rules/Recaptcha.php diff --git a/app/Rules/UniqueFileName.php b/app.old/Rules/UniqueFileName.php similarity index 100% rename from app/Rules/UniqueFileName.php rename to app.old/Rules/UniqueFileName.php diff --git a/app/Rules/Uniqueish.php b/app.old/Rules/Uniqueish.php similarity index 100% rename from app/Rules/Uniqueish.php rename to app.old/Rules/Uniqueish.php diff --git a/app/Traits/HasAttachments.php b/app.old/Traits/HasAttachments.php similarity index 100% rename from app/Traits/HasAttachments.php rename to app.old/Traits/HasAttachments.php diff --git a/app/Traits/HasGallery.php b/app.old/Traits/HasGallery.php similarity index 100% rename from app/Traits/HasGallery.php rename to app.old/Traits/HasGallery.php diff --git a/app/Traits/Uuids.php b/app.old/Traits/Uuids.php similarity index 100% rename from app/Traits/Uuids.php rename to app.old/Traits/Uuids.php diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 61d0d1a..e6b9960 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -9,25 +9,18 @@ class Kernel extends ConsoleKernel { /** * Define the application's command schedule. - * - * @param \Illuminate\Console\Scheduling\Schedule $schedule The schedule. - * @return void */ protected function schedule(Schedule $schedule): void { // $schedule->command('inspire')->hourly(); - $schedule->command('app:cleanup-temp-files')->everyThirtyMinutes(); - $schedule->command('app:remove-stale-media-jobs')->everyThirtyMinutes(); } /** * Register the commands for the application. - * - * @return void */ protected function commands(): void { - $this->load(__DIR__ . '/Commands'); + $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php index 74672f9..56af264 100644 --- a/app/Exceptions/Handler.php +++ b/app/Exceptions/Handler.php @@ -3,19 +3,12 @@ namespace App\Exceptions; use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler; -use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; use Throwable; -use PDOException; -use Symfony\Component\ErrorHandler\ErrorRenderer\HtmlErrorRenderer; -use Illuminate\Support\Facades\App; -use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\Mail; -use Symfony\Component\ErrorHandler\Exception\FlattenException; class Handler extends ExceptionHandler { /** - * A list of the inputs that are never flashed to the session on validation exceptions. + * The list of the inputs that are never flashed to the session on validation exceptions. * * @var array */ @@ -25,74 +18,13 @@ class Handler extends ExceptionHandler 'password_confirmation', ]; - /** * Register the exception handling callbacks for the application. - * - * @return void */ public function register(): void { - // $this->renderable(function (HttpException $e, $request) { - // if ($request->is('api/*')) { - // $message = $e->getMessage(); - // if ($message === '') { - // $message = HttpResponseCodes::$statusTexts[$e->getStatusCode()]; - // } - - // return response()->json([ - // 'message' => $message - // ], $e->getStatusCode()); - // } - // }); - - $this->renderable(function (NotFoundHttpException $e, $request) { - if ($request->is('api/*') === true) { - return response()->json([ - 'message' => 'Resource not found' - ], 404); - } - }); - - $this->renderable(function (PDOException $e, $request) { - if ($request->is('api/*') === true) { - return response()->json([ - 'message' => 'The server is currently unavailable' - ], 503); - } - }); - $this->reportable(function (Throwable $e) { - if ($this->shouldReport($e) === true) { - if (App::runningUnitTests() === false) { - $this->sendEmail($e); - } - } + // }); } - - /** - * Send email - * - * @param Throwable $exception Throwable object. - * @return void - */ - public function sendEmail(Throwable $exception) - { - try { - $e = FlattenException::createFromThrowable($exception); - $handler = new HtmlErrorRenderer(true); - $css = $handler->getStylesheet(); - $content = $handler->getBody($e); - - Mail::send('emails.exception', compact('css', 'content'), function ($message) { - $message - ->to('webmaster@stemmechanics.com.au') - ->subject('Exception Generated') - ; - }); - } catch (Throwable $ex) { - Log::error($ex); - } - } } diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php new file mode 100644 index 0000000..b4ec0b9 --- /dev/null +++ b/app/Http/Controllers/AccountController.php @@ -0,0 +1,29 @@ + User::latest()->paginate(10), + ]); + } + + public function users_show(Request $request, User $user) { + return view('account.users-show', [ + 'user' => $user, + ]); + } + + public function media_index(Request $request) { + return view('account.media-index'); + } +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index f1406be..77ec359 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -8,6 +8,5 @@ use Illuminate\Routing\Controller as BaseController; class Controller extends BaseController { - use AuthorizesRequests; - use ValidatesRequests; + use AuthorizesRequests, ValidatesRequests; } diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php new file mode 100644 index 0000000..0e86463 --- /dev/null +++ b/app/Http/Controllers/HomeController.php @@ -0,0 +1,15 @@ + Workshop::latest()->limit(4)->get() + ]); + } +} diff --git a/app/Http/Controllers/MediaController.php b/app/Http/Controllers/MediaController.php new file mode 100644 index 0000000..9cef3b1 --- /dev/null +++ b/app/Http/Controllers/MediaController.php @@ -0,0 +1,10 @@ +check()) { + return view('home'); + } + + $form = Form::make('users.register') + ->namespaced('register') + ->canNavigateBack(true) + ->addStep(1, [ + 'rules' => [ + 'username' => ['required', 'unique:users,username'], + 'password' => ['required', Password::min(8)->numbers()] + ], + ]) + ->beforeStep(1, function(Form $form) { + $username = $form->getValue('username'); + if($username !== '') { + $user = User::where('username', $username)->first(); + if($user && $user->email_verified_at === null) { + $user->delete(); + } + } + }) + ->addStep(2, [ + 'rules' => [ + 'age' => ['required'], + ], + ]) + ->addStep(3, [ + 'rules' => [ + 'email' => ['required', 'email'] + ], + ]) + ->addStep(4, [ + 'rules' => [ + 'code' => ['required', 'numeric', 'integer', 'digits:6'] + ], + ]) + ->onStep(3, function (Form $form) { + $user = User::create([ + 'username' => $form->getValue('username'), + 'password' => bcrypt($form->getValue('password')), + 'is_under_14' => $form->getValue('age') === "under", + 'email' => $form->getValue('email'), + ]); + + $form->setValue('user', $user->id); + $code = $user->verificationCodes()->create(['type' => 'register']); + dispatch((new SendEmailJob($user->email, new UserEmailVerify($user, $code->code))))->onQueue('mail'); + + }) + ->onStep(4, function(Form $form) { + $user = User::where('id', $form->getValue('user'))->first(); + if($user === null) { + return back()->with('message-type', 'danger')->with('message', 'The username was no longer found. Please try again.'); + } + + $verificationCode = $user->verificationCodes()->where('type', 'register')->where('code', $form->getValue('code'))->first(); + if($verificationCode === null) { + return back()->withErrors(['code' => 'The code is invalid']); + } + + $user->email_verified_at = now(); + $user->save(); + $verificationCode->delete(); + + auth()->login($user); + request()->session()->regenerate(); + + $form->reset(); + return redirect('/')->with('message', 'Your account is now registered and you have been logged in'); + }); + + // user requested form reset + if($request->has('reset')) { + $form->reset(); + return redirect('/register'); + } + + // user requested email resend + if(!empty($form->getValue('user')) && $request->has('resend')) { + $user = User::where('id', $form->getValue('user'))->first(); + if($user === null) { + return back()->with('message-type', 'danger')->with('message', 'The username was no longer found. Please try again.'); + } + + $code = $user->verificationCodes() + ->where('type', 'register') + ->orderByDesc('created_at') + ->first(); + + if ($code == null || now()->subSeconds(20)->greaterThan($code->created_at)) { + $code = $user->verificationCodes()->create(['type' => 'register']); + dispatch((new SendEmailJob($user->email, new UserEmailVerify($user, $code->code))))->onQueue('mail'); + return back()->with('message', 'Your verification code has been resent to your email address.'); + } else { + return back()->with('message', 'Please wait at least 30 seconds before resending a verification code.'); + } + } + + return $form; + } + + public function store(Request $request) { + /** @var \App\Models\User */ + } + + // Show Login Form + public function login(Request $request) { + if(auth()->check()) { + return redirect('/'); + } + + return view('users.login'); + } + + // Authenticate User + public function authenticate(Request $request) { + $formFields = $request->validate([ + 'username' => 'required', + 'password' => 'required' + ]); + + if(auth()->validate($formFields)) { + $user = User::where('username', $formFields['username'])->first(); + if($user->email_verified_at !== null) { + auth()->login($user); + $request->session()->regenerate(); + return redirect('/')->with('message', 'You are now logged in'); + } + + return redirect('/verify'); + } + + return back()->withErrors(['username' => 'Invalid username/password', 'password' => 'Invalid username/password'])->onlyInput('username'); + } + + // Logout User + public function logout(Request $request) { + auth()->logout(); + + $request->session()->invalidate(); + $request->session()->regenerateToken(); + + return redirect('/')->with('message', 'You have been logged out!'); + + } + + public function verify(Request $request) { + if(auth()->check()) { + return redirect('/'); + } + + return view('users.verify'); + } + + public function verify_store(Request $request) { + $request->validate([ + 'code' => ['required', 'numeric', 'integer', 'digits:6'], + ]); + + $verificationCode = VerificationCode::where('code', $request->code)->first(); + if($verificationCode === null) { + return view('users.verify')->withErrors(['code' => 'The code is invalid'])->withInput($request->flash()); + } + + if($verificationCode->type === 'register') { + $user = $verificationCode->user; + $user->email_verified_at = now(); + $user->save(); + $verificationCode->delete(); + + auth()->login($user); + $request->session()->regenerate(); + + return redirect('/')->with('message', 'Your account is now registered and you have been logged in'); + } + + abort(500); + } +} diff --git a/app/Http/Controllers/WorkshopController.php b/app/Http/Controllers/WorkshopController.php new file mode 100644 index 0000000..bd19a93 --- /dev/null +++ b/app/Http/Controllers/WorkshopController.php @@ -0,0 +1,16 @@ + Workshop::latest()->filter(request(['tag', 'search']))->paginate(8) + ]); + } +} diff --git a/app/Http/Kernel.php b/app/Http/Kernel.php index 7b83b74..494c050 100644 --- a/app/Http/Kernel.php +++ b/app/Http/Kernel.php @@ -19,8 +19,8 @@ class Kernel extends HttpKernel \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, + \App\Http\Middleware\TrimStrings::class, + \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class, ]; /** @@ -40,19 +40,15 @@ class Kernel extends HttpKernel 'api' => [ // \Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class, - \Illuminate\Routing\Middleware\ThrottleRequests::class . ':api', + \Illuminate\Routing\Middleware\ThrottleRequests::class.':api', \Illuminate\Routing\Middleware\SubstituteBindings::class, - // \App\Http\Middleware\ForceJsonResponse::class, - \App\Http\Middleware\UnmangleRequest::class, - 'useSanctumGuard', - \App\Http\Middleware\LogRequest::class, ], ]; /** * The application's middleware aliases. * - * Aliases may be used to conveniently assign middleware to routes and groups. + * Aliases may be used instead of class names to conveniently assign middleware to routes and groups. * * @var array */ @@ -63,11 +59,10 @@ class Kernel extends HttpKernel 'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class, 'can' => \Illuminate\Auth\Middleware\Authorize::class, 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, - 'unmangle' => \App\Http\Middleware\UnmangleRequest::class, 'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class, + 'precognitive' => \Illuminate\Foundation\Http\Middleware\HandlePrecognitiveRequests::class, 'signed' => \App\Http\Middleware\ValidateSignature::class, 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, 'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class, - 'useSanctumGuard' => \App\Http\Middleware\UseSanctumGuard::class ]; } diff --git a/app/Http/Middleware/Authenticate.php b/app/Http/Middleware/Authenticate.php index 9515a4a..d4ef644 100644 --- a/app/Http/Middleware/Authenticate.php +++ b/app/Http/Middleware/Authenticate.php @@ -3,21 +3,15 @@ namespace App\Http\Middleware; use Illuminate\Auth\Middleware\Authenticate as Middleware; +use Illuminate\Http\Request; class Authenticate extends Middleware { /** * Get the path the user should be redirected to when they are not authenticated. - * - * @param mixed $request Request. - * @return ?string */ - protected function redirectTo(mixed $request): ?string + protected function redirectTo(Request $request): ?string { - if ($request->expectsJson() === false) { - return route('login'); - } - - return null; + return $request->expectsJson() ? null : route('login'); } } diff --git a/app/Http/Middleware/RedirectIfAuthenticated.php b/app/Http/Middleware/RedirectIfAuthenticated.php index 5ee6f4b..afc78c4 100644 --- a/app/Http/Middleware/RedirectIfAuthenticated.php +++ b/app/Http/Middleware/RedirectIfAuthenticated.php @@ -2,28 +2,25 @@ namespace App\Http\Middleware; -use Symfony\Component\HttpFoundation\Response; use App\Providers\RouteServiceProvider; use Closure; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; +use Symfony\Component\HttpFoundation\Response; class RedirectIfAuthenticated { /** * Handle an incoming request. * - * @param Request $request Request. - * @param \Closure $next Closure. - * @param string|null ...$guards Guards. - * @return Response + * @param \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response) $next */ public function handle(Request $request, Closure $next, string ...$guards): Response { - $guards = empty($guards) === true ? [null] : $guards; + $guards = empty($guards) ? [null] : $guards; foreach ($guards as $guard) { - if (Auth::guard($guard)->check() === true) { + if (Auth::guard($guard)->check()) { return redirect(RouteServiceProvider::HOME); } } diff --git a/app/Http/Middleware/TrustProxies.php b/app/Http/Middleware/TrustProxies.php index 3123f50..3391630 100644 --- a/app/Http/Middleware/TrustProxies.php +++ b/app/Http/Middleware/TrustProxies.php @@ -17,9 +17,12 @@ class TrustProxies extends Middleware /** * The headers that should be used to detect proxies. * - * @var integer + * @var int */ - // @codingStandardsIgnoreStart - 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); - // @codingStandardsIgnoreEnd + 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/Jobs/SendEmailJob.php b/app/Jobs/SendEmailJob.php index 89d7d1f..75ddd73 100644 --- a/app/Jobs/SendEmailJob.php +++ b/app/Jobs/SendEmailJob.php @@ -54,4 +54,4 @@ class SendEmailJob implements ShouldQueue { Mail::to($this->to)->send($this->mailable); } -} +} \ No newline at end of file diff --git a/app/Mail/UserEmailVerify.php b/app/Mail/UserEmailVerify.php new file mode 100644 index 0000000..6a9df23 --- /dev/null +++ b/app/Mail/UserEmailVerify.php @@ -0,0 +1,70 @@ +user = $user; + $this->code = $code; + } + + /** + * Get the message envelope. + * + * @return Illuminate\Mail\Mailables\Envelope + */ + public function envelope(): Envelope + { + return new Envelope( + subject: '👋🏻 Welcome to STEMMechanics!', + ); + } + + /** + * Get the message content definition. + * + * @return Illuminate\Mail\Mailables\Content + */ + public function content(): Content + { + return new Content( + view: 'emails.users.email-verify', + text: 'emails.users.email-verify-plain', + ); + } +} \ No newline at end of file diff --git a/app/Models/Media.php b/app/Models/Media.php index 2bcb6e8..5a5464c 100644 --- a/app/Models/Media.php +++ b/app/Models/Media.php @@ -2,1063 +2,10 @@ namespace App\Models; -use App\Enum\HttpResponseCodes; -use App\Jobs\MediaWorkerJob; -use App\Jobs\MoveMediaJob; -use App\Traits\Uuids; -use FFMpeg\Coordinate\TimeCode; -use FFMpeg\FFMpeg; -use Illuminate\Contracts\Container\BindingResolutionException; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; -use Illuminate\Database\Eloquent\Relations\BelongsTo; -use Illuminate\Database\Eloquent\Relations\HasMany; -use Illuminate\Foundation\Bus\DispatchesJobs; -use Illuminate\Http\JsonResponse; -use Illuminate\Support\Facades\Cache; -use Illuminate\Support\Facades\Config; -use Illuminate\Support\Facades\File; -use Illuminate\Support\Facades\Log; -use Illuminate\Support\Facades\Storage; -use Intervention\Image\Facades\Image; -use Psr\Container\NotFoundExceptionInterface; -use Psr\Container\ContainerExceptionInterface; -use SplFileInfo; -use Symfony\Component\HttpFoundation\StreamedResponse; class Media extends Model { use HasFactory; - use Uuids; - use DispatchesJobs; - - public const NO_ERROR = 0; - - public const INVALID_FILE_ERROR = 1; - public const FILE_SIZE_EXCEEDED_ERROR = 2; - public const FILE_NAME_EXISTS_ERROR = 3; - public const TEMP_FILE_ERROR = 4; - - public const STORAGE_VALID = 0; - public const STORAGE_MIME_MISSING = 10; // Mime type is missing and cannot verify - public const STORAGE_NOT_FOUND = 11; // Storage name is not found - public const STORAGE_INVALID_SECURITY = 12; // Security setting invalid for storage - - /** - * The attributes that are mass assignable. - * - * @var array - */ - protected $fillable = [ - 'title', - 'user_id', - 'mime_type', - 'security_type', - 'security_data', - 'storage', - 'description', - 'name', - 'size', - ]; - - /** - * The attributes that are appended. - * - * @var array - */ - protected $appends = [ - 'url', - ]; - - /** - * The default attributes. - * - * @var string[] - */ - protected $attributes = [ - 'storage' => 'cdn', - 'variants' => '[]', - 'description' => '', - 'dimensions' => '', - 'security_type' => '', - 'security_data' => '', - 'thumbnail' => '', - ]; - - /** - * The storage file list cache. - * - * @var array - */ - protected static $storageFileListCache = []; - - /** - * Object variant details. - * - * @var int[][][] - */ - protected static $objectVariants = [ - 'image' => [ - 'small' => ['width' => 300, 'height' => 225], - 'medium' => ['width' => 768, 'height' => 576], - 'large' => ['width' => 1024, 'height' => 768], - 'xlarge' => ['width' => 1536, 'height' => 1152], - 'xxlarge' => ['width' => 2048, 'height' => 1536], - 'scaled' => ['width' => 2560, 'height' => 1920] - ] - ]; - - /** - * Staging file path of asset for processing. - * - * @var string - */ - private $stagingFilePath = ""; - - - /** - * Model Boot - * - * @return void - */ - protected static function boot(): void - { - parent::boot(); - - $clearCache = function ($media) { - Cache::forget("media:{$media->id}"); - }; - - static::updating(function ($media) use ($clearCache) { - $clearCache($media); - }); - - static::deleting(function ($media) use ($clearCache) { - $clearCache($media); - $media->deleteFile(); - }); - } - - /** - * Get Object Variants. - * - * @param string $type The variant object to get. - * @return array The variant data. - */ - public static function getObjectVariants(string $type): array - { - if (isset(self::$objectVariants[$type]) === true) { - return self::$objectVariants[$type]; - } - - return []; - } - - /** - * Variants Get Mutator. - * - * @param mixed $value The value to mutate. - * @param boolean $raw Values are not run through urlencode. - * @return array|null The mutated value. - */ - public function getVariantsAttribute(mixed $value, bool $raw = false): array|null - { - if (is_string($value) === true) { - $decodedValue = json_decode($value, true); - - // Check if the decoded value is an array - if ($raw === false && is_array($decodedValue) === true) { - // Loop through the array and encode each value - foreach ($decodedValue as &$item) { - if (is_string($item) === true) { - $item = rawurlencode($item); - } - } - } - - return $decodedValue; - } - - return []; - } - - /** - * Variants Set Mutator. - * - * @param mixed $value The value to mutate. - * @return void - */ - public function setVariantsAttribute(mixed $value): void - { - if (is_array($value) !== true) { - $value = []; - } - - $this->attributes['variants'] = json_encode(($value ?? [])); - } - - /** - * Get previous variant. - * - * @param string $type The variant type. - * @param string $variant The initial variant. - * @return string The previous variant name (or ''). - */ - public function getPreviousVariant(string $type, string $variant): string - { - if (isset(self::$objectVariants[$type]) === false) { - return ''; - } - - $variants = self::$objectVariants[$type]; - $keys = array_keys($variants); - - $currentIndex = array_search($variant, $keys); - if ($currentIndex === false || $currentIndex === 0) { - return ''; - } - - return $keys[($currentIndex - 1)]; - } - - /** - * Get next variant. - * - * @param string $type The variant type. - * @param string $variant The initial variant. - * @return string The next variant name (or ''). - */ - public function getNextVariant(string $type, string $variant): string - { - if (isset(self::$objectVariants[$type]) === false) { - return ''; - } - - $variants = self::$objectVariants[$type]; - $keys = array_keys($variants); - - $currentIndex = array_search($variant, $keys); - if ($currentIndex === false || $currentIndex === (count($keys) - 1)) { - return ''; - } - - return $keys[($currentIndex + 1)]; - } - - /** - * Get variant URL. - * - * @param string $variant The variant to find. - * @param boolean $returnNearest Return the nearest variant if request is not found. - * @return string The URL. - */ - public function getVariantURL(string $variant, bool $returnNearest = true): string - { - $variants = $this->variants; - if (isset($variants[$variant]) === true) { - return self::getUrlPath(['name' => $variants[$variant]]); - } - - if ($returnNearest === true) { - $variantType = explode('/', $this->mime_type)[0]; - $previousVariant = $variant; - while (empty($previousVariant) === false) { - $previousVariant = $this->getPreviousVariant($variantType, $previousVariant); - if (empty($previousVariant) === false && isset($variants[$previousVariant]) === true) { - return self::getUrlPath(['name' => $variants[$previousVariant]]); - } - } - } - - return ''; - } - - /** - * Delete file and associated files with the modal. - * - * @return void - */ - public function deleteFile(): void - { - if ( - strlen($this->storage) > 0 && strlen($this->name) > 0 && - Storage::disk($this->storage)->exists($this->name) === true - ) { - Storage::disk($this->storage)->delete($this->name); - } - - $this->deleteThumbnail(); - $this->deleteVariants(); - $this->invalidateCFCache(); - } - - /** - * Invalidate Cloudflare Cache. - * - * @return void - */ - private function invalidateCFCache(): void - { - $zone_id = env("CLOUDFLARE_ZONE_ID"); - $api_key = env("CLOUDFLARE_API_KEY"); - if ($zone_id !== null && $api_key !== null && $this->url !== "") { - $urls = [$this->url]; - - foreach ($this->variants as $variant => $name) { - $urls[] = str_replace($this->name, $name, $this->url); - } - - $curl = curl_init(); - curl_setopt_array($curl, [ - CURLOPT_URL => "https://api.cloudflare.com/client/v4/zones/" . $zone_id . "/purge_cache", - CURLOPT_RETURNTRANSFER => true, - CURLOPT_CUSTOMREQUEST => "DELETE", - CURLOPT_POSTFIELDS => json_encode(["files" => $urls]), - CURLOPT_HTTPHEADER => [ - "Content-Type: application/json", - "Authorization: Bearer " . $api_key - ], - ]); - curl_exec($curl); - curl_close($curl); - }//end if - } - - /** - * Get URL path - * - * @param array $replacements Replace variables in URL. - * @return string - */ - public function getUrlPath(array $replacements = []): string - { - $url = config("filesystems.disks.$this->storage.url"); - - if (empty($replacements) !== true) { - foreach ($replacements as $key => $value) { - $placeholder = '{' . $key . '}'; - $url = str_replace($placeholder, $value, $url); - } - } - - // Remove any remaining {x} placeholders - $url = preg_replace('/\{[^}]+\}/', '', $url); - - return "$url"; - } - - /** - * Return the file URL - * - * @return string - */ - public function getUrlAttribute(): string - { - $url = self::getUrlPath([ - 'id' => rawurlencode($this->id), - 'name' => rawurlencode($this->name) - ]); - - return $url; - } - - /** - * Return the file owner - * - * @return BelongsTo - */ - public function user(): BelongsTo - { - return $this->belongsTo(User::class); - } - - /** - * Transform the media through the Media Job Queue - * - * @param array $transform The transform data. - * @return MediaJob - */ - public function transform(array $transform): MediaJob - { - $mediaJob = new MediaJob([ - 'media_id' => $this->media, - 'user_id' => auth()->user()?->id, - 'data' => json_encode(['transform' => $transform]), - ]); - - try { - MediaWorkerJob::dispatch($mediaJob)->onQueue('media'); - return $mediaJob; - } catch (\Exception $e) { - $this->error('Failed to transform media'); - throw $e; - }//end try - - return null; - } - - /** - * Get the server maximum upload size - * - * @return integer - */ - public static function getMaxUploadSize(): int - { - $sizes = [ - ini_get('upload_max_filesize'), - ini_get('post_max_size'), - ini_get('memory_limit') - ]; - - foreach ($sizes as &$size) { - $size = trim($size); - $last = strtolower($size[(strlen($size) - 1)]); - switch ($last) { - case 'g': - $size = (intval($size) * 1024); - // Size is in MB - fallthrough - case 'm': - $size = (intval($size) * 1024); - // Size is in KB - fallthrough - case 'k': - $size = (intval($size) * 1024); - // Size is in B - fallthrough - } - } - - return min($sizes); - } - - /** - * Generate a file name that is available within storage. - * - * @param string $fileName The proposed file name. - * @return string|boolean The available file name or false if failed. - */ - public static function generateUniqueFileName(string $fileName) - { - $index = 1; - $maxTries = 100; - $extension = pathinfo($fileName, PATHINFO_EXTENSION); - $fileName = static::sanitizeFilename(pathinfo($fileName, PATHINFO_FILENAME)); - - if ( - static::fileNameHasSuffix($fileName) === true || - static::fileExistsInStorage("$fileName.$extension") === true //|| - // Media::where('name', "$fileName.$extension")->where('status', 'not like', 'failed%')->exists() === true - ) { - $fileName .= '-'; - for ($i = 1; $i < $maxTries; $i++) { - $fileNameIndex = $fileName . $index; - if ( - static::fileExistsInStorage("$fileNameIndex.$extension") !== true && - Media::where('name', "$fileNameIndex.$extension") - // ->where('status', 'not like', 'Failed%') - ->exists() !== true - ) { - return "$fileNameIndex.$extension"; - } - - ++$index; - } - - return false; - } - - return "$fileName.$extension"; - } - - /** - * Determines if the file name exists in any of the storage disks. - * - * @param string $fileName The file name to check. - * @param boolean $ignoreCache Ignore the file list cache. - * @return boolean If the file exists on any storage disks. - */ - public static function fileExistsInStorage(string $fileName, bool $ignoreCache = false): bool - { - $disks = array_keys(Config::get('filesystems.disks')); - - if ($ignoreCache === false) { - if (count(static::$storageFileListCache) === 0) { - $disks = array_keys(Config::get('filesystems.disks')); - - foreach ($disks as $disk) { - try { - static::$storageFileListCache[$disk] = Storage::disk($disk)->allFiles(); - } catch (\Exception $e) { - Log::error("Cannot get a file list for storage device '$disk'. Error: " . $e->getMessage()); - continue; - } - } - } - - foreach (static::$storageFileListCache as $disk => $files) { - if (in_array($fileName, $files) === true) { - return true; - } - } - } else { - $disks = array_keys(Config::get('filesystems.disks')); - - foreach ($disks as $disk) { - try { - if (Storage::disk($disk)->exists($fileName) === true) { - return true; - } - } catch (\Exception $e) { - Log::error($e->getMessage()); - throw new \Exception("Cannot verify if file '$fileName' already exists in storage device '$disk'"); - } - } - }//end if - - return false; - } - - /** - * Test if the file name contains a special suffix. - * - * @param string $fileName The file name to test. - * @return boolean If the file name contains the special suffix. - */ - public static function fileNameHasSuffix(string $fileName): bool - { - $suffix = '/(-\d+x\d+|-scaled|-thumb)$/i'; - $fileNameWithoutExtension = pathinfo($fileName, PATHINFO_FILENAME); - - return preg_match($suffix, $fileNameWithoutExtension) === 1; - } - - /** - * Sanitize fileName for upload - * - * @param string $fileName Filename to sanitize. - * @return string - */ - private static function sanitizeFilename(string $fileName): string - { - /* - # file system reserved https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words - [<>:"/\\\|?*]| - - # control characters http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247%28v=vs.85%29.aspx - [\x00-\x1F]| - - # non-printing characters DEL, NO-BREAK SPACE, SOFT HYPHEN - [\x7F\xA0\xAD]| - - # URI reserved https://www.rfc-editor.org/rfc/rfc3986#section-2.2 - [#\[\]@!$&\'()+,;=]| - - # URL unsafe characters https://www.ietf.org/rfc/rfc1738.txt - [{}^\~`] - */ - - $fileName = preg_replace( - '~ - [<>:"/\\\|?*]| - [\x00-\x1F]| - [\x7F\xA0\xAD]| - [#\[\]@!$&\'()+,;=]| - [{}^\~`] - ~x', - '-', - $fileName - ); - - $fileName = ltrim($fileName, '.-'); - - $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, '.-'); - - $ext = pathinfo($fileName, PATHINFO_EXTENSION); - $fileName = mb_strcut( - pathinfo($fileName, PATHINFO_FILENAME), - 0, - (255 - ($ext !== '' ? strlen($ext) + 1 : 0)), - mb_detect_encoding($fileName) - ) . ($ext !== '' ? '.' . $ext : ''); - return $fileName; - } - - /** - * Get the Staging File path. - * - * @param boolean $create Create staging file if doesn't exist. - * @return string - */ - public function getStagingFilePath(bool $create = true): string - { - if ($this->stagingFilePath === "" && $create === true) { - $this->createStagingFile(); - } - - return $this->stagingFilePath; - } - - /** - * Set the Staging File for processing. - * - * @param string $path The path if the new staging file. - * @param boolean $overwrite Overwrite existing file. - * @return void - */ - public function setStagingFile(string $path, bool $overwrite = false): void - { - if ($this->stagingFilePath !== "") { - if ($overwrite === true) { - unlink($this->stagingFilePath); - } else { - // ignore request - return; - } - } - - $this->stagingFilePath = $path; - } - - /** - * Download temporary copy of the storage file for staging. - * - * @return boolean If download was successful. - */ - public function createStagingFile(): bool - { - if ($this->stagingFilePath === "") { - $readStream = Storage::disk($this->storage)->readStream($this->name); - $filePath = generateTempFilePath(pathinfo($this->name, PATHINFO_EXTENSION)); - - $writeStream = fopen($filePath, 'w'); - while (feof($readStream) !== true) { - fwrite($writeStream, fread($readStream, 8192)); - } - fclose($readStream); - fclose($writeStream); - - $this->stagingFilePath = $filePath; - }//end if - - return $this->stagingFilePath !== ""; - } - - /** - * Save the Staging File to storage - * - * @param boolean $delete Delete the existing staging file. - * @param boolean $silent Update the status field with the progress. - * @return void - */ - public function saveStagingFile(bool $delete = true, bool $silent = false): void - { - if ($this->stagingFilePath !== '') { - if (strlen($this->storage) > 0 && strlen($this->name) > 0) { - if (Storage::disk($this->storage)->exists($this->name) === true) { - Storage::disk($this->storage)->delete($this->name); - } - - /** @var Illuminate\Filesystem\FilesystemAdapter */ - $fileSystem = Storage::disk($this->storage); - $fileSystem->putFileAs('/', $this->stagingFilePath, $this->name); - } - - $this->generateThumbnail(); - $this->generateVariants(); - - if ($delete === true) { - $this->deleteStagingFile(); - } - }//end if - } - - /** - * Clean up temporary file. - * - * @return void - */ - public function deleteStagingFile(): void - { - if ($this->stagingFilePath !== "") { - unlink($this->stagingFilePath); - $this->stagingFilePath = ""; - } - } - - /** - * Change staging file, removing the old file if present - * - * @param string $newFile The new staging file. - * @return void - */ - public function changeStagingFile(string $newFile): void - { - if ($this->stagingFilePath !== "") { - unlink($this->stagingFilePath); - } - - $this->stagingFilePath = $newFile; - } - - /** - * Is a staging file present - * - * @return boolean - */ - public function hasStagingFile(): bool - { - return $this->stagingFilePath !== ""; - } - - /** - * Generate a Thumbnail for this media. - * - * @return boolean If generation was successful. - */ - public function generateThumbnail(): bool - { - $thumbnailWidth = 200; - $thumbnailHeight = 200; - - // delete existing thumbnail - if (strlen($this->thumbnail) !== 0) { - $path = pathinfo($this->thumbnail, PATHINFO_BASENAME); - if (strlen($path) > 0 && Storage::disk($this->storage)->exists($path) === true) { - Storage::disk($this->storage)->delete($path); - } - } - - $filePath = $this->getStagingFilePath(); - - $fileExtension = File::extension($this->name); - $tempImagePath = tempnam(sys_get_temp_dir(), 'thumb'); - $newFilename = pathinfo($this->name, PATHINFO_FILENAME) . "-" . uniqid() . "-thumb.webp"; - $success = false; - - if ($this->security_type === '') { - if (strpos($this->mime_type, 'image/') === 0) { - $image = Image::make($filePath); - $image->orientate(); - $image->resize($thumbnailWidth, $thumbnailHeight, function ($constraint) { - $constraint->aspectRatio(); - }); - $image->fit($thumbnailWidth, $thumbnailHeight); - $image->encode('webp', 75)->save($tempImagePath); - $success = true; - } elseif ($this->mime_type === 'application/pdf' && extension_loaded('imagick') === true) { - $pdfPreview = new \Imagick(); - $pdfPreview->setResolution(300, 300); - $pdfPreview->readImage($filePath . '[0]'); - $pdfPreview->setImageFormat('webp'); - $pdfPreview->thumbnailImage($thumbnailWidth, $thumbnailHeight, true); - file_put_contents($tempImagePath, $pdfPreview); - - $success = true; - } elseif ($this->mime_type === 'text/plain') { - $image = Image::canvas($thumbnailWidth, $thumbnailHeight, '#FFFFFF'); - - // Read the first few lines of the text file - $numLines = 5; - $text = file_get_contents($filePath); - $lines = explode("\n", $text); - $previewText = implode("\n", array_slice($lines, 0, $numLines)); - - // Center the text on the image - $fontSize = 8; - $textColor = '#000000'; // Black text color - - // Calculate the position to start drawing the text - $x = 10; // Left padding - $y = 10; // Top padding - - // Draw the text on the canvas with text wrapping - $lines = explode("\n", wordwrap($previewText, 30, "\n", true)); - foreach ($lines as $line) { - $image->text($line, $x, $y, function ($font) use ($fontSize, $textColor) { - $font->file(1); - $font->size($fontSize); - $font->color($textColor); - }); - - // Move to the next line - $y += ($fontSize + 4); // Add some vertical spacing between lines (adjust as needed) - } - - $image->encode('webp', 75)->save($tempImagePath); - - $success = true; - } elseif (strpos($this->mime_type, 'video/') === 0) { - $tempImagePath .= '.webp'; - - try { - $ffmpeg = FFMpeg::create(); - $video = $ffmpeg->open($filePath); - $frame = $video->frame(TimeCode::fromSeconds(5)); - $frame->save($tempImagePath); - } catch (\Exception $e) { - Log::error($e); - } - - $success = true; - }//end if - }//end if - - if ($success === true && file_exists($tempImagePath) === true) { - /** @var Illuminate\Filesystem\FilesystemAdapter */ - $fileSystem = Storage::disk($this->storage); - $fileSystem->putFileAs('/', new SplFileInfo($tempImagePath), $newFilename); - unlink($tempImagePath); - - $this->thumbnail = $this->getUrlPath(['name' => $newFilename]); - } else { - $iconExtension = 'unknown'; - if ($fileExtension !== '') { - $iconPath = public_path('assets/fileicons/' . $fileExtension . '.webp'); - if (file_exists($iconPath) === true) { - $iconExtension = $fileExtension; - } - } - - $this->thumbnail = asset('/assets/fileicons/' . $iconExtension . '.webp'); - } - - return $success; - } - - /** - * Delete Media Thumbnail from storage. - * - * @return void - */ - public function deleteThumbnail(): void - { - if (strlen($this->thumbnail) > 0) { - $path = pathinfo($this->thumbnail, PATHINFO_BASENAME); - - if (strlen($path) > 0 && Storage::disk($this->storage)->exists($path) === true) { - Storage::disk($this->storage)->delete($path); - $this->thumbnail = ''; // Clear the thumbnail property - } - } - } - - /** - * Generate variants for this media. - * - * @return void - */ - public function generateVariants(): void - { - // delete existing variants - if (is_array($this->variants) === true) { - foreach ($this->variants as $variantName => $variantFile) { - if (Storage::disk($this->storage)->exists($variantFile) === true) { - Storage::disk($this->storage)->delete($variantFile); - } - } - } - $this->variants = []; - - if ($this->security_type === '') { - if (strpos($this->mime_type, 'image/') === 0) { - // Generate additional image sizes - $sizes = Media::getObjectVariants('image'); - - // download original from CDN if no local file - $filePath = $this->getStagingFilePath(); - - $originalImage = Image::make($filePath); - - $imageSize = $originalImage->getSize(); - $isPortrait = $imageSize->getHeight() > $imageSize->getWidth(); - - // Swap width and height values for portrait images - foreach ($sizes as $variantName => &$size) { - if ($isPortrait === true) { - $temp = $size['width']; - $size['width'] = $size['height']; - $size['height'] = $temp; - } - } - - $dimensions = [$originalImage->getWidth(), $originalImage->getHeight()]; - $this->dimensions = implode('x', $dimensions); - - foreach ($sizes as $variantName => $size) { - $postfix = "{$size['width']}x{$size['height']}"; - if ($variantName === 'scaled') { - $postfix = 'scaled'; - } - - $newFilename = pathinfo($this->name, PATHINFO_FILENAME) . "-" . uniqid() . "-$postfix.webp"; - - // Get the largest available variant - if ($dimensions[0] >= $size['width'] && $dimensions[1] >= $size['height']) { - // Store the variant in the variants array - $variants[$variantName] = $newFilename; - - // Resize the image to the variant size if its dimensions are greater than the - // specified size - $image = clone $originalImage; - - $imageSize = $image->getSize(); - if ($imageSize->getWidth() > $size['width'] || $imageSize->getHeight() > $size['height']) { - $image->resize($size['width'], $size['height'], function ($constraint) { - $constraint->aspectRatio(); - $constraint->upsize(); - }); - $image->resizeCanvas($size['width'], $size['height'], 'center', false, 'rgba(0,0,0,0)'); - } - - $image->orientate(); - - // Optimize and store image - $tempImagePath = tempnam(sys_get_temp_dir(), 'optimize'); - $image->encode('webp', 75)->save($tempImagePath); - /** @var Illuminate\Filesystem\FilesystemAdapter */ - $fileSystem = Storage::disk($this->storage); - $fileSystem->putFileAs('/', new SplFileInfo($tempImagePath), $newFilename); - unlink($tempImagePath); - }//end if - }//end foreach - - // Set missing variants to the largest available variant - foreach ($sizes as $variantName => $size) { - if (isset($variants[$variantName]) === false) { - $variants[$variantName] = $this->name; - } - } - - $this->variants = $variants; - }//end if - }//end if - } - - /** - * Delete the Media variants from storage. - * - * @return void - */ - public function deleteVariants(): void - { - if (strlen($this->name) > 0 && strlen($this->storage) > 0) { - foreach ($this->variants as $variantName => $fileName) { - Storage::disk($this->storage)->delete($fileName); - } - - $this->variants = []; - } - } - - /** - * Set Media status to OK - * - * @return void - */ - public function ok(): void - { - // $this->status = "OK"; - $this->save(); - } - - /** - * Set Media status to an error - * @param string $error The error to set. - * @return void - */ - public function error(string $error = ""): void - { - // $this->status = "Error" . ($error !== "" ? ": {$error}" : ""); - $this->save(); - } - - /** - * Set Media status - * @param string $status The status to set. - * @return void - */ - public function status(string $status = ""): void - { - // $this->status = "Info: " . $status; - $this->save(); - } - - /** - * Get the associated job models - * - * @return HasMany - */ - public function jobs(): HasMany - { - return $this->hasMany(MediaJob::class, 'media_id'); - } - - /** - * Get the recommended storage ID based on mime and security - * - * @param string $mime_type The file mime type. - * @param string $security_type The security requested. - * @return string - */ - public static function recommendedStorage(string $mime_type, string $security_type): string - { - if ($security_type === '') { - if (strpos($mime_type, 'image/') === 0) { - return('local'); - } else { - return('cdn'); - } - } - - return('private'); - } - - /** - * Verify the storage exists. May change the storage value. - * - * @param mixed $mime_type File mime type. - * @param mixed $security_type Requested security type. - * @param mixed $storage Reference to the requested storage type. - * @return integer Error code. - */ - public static function verifyStorage(mixed $mime_type, mixed $security_type, mixed &$storage): int - { - if ($storage === '') { - if ($security_type === '') { - if (strpos($mime_type, 'image/') === 0) { - $storage = 'local'; - } else { - $storage = 'cdn'; - } - } else { - $storage = 'private'; - } - } else { - $disks = config('filesystems.disks'); - if (array_key_exists($storage, $disks) === false) { - return Media::STORAGE_NOT_FOUND; - } - - if ($security_type !== '' && strcasecmp($storage, 'private') !== 0) { - return Media::STORAGE_INVALID_SECURITY; - } - } - - return Media::STORAGE_VALID; - } } diff --git a/app/Models/Post.php b/app/Models/Post.php new file mode 100644 index 0000000..089656b --- /dev/null +++ b/app/Models/Post.php @@ -0,0 +1,11 @@ + */ protected $fillable = [ - 'first_name', - 'last_name', + 'username', 'email', - 'phone', 'password', - 'display_name', + 'is_under_14', ]; /** @@ -45,7 +34,6 @@ class User extends Authenticatable implements Auditable protected $hidden = [ 'password', 'remember_token', - 'permissions' ]; /** @@ -55,192 +43,17 @@ class User extends Authenticatable implements Auditable */ protected $casts = [ 'email_verified_at' => 'datetime', + 'password' => 'hashed', ]; - // protected $hidden = [ - // 'permissions' - // ]; - - /** - * The attributes to append. - * - * @var string[] - */ - protected $appends = [ - 'permissions' - ]; - - /** - * The default attributes. - * - * @var string[] - */ - protected $attributes = [ - 'phone' => '', - ]; - - - /** - * Boot the model. - * - * @return void - */ - protected static function boot(): void - { - parent::boot(); - - $clearCache = function ($user) { - Cache::forget( - "user:{$user->id}", - "user:{$user->id}:permissions" - ); - }; - - static::saving($clearCache); - static::deleting($clearCache); + public function verificationCodes() { + return $this->hasMany(VerificationCode::class); } - /** - * Get the list of permissions of the user - * - * @return Illuminate\Database\Eloquent\Relations\HasMany - */ - public function permissions(): HasMany + public function formattedEmailVerifiedAt() { - return $this->hasMany(Permission::class); - } - - /** - * Get the permission attribute - * - * @return array - */ - public function getPermissionsAttribute(): array - { - $cacheKey = "user:{$this->id}:permissions"; - return Cache::remember($cacheKey, now()->addDays(28), function () { - return $this->permissions()->pluck('permission')->toArray(); - }); - } - - /** - * Set the permission attribute - * - * @param array $newPermissions The new permissions to set to the user. - * @return void - */ - public function setPermissionsAttribute(array $newPermissions): void - { - $existingPermissions = $this->permissions->pluck('permission')->toArray(); - - $this->revokePermission(array_diff($this->permissions, $newPermissions)); - $this->givePermission(array_diff($newPermissions, $this->permissions)); - - $cacheKey = "user:{$this->id}:permissions"; - Cache::delete($cacheKey); - } - - /** - * Test if user has permission - * - * @param string $permission Permission to test. - * @return boolean - */ - public function hasPermission(string $permission): bool - { - return in_array($permission, $this->permissions); - } - - /** - * Give permissions to the user - * - * @param string|array $permissions The permission(s) to give. - * @return Illuminate\Database\Eloquent\Collection - */ - public function givePermission($permissions): Collection - { - if (is_array($permissions) === false) { - $permissions = [$permissions]; - } - - $newPermissions = array_map(function ($permission) { - return ['permission' => $permission]; - }, array_diff($permissions, $this->permissions)); - - $cacheKey = "user:{$this->id}:permissions"; - Cache::forget($cacheKey); - - return $this->permissions()->createMany($newPermissions); - } - - - /** - * Revoke permissions from the user - * - * @param string|array $permissions The permission(s) to revoke. - * @return integer - */ - public function revokePermission($permissions): int - { - if (is_array($permissions) === false) { - $permissions = [$permissions]; - } - - $cacheKey = "user:{$this->id}:permissions"; - Cache::forget($cacheKey); - - return $this->permissions() - ->whereIn('permission', $permissions) - ->delete(); - } - - /** - * Get the list of files of the user - * - * @return HasMany - */ - public function media(): HasMany - { - return $this->hasMany(Media::class); - } - - /** - * Get the list of files of the user - * - * @return HasMany - */ - public function articles(): HasMany - { - return $this->hasMany(Article::class); - } - - /** - * Get associated user codes - * - * @return HasMany - */ - public function codes(): HasMany - { - return $this->hasMany(UserCode::class); - } - - /** - * Get the list of logins of the user - * - * @return HasMany - */ - public function logins(): HasMany - { - return $this->hasMany(UserLogins::class); - } - - /** - * Get the events associated with the user. - * - * @return BelongsToMany - */ - public function events(): BelongsToMany - { - return $this->belongsToMany(Event::class, 'event_user', 'user_id', 'event_id'); + return $this->email_verified_at + ? 'Not verified' + : Carbon::parse($this->email_verified_at)->format('j/m/Y'); } } diff --git a/app/Models/VerificationCode.php b/app/Models/VerificationCode.php new file mode 100644 index 0000000..74c0840 --- /dev/null +++ b/app/Models/VerificationCode.php @@ -0,0 +1,68 @@ + + */ + protected $fillable = [ + 'type', + ]; + + /** + * Boot function from Laravel. + * + * @return void + */ + protected static function boot(): void + { + parent::boot(); + static::creating(function ($model) { + VerificationCode::clearExpired(); + + if(empty($model->{'user_id'}) === false && empty($model->{'user_id'}) === false) { + VerificationCode::where('user_id', $model->{'user_id'})->where('type', $model->{'type'})->delete(); + } + + if (empty($model->{'code'}) === true) { + while (true) { + $code = random_int(100000, 999999); + if (VerificationCode::where('code', $code)->count() === 0) { + $model->{'code'} = $code; + break; + } + } + } + }); + } + + /** + * Clear expired user codes + * + * @return void + */ + public static function clearExpired(): void + { + VerificationCode::where('updated_at', '<=', now()->subDays(5))->delete(); + } + + /** + * Get associated user + * + * @return Illuminate\Database\Eloquent\Relations\BelongsTo + */ + public function user(): BelongsTo + { + return $this->belongsTo(User::class); + } +} diff --git a/app/Models/Workshop.php b/app/Models/Workshop.php new file mode 100644 index 0000000..b444861 --- /dev/null +++ b/app/Models/Workshop.php @@ -0,0 +1,33 @@ + + */ + protected $fillable = [ + 'type', + ]; + + public function scopeFilter($query, array $filters) { + if($filters['tag'] ?? false) { + $query->where('tags', 'like', '%' . request('tag') . '%'); + } + + if($filters['search'] ?? false) { + $query->where('title', 'like', '%' . request('search') . '%') + ->orWhere('description', 'like', '%' . request('search') . '%') + ->orWhere('tags', 'like', '%' . request('search') . '%'); + } + } + +} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index 30a0c2d..452e6b6 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -2,16 +2,12 @@ namespace App\Providers; -use Illuminate\Http\Request; use Illuminate\Support\ServiceProvider; -use Illuminate\Support\Facades\Storage; class AppServiceProvider extends ServiceProvider { /** * Register any application services. - * - * @return void */ public function register(): void { @@ -20,34 +16,9 @@ class AppServiceProvider extends ServiceProvider /** * Bootstrap any application services. - * - * @return void */ public function boot(): void { - Request::macro('rename', function ($param, $newParam = null) { - if (is_array($param) === false) { - if ($newParam === null) { - return; - } - - $param = [$param => $newParam]; - } - - $paramArray = $this->all(); - foreach ($param as $oldParam => $newParam) { - if (isset($paramArray[$oldParam]) === true) { - $paramArray[$newParam] = $paramArray[$oldParam]; - unset($paramArray[$oldParam]); - } - } - - $this->replace($paramArray); - }); - - Storage::macro('public', function ($diskName) { - $public = config("filesystems.disks.{$diskName}.public", false); - return $public; - }); + // } } diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php index 1f84312..54756cd 100644 --- a/app/Providers/AuthServiceProvider.php +++ b/app/Providers/AuthServiceProvider.php @@ -13,14 +13,11 @@ class AuthServiceProvider extends ServiceProvider * @var array */ protected $policies = [ - // 'App\Models\Model' => 'App\Policies\ModelPolicy', + // ]; - /** * Register any authentication / authorization services. - * - * @return void */ public function boot(): void { diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php index 229284c..2be04f5 100644 --- a/app/Providers/BroadcastServiceProvider.php +++ b/app/Providers/BroadcastServiceProvider.php @@ -9,8 +9,6 @@ class BroadcastServiceProvider extends ServiceProvider { /** * Bootstrap any application services. - * - * @return void */ public function boot(): void { diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php index 95217e4..2d65aac 100644 --- a/app/Providers/EventServiceProvider.php +++ b/app/Providers/EventServiceProvider.php @@ -5,10 +5,7 @@ namespace App\Providers; use Illuminate\Auth\Events\Registered; use Illuminate\Auth\Listeners\SendEmailVerificationNotification; use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider; -use Illuminate\Queue\Events\JobProcessed; -use Illuminate\Support\Facades\Queue; use Illuminate\Support\Facades\Event; -use Illuminate\Support\Facades\Log; class EventServiceProvider extends ServiceProvider { @@ -23,11 +20,8 @@ class EventServiceProvider extends ServiceProvider ], ]; - /** * Register any events for your application. - * - * @return void */ public function boot(): void { @@ -36,8 +30,6 @@ class EventServiceProvider extends ServiceProvider /** * Determine if events and listeners should be automatically discovered. - * - * @return boolean */ public function shouldDiscoverEvents(): bool { diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php index 7113be9..1cf5f15 100644 --- a/app/Providers/RouteServiceProvider.php +++ b/app/Providers/RouteServiceProvider.php @@ -7,12 +7,11 @@ use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvi use Illuminate\Http\Request; use Illuminate\Support\Facades\RateLimiter; use Illuminate\Support\Facades\Route; -use Illuminate\Support\Str; class RouteServiceProvider extends ServiceProvider { /** - * The path to the "home" route for your application. + * The path to your application's "home" route. * * Typically, users are redirected here after authentication. * @@ -20,38 +19,14 @@ class RouteServiceProvider extends ServiceProvider */ public const HOME = '/home'; - /** * Define your route model bindings, pattern filters, and other route configuration. - * - * @return void */ public function boot(): void { - // RateLimiter::for('api', function (Request $request) { - // return Limit::perMinute(60)->by($request->user()?->id !== null ?: $request->ip()); - // }); - - $rateLimitEnabled = true; - /** @var \App\Models\User */ - $user = auth()->user(); - - if (app()->environment('testing') === true) { - $rateLimitEnabled = false; - } elseif ($user !== null && $user->hasPermission('admin/ratelimit') === true) { - // Admin users with the "admin/ratelimit" permission are not rate limited - $rateLimitEnabled = false; - } - - if ($rateLimitEnabled === true) { - RateLimiter::for('api', function (Request $request) { - return Limit::perMinute(800)->by(isset($request->user()->id) === true ?: $request->ip()); - }); - } else { - RateLimiter::for('api', function () { - return Limit::none(); - }); - } + RateLimiter::for('api', function (Request $request) { + return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip()); + }); $this->routes(function () { Route::middleware('api') @@ -61,30 +36,5 @@ class RouteServiceProvider extends ServiceProvider Route::middleware('web') ->group(base_path('routes/web.php')); }); - - Route::macro('apiAddendumResource', function ($addendum, $uri, $controller) { - $singularUri = Str::singular($uri); - $signularAddendum = Str::singular((strtolower($addendum))); - $pluralAddendum = Str::plural($signularAddendum); - - Route::get("{$uri}/{{$singularUri}}/{$pluralAddendum}", [$controller, "{$signularAddendum}Index"]) - ->name("{$singularUri}.{$signularAddendum}.index"); - - Route::post("{$uri}/{{$singularUri}}/{$pluralAddendum}", [$controller, "{$signularAddendum}Store"]) - ->name("{$singularUri}.{$signularAddendum}.store"); - - Route::match( - ['put', 'patch'], - "{$uri}/{{$singularUri}}/{$pluralAddendum}", - [$controller, "{$signularAddendum}Update"] - ) - ->name("{$singularUri}.{$signularAddendum}.update"); - - Route::delete( - "{$uri}/{{$singularUri}}/{$pluralAddendum}/{medium}", - [$controller,"{$signularAddendum}Delete"] - ) - ->name("{$singularUri}.{$signularAddendum}.destroy"); - }); } } diff --git a/composer.json b/composer.json index d5fb7ba..8643a5c 100644 --- a/composer.json +++ b/composer.json @@ -1,56 +1,37 @@ { "name": "laravel/laravel", "type": "project", - "description": "The Laravel Framework.", - "keywords": [ - "framework", - "laravel" - ], + "description": "The skeleton application for the Laravel framework.", + "keywords": ["laravel", "framework"], "license": "MIT", "require": { "php": "^8.1", - "doctrine/dbal": "^3.5", + "bayareawebpro/laravel-multistep-forms": "^1.1", "guzzlehttp/guzzle": "^7.2", - "intervention/image": "^2.7", - "laravel/framework": "^10.12", - "laravel/sanctum": "^3.2", + "laravel/framework": "^10.10", + "laravel/sanctum": "^3.3", "laravel/tinker": "^2.8", - "league/flysystem-aws-s3-v3": "^3.12", - "owen-it/laravel-auditing": "^13.1", - "php-ffmpeg/php-ffmpeg": "^1.1", - "square/square": "32.0.0.20231018", - "sunspikes/clamav-validator": "*", - "thiagoalessio/tesseract_ocr": "^2.12", - "vlucas/phpdotenv": "^5.5" + "spatie/laravel-permission": "^6.1" }, "require-dev": { - "barryvdh/laravel-ide-helper": "^2.13", "fakerphp/faker": "^1.9.1", - "itsgoingd/clockwork": "^5.1", "laravel/pint": "^1.0", "laravel/sail": "^1.18", "mockery/mockery": "^1.4.4", - "nunomaduro/collision": "^7.1", - "phpunit/phpunit": "^10.1.3", + "nunomaduro/collision": "^7.0", + "phpunit/phpunit": "^10.1", "spatie/laravel-ignition": "^2.0" }, "autoload": { - "files": [ - "app/Helpers/Array.php", - "app/Helpers/Temp.php", - "app/Helpers/TypeValue.php" - ], "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", - "Database\\Seeders\\": "database/seeders/", - "Faker\\Provider\\": "faker/provider/" + "Database\\Seeders\\": "database/seeders/" } }, "autoload-dev": { "psr-4": { - "Tests\\": "tests/", - "Faker\\Provider\\": "faker/provider/" + "Tests\\": "tests/" } }, "scripts": { @@ -78,7 +59,8 @@ "preferred-install": "dist", "sort-packages": true, "allow-plugins": { - "pestphp/pest-plugin": true + "pestphp/pest-plugin": true, + "php-http/discovery": true } }, "minimum-stability": "stable", diff --git a/composer.lock b/composer.lock index 6215538..5366a24 100644 --- a/composer.lock +++ b/composer.lock @@ -4,187 +4,39 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "bc423f0daa8803140c88ff8b5bf51259", + "content-hash": "0d62fc64fcf6155f2354d1a8f0413990", "packages": [ { - "name": "apimatic/core", - "version": "0.3.2", + "name": "bayareawebpro/laravel-multistep-forms", + "version": "v1.1.2", "source": { "type": "git", - "url": "https://github.com/apimatic/core-lib-php.git", - "reference": "32238fb83ce9a3ebef38c726b497c0f218d6e6c9" + "url": "https://github.com/bayareawebpro/laravel-multistep-forms.git", + "reference": "f2c29c0e640d90a181b00d095b4cf0564ca515c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/apimatic/core-lib-php/zipball/32238fb83ce9a3ebef38c726b497c0f218d6e6c9", - "reference": "32238fb83ce9a3ebef38c726b497c0f218d6e6c9", + "url": "https://api.github.com/repos/bayareawebpro/laravel-multistep-forms/zipball/f2c29c0e640d90a181b00d095b4cf0564ca515c7", + "reference": "f2c29c0e640d90a181b00d095b4cf0564ca515c7", "shasum": "" }, "require": { - "apimatic/core-interfaces": "~0.1.0", - "apimatic/jsonmapper": "^3.1.1", - "ext-curl": "*", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "php": "^7.2 || ^8.0", - "php-jsonpointer/php-jsonpointer": "^3.0.2" + "illuminate/contracts": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/http": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/session": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/support": "^6.0|^7.0|^8.0|^9.0|^10.0", + "illuminate/validation": "^6.0|^7.0|^8.0|^9.0|^10.0", + "php": "^7.4|^8.0" }, "require-dev": { - "phan/phan": "5.4.2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "squizlabs/php_codesniffer": "^3.5" + "nunomaduro/larastan": "^0.6|^1.0|^2.0", + "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0", + "phpunit/phpunit": "^8.0|^9.0|^10.0" }, "type": "library", "autoload": { "psr-4": { - "Core\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Core logic and the utilities for the Apimatic's PHP SDK", - "homepage": "https://github.com/apimatic/core-lib-php", - "keywords": [ - "apimatic", - "core", - "corelib", - "php" - ], - "support": { - "issues": "https://github.com/apimatic/core-lib-php/issues", - "source": "https://github.com/apimatic/core-lib-php/tree/0.3.2" - }, - "time": "2023-07-11T09:30:32+00:00" - }, - { - "name": "apimatic/core-interfaces", - "version": "0.1.2", - "source": { - "type": "git", - "url": "https://github.com/apimatic/core-interfaces-php.git", - "reference": "183214195a79784c382a446795c46ca8c1f43cc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/apimatic/core-interfaces-php/zipball/183214195a79784c382a446795c46ca8c1f43cc1", - "reference": "183214195a79784c382a446795c46ca8c1f43cc1", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "CoreInterfaces\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Definition of the behavior of apimatic/core, apimatic/unirest-php and Apimatic's PHP SDK", - "homepage": "https://github.com/apimatic/core-interfaces-php", - "keywords": [ - "apimatic", - "core", - "corelib", - "interface", - "php", - "unirest" - ], - "support": { - "issues": "https://github.com/apimatic/core-interfaces-php/issues", - "source": "https://github.com/apimatic/core-interfaces-php/tree/0.1.2" - }, - "time": "2023-04-04T06:40:52+00:00" - }, - { - "name": "apimatic/jsonmapper", - "version": "3.1.2", - "source": { - "type": "git", - "url": "https://github.com/apimatic/jsonmapper.git", - "reference": "6673a946c21f2ceeec0cb60d17541c11a22bc79d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/apimatic/jsonmapper/zipball/6673a946c21f2ceeec0cb60d17541c11a22bc79d", - "reference": "6673a946c21f2ceeec0cb60d17541c11a22bc79d", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "squizlabs/php_codesniffer": "^3.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "apimatic\\jsonmapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "OSL-3.0" - ], - "authors": [ - { - "name": "Christian Weiske", - "email": "christian.weiske@netresearch.de", - "homepage": "http://www.netresearch.de/", - "role": "Developer" - }, - { - "name": "Mehdi Jaffery", - "email": "mehdi.jaffery@apimatic.io", - "homepage": "http://apimatic.io/", - "role": "Developer" - } - ], - "description": "Map nested JSON structures onto PHP classes", - "support": { - "email": "mehdi.jaffery@apimatic.io", - "issues": "https://github.com/apimatic/jsonmapper/issues", - "source": "https://github.com/apimatic/jsonmapper/tree/3.1.2" - }, - "time": "2023-06-08T04:27:10+00:00" - }, - { - "name": "apimatic/unirest-php", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/apimatic/unirest-php.git", - "reference": "e16754010c16be5473289470f129d87a0f41b55e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/apimatic/unirest-php/zipball/e16754010c16be5473289470f129d87a0f41b55e", - "reference": "e16754010c16be5473289470f129d87a0f41b55e", - "shasum": "" - }, - "require": { - "apimatic/core-interfaces": "^0.1.0", - "ext-curl": "*", - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "phan/phan": "5.4.2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Unirest\\": "src/" + "BayAreaWebPro\\MultiStepForms\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -193,182 +45,16 @@ ], "authors": [ { - "name": "Mashape", - "email": "opensource@mashape.com", - "homepage": "https://www.mashape.com", - "role": "Developer" - }, - { - "name": "APIMATIC", - "email": "opensource@apimatic.io", - "homepage": "https://www.apimatic.io", - "role": "Developer" + "name": "Daniel Alvidrez", + "email": "dan@bayareawebpro.com" } ], - "description": "Unirest PHP", - "homepage": "https://github.com/apimatic/unirest-php", - "keywords": [ - "client", - "curl", - "http", - "https", - "rest" - ], + "description": "Responsable MultiStep Form Builder for Laravel.", "support": { - "email": "opensource@apimatic.io", - "issues": "https://github.com/apimatic/unirest-php/issues", - "source": "https://github.com/apimatic/unirest-php/tree/4.0.5" + "issues": "https://github.com/bayareawebpro/laravel-multistep-forms/issues", + "source": "https://github.com/bayareawebpro/laravel-multistep-forms/tree/v1.1.2" }, - "time": "2023-04-25T14:19:45+00:00" - }, - { - "name": "aws/aws-crt-php", - "version": "v1.2.2", - "source": { - "type": "git", - "url": "https://github.com/awslabs/aws-crt-php.git", - "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/awslabs/aws-crt-php/zipball/2f1dc7b7eda080498be96a4a6d683a41583030e9", - "reference": "2f1dc7b7eda080498be96a4a6d683a41583030e9", - "shasum": "" - }, - "require": { - "php": ">=5.5" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35||^5.6.3||^9.5", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "ext-awscrt": "Make sure you install awscrt native extension to use any of the functionality." - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "AWS SDK Common Runtime Team", - "email": "aws-sdk-common-runtime@amazon.com" - } - ], - "description": "AWS Common Runtime for PHP", - "homepage": "https://github.com/awslabs/aws-crt-php", - "keywords": [ - "amazon", - "aws", - "crt", - "sdk" - ], - "support": { - "issues": "https://github.com/awslabs/aws-crt-php/issues", - "source": "https://github.com/awslabs/aws-crt-php/tree/v1.2.2" - }, - "time": "2023-07-20T16:49:55+00:00" - }, - { - "name": "aws/aws-sdk-php", - "version": "3.283.8", - "source": { - "type": "git", - "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "0f73ec85852312a6e971cfe2eebfd7c8091cca34" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/0f73ec85852312a6e971cfe2eebfd7c8091cca34", - "reference": "0f73ec85852312a6e971cfe2eebfd7c8091cca34", - "shasum": "" - }, - "require": { - "aws/aws-crt-php": "^1.0.4", - "ext-json": "*", - "ext-pcre": "*", - "ext-simplexml": "*", - "guzzlehttp/guzzle": "^6.5.8 || ^7.4.5", - "guzzlehttp/promises": "^1.4.0 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", - "mtdowling/jmespath.php": "^2.6", - "php": ">=7.2.5", - "psr/http-message": "^1.0 || ^2.0" - }, - "require-dev": { - "andrewsville/php-token-reflection": "^1.4", - "aws/aws-php-sns-message-validator": "~1.0", - "behat/behat": "~3.0", - "composer/composer": "^1.10.22", - "dms/phpunit-arraysubset-asserts": "^0.4.0", - "doctrine/cache": "~1.4", - "ext-dom": "*", - "ext-openssl": "*", - "ext-pcntl": "*", - "ext-sockets": "*", - "nette/neon": "^2.3", - "paragonie/random_compat": ">= 2", - "phpunit/phpunit": "^5.6.3 || ^8.5 || ^9.5", - "psr/cache": "^1.0", - "psr/simple-cache": "^1.0", - "sebastian/comparator": "^1.2.3 || ^4.0", - "yoast/phpunit-polyfills": "^1.0" - }, - "suggest": { - "aws/aws-php-sns-message-validator": "To validate incoming SNS notifications", - "doctrine/cache": "To use the DoctrineCacheAdapter", - "ext-curl": "To send requests using cURL", - "ext-openssl": "Allows working with CloudFront private distributions and verifying received SNS messages", - "ext-sockets": "To use client-side monitoring" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Aws\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Amazon Web Services", - "homepage": "http://aws.amazon.com" - } - ], - "description": "AWS SDK for PHP - Use Amazon Web Services in your PHP project", - "homepage": "http://aws.amazon.com/sdkforphp", - "keywords": [ - "amazon", - "aws", - "cloud", - "dynamodb", - "ec2", - "glacier", - "s3", - "sdk" - ], - "support": { - "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", - "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.283.8" - }, - "time": "2023-10-19T19:26:52+00:00" + "time": "2023-03-27T23:05:28+00:00" }, { "name": "brick/math", @@ -425,75 +111,6 @@ ], "time": "2023-01-15T23:15:59+00:00" }, - { - "name": "clue/socket-raw", - "version": "v1.6.0", - "source": { - "type": "git", - "url": "https://github.com/clue/socket-raw.git", - "reference": "91e9f619f6769f931454a9882c21ffd7623d06cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/clue/socket-raw/zipball/91e9f619f6769f931454a9882c21ffd7623d06cb", - "reference": "91e9f619f6769f931454a9882c21ffd7623d06cb", - "shasum": "" - }, - "require": { - "ext-sockets": "*", - "php": ">=5.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3 || ^5.7 || ^4.8.35" - }, - "type": "library", - "autoload": { - "psr-4": { - "Socket\\Raw\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Christian Lück", - "email": "christian@clue.engineering" - } - ], - "description": "Simple and lightweight OOP wrapper for PHP's low-level sockets extension (ext-sockets).", - "homepage": "https://github.com/clue/socket-raw", - "keywords": [ - "Socket", - "client", - "datagram", - "dgram", - "icmp", - "ipv6", - "server", - "stream", - "tcp", - "udg", - "udp", - "unix" - ], - "support": { - "issues": "https://github.com/clue/socket-raw/issues", - "source": "https://github.com/clue/socket-raw/tree/v1.6.0" - }, - "funding": [ - { - "url": "https://clue.engineering/support", - "type": "custom" - }, - { - "url": "https://github.com/clue", - "type": "github" - } - ], - "time": "2022-04-14T14:58:06+00:00" - }, { "name": "dflydev/dot-access-data", "version": "v3.0.2", @@ -569,350 +186,6 @@ }, "time": "2022-10-27T11:44:00+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.7.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "reference": "5b7bd66c9ff58c04c5474ab85edce442f8081cb2", - "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": "1.10.35", - "phpstan/phpstan-strict-rules": "^1.5", - "phpunit/phpunit": "9.6.13", - "psalm/plugin-phpunit": "0.18.4", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4|^6.0", - "symfony/console": "^4.4|^5.4|^6.0", - "vimeo/psalm": "4.30.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.7.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%2Fdbal", - "type": "tidelift" - } - ], - "time": "2023-10-06T05:06:20+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.2", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "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.2" - }, - "time": "2023-09-27T20:04:15+00:00" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/750671534e0241a7c50ea5b43f67e23eb5c96f32", - "reference": "750671534e0241a7c50ea5b43f67e23eb5c96f32", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^4.28" - }, - "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.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%2Fevent-manager", - "type": "tidelift" - } - ], - "time": "2022-10-12T20:59:15+00:00" - }, { "name": "doctrine/inflector", "version": "2.0.8", @@ -1209,53 +482,6 @@ ], "time": "2023-10-06T06:47:41+00:00" }, - { - "name": "evenement/evenement", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/igorw/evenement.git", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/igorw/evenement/zipball/0a16b0d71ab13284339abb99d9d2bd813640efbc", - "reference": "0a16b0d71ab13284339abb99d9d2bd813640efbc", - "shasum": "" - }, - "require": { - "php": ">=7.0" - }, - "require-dev": { - "phpunit/phpunit": "^9 || ^6" - }, - "type": "library", - "autoload": { - "psr-4": { - "Evenement\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - } - ], - "description": "Événement is a very simple event dispatching library for PHP", - "keywords": [ - "event-dispatcher", - "event-emitter" - ], - "support": { - "issues": "https://github.com/igorw/evenement/issues", - "source": "https://github.com/igorw/evenement/tree/v3.0.2" - }, - "time": "2023-08-08T05:53:35+00:00" - }, { "name": "fruitcake/php-cors", "version": "v1.3.0", @@ -1329,24 +555,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.1", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", - "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.1" + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -1375,7 +601,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -1387,7 +613,7 @@ "type": "tidelift" } ], - "time": "2023-02-25T20:23:15+00:00" + "time": "2023-11-12T22:16:48+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1794,102 +1020,18 @@ ], "time": "2023-08-27T10:19:19+00:00" }, - { - "name": "intervention/image", - "version": "2.7.2", - "source": { - "type": "git", - "url": "https://github.com/Intervention/image.git", - "reference": "04be355f8d6734c826045d02a1079ad658322dad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Intervention/image/zipball/04be355f8d6734c826045d02a1079ad658322dad", - "reference": "04be355f8d6734c826045d02a1079ad658322dad", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "guzzlehttp/psr7": "~1.1 || ^2.0", - "php": ">=5.4.0" - }, - "require-dev": { - "mockery/mockery": "~0.9.2", - "phpunit/phpunit": "^4.8 || ^5.7 || ^7.5.15" - }, - "suggest": { - "ext-gd": "to use GD library based image processing.", - "ext-imagick": "to use Imagick based image processing.", - "intervention/imagecache": "Caching extension for the Intervention Image library" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, - "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], - "aliases": { - "Image": "Intervention\\Image\\Facades\\Image" - } - } - }, - "autoload": { - "psr-4": { - "Intervention\\Image\\": "src/Intervention/Image" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Oliver Vogel", - "email": "oliver@intervention.io", - "homepage": "https://intervention.io/" - } - ], - "description": "Image handling and manipulation library with support for Laravel integration", - "homepage": "http://image.intervention.io/", - "keywords": [ - "gd", - "image", - "imagick", - "laravel", - "thumbnail", - "watermark" - ], - "support": { - "issues": "https://github.com/Intervention/image/issues", - "source": "https://github.com/Intervention/image/tree/2.7.2" - }, - "funding": [ - { - "url": "https://paypal.me/interventionio", - "type": "custom" - }, - { - "url": "https://github.com/Intervention", - "type": "github" - } - ], - "time": "2022-05-21T17:30:32+00:00" - }, { "name": "laravel/framework", - "version": "v10.30.1", + "version": "v10.33.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "7a2da50258c4d0f693b738d3f3c69b2693aea6c1" + "reference": "4536872e3e5b6be51b1f655dafd12c9a4fa0cfe8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/7a2da50258c4d0f693b738d3f3c69b2693aea6c1", - "reference": "7a2da50258c4d0f693b738d3f3c69b2693aea6c1", + "url": "https://api.github.com/repos/laravel/framework/zipball/4536872e3e5b6be51b1f655dafd12c9a4fa0cfe8", + "reference": "4536872e3e5b6be51b1f655dafd12c9a4fa0cfe8", "shasum": "" }, "require": { @@ -1990,7 +1132,7 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.12", + "orchestra/testbench-core": "^8.15.1", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^10.0.7", @@ -2078,7 +1220,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-11-01T13:52:17+00:00" + "time": "2023-11-21T14:49:31+00:00" }, { "name": "laravel/prompts", @@ -2139,16 +1281,16 @@ }, { "name": "laravel/sanctum", - "version": "v3.3.1", + "version": "v3.3.2", "source": { "type": "git", "url": "https://github.com/laravel/sanctum.git", - "reference": "338f633e6487e76b255470d3373fbc29228aa971" + "reference": "e1a272893bec13cf135627f7e156030b3afe1e60" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sanctum/zipball/338f633e6487e76b255470d3373fbc29228aa971", - "reference": "338f633e6487e76b255470d3373fbc29228aa971", + "url": "https://api.github.com/repos/laravel/sanctum/zipball/e1a272893bec13cf135627f7e156030b3afe1e60", + "reference": "e1a272893bec13cf135627f7e156030b3afe1e60", "shasum": "" }, "require": { @@ -2201,20 +1343,20 @@ "issues": "https://github.com/laravel/sanctum/issues", "source": "https://github.com/laravel/sanctum" }, - "time": "2023-09-07T15:46:33+00:00" + "time": "2023-11-03T13:42:14+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.2", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/076fe2cf128bd54b4341cdc6d49b95b34e101e4c", - "reference": "076fe2cf128bd54b4341cdc6d49b95b34e101e4c", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { @@ -2261,7 +1403,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-10-17T13:38:16+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "laravel/tinker", @@ -2522,16 +1664,16 @@ }, { "name": "league/flysystem", - "version": "3.18.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "015633a05aee22490495159237a5944091d8281e" + "reference": "a326d8a2d007e4ca327a57470846e34363789258" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/015633a05aee22490495159237a5944091d8281e", - "reference": "015633a05aee22490495159237a5944091d8281e", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a326d8a2d007e4ca327a57470846e34363789258", + "reference": "a326d8a2d007e4ca327a57470846e34363789258", "shasum": "" }, "require": { @@ -2596,7 +1738,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.18.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.21.0" }, "funding": [ { @@ -2608,86 +1750,20 @@ "type": "github" } ], - "time": "2023-10-20T17:59:40+00:00" - }, - { - "name": "league/flysystem-aws-s3-v3", - "version": "3.16.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git", - "reference": "ded9ba346bb01cb9cc4cc7f2743c2c0e14d18e1c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/ded9ba346bb01cb9cc4cc7f2743c2c0e14d18e1c", - "reference": "ded9ba346bb01cb9cc4cc7f2743c2c0e14d18e1c", - "shasum": "" - }, - "require": { - "aws/aws-sdk-php": "^3.220.0", - "league/flysystem": "^3.10.0", - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\AwsS3V3\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "AWS S3 filesystem adapter for Flysystem.", - "keywords": [ - "Flysystem", - "aws", - "file", - "files", - "filesystem", - "s3", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem-aws-s3-v3/issues", - "source": "https://github.com/thephpleague/flysystem-aws-s3-v3/tree/3.16.0" - }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-08-30T10:14:57+00:00" + "time": "2023-11-18T13:59:15+00:00" }, { "name": "league/flysystem-local", - "version": "3.18.0", + "version": "3.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "e7381ef7643f658b87efb7dbe98fe538fb1bbf32" + "reference": "470eb1c09eaabd49ebd908ae06f23983ba3ecfe7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e7381ef7643f658b87efb7dbe98fe538fb1bbf32", - "reference": "e7381ef7643f658b87efb7dbe98fe538fb1bbf32", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/470eb1c09eaabd49ebd908ae06f23983ba3ecfe7", + "reference": "470eb1c09eaabd49ebd908ae06f23983ba3ecfe7", "shasum": "" }, "require": { @@ -2722,7 +1798,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.18.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.21.0" }, "funding": [ { @@ -2734,7 +1810,7 @@ "type": "github" } ], - "time": "2023-10-19T20:07:13+00:00" + "time": "2023-11-18T13:41:42+00:00" }, { "name": "league/mime-type-detection", @@ -2893,72 +1969,6 @@ ], "time": "2023-10-27T15:32:31+00:00" }, - { - "name": "mtdowling/jmespath.php", - "version": "2.7.0", - "source": { - "type": "git", - "url": "https://github.com/jmespath/jmespath.php.git", - "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/bbb69a935c2cbb0c03d7f481a238027430f6440b", - "reference": "bbb69a935c2cbb0c03d7f481a238027430f6440b", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-mbstring": "^1.17" - }, - "require-dev": { - "composer/xdebug-handler": "^3.0.3", - "phpunit/phpunit": "^8.5.33" - }, - "bin": [ - "bin/jp.php" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "autoload": { - "files": [ - "src/JmesPath.php" - ], - "psr-4": { - "JmesPath\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - } - ], - "description": "Declaratively specify how to extract elements from a JSON document", - "keywords": [ - "json", - "jsonpath" - ], - "support": { - "issues": "https://github.com/jmespath/jmespath.php/issues", - "source": "https://github.com/jmespath/jmespath.php/tree/2.7.0" - }, - "time": "2023-08-25T10:54:48+00:00" - }, { "name": "nesbot/carbon", "version": "2.71.0", @@ -3355,251 +2365,18 @@ ], "time": "2023-02-08T01:06:31+00:00" }, - { - "name": "owen-it/laravel-auditing", - "version": "v13.5.1", - "source": { - "type": "git", - "url": "https://github.com/owen-it/laravel-auditing.git", - "reference": "8b9c5bd7d6e79ed63376a86b1861ab1606215801" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/owen-it/laravel-auditing/zipball/8b9c5bd7d6e79ed63376a86b1861ab1606215801", - "reference": "8b9c5bd7d6e79ed63376a86b1861ab1606215801", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^7.0|^8.0|^9.0|^10.0", - "illuminate/database": "^7.0|^8.0|^9.0|^10.0", - "illuminate/filesystem": "^7.0|^8.0|^9.0|^10.0", - "php": "^7.3|^8.0" - }, - "require-dev": { - "laravel/legacy-factories": "*", - "mockery/mockery": "^1.0", - "orchestra/testbench": "^5.0|^6.0|^7.0|^8.0", - "phpunit/phpunit": "^9.0" - }, - "suggest": { - "irazasyed/larasupport": "Needed to publish the package configuration in Lumen" - }, - "type": "package", - "extra": { - "branch-alias": { - "dev-master": "v13-dev" - }, - "laravel": { - "providers": [ - "OwenIt\\Auditing\\AuditingServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "OwenIt\\Auditing\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Antério Vieira", - "email": "anteriovieira@gmail.com" - }, - { - "name": "Raphael França", - "email": "raphaelfrancabsb@gmail.com" - }, - { - "name": "Morten D. Hansen", - "email": "morten@visia.dk" - } - ], - "description": "Audit changes of your Eloquent models in Laravel/Lumen", - "homepage": "http://laravel-auditing.com", - "keywords": [ - "Accountability", - "Audit", - "auditing", - "changes", - "eloquent", - "history", - "laravel", - "log", - "logging", - "lumen", - "observer", - "record", - "revision", - "tracking" - ], - "support": { - "issues": "https://github.com/owen-it/laravel-auditing/issues", - "source": "https://github.com/owen-it/laravel-auditing" - }, - "time": "2023-06-19T14:51:52+00:00" - }, - { - "name": "php-ffmpeg/php-ffmpeg", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/PHP-FFMpeg/PHP-FFMpeg.git", - "reference": "eace6f174ff6d206ba648483ebe59760f7f6a0e1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-FFMpeg/PHP-FFMpeg/zipball/eace6f174ff6d206ba648483ebe59760f7f6a0e1", - "reference": "eace6f174ff6d206ba648483ebe59760f7f6a0e1", - "shasum": "" - }, - "require": { - "evenement/evenement": "^3.0", - "php": "^8.0 || ^8.1 || ^8.2", - "psr/log": "^1.0 || ^2.0 || ^3.0", - "spatie/temporary-directory": "^2.0", - "symfony/cache": "^5.4 || ^6.0", - "symfony/process": "^5.4 || ^6.0" - }, - "require-dev": { - "mockery/mockery": "^1.5", - "phpunit/phpunit": "^9.5.10" - }, - "suggest": { - "php-ffmpeg/extras": "A compilation of common audio & video drivers for PHP-FFMpeg" - }, - "type": "library", - "autoload": { - "psr-4": { - "FFMpeg\\": "src/FFMpeg", - "Alchemy\\BinaryDriver\\": "src/Alchemy/BinaryDriver" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Romain Neutron", - "email": "imprec@gmail.com", - "homepage": "http://www.lickmychip.com/" - }, - { - "name": "Phraseanet Team", - "email": "info@alchemy.fr", - "homepage": "http://www.phraseanet.com/" - }, - { - "name": "Patrik Karisch", - "email": "patrik@karisch.guru", - "homepage": "http://www.karisch.guru" - }, - { - "name": "Romain Biard", - "email": "romain.biard@gmail.com", - "homepage": "https://www.strime.io/" - }, - { - "name": "Jens Hausdorf", - "email": "hello@jens-hausdorf.de", - "homepage": "https://jens-hausdorf.de" - }, - { - "name": "Pascal Baljet", - "email": "pascal@protone.media", - "homepage": "https://protone.media" - } - ], - "description": "FFMpeg PHP, an Object Oriented library to communicate with AVconv / ffmpeg", - "keywords": [ - "audio", - "audio processing", - "avconv", - "avprobe", - "ffmpeg", - "ffprobe", - "video", - "video processing" - ], - "support": { - "issues": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/issues", - "source": "https://github.com/PHP-FFMpeg/PHP-FFMpeg/tree/v1.1.0" - }, - "time": "2022-12-09T13:57:05+00:00" - }, - { - "name": "php-jsonpointer/php-jsonpointer", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/raphaelstolt/php-jsonpointer.git", - "reference": "4428f86c6f23846e9faa5a420c4ef14e485b3afb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/raphaelstolt/php-jsonpointer/zipball/4428f86c6f23846e9faa5a420c4ef14e485b3afb", - "reference": "4428f86c6f23846e9faa5a420c4ef14e485b3afb", - "shasum": "" - }, - "require": { - "php": ">=5.4" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^1.11", - "phpunit/phpunit": "4.6.*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Rs\\Json": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Raphael Stolt", - "email": "raphael.stolt@gmail.com", - "homepage": "http://raphaelstolt.blogspot.com/" - } - ], - "description": "Implementation of JSON Pointer (http://tools.ietf.org/html/rfc6901)", - "homepage": "https://github.com/raphaelstolt/php-jsonpointer", - "keywords": [ - "json", - "json pointer", - "json traversal" - ], - "support": { - "issues": "https://github.com/raphaelstolt/php-jsonpointer/issues", - "source": "https://github.com/raphaelstolt/php-jsonpointer/tree/master" - }, - "time": "2016-08-29T08:51:01+00:00" - }, { "name": "phpoption/phpoption", - "version": "1.9.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", - "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { @@ -3607,7 +2384,7 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { @@ -3649,7 +2426,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" }, "funding": [ { @@ -3661,56 +2438,7 @@ "type": "tidelift" } ], - "time": "2023-02-25T19:38:58+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": "2023-11-12T21:59:55+00:00" }, { "name": "psr/clock", @@ -4339,16 +3067,16 @@ }, { "name": "ramsey/uuid", - "version": "4.7.4", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "60a4c63ab724854332900504274f6150ff26d286" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/60a4c63ab724854332900504274f6150ff26d286", - "reference": "60a4c63ab724854332900504274f6150ff26d286", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { @@ -4415,7 +3143,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.4" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -4427,32 +3155,52 @@ "type": "tidelift" } ], - "time": "2023-04-15T23:01:58+00:00" + "time": "2023-11-08T05:53:05+00:00" }, { - "name": "spatie/temporary-directory", - "version": "2.2.0", + "name": "spatie/laravel-permission", + "version": "6.1.0", "source": { "type": "git", - "url": "https://github.com/spatie/temporary-directory.git", - "reference": "efc258c9f4da28f0c7661765b8393e4ccee3d19c" + "url": "https://github.com/spatie/laravel-permission.git", + "reference": "8e584d3ac09856e106f989741a2d82b094278e58" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/temporary-directory/zipball/efc258c9f4da28f0c7661765b8393e4ccee3d19c", - "reference": "efc258c9f4da28f0c7661765b8393e4ccee3d19c", + "url": "https://api.github.com/repos/spatie/laravel-permission/zipball/8e584d3ac09856e106f989741a2d82b094278e58", + "reference": "8e584d3ac09856e106f989741a2d82b094278e58", "shasum": "" }, "require": { + "illuminate/auth": "^8.12|^9.0|^10.0", + "illuminate/container": "^8.12|^9.0|^10.0", + "illuminate/contracts": "^8.12|^9.0|^10.0", + "illuminate/database": "^8.12|^9.0|^10.0", "php": "^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "laravel/passport": "^11.0", + "orchestra/testbench": "^6.23|^7.0|^8.0", + "phpunit/phpunit": "^9.4" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "6.x-dev", + "dev-master": "6.x-dev" + }, + "laravel": { + "providers": [ + "Spatie\\Permission\\PermissionServiceProvider" + ] + } + }, "autoload": { + "files": [ + "src/helpers.php" + ], "psr-4": { - "Spatie\\TemporaryDirectory\\": "src" + "Spatie\\Permission\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4461,339 +3209,48 @@ ], "authors": [ { - "name": "Alex Vanderbist", - "email": "alex@spatie.be", + "name": "Freek Van der Herten", + "email": "freek@spatie.be", "homepage": "https://spatie.be", "role": "Developer" } ], - "description": "Easily create, use and destroy temporary directories", - "homepage": "https://github.com/spatie/temporary-directory", + "description": "Permission handling for Laravel 8.0 and up", + "homepage": "https://github.com/spatie/laravel-permission", "keywords": [ - "php", - "spatie", - "temporary-directory" + "acl", + "laravel", + "permission", + "permissions", + "rbac", + "roles", + "security", + "spatie" ], "support": { - "issues": "https://github.com/spatie/temporary-directory/issues", - "source": "https://github.com/spatie/temporary-directory/tree/2.2.0" + "issues": "https://github.com/spatie/laravel-permission/issues", + "source": "https://github.com/spatie/laravel-permission/tree/6.1.0" }, "funding": [ - { - "url": "https://spatie.be/open-source/support-us", - "type": "custom" - }, { "url": "https://github.com/spatie", "type": "github" } ], - "time": "2023-09-25T07:13:36+00:00" - }, - { - "name": "square/square", - "version": "32.0.0.20231018", - "source": { - "type": "git", - "url": "https://github.com/square/square-php-sdk.git", - "reference": "773b5b360766fe9f280c5ef8de83a6a97f7a0555" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/square/square-php-sdk/zipball/773b5b360766fe9f280c5ef8de83a6a97f7a0555", - "reference": "773b5b360766fe9f280c5ef8de83a6a97f7a0555", - "shasum": "" - }, - "require": { - "apimatic/core": "~0.3.0", - "apimatic/core-interfaces": "~0.1.0", - "apimatic/unirest-php": "^4.0.0", - "ext-json": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "phan/phan": "5.4.2", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "autoload": { - "psr-4": { - "Square\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Square Developer Platform", - "email": "developers@squareup.com", - "homepage": "https://squareup.com/developers" - } - ], - "description": "Use Square APIs to manage and run business including payment, customer, product, inventory, and employee management.", - "homepage": "https://squareup.com/developers", - "keywords": [ - "api", - "sdk", - "square" - ], - "support": { - "issues": "https://github.com/square/square-php-sdk/issues", - "source": "https://github.com/square/square-php-sdk/tree/32.0.0.20231018" - }, - "time": "2023-10-17T19:11:35+00:00" - }, - { - "name": "sunspikes/clamav-validator", - "version": "v2.7.0", - "source": { - "type": "git", - "url": "https://github.com/sunspikes/clamav-validator.git", - "reference": "0db18646b73afbd5094876f48a49e28a9a1426ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sunspikes/clamav-validator/zipball/0db18646b73afbd5094876f48a49e28a9a1426ed", - "reference": "0db18646b73afbd5094876f48a49e28a9a1426ed", - "shasum": "" - }, - "require": { - "ext-sockets": "*", - "illuminate/support": "~5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", - "illuminate/validation": "~5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0 || ^10.0", - "php": "^7.3|^8.0", - "xenolope/quahog": "^3.0" - }, - "require-dev": { - "mockery/mockery": "^1.5.0", - "phpunit/phpunit": "^9.5.10", - "roave/security-advisories": "dev-master", - "scrutinizer/ocular": "dev-master" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Sunspikes\\ClamavValidator\\ClamavValidatorServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Sunspikes\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Krishnaprasad MG", - "email": "sunspikes@gmail.com" - } - ], - "description": "Custom Laravel 5 anti-virus validator for file uploads.", - "homepage": "https://github.com/sunspikes/clamav-validator", - "keywords": [ - "clamav", - "laravel", - "validator", - "virus" - ], - "support": { - "issues": "https://github.com/sunspikes/clamav-validator/issues", - "source": "https://github.com/sunspikes/clamav-validator/tree/v2.7.0" - }, - "time": "2023-03-09T09:54:24+00:00" - }, - { - "name": "symfony/cache", - "version": "v6.3.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "6c1a3ea078c4d88ee892530945df63a87981b2da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/6c1a3ea078c4d88ee892530945df63a87981b2da", - "reference": "6c1a3ea078c4d88ee892530945df63a87981b2da", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.2.10" - }, - "conflict": { - "doctrine/dbal": "<2.13.1", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/var-dumper": "<5.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": "^2.13.1|^3.0", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/messenger": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.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/v6.3.5" - }, - "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": "2023-09-26T15:48:55+00:00" - }, - { - "name": "symfony/cache-contracts", - "version": "v3.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/ad945640ccc0ae6e208bcea7d7de4b39b569896b", - "reference": "ad945640ccc0ae6e208bcea7d7de4b39b569896b", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/cache": "^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Cache\\": "" - } - }, - "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": "Generic abstractions related to caching", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.3.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": "2023-05-23T14:45:45+00:00" + "time": "2023-11-09T22:03:17+00:00" }, { "name": "symfony/console", - "version": "v6.3.4", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6" + "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/eca495f2ee845130855ddf1cf18460c38966c8b6", - "reference": "eca495f2ee845130855ddf1cf18460c38966c8b6", + "url": "https://api.github.com/repos/symfony/console/zipball/0d14a9f6d04d4ac38a8cea1171f4554e325dae92", + "reference": "0d14a9f6d04d4ac38a8cea1171f4554e325dae92", "shasum": "" }, "require": { @@ -4854,7 +3311,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.3.4" + "source": "https://github.com/symfony/console/tree/v6.3.8" }, "funding": [ { @@ -4870,7 +3327,7 @@ "type": "tidelift" } ], - "time": "2023-08-16T10:10:12+00:00" + "time": "2023-10-31T08:09:35+00:00" }, { "name": "symfony/css-selector", @@ -4939,7 +3396,7 @@ }, { "name": "symfony/deprecation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", @@ -4986,7 +3443,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.3.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -5160,7 +3617,7 @@ }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", @@ -5216,7 +3673,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -5300,16 +3757,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.3.7", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e" + "reference": "ce332676de1912c4389222987193c3ef38033df6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/59d1837d5d992d16c2628cd0d6b76acf8d69b33e", - "reference": "59d1837d5d992d16c2628cd0d6b76acf8d69b33e", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/ce332676de1912c4389222987193c3ef38033df6", + "reference": "ce332676de1912c4389222987193c3ef38033df6", "shasum": "" }, "require": { @@ -5357,7 +3814,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.3.7" + "source": "https://github.com/symfony/http-foundation/tree/v6.3.8" }, "funding": [ { @@ -5373,20 +3830,20 @@ "type": "tidelift" } ], - "time": "2023-10-28T23:55:27+00:00" + "time": "2023-11-07T10:17:15+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.3.7", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6d4098095f93279d9536a0e9124439560cc764d0" + "reference": "929202375ccf44a309c34aeca8305408442ebcc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6d4098095f93279d9536a0e9124439560cc764d0", - "reference": "6d4098095f93279d9536a0e9124439560cc764d0", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/929202375ccf44a309c34aeca8305408442ebcc1", + "reference": "929202375ccf44a309c34aeca8305408442ebcc1", "shasum": "" }, "require": { @@ -5470,7 +3927,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/v6.3.7" + "source": "https://github.com/symfony/http-kernel/tree/v6.3.8" }, "funding": [ { @@ -5486,7 +3943,7 @@ "type": "tidelift" } ], - "time": "2023-10-29T14:31:45+00:00" + "time": "2023-11-10T13:47:32+00:00" }, { "name": "symfony/mailer", @@ -6536,16 +4993,16 @@ }, { "name": "symfony/service-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", - "reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", "shasum": "" }, "require": { @@ -6598,7 +5055,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" }, "funding": [ { @@ -6614,20 +5071,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/string", - "version": "v6.3.5", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339" + "reference": "13880a87790c76ef994c91e87efb96134522577a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/13d76d0fb049051ed12a04bef4f9de8715bea339", - "reference": "13d76d0fb049051ed12a04bef4f9de8715bea339", + "url": "https://api.github.com/repos/symfony/string/zipball/13880a87790c76ef994c91e87efb96134522577a", + "reference": "13880a87790c76ef994c91e87efb96134522577a", "shasum": "" }, "require": { @@ -6684,7 +5141,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.3.5" + "source": "https://github.com/symfony/string/tree/v6.3.8" }, "funding": [ { @@ -6700,7 +5157,7 @@ "type": "tidelift" } ], - "time": "2023-09-18T10:38:32+00:00" + "time": "2023-11-09T08:28:21+00:00" }, { "name": "symfony/translation", @@ -6799,16 +5256,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.3.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86" + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/02c24deb352fb0d79db5486c0c79905a85e37e86", - "reference": "02c24deb352fb0d79db5486c0c79905a85e37e86", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", "shasum": "" }, "require": { @@ -6857,7 +5314,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.3.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" }, "funding": [ { @@ -6873,20 +5330,20 @@ "type": "tidelift" } ], - "time": "2023-05-30T17:17:10+00:00" + "time": "2023-07-25T15:08:44+00:00" }, { "name": "symfony/uid", - "version": "v6.3.0", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384" + "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/01b0f20b1351d997711c56f1638f7a8c3061e384", - "reference": "01b0f20b1351d997711c56f1638f7a8c3061e384", + "url": "https://api.github.com/repos/symfony/uid/zipball/819fa5ac210fb7ddda4752b91a82f50be7493dd9", + "reference": "819fa5ac210fb7ddda4752b91a82f50be7493dd9", "shasum": "" }, "require": { @@ -6931,7 +5388,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.3.0" + "source": "https://github.com/symfony/uid/tree/v6.3.8" }, "funding": [ { @@ -6947,20 +5404,20 @@ "type": "tidelift" } ], - "time": "2023-04-08T07:25:02+00:00" + "time": "2023-10-31T08:07:48+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.3.6", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97" + "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/999ede244507c32b8e43aebaa10e9fce20de7c97", - "reference": "999ede244507c32b8e43aebaa10e9fce20de7c97", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/81acabba9046550e89634876ca64bfcd3c06aa0a", + "reference": "81acabba9046550e89634876ca64bfcd3c06aa0a", "shasum": "" }, "require": { @@ -7015,7 +5472,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.3.6" + "source": "https://github.com/symfony/var-dumper/tree/v6.3.8" }, "funding": [ { @@ -7031,130 +5488,7 @@ "type": "tidelift" } ], - "time": "2023-10-12T18:45:56+00:00" - }, - { - "name": "symfony/var-exporter", - "version": "v6.3.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/df1f8aac5751871b83d30bf3e2c355770f8f0691", - "reference": "df1f8aac5751871b83d30bf3e2c355770f8f0691", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/var-dumper": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "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": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" - ], - "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.3.4" - }, - "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": "2023-08-16T18:14:47+00:00" - }, - { - "name": "thiagoalessio/tesseract_ocr", - "version": "2.13.0", - "source": { - "type": "git", - "url": "https://github.com/thiagoalessio/tesseract-ocr-for-php.git", - "reference": "232a8cb9d571992f9bd1e263f2f6909cf6c173a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thiagoalessio/tesseract-ocr-for-php/zipball/232a8cb9d571992f9bd1e263f2f6909cf6c173a1", - "reference": "232a8cb9d571992f9bd1e263f2f6909cf6c173a1", - "shasum": "" - }, - "require": { - "php": "^5.3 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/php-code-coverage": "^2.2.4 || ^9.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "thiagoalessio\\TesseractOCR\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "thiagoalessio", - "email": "thiagoalessio@me.com" - } - ], - "description": "A wrapper to work with Tesseract OCR inside PHP.", - "keywords": [ - "OCR", - "Tesseract", - "text recognition" - ], - "support": { - "irc": "irc://irc.freenode.net/tesseract-ocr-for-php", - "issues": "https://github.com/thiagoalessio/tesseract-ocr-for-php/issues", - "source": "https://github.com/thiagoalessio/tesseract-ocr-for-php" - }, - "time": "2023-10-05T21:14:48+00:00" + "time": "2023-11-08T10:42:36+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -7211,31 +5545,31 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.5.0", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "suggest": { "ext-filter": "Required to use the boolean validator." @@ -7247,7 +5581,7 @@ "forward-command": true }, "branch-alias": { - "dev-master": "5.5-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -7279,7 +5613,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -7291,7 +5625,7 @@ "type": "tidelift" } ], - "time": "2022-10-16T01:01:54+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "voku/portable-ascii", @@ -7424,344 +5758,9 @@ "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, "time": "2022-06-03T18:03:27+00:00" - }, - { - "name": "xenolope/quahog", - "version": "v3.0.0", - "source": { - "type": "git", - "url": "https://github.com/jonjomckay/quahog.git", - "reference": "b3823659050cc54a160e8739d077c96d8830a2fa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/jonjomckay/quahog/zipball/b3823659050cc54a160e8739d077c96d8830a2fa", - "reference": "b3823659050cc54a160e8739d077c96d8830a2fa", - "shasum": "" - }, - "require": { - "clue/socket-raw": "^1.3", - "php": ">=7.3" - }, - "require-dev": { - "mikey179/vfsstream": "^1.6", - "phpunit/phpunit": "^9.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Xenolope\\Quahog\\": "src/Quahog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jonjo McKay", - "email": "jonjo@jonjomckay.com" - } - ], - "description": "A PHP client library for ClamAV clamd daemon", - "support": { - "issues": "https://github.com/jonjomckay/quahog/issues", - "source": "https://github.com/jonjomckay/quahog/tree/v3.0.0" - }, - "time": "2020-11-25T12:06:14+00:00" } ], "packages-dev": [ - { - "name": "barryvdh/laravel-ide-helper", - "version": "v2.13.0", - "source": { - "type": "git", - "url": "https://github.com/barryvdh/laravel-ide-helper.git", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/barryvdh/laravel-ide-helper/zipball/81d5b223ff067a1f38e14c100997e153b837fe4a", - "reference": "81d5b223ff067a1f38e14c100997e153b837fe4a", - "shasum": "" - }, - "require": { - "barryvdh/reflection-docblock": "^2.0.6", - "composer/class-map-generator": "^1.0", - "doctrine/dbal": "^2.6 || ^3", - "ext-json": "*", - "illuminate/console": "^8 || ^9 || ^10", - "illuminate/filesystem": "^8 || ^9 || ^10", - "illuminate/support": "^8 || ^9 || ^10", - "nikic/php-parser": "^4.7", - "php": "^7.3 || ^8.0", - "phpdocumentor/type-resolver": "^1.1.0" - }, - "require-dev": { - "ext-pdo_sqlite": "*", - "friendsofphp/php-cs-fixer": "^2", - "illuminate/config": "^8 || ^9 || ^10", - "illuminate/view": "^8 || ^9 || ^10", - "mockery/mockery": "^1.4", - "orchestra/testbench": "^6 || ^7 || ^8", - "phpunit/phpunit": "^8.5 || ^9", - "spatie/phpunit-snapshot-assertions": "^3 || ^4", - "vimeo/psalm": "^3.12" - }, - "suggest": { - "illuminate/events": "Required for automatic helper generation (^6|^7|^8|^9|^10)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.12-dev" - }, - "laravel": { - "providers": [ - "Barryvdh\\LaravelIdeHelper\\IdeHelperServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Barryvdh\\LaravelIdeHelper\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Barry vd. Heuvel", - "email": "barryvdh@gmail.com" - } - ], - "description": "Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.", - "keywords": [ - "autocomplete", - "codeintel", - "helper", - "ide", - "laravel", - "netbeans", - "phpdoc", - "phpstorm", - "sublime" - ], - "support": { - "issues": "https://github.com/barryvdh/laravel-ide-helper/issues", - "source": "https://github.com/barryvdh/laravel-ide-helper/tree/v2.13.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2023-02-04T13:56:40+00:00" - }, - { - "name": "barryvdh/reflection-docblock", - "version": "v2.1.1", - "source": { - "type": "git", - "url": "https://github.com/barryvdh/ReflectionDocBlock.git", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/barryvdh/ReflectionDocBlock/zipball/e6811e927f0ecc37cc4deaa6627033150343e597", - "reference": "e6811e927f0ecc37cc4deaa6627033150343e597", - "shasum": "" - }, - "require": { - "php": ">=5.3.3" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.14|^9" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-0": { - "Barryvdh": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" - } - ], - "support": { - "source": "https://github.com/barryvdh/ReflectionDocBlock/tree/v2.1.1" - }, - "time": "2023-06-14T05:06:27+00:00" - }, - { - "name": "composer/class-map-generator", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/953cc4ea32e0c31f2185549c7d216d7921f03da9", - "reference": "953cc4ea32e0c31f2185549c7d216d7921f03da9", - "shasum": "" - }, - "require": { - "composer/pcre": "^2.1 || ^3.1", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6 || ^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.1.0" - }, - "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": "2023-06-30T13:58:57+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" - }, - "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": "2023-10-11T07:11:09+00:00" - }, { "name": "fakerphp/faker", "version": "v1.23.0", @@ -7832,16 +5831,16 @@ }, { "name": "filp/whoops", - "version": "2.15.3", + "version": "2.15.4", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187" + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/c83e88a30524f9360b11f585f71e6b17313b7187", - "reference": "c83e88a30524f9360b11f585f71e6b17313b7187", + "url": "https://api.github.com/repos/filp/whoops/zipball/a139776fa3f5985a50b509f2a02ff0f709d2a546", + "reference": "a139776fa3f5985a50b509f2a02ff0f709d2a546", "shasum": "" }, "require": { @@ -7891,7 +5890,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.15.3" + "source": "https://github.com/filp/whoops/tree/2.15.4" }, "funding": [ { @@ -7899,7 +5898,7 @@ "type": "github" } ], - "time": "2023-07-13T12:00:00+00:00" + "time": "2023-11-03T12:00:00+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -7952,86 +5951,18 @@ }, "time": "2020-07-09T08:09:16+00:00" }, - { - "name": "itsgoingd/clockwork", - "version": "v5.1.12", - "source": { - "type": "git", - "url": "https://github.com/itsgoingd/clockwork.git", - "reference": "c9dbdbb1f0efd19bb80f1080ef63f1b9b1bc3b1b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/itsgoingd/clockwork/zipball/c9dbdbb1f0efd19bb80f1080ef63f1b9b1bc3b1b", - "reference": "c9dbdbb1f0efd19bb80f1080ef63f1b9b1bc3b1b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": ">=5.6" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Clockwork\\Support\\Laravel\\ClockworkServiceProvider" - ], - "aliases": { - "Clockwork": "Clockwork\\Support\\Laravel\\Facade" - } - } - }, - "autoload": { - "psr-4": { - "Clockwork\\": "Clockwork/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "itsgoingd", - "email": "itsgoingd@luzer.sk", - "homepage": "https://twitter.com/itsgoingd" - } - ], - "description": "php dev tools in your browser", - "homepage": "https://underground.works/clockwork", - "keywords": [ - "Devtools", - "debugging", - "laravel", - "logging", - "lumen", - "profiling", - "slim" - ], - "support": { - "issues": "https://github.com/itsgoingd/clockwork/issues", - "source": "https://github.com/itsgoingd/clockwork/tree/v5.1.12" - }, - "funding": [ - { - "url": "https://github.com/itsgoingd", - "type": "github" - } - ], - "time": "2022-12-13T00:04:12+00:00" - }, { "name": "laravel/pint", - "version": "v1.13.5", + "version": "v1.13.6", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "df105cf8ce7a8f0b8a9425ff45cd281a5448e423" + "reference": "3e3d2ab01c7d8b484c18e6100ecf53639c744fa7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/df105cf8ce7a8f0b8a9425ff45cd281a5448e423", - "reference": "df105cf8ce7a8f0b8a9425ff45cd281a5448e423", + "url": "https://api.github.com/repos/laravel/pint/zipball/3e3d2ab01c7d8b484c18e6100ecf53639c744fa7", + "reference": "3e3d2ab01c7d8b484c18e6100ecf53639c744fa7", "shasum": "" }, "require": { @@ -8042,13 +5973,13 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.34.1", - "illuminate/view": "^10.26.2", - "laravel-zero/framework": "^10.1.2", + "friendsofphp/php-cs-fixer": "^3.38.0", + "illuminate/view": "^10.30.1", + "laravel-zero/framework": "^10.3.0", "mockery/mockery": "^1.6.6", "nunomaduro/larastan": "^2.6.4", "nunomaduro/termwind": "^1.15.1", - "pestphp/pest": "^2.20.0" + "pestphp/pest": "^2.24.2" }, "bin": [ "builds/pint" @@ -8084,20 +6015,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2023-10-26T09:26:10+00:00" + "time": "2023-11-07T17:59:57+00:00" }, { "name": "laravel/sail", - "version": "v1.26.0", + "version": "v1.26.1", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "c60fe037004e272efd0d81f416ed2bfc623d70b4" + "reference": "7a82f5aa364dbee3fd9c52fc464cf0bdd11150ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/c60fe037004e272efd0d81f416ed2bfc623d70b4", - "reference": "c60fe037004e272efd0d81f416ed2bfc623d70b4", + "url": "https://api.github.com/repos/laravel/sail/zipball/7a82f5aa364dbee3fd9c52fc464cf0bdd11150ed", + "reference": "7a82f5aa364dbee3fd9c52fc464cf0bdd11150ed", "shasum": "" }, "require": { @@ -8149,7 +6080,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2023-10-18T13:57:15+00:00" + "time": "2023-11-20T15:56:47+00:00" }, { "name": "mockery/mockery", @@ -8502,176 +6433,18 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.7.3", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" - }, - "time": "2023-08-12T11:01:26+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.24.2", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "bcad8d995980440892759db0c32acae7c8e79442" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bcad8d995980440892759db0c32acae7c8e79442", - "reference": "bcad8d995980440892759db0c32acae7c8e79442", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "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/1.24.2" - }, - "time": "2023-09-26T12:28:12+00:00" - }, { "name": "phpunit/php-code-coverage", - "version": "10.1.7", + "version": "10.1.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "355324ca4980b8916c18b9db29f3ef484078f26e" + "reference": "84838eed9ded511f61dc3e8b5944a52d9017b297" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/355324ca4980b8916c18b9db29f3ef484078f26e", - "reference": "355324ca4980b8916c18b9db29f3ef484078f26e", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/84838eed9ded511f61dc3e8b5944a52d9017b297", + "reference": "84838eed9ded511f61dc3e8b5944a52d9017b297", "shasum": "" }, "require": { @@ -8728,7 +6501,7 @@ "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.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.1.8" }, "funding": [ { @@ -8736,7 +6509,7 @@ "type": "github" } ], - "time": "2023-10-04T15:34:17+00:00" + "time": "2023-11-15T13:31:15+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10306,16 +8079,16 @@ }, { "name": "symfony/yaml", - "version": "v6.3.3", + "version": "v6.3.8", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add" + "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/e23292e8c07c85b971b44c1c4b87af52133e2add", - "reference": "e23292e8c07c85b971b44c1c4b87af52133e2add", + "url": "https://api.github.com/repos/symfony/yaml/zipball/3493af8a8dad7fa91c77fa473ba23ecd95334a92", + "reference": "3493af8a8dad7fa91c77fa473ba23ecd95334a92", "shasum": "" }, "require": { @@ -10358,7 +8131,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.3.3" + "source": "https://github.com/symfony/yaml/tree/v6.3.8" }, "funding": [ { @@ -10374,20 +8147,20 @@ "type": "tidelift" } ], - "time": "2023-07-31T07:08:24+00:00" + "time": "2023-11-06T10:58:05+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -10416,7 +8189,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.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -10424,7 +8197,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" } ], "aliases": [], diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php index c874bda..8cf6d7e 100644 --- a/database/factories/UserFactory.php +++ b/database/factories/UserFactory.php @@ -3,6 +3,7 @@ namespace Database\Factories; use Illuminate\Database\Eloquent\Factories\Factory; +use Illuminate\Support\Facades\Hash; use Illuminate\Support\Str; /** @@ -10,6 +11,8 @@ use Illuminate\Support\Str; */ class UserFactory extends Factory { + protected static ?string $password; + /** * Define the model's default state. * @@ -17,23 +20,13 @@ class UserFactory extends Factory */ public function definition(): array { - $faker = \Faker\Factory::create(); - $faker->addProvider(new \Faker\Provider\CustomInternetProvider($faker)); - - $first_name = $faker->firstName(); - $last_name = $faker->lastName(); - - $display_name = $first_name . ' ' . $last_name; - return [ - 'first_name' => $first_name, - 'last_name' => $last_name, - 'email' => $faker->safeEmail(), + 'username' => fake()->name(), + 'is_under_14' => fake()->randomElement([0, 1]), + 'email' => fake()->unique()->safeEmail(), 'email_verified_at' => now(), - 'phone' => $faker->phoneNumber(), - 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'password' => static::$password ??= Hash::make('password'), 'remember_token' => Str::random(10), - 'display_name' => $display_name, ]; } diff --git a/database/factories/UserFactory.php.old b/database/factories/UserFactory.php.old new file mode 100644 index 0000000..c874bda --- /dev/null +++ b/database/factories/UserFactory.php.old @@ -0,0 +1,49 @@ + + */ +class UserFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + $faker = \Faker\Factory::create(); + $faker->addProvider(new \Faker\Provider\CustomInternetProvider($faker)); + + $first_name = $faker->firstName(); + $last_name = $faker->lastName(); + + $display_name = $first_name . ' ' . $last_name; + + return [ + 'first_name' => $first_name, + 'last_name' => $last_name, + 'email' => $faker->safeEmail(), + 'email_verified_at' => now(), + 'phone' => $faker->phoneNumber(), + 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password + 'remember_token' => Str::random(10), + 'display_name' => $display_name, + ]; + } + + /** + * Indicate that the model's email address should be unverified. + */ + public function unverified(): static + { + return $this->state(fn (array $attributes) => [ + 'email_verified_at' => null, + ]); + } +} diff --git a/database/factories/WorkshopFactory.php b/database/factories/WorkshopFactory.php new file mode 100644 index 0000000..a14e3d5 --- /dev/null +++ b/database/factories/WorkshopFactory.php @@ -0,0 +1,33 @@ + + */ +class WorkshopFactory extends Factory +{ + /** + * Define the model's default state. + * + * @return array + */ + public function definition(): array + { + $startDate = Carbon::parse($this->faker->dateTimeBetween('now', '+1 year')); + $endDate = Carbon::parse($this->faker->dateTimeBetween($startDate, '+1 year')); + $publishDate = Carbon::parse($this->faker->dateTimeBetween('-1 month', '+1 month')); + + return [ + 'title' => $this->faker->sentence(), + 'start_at' => $startDate, + 'end_at' => $endDate, + 'publish_at' => $publishDate, + 'status' => $this->faker->randomElement(['draft', 'soon', 'open', 'closed', 'cancelled']), + 'content' => $this->faker->paragraphs(3, true), + ]; + } +} diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php index 53656a4..4b1e53f 100644 --- a/database/migrations/2014_10_12_000000_create_users_table.php +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -12,15 +12,12 @@ return new class extends Migration public function up(): void { Schema::create('users', function (Blueprint $table) { - $table->uuid('id')->primary(); + $table->id(); $table->string('username')->unique(); - $table->string('password')->nullable(); - $table->boolean('enabled')->default(true); - $table->string('first_name'); - $table->string('last_name'); - $table->string('email'); + $table->string('email')->nullable(); $table->timestamp('email_verified_at')->nullable(); - $table->string('phone')->nullable(); + $table->boolean('is_under_14')->nullable(); + $table->string('password'); $table->rememberToken(); $table->timestamps(); }); diff --git a/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php b/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php new file mode 100644 index 0000000..81a7229 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_reset_tokens_table.php @@ -0,0 +1,28 @@ +string('email')->primary(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('password_reset_tokens'); + } +}; diff --git a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php index 29db28a..e828ad8 100644 --- a/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php +++ b/database/migrations/2019_12_14_000001_create_personal_access_tokens_table.php @@ -13,7 +13,7 @@ return new class extends Migration { Schema::create('personal_access_tokens', function (Blueprint $table) { $table->id(); - $table->uuidMorphs('tokenable'); + $table->morphs('tokenable'); $table->string('name'); $table->string('token', 64)->unique(); $table->text('abilities')->nullable(); diff --git a/database/migrations/2023_11_21_090337_create_workshops_table.php b/database/migrations/2023_11_21_090337_create_workshops_table.php new file mode 100644 index 0000000..b42d994 --- /dev/null +++ b/database/migrations/2023_11_21_090337_create_workshops_table.php @@ -0,0 +1,33 @@ +id(); + $table->string('title'); + $table->timestamp('start_at')->useCurrent(); + $table->timestamp('end_at')->useCurrent(); + $table->timestamp('publish_at')->useCurrent()->nullable(); + $table->string('status')->default('draft'); + $table->text('content')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('workshops'); + } +}; diff --git a/database/migrations/2023_11_21_090406_create_posts_table.php b/database/migrations/2023_11_21_090406_create_posts_table.php new file mode 100644 index 0000000..3765173 --- /dev/null +++ b/database/migrations/2023_11_21_090406_create_posts_table.php @@ -0,0 +1,27 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('posts'); + } +}; diff --git a/database/migrations/2023_11_21_090751_create_media_table.php b/database/migrations/2023_11_21_090751_create_media_table.php new file mode 100644 index 0000000..adea0bd --- /dev/null +++ b/database/migrations/2023_11_21_090751_create_media_table.php @@ -0,0 +1,27 @@ +id(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('media'); + } +}; diff --git a/database/migrations/2023_11_22_094913_create_verification_codes_table.php b/database/migrations/2023_11_22_094913_create_verification_codes_table.php new file mode 100644 index 0000000..691a7e3 --- /dev/null +++ b/database/migrations/2023_11_22_094913_create_verification_codes_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('user_id')->constrained()->onDelete('cascade'); + $table->char('code', 6)->unique(); + $table->string('type'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('verification_codes'); + } +}; diff --git a/database/migrations/2023_11_23_033746_create_jobs_table.php b/database/migrations/2023_11_23_033746_create_jobs_table.php new file mode 100644 index 0000000..6098d9b --- /dev/null +++ b/database/migrations/2023_11_23_033746_create_jobs_table.php @@ -0,0 +1,32 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('jobs'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index d3eee24..2c9fa6c 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -3,10 +3,7 @@ namespace Database\Seeders; // use Illuminate\Database\Console\Seeds\WithoutModelEvents; - -use Carbon\Carbon; use Illuminate\Database\Seeder; -use Illuminate\Support\Facades\Hash; class DatabaseSeeder extends Seeder { @@ -15,16 +12,14 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - \App\Models\User::factory(40)->create(); + \App\Models\User::factory(10)->create(); \App\Models\User::factory()->create([ - 'display_name' => 'James Collins', - 'first_name' => 'James', - 'last_name' => 'Collins', - 'email' => 'james@stemmechanics.com.au', - 'email_verified_at' => Carbon::now(), - 'phone' => '0400 130 190', - 'password' => Hash::make('password@12') + 'username' => 'admin', + 'email' => 'admin@example.com', + 'is_under_14' => 0 ]); + + \App\Models\Workshop::factory(10)->create(); } } diff --git a/database/seeders/DatabaseSeeder.php.old b/database/seeders/DatabaseSeeder.php.old new file mode 100644 index 0000000..d3eee24 --- /dev/null +++ b/database/seeders/DatabaseSeeder.php.old @@ -0,0 +1,30 @@ +create(); + + \App\Models\User::factory()->create([ + 'display_name' => 'James Collins', + 'first_name' => 'James', + 'last_name' => 'Collins', + 'email' => 'james@stemmechanics.com.au', + 'email_verified_at' => Carbon::now(), + 'phone' => '0400 130 190', + 'password' => Hash::make('password@12') + ]); + } +} diff --git a/package-lock.json b/package-lock.json index 989d08b..c23e9ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,338 +1,47 @@ { - "name": "website", + "name": "new-website", "lockfileVersion": 3, "requires": true, "packages": { "": { - "dependencies": { - "@tiptap/extension-highlight": "^2.1.8", - "@tiptap/extension-image": "^2.0.3", - "@tiptap/extension-link": "^2.0.3", - "@tiptap/extension-subscript": "^2.0.3", - "@tiptap/extension-superscript": "^2.1.8", - "@tiptap/extension-text-align": "^2.0.3", - "@tiptap/extension-underline": "^2.0.3", - "@tiptap/pm": "^2.0.3", - "@tiptap/starter-kit": "^2.1.8", - "@tiptap/vue-3": "^2.0.3", - "@vitejs/plugin-vue": "^4.4.0", - "dompurify": "^3.0.4", - "dotenv": "^16.0.3", - "pinia": "^2.0.28", - "pinia-plugin-persistedstate": "^3.2.0", - "sass": "^1.69.5", - "vue": "^3.3.7", - "vue-router": "^4.2.2" - }, "devDependencies": { - "@ls-lint/ls-lint": "^2.2.2", - "@typescript-eslint/eslint-plugin": "^6.9.1", - "@typescript-eslint/parser": "^6.9.1", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-jsdoc": "^46.6.0", - "eslint-plugin-vue": "^9.18.1", - "knip": "^2.38.6", + "autoprefixer": "^10.4.16", + "axios": "^1.6.1", "laravel-vite-plugin": "^0.8.0", - "lodash": "^4.17.19", - "postcss": "^8.4.27", - "prettier": "3.0.3", - "rollup-plugin-analyzer": "^4.0.0", - "ts-node": "^10.9.1", - "typescript": "^5.0.4", - "unocss": "^0.57.1", - "vite": "^4.4.7", - "vite-plugin-compression2": "^0.11.0", - "vitest": "^0.34.3" + "postcss": "^8.4.31", + "precss": "^4.0.0", + "tailwindcss": "^3.3.5", + "vite": "^4.0.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==", + "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, "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" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@antfu/install-pkg": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz", - "integrity": "sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==", - "dev": true, - "dependencies": { - "execa": "^5.1.1", - "find-up": "^5.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@antfu/utils": { - "version": "0.7.6", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.6.tgz", - "integrity": "sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/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 - }, - "node_modules/@babel/code-frame/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==", + "node_modules/@csstools/convert-colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@csstools/convert-colors/-/convert-colors-1.4.0.tgz", + "integrity": "sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==", "dev": true, "engines": { - "node": ">=0.8.0" + "node": ">=4.0.0" } }, - "node_modules/@babel/code-frame/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==", + "node_modules/@csstools/sass-import-resolve": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/sass-import-resolve/-/sass-import-resolve-1.0.0.tgz", + "integrity": "sha512-pH4KCsbtBLLe7eqUrw8brcuFO8IZlN36JjdKlOublibVdAIPHCzEnpBWOVUXK5sCf+DpBi8ZtuWtjF0srybdeA==", "dev": true, "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/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" - }, - "engines": { - "node": ">=4" - } - }, - "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==", - "dev": true, - "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" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/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 - }, - "node_modules/@babel/highlight/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==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/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/@babel/highlight/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" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", - "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@ericcornelissen/bash-parser": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@ericcornelissen/bash-parser/-/bash-parser-0.5.2.tgz", - "integrity": "sha512-4pIMTa1nEFfMXitv7oaNEWOdM+zpOZavesa5GaiWTgda6Zk32CFGxjUp/iIaN0PwgUW1yTq/fztSjbpE8SLGZQ==", - "dev": true, - "dependencies": { - "array-last": "^1.1.1", - "babylon": "^6.9.1", - "compose-function": "^3.0.3", - "deep-freeze": "0.0.1", - "filter-iterator": "0.0.1", - "filter-obj": "^1.1.0", - "has-own-property": "^0.1.0", - "identity-function": "^1.0.0", - "is-iterable": "^1.1.0", - "iterable-lookahead": "^1.0.0", - "lodash.curry": "^4.1.1", - "magic-string": "^0.16.0", - "map-obj": "^2.0.0", - "object-pairs": "^0.1.0", - "object-values": "^1.0.0", - "reverse-arguments": "^1.0.0", - "shell-quote-word": "^1.0.1", - "to-pascal-case": "^1.0.0", - "unescape-js": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.40.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.40.1.tgz", - "integrity": "sha512-YORCdZSusAlBrFpZ77pJjc5r1bQs5caPWtAu+WWmiSo+8XaUzseapVrfAtiRFbQWnrBxxLLEwF6f6ZG/UgCQCg==", - "dev": true, - "dependencies": { - "comment-parser": "1.4.0", - "esquery": "^1.5.0", - "jsdoc-type-pratt-parser": "~4.0.0" - }, - "engines": { - "node": ">=16" + "node": ">=4.0.0" } }, "node_modules/@esbuild/android-arm": { @@ -342,6 +51,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -357,6 +67,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -372,6 +83,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "android" @@ -387,6 +99,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -402,6 +115,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -417,6 +131,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -432,6 +147,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -447,6 +163,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -462,6 +179,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -477,6 +195,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -492,6 +211,7 @@ "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -507,6 +227,7 @@ "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -522,6 +243,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -537,6 +259,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -552,6 +275,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -567,6 +291,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -582,6 +307,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -597,6 +323,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -612,6 +339,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -627,6 +355,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -642,6 +371,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -657,6 +387,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -665,171 +396,6 @@ "node": ">=12" } }, - "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==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "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==", - "dev": true, - "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==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz", - "integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", - "dev": true, - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "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, - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true - }, - "node_modules/@iconify/utils": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.1.11.tgz", - "integrity": "sha512-M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg==", - "dev": true, - "dependencies": { - "@antfu/install-pkg": "^0.1.1", - "@antfu/utils": "^0.7.5", - "@iconify/types": "^2.0.0", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.4.3" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -865,35 +431,17 @@ "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==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@ls-lint/ls-lint": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@ls-lint/ls-lint/-/ls-lint-2.2.2.tgz", - "integrity": "sha512-gdolCgwveSHZczfKtoVFkf+NZJjd7KRQs9QnLVEiMFEJLK4H7nBrZuC/ASl/AYMZvFmtCocRt3d5E0UF/34vCQ==", - "cpu": [ - "x64", - "arm64", - "s390x" - ], - "dev": true, - "os": [ - "darwin", - "linux", - "win32" - ], - "bin": { - "ls-lint": "bin/cli.js" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@nodelib/fs.scandir": { @@ -931,1832 +479,35 @@ "node": ">= 8" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.4.tgz", - "integrity": "sha512-Z0TbvXkRbacjFFLpVpV0e2mheCh+WzQpcqL+4xp49uNJOxOnIAPZyXtUxZ5Qn3QBTGKA11Exjd9a5411rBrhDg==", - "dev": true, - "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/map-workspaces/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/@npmcli/map-workspaces/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/@npmcli/name-from-folder": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", - "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pnpm/constants": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@pnpm/constants/-/constants-7.1.1.tgz", - "integrity": "sha512-31pZqMtjwV+Vaq7MaPrT1EoDFSYwye3dp6BiHIGRJmVThCQwySRKM7hCvqqI94epNkqFAAYoWrNynWoRYosGdw==", - "dev": true, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/core-loggers": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/@pnpm/core-loggers/-/core-loggers-9.0.4.tgz", - "integrity": "sha512-P5IiCwLbYy/vlCDTxEMReB67NVs1Y4ip6iIEM3Y1fbxm0JbPMWTUMKGf2fy7eqGDF3/Vuxk5H7o/A4II6SWzMA==", - "dev": true, - "dependencies": { - "@pnpm/types": "9.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - }, - "peerDependencies": { - "@pnpm/logger": "^5.0.0" - } - }, - "node_modules/@pnpm/error": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@pnpm/error/-/error-5.0.2.tgz", - "integrity": "sha512-0TEm+tWNYm+9uh6DSKyRbv8pv/6b4NL0PastLvMxIoqZbBZ5Zj1cYi332R9xsSUi31ZOsu2wpgn/bC7DA9hrjg==", - "dev": true, - "dependencies": { - "@pnpm/constants": "7.1.1" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/fetching-types": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/fetching-types/-/fetching-types-5.0.0.tgz", - "integrity": "sha512-o9gdO1v8Uc5P2fBBuW6GSpfTqIivQmQlqjQJdFiQX0m+tgxlrMRneIg392jZuc6fk7kFqjLheInlslgJfwY+4Q==", - "dev": true, - "dependencies": { - "@zkochan/retry": "^0.2.0", - "node-fetch": "3.0.0-beta.9" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/graceful-fs": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@pnpm/graceful-fs/-/graceful-fs-3.2.0.tgz", - "integrity": "sha512-vRoXJxscDpHak7YE9SqCkzfrayn+Lw+YueOeHIPEqkgokrHeYgYeONoc2kGh0ObHaRtNSsonozVfJ456kxLNvA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/logger": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/logger/-/logger-5.0.0.tgz", - "integrity": "sha512-YfcB2QrX+Wx1o6LD1G2Y2fhDhOix/bAY/oAnMpHoNLsKkWIRbt1oKLkIFvxBMzLwAEPqnYWguJrYC+J6i4ywbw==", - "dev": true, - "dependencies": { - "bole": "^5.0.0", - "ndjson": "^2.0.0" - }, - "engines": { - "node": ">=12.17" - } - }, - "node_modules/@pnpm/npm-package-arg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/npm-package-arg/-/npm-package-arg-1.0.0.tgz", - "integrity": "sha512-oQYP08exi6mOPdAZZWcNIGS+KKPsnNwUBzSuAEGWuCcqwMAt3k/WVCqVIXzBxhO5sP2b43og69VHmPj6IroKqw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/@pnpm/npm-resolver": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/npm-resolver/-/npm-resolver-17.0.0.tgz", - "integrity": "sha512-XCeFga+Am3rsTO+8IIuIPb6VsZ+iCiv5QJW61YDl4XuiqoyCFzNyGgGfv05n45lIfK0Gg1jA2ewlo0LpGelCUw==", - "dev": true, - "dependencies": { - "@pnpm/core-loggers": "9.0.4", - "@pnpm/error": "5.0.2", - "@pnpm/fetching-types": "5.0.0", - "@pnpm/graceful-fs": "3.2.0", - "@pnpm/resolve-workspace-range": "5.0.1", - "@pnpm/resolver-base": "11.0.0", - "@pnpm/types": "9.4.0", - "@zkochan/retry": "^0.2.0", - "encode-registry": "^3.0.1", - "load-json-file": "^6.2.0", - "lru-cache": "^10.0.1", - "normalize-path": "^3.0.0", - "p-limit": "^3.1.0", - "p-memoize": "4.0.1", - "parse-npm-tarball-url": "^3.0.0", - "path-temp": "^2.1.0", - "ramda": "npm:@pnpm/ramda@0.28.1", - "rename-overwrite": "^4.0.3", - "semver": "^7.5.4", - "ssri": "10.0.5", - "version-selector-type": "^3.0.0" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - }, - "peerDependencies": { - "@pnpm/logger": "^5.0.0" - } - }, - "node_modules/@pnpm/npm-resolver/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/@pnpm/resolve-workspace-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@pnpm/resolve-workspace-range/-/resolve-workspace-range-5.0.1.tgz", - "integrity": "sha512-yQ0pMthlw8rTgS/C9hrjne+NEnnSNevCjtdodd7i15I59jMBYciHifZ/vjg0NY+Jl+USTc3dBE+0h/4tdYjMKg==", - "dev": true, - "dependencies": { - "semver": "^7.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/resolver-base": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/@pnpm/resolver-base/-/resolver-base-11.0.0.tgz", - "integrity": "sha512-oxfjO8Ie6aBQPXSqOWGJP9s0xj9Z4cbRI7fK63WKhjwmNH4CTrSfikRL2o4FoXo2APAbJEUp2lCxx+86dq2tUg==", - "dev": true, - "dependencies": { - "@pnpm/types": "9.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/types": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/@pnpm/types/-/types-9.4.0.tgz", - "integrity": "sha512-IRDuIuNobLRQe0UyY2gbrrTzYS46tTNvOEfL6fOf0Qa8NyxUzeXz946v7fQuQE3LSBf8ENBC5SXhRmDl+mBEqA==", - "dev": true, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@pnpm/workspace.pkgs-graph": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@pnpm/workspace.pkgs-graph/-/workspace.pkgs-graph-2.0.10.tgz", - "integrity": "sha512-iGZZ23li6Ya68kHx3oaWPCN4JMzJ0njmmmWDRxUcHkc+nxtxTwpEM/FRl7yG1nBo39YwX2XTtou22h2nKipHnw==", - "dev": true, - "dependencies": { - "@pnpm/npm-package-arg": "^1.0.0", - "@pnpm/npm-resolver": "17.0.0", - "@pnpm/resolve-workspace-range": "5.0.1", - "ramda": "npm:@pnpm/ramda@0.28.1" - }, - "engines": { - "node": ">=16.14" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.23", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", - "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", - "dev": true - }, - "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==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@remirror/core-constants": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-2.0.2.tgz", - "integrity": "sha512-dyHY+sMF0ihPus3O27ODd4+agdHMEmuRdyiZJ2CCWjPV5UFmn17ZbElvk6WOGVE4rdCJKZQCrPV2BcikOMLUGQ==" - }, - "node_modules/@remirror/core-helpers": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@remirror/core-helpers/-/core-helpers-3.0.0.tgz", - "integrity": "sha512-tusEgQJIqg4qKj6HSBUFcyRnWnziw3neh4T9wOmsPGHFC3w9kl5KSrDb9UAgE8uX6y32FnS7vJ955mWOl3n50A==", - "dependencies": { - "@remirror/core-constants": "^2.0.2", - "@remirror/types": "^1.0.1", - "@types/object.omit": "^3.0.0", - "@types/object.pick": "^1.3.2", - "@types/throttle-debounce": "^2.1.0", - "case-anything": "^2.1.13", - "dash-get": "^1.0.2", - "deepmerge": "^4.3.1", - "fast-deep-equal": "^3.1.3", - "make-error": "^1.3.6", - "object.omit": "^3.0.0", - "object.pick": "^1.3.0", - "throttle-debounce": "^3.0.1" - } - }, - "node_modules/@remirror/types": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@remirror/types/-/types-1.0.1.tgz", - "integrity": "sha512-VlZQxwGnt1jtQ18D6JqdIF+uFZo525WEqrfp9BOc3COPpK4+AWCgdnAWL+ho6imWcoINlGjR/+3b6y5C1vBVEA==", - "dependencies": { - "type-fest": "^2.19.0" - } - }, - "node_modules/@remirror/types/node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@snyk/github-codeowners": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@snyk/github-codeowners/-/github-codeowners-1.1.0.tgz", - "integrity": "sha512-lGFf08pbkEac0NYgVf4hdANpAgApRjNByLXB+WBip3qj1iendOIyAwP2GKkKbQMNVy2r1xxDf0ssfWscoiC+Vw==", - "dev": true, - "dependencies": { - "commander": "^4.1.1", - "ignore": "^5.1.8", - "p-map": "^4.0.0" - }, - "bin": { - "github-codeowners": "dist/cli.js" - }, - "engines": { - "node": ">=8.10" - } - }, - "node_modules/@tiptap/core": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-2.1.12.tgz", - "integrity": "sha512-ZGc3xrBJA9KY8kln5AYTj8y+GDrKxi7u95xIl2eccrqTY5CQeRu6HRNM1yT4mAjuSaG9jmazyjGRlQuhyxCKxQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-blockquote": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-blockquote/-/extension-blockquote-2.1.12.tgz", - "integrity": "sha512-Qb3YRlCfugx9pw7VgLTb+jY37OY4aBJeZnqHzx4QThSm13edNYjasokbX0nTwL1Up4NPTcY19JUeHt6fVaVVGg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-bold": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bold/-/extension-bold-2.1.12.tgz", - "integrity": "sha512-AZGxIxcGU1/y6V2YEbKsq6BAibL8yQrbRm6EdcBnby41vj1WziewEKswhLGmZx5IKM2r2ldxld03KlfSIlKQZg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-bubble-menu": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bubble-menu/-/extension-bubble-menu-2.1.12.tgz", - "integrity": "sha512-gAGi21EQ4wvLmT7klgariAc2Hf+cIjaNU2NWze3ut6Ku9gUo5ZLqj1t9SKHmNf4d5JG63O8GxpErqpA7lHlRtw==", - "dependencies": { - "tippy.js": "^6.3.7" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-bullet-list": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-bullet-list/-/extension-bullet-list-2.1.12.tgz", - "integrity": "sha512-vtD8vWtNlmAZX8LYqt2yU9w3mU9rPCiHmbp4hDXJs2kBnI0Ju/qAyXFx6iJ3C3XyuMnMbJdDI9ee0spAvFz7cQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-code": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code/-/extension-code-2.1.12.tgz", - "integrity": "sha512-CRiRq5OTC1lFgSx6IMrECqmtb93a0ZZKujEnaRhzWliPBjLIi66va05f/P1vnV6/tHaC3yfXys6dxB5A4J8jxw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-code-block": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-code-block/-/extension-code-block-2.1.12.tgz", - "integrity": "sha512-RXtSYCVsnk8D+K80uNZShClfZjvv1EgO42JlXLVGWQdIgaNyuOv/6I/Jdf+ZzhnpsBnHufW+6TJjwP5vJPSPHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-document": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-2.1.12.tgz", - "integrity": "sha512-0QNfAkCcFlB9O8cUNSwTSIQMV9TmoEhfEaLz/GvbjwEq4skXK3bU+OQX7Ih07waCDVXIGAZ7YAZogbvrn/WbOw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-dropcursor": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-dropcursor/-/extension-dropcursor-2.1.12.tgz", - "integrity": "sha512-0tT/q8nL4NBCYPxr9T0Brck+RQbWuczm9nV0bnxgt0IiQXoRHutfPWdS7GA65PTuVRBS/3LOco30fbjFhkfz/A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-floating-menu": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-floating-menu/-/extension-floating-menu-2.1.12.tgz", - "integrity": "sha512-uo0ydCJNg6AWwLT6cMUJYVChfvw2PY9ZfvKRhh9YJlGfM02jS4RUG/bJBts6R37f+a5FsOvAVwg8EvqPlNND1A==", - "dependencies": { - "tippy.js": "^6.3.7" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-gapcursor": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-gapcursor/-/extension-gapcursor-2.1.12.tgz", - "integrity": "sha512-zFYdZCqPgpwoB7whyuwpc8EYLYjUE5QYKb8vICvc+FraBUDM51ujYhFSgJC3rhs8EjI+8GcK8ShLbSMIn49YOQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-hard-break": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-hard-break/-/extension-hard-break-2.1.12.tgz", - "integrity": "sha512-nqKcAYGEOafg9D+2cy1E4gHNGuL12LerVa0eS2SQOb+PT8vSel9OTKU1RyZldsWSQJ5rq/w4uIjmLnrSR2w6Yw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-heading": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-heading/-/extension-heading-2.1.12.tgz", - "integrity": "sha512-MoANP3POAP68Ko9YXarfDKLM/kXtscgp6m+xRagPAghRNujVY88nK1qBMZ3JdvTVN6b/ATJhp8UdrZX96TLV2w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-highlight": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-highlight/-/extension-highlight-2.1.12.tgz", - "integrity": "sha512-buen31cYPyiiHA2i0o2i/UcjRTg/42mNDCizGr1OJwvv3AELG3qOFc4Y58WJWIvWNv+1Dr4ZxHA3GNVn0ANWyg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-history": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-history/-/extension-history-2.1.12.tgz", - "integrity": "sha512-6b7UFVkvPjq3LVoCTrYZAczt5sQrQUaoDWAieVClVZoFLfjga2Fwjcfgcie8IjdPt8YO2hG/sar/c07i9vM0Sg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-horizontal-rule": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-horizontal-rule/-/extension-horizontal-rule-2.1.12.tgz", - "integrity": "sha512-RRuoK4KxrXRrZNAjJW5rpaxjiP0FJIaqpi7nFbAua2oHXgsCsG8qbW2Y0WkbIoS8AJsvLZ3fNGsQ8gpdliuq3A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-image": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-image/-/extension-image-2.1.12.tgz", - "integrity": "sha512-VCgOTeNLuoR89WoCESLverpdZpPamOd7IprQbDIeG14sUySt7RHNgf2AEfyTYJEHij12rduvAwFzerPldVAIJg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-italic": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-italic/-/extension-italic-2.1.12.tgz", - "integrity": "sha512-/XYrW4ZEWyqDvnXVKbgTXItpJOp2ycswk+fJ3vuexyolO6NSs0UuYC6X4f+FbHYL5VuWqVBv7EavGa+tB6sl3A==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-link": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-link/-/extension-link-2.1.12.tgz", - "integrity": "sha512-Sti5hhlkCqi5vzdQjU/gbmr8kb578p+u0J4kWS+SSz3BknNThEm/7Id67qdjBTOQbwuN07lHjDaabJL0hSkzGQ==", - "dependencies": { - "linkifyjs": "^4.1.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-list-item": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-list-item/-/extension-list-item-2.1.12.tgz", - "integrity": "sha512-Gk7hBFofAPmNQ8+uw8w5QSsZOMEGf7KQXJnx5B022YAUJTYYxO3jYVuzp34Drk9p+zNNIcXD4kc7ff5+nFOTrg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-ordered-list": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-ordered-list/-/extension-ordered-list-2.1.12.tgz", - "integrity": "sha512-tF6VGl+D2avCgn9U/2YLJ8qVmV6sPE/iEzVAFZuOSe6L0Pj7SQw4K6AO640QBob/d8VrqqJFHCb6l10amJOnXA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-paragraph": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-2.1.12.tgz", - "integrity": "sha512-hoH/uWPX+KKnNAZagudlsrr4Xu57nusGekkJWBcrb5MCDE91BS+DN2xifuhwXiTHxnwOMVFjluc0bPzQbkArsw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-strike": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-strike/-/extension-strike-2.1.12.tgz", - "integrity": "sha512-HlhrzIjYUT8oCH9nYzEL2QTTn8d1ECnVhKvzAe6x41xk31PjLMHTUy8aYjeQEkWZOWZ34tiTmslV1ce6R3Dt8g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-subscript": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-subscript/-/extension-subscript-2.1.12.tgz", - "integrity": "sha512-tb1jysEvf4SIiXwEOgDTXiyrG39RVNHvn/zsGMg5wy5t9qUp9m1k7kKYTH084ktuKDAPQonCcpn3hwc+ngTFzg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-superscript": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-superscript/-/extension-superscript-2.1.12.tgz", - "integrity": "sha512-ek6L+DNsrjiJieArlgTvQt1VfJ56d8V19WAPW/ciRhq88YRlTEY9nSO3QuUCSUO1nGmE5OWQpgrsiW/XZbONVw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-text": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-2.1.12.tgz", - "integrity": "sha512-rCNUd505p/PXwU9Jgxo4ZJv4A3cIBAyAqlx/dtcY6cjztCQuXJhuQILPhjGhBTOLEEL4kW2wQtqzCmb7O8i2jg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-text-align": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text-align/-/extension-text-align-2.1.12.tgz", - "integrity": "sha512-siMlwrkgVrAxxgmZn8GOc75J7UZi2CVrP9vDHkUPPyKm/fjssYekXwGCEk4Vswii1BbOh2gt+MDsRkeYRGyDlQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/extension-underline": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/extension-underline/-/extension-underline-2.1.12.tgz", - "integrity": "sha512-NwwdhFT8gDD0VUNLQx85yFBhP9a8qg8GPuxlGzAP/lPTV8Ubh3vSeQ5N9k2ZF/vHlEvnugzeVCbmYn7wf8vn1g==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0" - } - }, - "node_modules/@tiptap/pm": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-2.1.12.tgz", - "integrity": "sha512-Q3MXXQABG4CZBesSp82yV84uhJh/W0Gag6KPm2HRWPimSFELM09Z9/5WK9RItAYE0aLhe4Krnyiczn9AAa1tQQ==", - "dependencies": { - "prosemirror-changeset": "^2.2.0", - "prosemirror-collab": "^1.3.0", - "prosemirror-commands": "^1.3.1", - "prosemirror-dropcursor": "^1.5.0", - "prosemirror-gapcursor": "^1.3.1", - "prosemirror-history": "^1.3.0", - "prosemirror-inputrules": "^1.2.0", - "prosemirror-keymap": "^1.2.0", - "prosemirror-markdown": "^1.10.1", - "prosemirror-menu": "^1.2.1", - "prosemirror-model": "^1.18.1", - "prosemirror-schema-basic": "^1.2.0", - "prosemirror-schema-list": "^1.2.2", - "prosemirror-state": "^1.4.1", - "prosemirror-tables": "^1.3.0", - "prosemirror-trailing-node": "^2.0.2", - "prosemirror-transform": "^1.7.0", - "prosemirror-view": "^1.28.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - } - }, - "node_modules/@tiptap/starter-kit": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/starter-kit/-/starter-kit-2.1.12.tgz", - "integrity": "sha512-+RoP1rWV7rSCit2+3wl2bjvSRiePRJE/7YNKbvH8Faz/+AMO23AFegHoUFynR7U0ouGgYDljGkkj35e0asbSDA==", - "dependencies": { - "@tiptap/core": "^2.1.12", - "@tiptap/extension-blockquote": "^2.1.12", - "@tiptap/extension-bold": "^2.1.12", - "@tiptap/extension-bullet-list": "^2.1.12", - "@tiptap/extension-code": "^2.1.12", - "@tiptap/extension-code-block": "^2.1.12", - "@tiptap/extension-document": "^2.1.12", - "@tiptap/extension-dropcursor": "^2.1.12", - "@tiptap/extension-gapcursor": "^2.1.12", - "@tiptap/extension-hard-break": "^2.1.12", - "@tiptap/extension-heading": "^2.1.12", - "@tiptap/extension-history": "^2.1.12", - "@tiptap/extension-horizontal-rule": "^2.1.12", - "@tiptap/extension-italic": "^2.1.12", - "@tiptap/extension-list-item": "^2.1.12", - "@tiptap/extension-ordered-list": "^2.1.12", - "@tiptap/extension-paragraph": "^2.1.12", - "@tiptap/extension-strike": "^2.1.12", - "@tiptap/extension-text": "^2.1.12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - } - }, - "node_modules/@tiptap/vue-3": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@tiptap/vue-3/-/vue-3-2.1.12.tgz", - "integrity": "sha512-yAcfmWw/9jtIUbhb0uGQVI9NoPYgHRasX2sAGWnm9Al+0aJktgmQ3mLCifXfXfjyEbeMF0p2L6Ul8tO7eho7aQ==", - "dependencies": { - "@tiptap/extension-bubble-menu": "^2.1.12", - "@tiptap/extension-floating-menu": "^2.1.12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^2.0.0", - "@tiptap/pm": "^2.0.0", - "vue": "^3.0.0" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true - }, - "node_modules/@types/chai": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.9.tgz", - "integrity": "sha512-69TtiDzu0bcmKQv3yg1Zx409/Kd7r0b5F1PfpYJfSHzLGtB53547V4u+9iqKYsTu/O2ai6KTb0TInNpvuQ3qmg==", - "dev": true - }, - "node_modules/@types/chai-subset": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.4.tgz", - "integrity": "sha512-CCWNXrJYSUIojZ1149ksLl3AN9cmZ5djf+yUoVVV+NuYrtydItQVlL2ZDqyC6M6O9LWRnVf8yYDxbXHO2TfQZg==", - "dev": true, - "dependencies": { - "@types/chai": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.3.tgz", - "integrity": "sha512-CS2rOaoQ/eAgAfcTfq6amKG7bsN+EMcgGY4FAFQdvSj2y1ixvOZTUA9mOtCai7E1SYu283XNw7urKK30nP3wkQ==", - "dev": true - }, - "node_modules/@types/json-schema": { - "version": "7.0.14", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.14.tgz", - "integrity": "sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw==", - "dev": true - }, - "node_modules/@types/node": { - "version": "20.8.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.7.tgz", - "integrity": "sha512-21TKHHh3eUHIi2MloeptJWALuCu5H7HQTdTrWIFReA8ad+aggoX+lRes3ex7/FtpC+sVUpFMQ+QTfYr74mruiQ==", - "devOptional": true, - "dependencies": { - "undici-types": "~5.25.1" - } - }, - "node_modules/@types/object.omit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@types/object.omit/-/object.omit-3.0.2.tgz", - "integrity": "sha512-BxWU36cMP+FKD3OLFluQaj2cBev2sx2LJaHELuphHwnleq+xnEhTmuYYYx4pOT/1U/ZoR6B+RdvxWh2FD6lGGA==" - }, - "node_modules/@types/object.pick": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/@types/object.pick/-/object.pick-1.3.3.tgz", - "integrity": "sha512-qZqHmdGEALeSATMB1djT1S5szv6Wtpb7DKpHrt2XG4iyKlV7C2Xk8GmDXr1KXakOqUfX6ohw7ceruYt4NVmB1Q==" - }, - "node_modules/@types/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-MMzuxN3GdFwskAnb6fz0orFvhfqi752yjaXylr0Rp4oDg5H0Zn1IuyRhDVvYOwAXoJirx2xuS16I3WjxnAIHiQ==", - "dev": true - }, - "node_modules/@types/throttle-debounce": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@types/throttle-debounce/-/throttle-debounce-2.1.0.tgz", - "integrity": "sha512-5eQEtSCoESnh2FsiLTxE121IiE60hnMqcb435fShf4bpLRjEu1Eoekht23y6zXS9Ts3l+Szu3TARnTsA0GkOkQ==" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.9.1.tgz", - "integrity": "sha512-w0tiiRc9I4S5XSXXrMHOWgHgxbrBn1Ro+PmiYhSg2ZVdxrAJtQgzU5o2m1BfP6UOn7Vxcc6152vFjQfmZR4xEg==", - "dev": true, - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/type-utils": "6.9.1", - "@typescript-eslint/utils": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.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 - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.9.1.tgz", - "integrity": "sha512-C7AK2wn43GSaCUZ9do6Ksgi2g3mwFkMO3Cis96kzmgudoVaKyt62yNzJOktP0HDLb/iO2O0n2lBOzJgr6Q/cyg==", - "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.9.1.tgz", - "integrity": "sha512-38IxvKB6NAne3g/+MyXMs2Cda/Sz+CEpmm+KLGEM8hx/CvnSRuw51i8ukfwB/B/sESdeTGet1NH1Wj7I0YXswg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.9.1.tgz", - "integrity": "sha512-eh2oHaUKCK58qIeYp19F5V5TbpM52680sB4zNSz29VBQPTWIlE/hCj5P5B1AChxECe/fmZlspAWFuRniep1Skg==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "6.9.1", - "@typescript-eslint/utils": "6.9.1", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.9.1.tgz", - "integrity": "sha512-BUGslGOb14zUHOUmDB2FfT6SI1CcZEJYfF3qFwBeUrU6srJfzANonwRYHDpLBuzbq3HaoF2XL2hcr01c8f8OaQ==", - "dev": true, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.9.1.tgz", - "integrity": "sha512-U+mUylTHfcqeO7mLWVQ5W/tMLXqVpRv61wm9ZtfE5egz7gtnmqVIw9ryh0mgIlkKk9rZLY3UHygsBSdB9/ftyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/visitor-keys": "6.9.1", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.9.1.tgz", - "integrity": "sha512-L1T0A5nFdQrMVunpZgzqPL6y2wVreSyHhKGZryS6jrEN7bD9NplVAyMryUhXsQ4TWLnZmxc2ekar/lSGIlprCA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.9.1", - "@typescript-eslint/types": "6.9.1", - "@typescript-eslint/typescript-estree": "6.9.1", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.9.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.9.1.tgz", - "integrity": "sha512-MUaPUe/QRLEffARsmNfmpghuQkW436DvESW+h+M52w0coICHRfD6Np9/K6PdACwnrq1HmuLl+cSPZaJmeVPkSw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "6.9.1", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true - }, - "node_modules/@unocss/astro": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/astro/-/astro-0.57.1.tgz", - "integrity": "sha512-KNaqN/SGM/uz1QitajIkzNEw0jy9Zx9Wp8fl4GhfGYEMAN2+M4cuvBZRmlb6cLctSXmSAJQDG91ivbD1JijGnw==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "@unocss/reset": "0.57.1", - "@unocss/vite": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/@unocss/cli": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/cli/-/cli-0.57.1.tgz", - "integrity": "sha512-wKuOaygrPNzDm5L7+2SfHsIi3knJrAQ8nH6OasVqB+bGDz6ybDlULV7wvUco6Os72ydh7YbWC2/WpqFii8U/3w==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@rollup/pluginutils": "^5.0.5", - "@unocss/config": "0.57.1", - "@unocss/core": "0.57.1", - "@unocss/preset-uno": "0.57.1", - "cac": "^6.7.14", - "chokidar": "^3.5.3", - "colorette": "^2.0.20", - "consola": "^3.2.3", - "fast-glob": "^3.3.1", - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "perfect-debounce": "^1.0.0" - }, - "bin": { - "unocss": "bin/unocss.mjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/cli/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@unocss/config": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/config/-/config-0.57.1.tgz", - "integrity": "sha512-mbuVO0mH1PX7rEkViMNWb3jG1ji7TUydo2DdnMHhJE+dOrGtnQzhzXGlAd4qqel1fnt/VWuOyZKwJA3QO6VCtg==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "unconfig": "^0.3.11" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/core": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/core/-/core-0.57.1.tgz", - "integrity": "sha512-cqQW/4gCuk+bFMPg9lBanuRNQ9Lx1l4PpMN/6uKxI5WROpq7ce/Xb4uGvAxKLh3ITtFSpXs2cLfsy7QD6cVD/Q==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/extractor-arbitrary-variants": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/extractor-arbitrary-variants/-/extractor-arbitrary-variants-0.57.1.tgz", - "integrity": "sha512-9s+azHhBnwjxm46TsD1RY0krDAwOR8tcw58Vtl3emd6C0VQsAOdoprt7UHE7GEXMvDVq7nMf8lAT0BM0LteW3w==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/inspector": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/inspector/-/inspector-0.57.1.tgz", - "integrity": "sha512-qV7ta7iHGX2EpZJ4IWY/05kgyhKFeWlvVJbrOnGsaH8gVt33T/43YAhB/8K5GIXBXIwkhwk13iB13nlg2gSheg==", - "dev": true, - "dependencies": { - "@unocss/rule-utils": "0.57.1", - "gzip-size": "^6.0.0", - "sirv": "^2.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/postcss": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/postcss/-/postcss-0.57.1.tgz", - "integrity": "sha512-DexrV+v/qkVh6t660rXigNr2Y6lON8jxD1z2KVk2bjHKhFflF6q6seps6d/MquyLJI1mXF2uANTeFAeL2q6evw==", - "dev": true, - "dependencies": { - "@unocss/config": "0.57.1", - "@unocss/core": "0.57.1", - "@unocss/rule-utils": "0.57.1", - "css-tree": "^2.3.1", - "fast-glob": "^3.3.1", - "magic-string": "^0.30.5", - "postcss": "^8.4.31" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "postcss": "^8.4.21" - } - }, - "node_modules/@unocss/postcss/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@unocss/preset-attributify": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-attributify/-/preset-attributify-0.57.1.tgz", - "integrity": "sha512-pvGQHaqBlB0jQysWhNbcKLOGrkj8b53k0sAa9LYxQjD1fa8t/dwbuMpZv4twX+gysF0vBhxRoWBPLH1/S6zRZg==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-icons": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-icons/-/preset-icons-0.57.1.tgz", - "integrity": "sha512-ve4jC6yREfS0mv97DCld9xLjMuiSCcsQPKucdtpUfCjLMqtGd1ZGGdFv02Q+92NkW7HDfgj+izEw1SKh9695Ow==", - "dev": true, - "dependencies": { - "@iconify/utils": "^2.1.11", - "@unocss/core": "0.57.1", - "ofetch": "^1.3.3" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-mini": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-mini/-/preset-mini-0.57.1.tgz", - "integrity": "sha512-v9ZsIUGDfZNXbIrOc7zrBp+RFbFFGSQN/vKIf761js4fJ31j6lan4pPQPGcY17xHConkI1HJT/+yb/UVJaAcHw==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "@unocss/extractor-arbitrary-variants": "0.57.1", - "@unocss/rule-utils": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-tagify": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-tagify/-/preset-tagify-0.57.1.tgz", - "integrity": "sha512-GV8knxnsOVH/XiG2KB+mVZeEJqr0PZvvkSTPftGPbjttoKVZ+28Y5q9/qezH7p4W6RYVAAK+3qHHy5wWZosiMw==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-typography": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-typography/-/preset-typography-0.57.1.tgz", - "integrity": "sha512-C4cqCiGW0OSoSXsVQKgfLulYxY5C8M40f+a8VtBlAaEaN6eSlEt+catXb0chF9T2mvz/b87b0PahPvPwJdDf1Q==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "@unocss/preset-mini": "0.57.1" - } - }, - "node_modules/@unocss/preset-uno": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-uno/-/preset-uno-0.57.1.tgz", - "integrity": "sha512-0+DKZiowYjYzq2swJzQA2dhqDvLJdm0Y437ITzc2GzZMKGUUuNi+w2v3/SzwkpkRd9zTB9/YaOIJVfdrx6ZOXQ==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "@unocss/preset-mini": "0.57.1", - "@unocss/preset-wind": "0.57.1", - "@unocss/rule-utils": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-web-fonts": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-web-fonts/-/preset-web-fonts-0.57.1.tgz", - "integrity": "sha512-9DCIMlBRaGrljLmeciH4WqP+uRx2z2nLxvrvEmGbpJJpMn2H4higR5Zu5tDyKYGr9QBl9vXdWgib+43OSswkqA==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "ofetch": "^1.3.3" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/preset-wind": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/preset-wind/-/preset-wind-0.57.1.tgz", - "integrity": "sha512-5UairNahUXNDe9AggPtTCodyPjl6NgPCsiEB22LVgN20UjBXjaqzN5wUe1OgtpLoAUaSk0KI7eLWhnWbTbST3A==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "@unocss/preset-mini": "0.57.1", - "@unocss/rule-utils": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/reset": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/reset/-/reset-0.57.1.tgz", - "integrity": "sha512-f/ofoudjFN/HMtv1XV5phP58pOmNruBhr0GbVdBNylyieMQkFHowA7iSemChnC/fTbCcY6oSOAcFl4n9AefjdA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/rule-utils": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/rule-utils/-/rule-utils-0.57.1.tgz", - "integrity": "sha512-Hdicz7YORZx7SHICldzOGjPNeJwk/Xhy3cycqiPbg6nB6d639bpgZn5BsbDzHCPKpguwDomUqTZS6+C3s7tUVg==", - "dev": true, - "dependencies": { - "@unocss/core": "^0.57.1", - "magic-string": "^0.30.5" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/rule-utils/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@unocss/scope": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/scope/-/scope-0.57.1.tgz", - "integrity": "sha512-ZAzg6lLGwKNQGCvJXEie3TvGztkAyajEFqygu0mjtHb+CmDql4iAjoygs+3dnRI5hSDwfMYFrJ2azX26+2CsoA==", - "dev": true - }, - "node_modules/@unocss/transformer-attributify-jsx": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx/-/transformer-attributify-jsx-0.57.1.tgz", - "integrity": "sha512-ohgSEwm2j98ltPWl1zRPvZhRjQPpd7qZtgoROTQh6n2W7wEO1SlnYjgBBz+pGuo2dkfBN5NjuZJ93AEjS10Ysw==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-attributify-jsx-babel": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/transformer-attributify-jsx-babel/-/transformer-attributify-jsx-babel-0.57.1.tgz", - "integrity": "sha512-EOCPB8OGmhroAuFU0i0W5p6GmJpx6mAkP4KmsqVLd4QMgw+8aXkG7SKyLnxQZnekM0/dSo0TcpVGeGrZaUNgvQ==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-compile-class": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/transformer-compile-class/-/transformer-compile-class-0.57.1.tgz", - "integrity": "sha512-z0WZN6hbgpyBm2xqIrojqEjpQMhiyzHRbaBjWzI/6ieHWoFo5ajIwnReaFUEfJRNruLTd7/9hFDZdRXRPhttFw==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/transformer-directives": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/transformer-directives/-/transformer-directives-0.57.1.tgz", - "integrity": "sha512-rIk3XEU2NywEJUOkngBSmJfvS3IVgxkkqgMvuIqz8ZDbwWhepuMxsiI0QR3ypkipGr/eKK5DJ7eK0OVlo6FPFA==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1", - "@unocss/rule-utils": "0.57.1", - "css-tree": "^2.3.1" - } - }, - "node_modules/@unocss/transformer-variant-group": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/transformer-variant-group/-/transformer-variant-group-0.57.1.tgz", - "integrity": "sha512-qwydzn2Lqz/8zW6UUXdORaUl8humsG8ll74LN/z8cjEsqtXZkVdkV0l6Brpp9Xp/XPbKwO+II+KH3/1LGwXSzQ==", - "dev": true, - "dependencies": { - "@unocss/core": "0.57.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@unocss/vite": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/@unocss/vite/-/vite-0.57.1.tgz", - "integrity": "sha512-kEBDvGgQNkX2n87S6Ao5seyFb1kuWZ5p96dGOS7VFpD7HvR5xholkJXaVhUK9/exCldjLExbo5UtVlbxFLUFYg==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@rollup/pluginutils": "^5.0.5", - "@unocss/config": "0.57.1", - "@unocss/core": "0.57.1", - "@unocss/inspector": "0.57.1", - "@unocss/scope": "0.57.1", - "@unocss/transformer-directives": "0.57.1", - "chokidar": "^3.5.3", - "fast-glob": "^3.3.1", - "magic-string": "^0.30.5" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0" - } - }, - "node_modules/@unocss/vite/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "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==", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vitest/expect": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", - "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", - "dev": true, - "dependencies": { - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "chai": "^4.3.10" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", - "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", - "dev": true, - "dependencies": { - "@vitest/utils": "0.34.6", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", - "integrity": "sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vitest/snapshot": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", - "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", - "dev": true, - "dependencies": { - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@vitest/spy": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", - "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", - "dev": true, - "dependencies": { - "tinyspy": "^2.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", - "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", - "dev": true, - "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.7.tgz", - "integrity": "sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/shared": "3.3.7", - "estree-walker": "^2.0.2", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.7.tgz", - "integrity": "sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==", - "dependencies": { - "@vue/compiler-core": "3.3.7", - "@vue/shared": "3.3.7" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.7.tgz", - "integrity": "sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.7", - "@vue/compiler-dom": "3.3.7", - "@vue/compiler-ssr": "3.3.7", - "@vue/reactivity-transform": "3.3.7", - "@vue/shared": "3.3.7", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5", - "postcss": "^8.4.31", - "source-map-js": "^1.0.2" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.7.tgz", - "integrity": "sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==", - "dependencies": { - "@vue/compiler-dom": "3.3.7", - "@vue/shared": "3.3.7" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", - "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" - }, - "node_modules/@vue/reactivity": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.7.tgz", - "integrity": "sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==", - "dependencies": { - "@vue/shared": "3.3.7" - } - }, - "node_modules/@vue/reactivity-transform": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.7.tgz", - "integrity": "sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==", - "dependencies": { - "@babel/parser": "^7.23.0", - "@vue/compiler-core": "3.3.7", - "@vue/shared": "3.3.7", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.5" - } - }, - "node_modules/@vue/reactivity-transform/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.7.tgz", - "integrity": "sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==", - "dependencies": { - "@vue/reactivity": "3.3.7", - "@vue/shared": "3.3.7" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.7.tgz", - "integrity": "sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==", - "dependencies": { - "@vue/runtime-core": "3.3.7", - "@vue/shared": "3.3.7", - "csstype": "^3.1.2" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.7.tgz", - "integrity": "sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==", - "dependencies": { - "@vue/compiler-ssr": "3.3.7", - "@vue/shared": "3.3.7" - }, - "peerDependencies": { - "vue": "3.3.7" - } - }, - "node_modules/@vue/shared": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.7.tgz", - "integrity": "sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==" - }, - "node_modules/@zkochan/retry": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@zkochan/retry/-/retry-0.2.0.tgz", - "integrity": "sha512-WhB+2B/ZPlW2Xy/kMJBrMbqecWXcbDDgn0K0wKBAgO2OlBTz1iLJrRWduo+DGGn0Akvz1Lu4Xvls7dJojximWw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/@zkochan/rimraf": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@zkochan/rimraf/-/rimraf-2.1.3.tgz", - "integrity": "sha512-mCfR3gylCzPC+iqdxEA6z5SxJeOgzgbwmyxanKriIne5qZLswDe/M43aD3p5MNzwzXRhbZg/OX+MpES6Zk1a6A==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.10" - } - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, "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==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "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==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=0.10.0" } }, + "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 + }, "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, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2765,69 +516,64 @@ "node": ">= 8" } }, - "node_modules/are-docs-informative": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", - "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", - "dev": true, - "engines": { - "node": ">=14" - } - }, "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", "dev": true }, - "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==" - }, - "node_modules/arity-n": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arity-n/-/arity-n-1.0.4.tgz", - "integrity": "sha512-fExL2kFDC1Q2DUOx3whE/9KoN66IzkY4b4zUHUBFM1ojEYjZZYDcUW3bek/ufGionX9giIKDC5redH2IlGqcQQ==", + "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 }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "is-number": "^4.0.0" + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "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==", + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", - "dev": true, - "bin": { - "babylon": "bin/babylon.js" + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/balanced-match": { @@ -2840,26 +586,11 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } }, - "node_modules/bole": { - "version": "5.0.9", - "resolved": "https://registry.npmjs.org/bole/-/bole-5.0.9.tgz", - "integrity": "sha512-35GeBG6T7GW9VmLDF2IoKAtFCqMjmmq1uICbsICI0pID7ZAyUKlf7dg1wpXmn9GcMKHtg0S19CPMU5yfY3tv+g==", - "dev": true, - "dependencies": { - "fast-safe-stringify": "^2.0.7", - "individual": "^3.0.0" - } - }, - "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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2874,6 +605,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -2881,106 +613,97 @@ "node": ">=8" } }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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, - "engines": { - "node": ">=6" - } - }, - "node_modules/case-anything": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.13.tgz", - "integrity": "sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==", - "engines": { - "node": ">=12.13" + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "bin": { + "browserslist": "cli.js" }, "engines": { - "node": ">=4" + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "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, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001563", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz", + "integrity": "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, "engines": { - "node": "*" + "node": ">=0.8.0" } }, "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", @@ -3007,6 +730,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3014,48 +738,32 @@ "node": ">= 6" } }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.8" - } - }, "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==", + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "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==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "node_modules/colorette": { - "version": "2.0.20", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", - "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "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, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } }, "node_modules/commander": { "version": "4.1.1", @@ -3066,86 +774,159 @@ "node": ">= 6" } }, - "node_modules/comment-parser": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.0.tgz", - "integrity": "sha512-QLyTNiZ2KDOibvFPlZ6ZngVsZ/0gYnE6uTXi5aoDg8ed3AkJAz4sEje3Y8a29hQ1s6A99MZXe47fLAXQ1rTqaw==", - "dev": true, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/compose-function": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/compose-function/-/compose-function-3.0.3.tgz", - "integrity": "sha512-xzhzTJ5eC+gmIzvZq+C3kCJHsp9os6tJkrigDRZclyGtOKINbZtE8n1Tzmeh32jW+BUDPbvZpibwvJHBLGMVwg==", - "dev": true, - "dependencies": { - "arity-n": "^1.0.4" - } - }, "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 }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "node_modules/css-blank-pseudo": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-0.1.4.tgz", + "integrity": "sha512-LHz35Hr83dnFeipc7oqFDmsjHdljj3TQtxGGiNWSOsTLIAubSm4TEz8qCaKFpk7idaQ1GfWscF4E6mgpBysA1w==", "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "bin": { + "css-blank-pseudo": "cli.js" + }, "engines": { - "node": "^14.18.0 || >=16.10.0" + "node": ">=6.0.0" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/css-blank-pseudo/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", "dev": true }, - "node_modules/crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" - }, - "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==", + "node_modules/css-blank-pseudo/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "engines": { - "node": ">= 8" + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/crypto-random-string": { + "node_modules/css-has-pseudo": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-0.10.0.tgz", + "integrity": "sha512-Z8hnfsZu4o/kt+AuFzeGpLVhFOGO9mluyHBaA2bA8aCGTwah5sT3WV/fTHH8UNZUytOIImuGPrl/prlb4oX4qQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-selector-parser": "^5.0.0-rc.4" + }, + "bin": { + "css-has-pseudo": "cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/css-has-pseudo/node_modules/cssesc": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", "dev": true, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" + "bin": { + "cssesc": "bin/cssesc" }, "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "node": ">=4" } }, + "node_modules/css-has-pseudo/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/css-has-pseudo/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-3.1.1.tgz", + "integrity": "sha512-MTu6+tMs9S3EUqzmqLXEcgNRbNkkD/TGFvowpeoWJn5Vfq7FMgsmRQs9X5NXAURiOBmOxm/lLjsDNXDE6k9bhg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5" + }, + "bin": { + "css-prefers-color-scheme": "cli.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/css-prefers-color-scheme/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/css-prefers-color-scheme/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/cssdb": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-4.4.0.tgz", + "integrity": "sha512-LsTAR1JPEM9TpGhl/0p3nQecC2LJ0kD8X5YARu1hk/9I1gril5vDtMZyNxcEpxxDj34YNck/ucjuoUd66K03oQ==", + "dev": true + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -3158,223 +939,38 @@ "node": ">=4" } }, - "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==" - }, - "node_modules/dash-get": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/dash-get/-/dash-get-1.0.2.tgz", - "integrity": "sha512-4FbVrHDwfOASx7uQVxeiCTo7ggSdYZbqs8lH+WU6ViypPlDbe9y6IP5VVUDQBv9DcnyaiPT5XT0UWHgJ64zLeQ==" - }, - "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "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, "engines": { - "node": ">= 6" + "node": ">=0.4.0" } }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-freeze": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", - "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", + "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 }, - "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==", + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", - "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", - "dev": true, - "optional": true, - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defu": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.3.tgz", - "integrity": "sha512-Vy2wmG3NTkmHNg/kzpuvHhkqeIx3ODWqasgCRbKtbXEN0G+HpEEv9BtJLp7ZG1CZloFaC41Ah3ZFbq7aqCqMeQ==", + "node_modules/electron-to-chromium": { + "version": "1.4.590", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.590.tgz", + "integrity": "sha512-hohItzsQcG7/FBsviCYMtQwUSWvVF7NVqPOnJCErWsAshsP/CR2LAXdmq276RbESNdhxiAq5/vRo1g2pxGXVww==", "dev": true }, - "node_modules/destr": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.2.tgz", - "integrity": "sha512-65AlobnZMiCET00KaFFjUefxDX0khFA/E4myqZ7a6Sq1yZtR8+FVIvilVX66vF2uobSumxooYZChiRPCKNqhmg==", - "dev": true - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.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, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dompurify": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.0.6.tgz", - "integrity": "sha512-ilkD8YEnnGh1zJ240uJsW7AzE+2qpbOUYjacomn3AvJ6J4JhKGSZ2nh4wUIXPZrEPppaCLx5jFe8T89Rk8tQ7w==" - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, - "node_modules/easy-table": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.2.0.tgz", - "integrity": "sha512-OFzVOv03YpvtcWGe5AayU5G2hgybsg3iqA6drU8UaoZyB9jLGMTrz9+asnLp/E+6qPh88yEI1gvyZFZ41dmgww==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "optionalDependencies": { - "wcwidth": "^1.0.1" - } - }, - "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 - }, - "node_modules/encode-registry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/encode-registry/-/encode-registry-3.0.1.tgz", - "integrity": "sha512-6qOwkl1g0fv0DN3Y3ggr2EaZXN71aoAqPp3p/pVaWSBSIo+YjLOWN61Fva43oVyQNPf7kgm8lkudzlzojwE2jw==", - "dev": true, - "dependencies": { - "mem": "^8.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/entities": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", - "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "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==", - "dev": true, - "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==", + "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -3407,258 +1003,28 @@ "@esbuild/win32-x64": "0.18.20" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "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==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.52.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz", - "integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.2", - "@eslint/js": "8.52.0", - "@humanwhocodes/config-array": "^0.11.13", - "@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", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-config-prettier": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz", - "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==", - "dev": true, - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-jsdoc": { - "version": "46.8.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-46.8.2.tgz", - "integrity": "sha512-5TSnD018f3tUJNne4s4gDWQflbsgOycIKEUBoCLn6XtBMgNHxQFmV8vVxUtiPxAQq8lrX85OaSG/2gnctxw9uQ==", - "dev": true, - "dependencies": { - "@es-joy/jsdoccomment": "~0.40.1", - "are-docs-informative": "^0.0.2", - "comment-parser": "1.4.0", - "debug": "^4.3.4", - "escape-string-regexp": "^4.0.0", - "esquery": "^1.5.0", - "is-builtin-module": "^3.2.1", - "semver": "^7.5.4", - "spdx-expression-parse": "^3.0.1" - }, - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.18.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz", - "integrity": "sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg==", - "dev": true, - "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" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" - } - }, - "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, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=0.8.0" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", - "dev": true, - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "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==" - }, - "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, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "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==" - }, "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.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3683,24 +1049,6 @@ "node": ">= 6" } }, - "node_modules/fast-json-stable-stringify": { - "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 - }, - "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 - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -3710,36 +1058,11 @@ "reusify": "^1.0.4" } }, - "node_modules/fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==", - "dev": true, - "engines": { - "node": "^10.17.0 || >=12.3.0" - }, - "peerDependenciesMeta": { - "domexception": { - "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, - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, "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==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3747,85 +1070,58 @@ "node": ">=8" } }, - "node_modules/filter-iterator": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/filter-iterator/-/filter-iterator-0.0.1.tgz", - "integrity": "sha512-v4lhL7Qa8XpbW3LN46CEnmhGk3eHZwxfNl5at20aEkreesht4YKb/Ba3BUIbnPhAC/r3dmu7ABaGk6MAvh2alA==", + "node_modules/flatten": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz", + "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==", + "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.", "dev": true }, - "node_modules/filter-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", - "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "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, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { - "node": ">=0.10.0" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "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==", "dev": true, "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">=10" + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" }, "funding": { - "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==", - "dev": true, - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=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 - }, - "node_modules/foreground-child": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", - "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" + "type": "patreon", + "url": "https://github.com/sponsors/rawify" } }, "node_modules/fs.realpath": { @@ -3838,6 +1134,7 @@ "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, "optional": true, "os": [ @@ -3847,44 +1144,30 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "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==", "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { - "version": "10.3.10", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", - "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^2.3.5", - "minimatch": "^9.0.1", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", - "path-scurry": "^1.10.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3902,198 +1185,43 @@ "node": ">=10.13.0" } }, - "node_modules/glob/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==", + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/glob/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" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "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/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dev": true, - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, "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/has-own-property": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-own-property/-/has-own-property-0.1.0.tgz", - "integrity": "sha512-14qdBKoonU99XDhWcFKZTShK+QV47qU97u8zzoVo9cL5TZ3BmBHXogItSt9qJjR0KUMFRhcCW8uGIGl8nkl7Aw==", - "dev": true - }, - "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, - "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, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/identity-function": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/identity-function/-/identity-function-1.0.0.tgz", - "integrity": "sha512-kNrgUK0qI+9qLTBidsH85HjDLpZfrrS0ElquKKe/fJFdB3D7VeKdXXEvOPDUHSHOzdZKCAAaQIWWyp0l2yq6pw==", - "dev": true - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", "dev": true, "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "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==" - }, - "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==", + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", "dev": true, "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/individual": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/individual/-/individual-3.0.0.tgz", - "integrity": "sha512-rUY5vtT748NMRbEMrTNiFfy29BgGZwGXUi2NFUVMWQrogSLzlJvQV9eeMWi+g1aVaQ53tpyLAQtd5x/JH0Nh1g==", + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", "dev": true }, "node_modules/inflight": { @@ -4112,16 +1240,11 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "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 - }, "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, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -4129,53 +1252,32 @@ "node": ">=8" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", "dev": true, "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" + "hasown": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "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, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "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, "dependencies": { "is-extglob": "^2.1.1" }, @@ -4183,95 +1285,13 @@ "node": ">=0.10.0" } }, - "node_modules/is-iterable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-iterable/-/is-iterable-1.1.1.tgz", - "integrity": "sha512-EdOZCr0NsGE00Pot+x1ZFx9MJK3C6wy91geZpXwvwexDLJvA4nzYyZf7r+EIwSeVsOLDdBz7ATg9NqKTzuNYuQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { - "node": ">=0.10.0" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/iterable-lookahead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/iterable-lookahead/-/iterable-lookahead-1.0.0.tgz", - "integrity": "sha512-hJnEP2Xk4+44DDwJqUQGdXal5VbyeWLaPyDl2AQc242Zr7iqz4DgpQOrEzglWVMGHMDCkguLHEKxd1+rOsmgSQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/jackspeak": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", - "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", - "dev": true, - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" + "node": ">=0.12.0" } }, "node_modules/jiti": { @@ -4283,183 +1303,10 @@ "jiti": "bin/jiti.js" } }, - "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 - }, - "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==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdoc-type-pratt-parser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.0.0.tgz", - "integrity": "sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==", - "dev": true, - "engines": { - "node": ">=12.0.0" - } - }, - "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 - }, - "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 - }, - "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 - }, - "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 - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "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, - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/knip": { - "version": "2.38.6", - "resolved": "https://registry.npmjs.org/knip/-/knip-2.38.6.tgz", - "integrity": "sha512-FUkcSx0VGmRQ70rQzcygZrP3FPpoFS5CFp7sONGclB+HIIA6DJ11u1MZXmh0XsXewgeIm9guCkAD6xoO4i/hWA==", - "dev": true, - "dependencies": { - "@ericcornelissen/bash-parser": "^0.5.2", - "@npmcli/map-workspaces": "^3.0.4", - "@pkgjs/parseargs": "0.11.0", - "@pnpm/logger": "5.0.0", - "@pnpm/workspace.pkgs-graph": "2.0.10", - "@snyk/github-codeowners": "^1.1.0", - "chalk": "^5.2.0", - "easy-table": "^1.2.0", - "fast-glob": "^3.2.12", - "globby": "^13.1.3", - "jiti": "1.21.0", - "js-yaml": "^4.1.0", - "micromatch": "^4.0.5", - "minimist": "^1.2.8", - "pretty-ms": "^8.0.0", - "strip-json-comments": "^5.0.0", - "summary": "^2.1.0", - "typescript": "^5.0.2", - "zod": "3.22.4", - "zod-validation-error": "1.5.0" - }, - "bin": { - "knip": "dist/cli.js" - }, - "engines": { - "node": ">=16.17.0 <17 || >=18.6.0" - } - }, - "node_modules/knip/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", - "dev": true, - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/knip/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/knip/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/knip/node_modules/strip-json-comments": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.1.tgz", - "integrity": "sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, "node_modules/laravel-vite-plugin": { @@ -4478,17 +1325,13 @@ "vite": "^3.0.0 || ^4.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, "engines": { - "node": ">= 0.8.0" + "node": ">=10" } }, "node_modules/lines-and-columns": { @@ -4497,189 +1340,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, - "node_modules/linkify-it": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-4.0.1.tgz", - "integrity": "sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==", - "dependencies": { - "uc.micro": "^1.0.1" - } - }, - "node_modules/linkifyjs": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.1.1.tgz", - "integrity": "sha512-zFN/CTVmbcVef+WaDXT63dNzzkfRBKT1j464NJQkV7iSgJU0sLBus9W0HBwnXK13/hf168pbrx/V/bjEHOXNHA==" - }, - "node_modules/load-json-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", - "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/load-json-file/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, - "engines": { - "node": ">=8" - } - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", - "dev": true - }, - "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 - }, - "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "dev": true, - "engines": { - "node": "14 || >=16.14" - } - }, - "node_modules/magic-string": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.16.0.tgz", - "integrity": "sha512-c4BEos3y6G2qO0B9X7K0FVLOPT9uGrjYwYRLFmDqyl5YMboUviyecnXWp94fJTSMwPw2/sf+CEYt5AGpmklkkQ==", - "dev": true, - "dependencies": { - "vlq": "^0.2.1" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" - }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha512-TzQSV2DiMYgoF5RycneKVUzIa9bQsj/B3tTgsE3dOGqlzHnGIDaC7XBE7grnA+8kZPnfqSGFe95VHc2oc0VFUQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/markdown-it": { - "version": "13.0.2", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-13.0.2.tgz", - "integrity": "sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==", - "dependencies": { - "argparse": "^2.0.1", - "entities": "~3.0.1", - "linkify-it": "^4.0.1", - "mdurl": "^1.0.1", - "uc.micro": "^1.0.5" - }, - "bin": { - "markdown-it": "bin/markdown-it.js" - } - }, - "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==", - "dev": true - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/mem": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-8.1.1.tgz", - "integrity": "sha512-qFCFUDs7U3b8mBDPyz5EToEKoAkgCzqquIgi9nkkR9bixxOVOre+09lbuH7+9Kn2NFpm56M3GUWVbU2hQgdACA==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -4702,13 +1362,25 @@ "node": ">=8.6" } }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-3.1.0.tgz", - "integrity": "sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==", + "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, "engines": { - "node": ">=8" + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "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, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, "node_modules/minimatch": { @@ -4723,55 +1395,22 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/minipass": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", - "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "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, "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "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 - }, "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==", + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, "funding": [ { "type": "github", @@ -4785,141 +1424,52 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "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/ndjson": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ndjson/-/ndjson-2.0.0.tgz", - "integrity": "sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ==", - "dev": true, - "dependencies": { - "json-stringify-safe": "^5.0.1", - "minimist": "^1.2.5", - "readable-stream": "^3.6.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "ndjson": "cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-fetch": { - "version": "3.0.0-beta.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", - "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", - "dev": true, - "dependencies": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" - }, - "engines": { - "node": "^10.17 || >=12.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-fetch-native": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.4.0.tgz", - "integrity": "sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==", + "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-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/npm-normalize-package-bin": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", - "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "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" - }, - "engines": { - "node": ">=8" - } - }, - "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==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-pairs": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-pairs/-/object-pairs-0.1.0.tgz", - "integrity": "sha512-3ECr6K831I4xX/Mduxr9UC+HPOz/d6WKKYj9p4cmC8Lg8p7g8gitzsxNX5IWlSIgFWN/a4JgrJaoAMKn20oKwA==", + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", "dev": true }, - "node_modules/object-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/object-values/-/object-values-1.0.0.tgz", - "integrity": "sha512-+8hwcz/JnQ9EpLIXzN0Rs7DLsBpJNT/xYehtB/jU93tHYr5BFEO8E+JGQNOSqE7opVzz5cGksKFHt7uUJVLSjQ==", + "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==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/object.omit": { + "node_modules/object-hash": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-3.0.0.tgz", - "integrity": "sha512-EO+BCv6LJfu+gBIF3ggLicFebFLN5zqzz/WWJlMFfkMyGth+oBkhxzDl0wx2W4GkLzuQs/FsSkXZb2IMWQqmBQ==", - "dependencies": { - "is-extendable": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ofetch": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/ofetch/-/ofetch-1.3.3.tgz", - "integrity": "sha512-s1ZCMmQWXy4b5K/TW9i/DtiN8Ku+xCiHcjQ6/J/nDdssirrQNOoB165Zu8EqLMA2lln1JUth9a0aW9Ap2ctrUg==", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", "dev": true, - "dependencies": { - "destr": "^2.0.1", - "node-fetch-native": "^1.4.0", - "ufo": "^1.3.0" + "engines": { + "node": ">= 6" } }, "node_modules/once": { @@ -4931,210 +1481,6 @@ "wrappy": "1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", - "dev": true, - "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" - }, - "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==" - }, - "node_modules/p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-memoize": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/p-memoize/-/p-memoize-4.0.1.tgz", - "integrity": "sha512-km0sP12uE0dOZ5qP+s7kGVf07QngxyG0gS8sYFvFWhqlgzOsSy+m71aUejf/0akxj5W7gE//2G74qTv6b4iMog==", - "dev": true, - "dependencies": { - "mem": "^6.0.1", - "mimic-fn": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/p-memoize?sponsor=1" - } - }, - "node_modules/p-memoize/node_modules/mem": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/mem/-/mem-6.1.1.tgz", - "integrity": "sha512-Ci6bIfq/UgcxPTYa8dQQ5FY3BzKkT894bwXWXxC/zqs0XgMO2cT20CGkOqda7gZNkmK5VP4x89IGZ6K7hfbn3Q==", - "dev": true, - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, - "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, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-npm-tarball-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-npm-tarball-url/-/parse-npm-tarball-url-3.0.0.tgz", - "integrity": "sha512-InpdgIdNe5xWMEUcrVQUniQKwnggBtJ7+SCwh7zQAZwbbIYZV9XdgJyhtmDSSvykFyQXoe4BINnzKTfCwWLs5g==", - "dev": true, - "dependencies": { - "semver": "^6.1.0" - }, - "engines": { - "node": ">=8.15" - } - }, - "node_modules/parse-npm-tarball-url/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, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5144,82 +1490,23 @@ "node": ">=0.10.0" } }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", - "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", - "dev": true, - "dependencies": { - "lru-cache": "^9.1.1 || ^10.0.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-temp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-temp/-/path-temp-2.1.0.tgz", - "integrity": "sha512-cMMJTAZlion/RWRRC48UbrDymEIt+/YSD/l8NqjneyDw2rDOBQcP5yRkMB4CYGn47KMhZvbblBP7Z79OsMw72w==", - "dev": true, - "dependencies": { - "unique-string": "^2.0.0" - }, - "engines": { - "node": ">=8.15" - } - }, - "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, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", - "dev": true - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "node_modules/path-parse": { + "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 }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -5227,79 +1514,29 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pinia": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", - "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", - "dependencies": { - "@vue/devtools-api": "^6.5.0", - "vue-demi": ">=0.14.5" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "@vue/composition-api": "^1.4.0", - "typescript": ">=4.4.4", - "vue": "^2.6.14 || ^3.3.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/pinia-plugin-persistedstate": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-3.2.0.tgz", - "integrity": "sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==", - "peerDependencies": { - "pinia": "^2.0.0" - } - }, - "node_modules/pinia/node_modules/vue-demi": { - "version": "0.14.6", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", - "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", - "hasInstallScript": true, - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", + "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, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" } }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, "funding": [ { "type": "opencollective", @@ -5323,6 +1560,1555 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-advanced-variables": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-advanced-variables/-/postcss-advanced-variables-3.0.1.tgz", + "integrity": "sha512-JqVjfkmqPoazMobVeQYzbt7djcDGJfMlpwBd9abTqmzWR40tvIUMXpTU5w3riqz7h+wYPY7V6GF8BIXL/ybEfg==", + "dev": true, + "dependencies": { + "@csstools/sass-import-resolve": "^1.0.0", + "postcss": "^7.0.6" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-advanced-variables/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-advanced-variables/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-atroot": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/postcss-atroot/-/postcss-atroot-0.1.3.tgz", + "integrity": "sha512-8SOS3MZZiyrztbpdOqZQ/h2mPBxRnLJNxjtZRooXbNbg13hrw3Z0ujm+ECizPCvnbVMG3ULx2RzGRAhx8e1VAw==", + "dev": true, + "dependencies": { + "postcss": "^5.0.5" + } + }, + "node_modules/postcss-atroot/node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/postcss-atroot/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-4.0.2.tgz", + "integrity": "sha512-clkFxk/9pcdb4Vkn0hAHq3YnxBQ2p0CGD1dy24jN+reBck+EWxMbxSUqN4Yj7t0w8csl87K6p0gxBe1utkJsYA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^6.0.2" + } + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-attribute-case-insensitive/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-2.0.1.tgz", + "integrity": "sha512-ZBARCypjEDofW4P6IdPVTLhDNXPRn8T2s1zHbZidW6rPaaZvcnCS2soYFIQJrMZSxiePJ2XIYTlcb2ztr/eT2g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-functional-notation/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-color-functional-notation/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-color-gray": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-color-gray/-/postcss-color-gray-5.0.0.tgz", + "integrity": "sha512-q6BuRnAGKM/ZRpfDascZlIZPjvwsRye7UDNalqVz3s7GDxMtqPY6+Q871liNxsonUw8oC61OG+PSaysYpl1bnw==", + "dev": true, + "dependencies": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-gray/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-color-gray/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-5.0.3.tgz", + "integrity": "sha512-PF4GDel8q3kkreVXKLAGNpHKilXsZ6xuu+mOQMHWHLPNyjiUBOr75sp5ZKJfmv1MCus5/DWUGcK9hm6qHEnXYw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-hex-alpha/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-color-hex-alpha/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-color-mod-function": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/postcss-color-mod-function/-/postcss-color-mod-function-3.0.3.tgz", + "integrity": "sha512-YP4VG+xufxaVtzV6ZmhEtc+/aTXH3d0JLpnYfxqTvwZPbJhWqp8bSY3nfNzNRFLgB4XSaBA82OE4VjOOKpCdVQ==", + "dev": true, + "dependencies": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-mod-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-color-mod-function/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-4.0.1.tgz", + "integrity": "sha512-aAe3OhkS6qJXBbqzvZth2Au4V3KieR5sRQ4ptb2b2O8wgvB3SJBsdG+jsn2BZbbwekDG8nTfcCNKcSfe/lEy8g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-color-rebeccapurple/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-color-rebeccapurple/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-custom-media": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-7.0.8.tgz", + "integrity": "sha512-c9s5iX0Ge15o00HKbuRuTqNndsJUbaXdiNsksnVH8H4gdc+zbLzr/UasOwNG6CTDpLFekVY4672eWdiiWu2GUg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.14" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-custom-media/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-custom-media/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-custom-properties": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-8.0.11.tgz", + "integrity": "sha512-nm+o0eLdYqdnJ5abAJeXp4CEU1c1k+eB2yMCvhgzsds/e0umabFrN6HoTy/8Q4K5ilxERdl/JD1LO5ANoYBeMA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.17", + "postcss-values-parser": "^2.0.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-custom-properties/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-custom-properties/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-5.1.2.tgz", + "integrity": "sha512-DSGDhqinCqXqlS4R7KGxL1OSycd1lydugJ1ky4iRXPHdBRiozyMHrdu0H3o7qNOCiZwySZTUI5MV0T8QhCLu+w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-custom-selectors/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-custom-selectors/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-custom-selectors/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-5.0.0.tgz", + "integrity": "sha512-3pm4oq8HYWMZePJY+5ANriPs3P07q+LW6FAdTlkFH2XqDdP4HeeJYMOzn0HYLhRSjBO3fhiqSwwU9xEULSrPgw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-1.0.0.tgz", + "integrity": "sha512-G+nV8EnQq25fOI8CH/B6krEohGWnF5+3A6H/+JEpOncu5dCnkS1QQ6+ct3Jkaepw1NGVqqOZH6lqrm244mCftA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.5", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-double-position-gradients/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-double-position-gradients/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-env-function": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-2.0.2.tgz", + "integrity": "sha512-rwac4BuZlITeUbiBq60h/xbLzXY43qOsIErngWa4l7Mt+RaSkT7QBjXVGTcBHupykkblHMDrBFh30zchYPaOUw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-env-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-env-function/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-extend-rule": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-extend-rule/-/postcss-extend-rule-2.0.0.tgz", + "integrity": "sha512-dgr1GJzW3lUBczZJO5Fm51rktn34Uc99xR1uQyC2Td8JPep/Y+TRx6TjK0yngikOd4LxV1xyuohMMpcaOBgrfA==", + "dev": true, + "dependencies": { + "postcss": "^6.0.22", + "postcss-nesting": "^5.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-extend-rule/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-extend-rule/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-extend-rule/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/postcss-extend-rule/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-extend-rule/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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-4.0.0.tgz", + "integrity": "sha512-Z5CkWBw0+idJHSV6+Bgf2peDOFf/x4o+vX/pwcNYrWpXFrSfTkQ3JQ1ojrq9yS+upnAlNRHeg8uEwFTgorjI8g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-focus-visible/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-focus-visible/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-focus-within": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-3.0.0.tgz", + "integrity": "sha512-W0APui8jQeBKbCGZudW37EeMCjDeVxKgiYfIIEo8Bdh5SpB9sxds/Iq8SEuzS0Q4YFOlG7EPFulbbxujpkrV2w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-focus-within/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-focus-within/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-font-variant": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-4.0.1.tgz", + "integrity": "sha512-I3ADQSTNtLTTd8uxZhtSOrTCQ9G4qUVKPjHiDk0bV75QSxXjVWiJVJ2VLdspGUi9fbW9BcjKJoRvxAH1pckqmA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-font-variant/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-font-variant/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-gap-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-2.0.0.tgz", + "integrity": "sha512-QZSqDaMgXCHuHTEzMsS2KfVDOq7ZFiknSpkrPJY6jmxbugUPTuSzs/vuE5I3zv0WAS+3vhrlqhijiprnuQfzmg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-gap-properties/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-gap-properties/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-image-set-function": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-3.0.1.tgz", + "integrity": "sha512-oPTcFFip5LZy8Y/whto91L9xdRHCWEMs3e1MdJxhgt4jy2WYXfhkng59fH5qLXSCPN8k4n94p1Czrfe5IOkKUw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-image-set-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-image-set-function/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "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, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-3.0.4.tgz", + "integrity": "sha512-3RLn6DIpMsK1l5UUy9jxQvoDeUN4gP939tDcKUHD/kM8SGSKbFAnvkpFpj3Bhtz3HGk1jWY5ZNWX6mPta5M9fg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-initial/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-initial/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-lab-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-2.0.1.tgz", + "integrity": "sha512-whLy1IeZKY+3fYdqQFuDBf8Auw+qFuVnChWjmxm/UhHWqNHZx+B99EwxTvGYmUBqe3Fjxs4L1BoZTJmPu6usVg==", + "dev": true, + "dependencies": { + "@csstools/convert-colors": "^1.4.0", + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-lab-function/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-lab-function/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-logical": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-3.0.0.tgz", + "integrity": "sha512-1SUKdJc2vuMOmeItqGuNaC+N8MzBWFWEkAnRnLpFYj1tGGa7NqyVBujfRtgNa2gXR+6RkGUiB2O5Vmh7E2RmiA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-logical/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-logical/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-media-minmax": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-4.0.0.tgz", + "integrity": "sha512-fo9moya6qyxsjbFAYl97qKO9gyre3qvbMnkOZeZwlsW6XYFsvs2DMGDlchVLfAd8LHPZDxivu/+qW2SMQeTHBw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-media-minmax/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-media-minmax/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nesting": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-5.0.0.tgz", + "integrity": "sha512-Yoe3w2mcVslnEJl5zLyz1yBxCFUpYu138apEEOCwS2HRdDw/TDxTwD1fXBrIarL8J1cPzHfVwO1m40B2/UpGCw==", + "dev": true, + "dependencies": { + "postcss": "^6.0.21" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-nesting/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-nesting/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-nesting/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/postcss-nesting/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-nesting/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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-2.0.0.tgz", + "integrity": "sha512-aK0fHc9CBNx8jbzMYhshZcEv8LtYnBIRYQD5i7w/K/wS9c2+0NSR6B3OVMu5y0hBHYLcMGjfU+dmWYNKH0I85g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-overflow-shorthand/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-overflow-shorthand/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-page-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-2.0.0.tgz", + "integrity": "sha512-tkpTSrLpfLfD9HvgOlJuigLuk39wVTbbd8RKcy8/ugV2bNBUW3xU+AIqyxhDrQr1VUj1RmyJrBn1YWrqUm9zAQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-page-break/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-page-break/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-place": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-4.0.1.tgz", + "integrity": "sha512-Zb6byCSLkgRKLODj/5mQugyuj9bvAAw9LqJJjgwz5cYryGeXfFZfSXoP1UfveccFmeq0b/2xxwcTEVScnqGxBg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-values-parser": "^2.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-place/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-place/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-preset-env": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-6.7.2.tgz", + "integrity": "sha512-nz+VyUUEB9uAxo5VxI0Gq4E31UjHCG3cUiZW3PzRn7KqkGlAEWuYgb/VLbAitEq7Ooubfix+H2JCm9v+C6hJuw==", + "dev": true, + "dependencies": { + "autoprefixer": "^9.6.1", + "browserslist": "^4.6.4", + "caniuse-lite": "^1.0.30000981", + "css-blank-pseudo": "^0.1.4", + "css-has-pseudo": "^0.10.0", + "css-prefers-color-scheme": "^3.1.1", + "cssdb": "^4.4.0", + "postcss": "^7.0.17", + "postcss-attribute-case-insensitive": "^4.0.1", + "postcss-color-functional-notation": "^2.0.1", + "postcss-color-gray": "^5.0.0", + "postcss-color-hex-alpha": "^5.0.3", + "postcss-color-mod-function": "^3.0.3", + "postcss-color-rebeccapurple": "^4.0.1", + "postcss-custom-media": "^7.0.8", + "postcss-custom-properties": "^8.0.11", + "postcss-custom-selectors": "^5.1.2", + "postcss-dir-pseudo-class": "^5.0.0", + "postcss-double-position-gradients": "^1.0.0", + "postcss-env-function": "^2.0.2", + "postcss-focus-visible": "^4.0.0", + "postcss-focus-within": "^3.0.0", + "postcss-font-variant": "^4.0.0", + "postcss-gap-properties": "^2.0.0", + "postcss-image-set-function": "^3.0.1", + "postcss-initial": "^3.0.0", + "postcss-lab-function": "^2.0.1", + "postcss-logical": "^3.0.0", + "postcss-media-minmax": "^4.0.0", + "postcss-nesting": "^7.0.0", + "postcss-overflow-shorthand": "^2.0.0", + "postcss-page-break": "^2.0.0", + "postcss-place": "^4.0.1", + "postcss-pseudo-class-any-link": "^6.0.0", + "postcss-replace-overflow-wrap": "^3.0.0", + "postcss-selector-matches": "^4.0.0", + "postcss-selector-not": "^4.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-preset-env/node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "funding": { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + }, + "node_modules/postcss-preset-env/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-preset-env/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-preset-env/node_modules/postcss-nesting": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-7.0.1.tgz", + "integrity": "sha512-FrorPb0H3nuVq0Sff7W2rnc3SmIcruVC6YwpcS+k687VxyxO33iE1amna7wHuRVzM8vfiYofXSBHNAZ3QhLvYg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-property-lookup": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-property-lookup/-/postcss-property-lookup-2.0.0.tgz", + "integrity": "sha512-KUb53a7UZWDMVb0SRODOonc4H1wlbgQ0VfYwmJaR1xWPorhariEz0U7x0ri3W/imFs6HqLYWP7hl2yMvi5Ty+w==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "postcss": "^6.0.6", + "tcomb": "^3.2.21" + } + }, + "node_modules/postcss-property-lookup/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==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-property-lookup/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==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-property-lookup/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/postcss-property-lookup/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-property-lookup/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" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-6.0.0.tgz", + "integrity": "sha512-lgXW9sYJdLqtmw23otOzrtbDXofUdfYzNm4PIpNE322/swES3VU9XlXHeJS46zT2onFO7V1QFdD4Q9LiZj8mew==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2", + "postcss-selector-parser": "^5.0.0-rc.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/cssesc": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-2.0.0.tgz", + "integrity": "sha512-MsCAG1z9lPdoO/IUMLSBWBSVxVtJ1395VGIQ+Fc2gNdkQ1hNDnQdw3YhA71WJCBW1vdwA0cAnk/DnW6bqoEUYg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-5.0.0.tgz", + "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", + "dev": true, + "dependencies": { + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-3.0.0.tgz", + "integrity": "sha512-2T5hcEHArDT6X9+9dVSPQdo7QHzG4XKclFT8rU5TzJPDN7RIRTbO9c4drUISOVemLj03aezStHCR2AIcr8XLpw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-replace-overflow-wrap/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-replace-overflow-wrap/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-selector-matches": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-selector-matches/-/postcss-selector-matches-4.0.0.tgz", + "integrity": "sha512-LgsHwQR/EsRYSqlwdGzeaPKVT0Ml7LAT6E75T8W8xLJY62CE4S/l03BWIt3jT8Taq22kXP08s2SfTSzaraoPww==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-selector-matches/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-selector-matches/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/postcss-selector-not": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-4.0.1.tgz", + "integrity": "sha512-YolvBgInEK5/79C+bdFMyzqTg6pkYqDbzZIST/PDMqa/o3qtXenD05apBG2jLgT0/BQ77d4U2UK12jWpilqMAQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "postcss": "^7.0.2" + } + }, + "node_modules/postcss-selector-not/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss-selector-not/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, "node_modules/postcss-selector-parser": { "version": "6.0.13", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", @@ -5336,256 +3122,83 @@ "node": ">=4" } }, - "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, - "engines": { - "node": ">= 0.8.0" - } + "node_modules/postcss-value-parser": { + "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 }, - "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==", + "node_modules/postcss-values-parser": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/postcss-values-parser/-/postcss-values-parser-2.0.1.tgz", + "integrity": "sha512-2tLuBsA6P4rYTNKCXYG/71C7j1pU6pK503suYOmn4xYrQIzW+opD+7FAFNuGSdZC/3Qfy334QbeMu7MEb8gOxg==", "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" + "dependencies": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" }, "engines": { - "node": ">=14" + "node": ">=6.14.4" + } + }, + "node_modules/precss": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/precss/-/precss-4.0.0.tgz", + "integrity": "sha512-cRPZMKpHLZXR6gJlrXRjJe7SQMf+wYxg6rKp+TwYsYABjApSj9z8E8yIlagqADaWyikeIZttaNU6xqSjFIAP/g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "dependencies": { + "postcss": "^7.0.6", + "postcss-advanced-variables": "^3.0.0", + "postcss-atroot": "^0.1.3", + "postcss-extend-rule": "^2.0.0", + "postcss-nested": "^4.1.0", + "postcss-preset-env": "^6.4.0", + "postcss-property-lookup": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/precss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/precss/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" }, "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/postcss/" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/precss/node_modules/postcss-nested": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-4.2.3.tgz", + "integrity": "sha512-rOv0W1HquRCamWy2kFl3QazJMMe1ku6rCFoAAH+9AcxdbpDeBr6k968MLWuLjvjMcGEip01ak09hKOEgpK9hvw==", "dev": true, "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "postcss": "^7.0.32", + "postcss-selector-parser": "^6.0.2" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", - "dev": true, - "dependencies": { - "parse-ms": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/prosemirror-changeset": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.2.1.tgz", - "integrity": "sha512-J7msc6wbxB4ekDFj+n9gTW/jav/p53kdlivvuppHsrZXCaQdVgRghoZbSS3kwrRyAstRVQ4/+u5k7YfLgkkQvQ==", - "dependencies": { - "prosemirror-transform": "^1.0.0" - } - }, - "node_modules/prosemirror-collab": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", - "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", - "dependencies": { - "prosemirror-state": "^1.0.0" - } - }, - "node_modules/prosemirror-commands": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.5.2.tgz", - "integrity": "sha512-hgLcPaakxH8tu6YvVAaILV2tXYsW3rAdDR8WNkeKGcgeMVQg3/TMhPdVoh7iAmfgVjZGtcOSjKiQaoeKjzd2mQ==", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" - } - }, - "node_modules/prosemirror-dropcursor": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.1.tgz", - "integrity": "sha512-M30WJdJZLyXHi3N8vxN6Zh5O8ZBbQCz0gURTfPmTIBNQ5pxrdU7A58QkNqfa98YEjSAL1HUyyU34f6Pm5xBSGw==", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0", - "prosemirror-view": "^1.1.0" - } - }, - "node_modules/prosemirror-gapcursor": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.3.2.tgz", - "integrity": "sha512-wtjswVBd2vaQRrnYZaBCbyDqr232Ed4p2QPtRIUK5FuqHYKGWkEwl08oQM4Tw7DOR0FsasARV5uJFvMZWxdNxQ==", - "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.3.2", - "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.3.2.tgz", - "integrity": "sha512-/zm0XoU/N/+u7i5zepjmZAEnpvjDtzoPWW6VmKptcAnPadN/SStsBjMImdCEbb3seiNTpveziPTIrXQbHLtU1g==", - "dependencies": { - "prosemirror-state": "^1.2.2", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.31.0", - "rope-sequence": "^1.3.0" - } - }, - "node_modules/prosemirror-inputrules": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.2.1.tgz", - "integrity": "sha512-3LrWJX1+ULRh5SZvbIQlwZafOXqp1XuV21MGBu/i5xsztd+9VD15x6OtN6mdqSFI7/8Y77gYUbQ6vwwJ4mr6QQ==", - "dependencies": { - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.0.0" - } - }, - "node_modules/prosemirror-keymap": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.2.tgz", - "integrity": "sha512-EAlXoksqC6Vbocqc0GtzCruZEzYgrn+iiGnNjsJsH4mrnIGex4qbLdWWNza3AW5W36ZRrlBID0eM6bdKH4OStQ==", - "dependencies": { - "prosemirror-state": "^1.0.0", - "w3c-keyname": "^2.2.0" - } - }, - "node_modules/prosemirror-markdown": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.11.2.tgz", - "integrity": "sha512-Eu5g4WPiCdqDTGhdSsG9N6ZjACQRYrsAkrF9KYfdMaCmjIApH75aVncsWYOJvEk2i1B3i8jZppv3J/tnuHGiUQ==", - "dependencies": { - "markdown-it": "^13.0.1", - "prosemirror-model": "^1.0.0" - } - }, - "node_modules/prosemirror-menu": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.4.tgz", - "integrity": "sha512-S/bXlc0ODQup6aiBbWVsX/eM+xJgCTAfMq/nLqaO5ID/am4wS0tTCIkzwytmao7ypEtjj39i7YbJjAgO20mIqA==", - "dependencies": { - "crelt": "^1.0.0", - "prosemirror-commands": "^1.0.0", - "prosemirror-history": "^1.0.0", - "prosemirror-state": "^1.0.0" - } - }, - "node_modules/prosemirror-model": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.19.3.tgz", - "integrity": "sha512-tgSnwN7BS7/UM0sSARcW+IQryx2vODKX4MI7xpqY2X+iaepJdKBPc7I4aACIsDV/LTaTjt12Z56MhDr9LsyuZQ==", - "dependencies": { - "orderedmap": "^2.0.0" - } - }, - "node_modules/prosemirror-schema-basic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.2.tgz", - "integrity": "sha512-/dT4JFEGyO7QnNTe9UaKUhjDXbTNkiWTq/N4VpKaF79bBjSExVV2NXmJpcM7z/gD7mbqNjxbmWW5nf1iNSSGnw==", - "dependencies": { - "prosemirror-model": "^1.19.0" - } - }, - "node_modules/prosemirror-schema-list": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.3.0.tgz", - "integrity": "sha512-Hz/7gM4skaaYfRPNgr421CU4GSwotmEwBVvJh5ltGiffUJwm7C8GfN/Bc6DR1EKEp5pDKhODmdXXyi9uIsZl5A==", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.7.3" - } - }, - "node_modules/prosemirror-state": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.3.tgz", - "integrity": "sha512-goFKORVbvPuAQaXhpbemJFRKJ2aixr+AZMGiquiqKxaucC6hlpHNZHWgz5R7dS4roHiwq9vDctE//CZ++o0W1Q==", - "dependencies": { - "prosemirror-model": "^1.0.0", - "prosemirror-transform": "^1.0.0", - "prosemirror-view": "^1.27.0" - } - }, - "node_modules/prosemirror-tables": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.3.4.tgz", - "integrity": "sha512-z6uLSQ1BLC3rgbGwZmpfb+xkdvD7W/UOsURDfognZFYaTtc0gsk7u/t71Yijp2eLflVpffMk6X0u0+u+MMDvIw==", - "dependencies": { - "prosemirror-keymap": "^1.1.2", - "prosemirror-model": "^1.8.1", - "prosemirror-state": "^1.3.1", - "prosemirror-transform": "^1.2.1", - "prosemirror-view": "^1.13.3" - } - }, - "node_modules/prosemirror-trailing-node": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-2.0.7.tgz", - "integrity": "sha512-8zcZORYj/8WEwsGo6yVCRXFMOfBo0Ub3hCUvmoWIZYfMP26WqENU0mpEP27w7mt8buZWuGrydBewr0tOArPb1Q==", - "dependencies": { - "@remirror/core-constants": "^2.0.2", - "@remirror/core-helpers": "^3.0.0", - "escape-string-regexp": "^4.0.0" - }, - "peerDependencies": { - "prosemirror-model": "^1.19.0", - "prosemirror-state": "^1.4.2", - "prosemirror-view": "^1.31.2" - } - }, - "node_modules/prosemirror-transform": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.8.0.tgz", - "integrity": "sha512-BaSBsIMv52F1BVVMvOmp1yzD3u65uC3HTzCBQV1WDPqJRQ2LuHKcyfn0jwqodo8sR9vVzMzZyI+Dal5W9E6a9A==", - "dependencies": { - "prosemirror-model": "^1.0.0" - } - }, - "node_modules/prosemirror-view": { - "version": "1.32.1", - "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.32.1.tgz", - "integrity": "sha512-9SnB4HBgRczzTyIMZLPE1iszegL04hNfUyS8uPtP1RPxNM2NTCiIs8KwNsJU4nbZO9rxJTwVTv7Jm3zU4CR78A==", - "dependencies": { - "prosemirror-model": "^1.16.0", - "prosemirror-state": "^1.0.0", - "prosemirror-transform": "^1.1.0" - } - }, - "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } + "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 }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -5607,63 +3220,20 @@ } ] }, - "node_modules/ramda": { - "name": "@pnpm/ramda", - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/@pnpm/ramda/-/ramda-0.28.1.tgz", - "integrity": "sha512-zcAG+lvU0fMziNeGXpPyCyCJYp5ZVrPElEE4t14jAmViaihohocZ+dDkcRIyAomox8pQsuZnv1EyHR+pOhmUWw==", - "dev": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/ramda" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/read-package-json-fast": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", - "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "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, "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", - "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "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" }, @@ -5671,26 +3241,21 @@ "node": ">=8.10.0" } }, - "node_modules/rename-overwrite": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/rename-overwrite/-/rename-overwrite-4.0.3.tgz", - "integrity": "sha512-e1zOWZh4Lauz5DcLMC8j4eoOHPIrZkAVpiocE9SkDE1ZrGMW+W88LR1Y2YjD1DFgOYfJWqSsK6JKsRfuRH+tbQ==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "@zkochan/rimraf": "^2.1.2", - "fs-extra": "10.1.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12.10" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=4" + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/reusify": { @@ -5703,51 +3268,11 @@ "node": ">=0.10.0" } }, - "node_modules/reverse-arguments": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/reverse-arguments/-/reverse-arguments-1.0.0.tgz", - "integrity": "sha512-/x8uIPdTafBqakK0TmPNJzgkLP+3H+yxpUJhCQHsLBg1rYEVNR2D8BRYNWQhVBjyOd7oo1dZRVzIkwMY2oqfYQ==", - "dev": true - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rimraf/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "3.29.4", "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, "bin": { "rollup": "dist/bin/rollup" }, @@ -5759,20 +3284,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/rollup-plugin-analyzer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-analyzer/-/rollup-plugin-analyzer-4.0.0.tgz", - "integrity": "sha512-LL9GEt3bkXp6Wa19SNR5MWcvHNMvuTFYg+eYBZN2OIFhSWN+pEJUQXEKu5BsOeABob3x9PDaLKW7w5iOJnsESQ==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "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==" - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5796,439 +3307,151 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sass": { - "version": "1.69.5", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", - "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "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/semver/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/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "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": ">=8" - } - }, - "node_modules/shell-quote-word": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/shell-quote-word/-/shell-quote-word-1.0.1.tgz", - "integrity": "sha512-lT297f1WLAdq0A4O+AknIFRP6kkiI3s8C913eJ0XqBxJbZPGWUNkRQk2u8zk4bEAjUJ5i+fSLwB6z1HzeT+DEg==", - "dev": true - }, - "node_modules/siginfo": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true - }, - "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, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/sirv": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", - "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", - "dev": true, - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" + "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, "engines": { "node": ">=0.10.0" } }, - "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 - }, - "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, - "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 - }, - "node_modules/split2": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", - "dev": true, - "dependencies": { - "readable-stream": "^3.0.0" - } - }, - "node_modules/ssri": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.5.tgz", - "integrity": "sha512-bSf16tAFkGeRlUNDjXu8FzaMQt6g2HZJrun7mtMbIPOddxt3GLMSz5VWUWcqTJUPfLEaDIepGxv+bYQW49596A==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true - }, - "node_modules/std-env": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.4.3.tgz", - "integrity": "sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==", - "dev": true - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width-cjs": { - "name": "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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs/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 - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.fromcodepoint": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/string.fromcodepoint/-/string.fromcodepoint-0.2.1.tgz", - "integrity": "sha512-n69H31OnxSGSZyZbgBlvYIXlrMhJQ0dQAX1js1QDhpaUH6zmU3QYlj07bCwCNlPOu3oRXIubGPl2gDGnHsiCqg==", - "dev": true - }, "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==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "ansi-regex": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" }, "engines": { "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", - "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", - "dev": true, - "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/summary": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/summary/-/summary-2.1.0.tgz", - "integrity": "sha512-nMIjMrd5Z2nuB2RZCKJfFMjgS3fygbeyGk9PxPPaJR1RIcyN9yn4A63Isovzm3ZtQuEkLBVgMdPup8UeLH7aQw==", - "dev": true - }, "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==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "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/throttle-debounce": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-3.0.1.tgz", - "integrity": "sha512-dTEWWNu6JmeVXY0ZYoPuH5cRIwc0MeGbJwah9KUNYSJwommQpCzTySTpEe8Gs1J23aeWEuAobe4Ag7EHVt/LOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", - "dev": true, - "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", - "dev": true - }, - "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tinyspy": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", - "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", - "dev": true, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tippy.js": { - "version": "6.3.7", - "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-6.3.7.tgz", - "integrity": "sha512-E1d3oP2emgJ9dRQZdf3Kkn0qJgI6ZLpyS5z6ZkY1DF3kaQaBsGZsndEpHwx+eC+tYM41HaSNvNtLx8tU57FzTQ==", - "dependencies": { - "@popperjs/core": "^2.9.0" - } - }, - "node_modules/to-no-case": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/to-no-case/-/to-no-case-1.0.2.tgz", - "integrity": "sha512-Z3g735FxuZY8rodxV4gH7LxClE4H0hTIyHNIHdk+vpQxjLm0cwnKXq/OFVZ76SOQmto7txVcwSCwkU5kqp+FKg==", - "dev": true - }, - "node_modules/to-pascal-case": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-pascal-case/-/to-pascal-case-1.0.0.tgz", - "integrity": "sha512-QGMWHqM6xPrcQW57S23c5/3BbYb0Tbe9p+ur98ckRnGDwD4wbbtDiYI38CfmMKNB5Iv0REjs5SNDntTwvDxzZA==", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", + "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", "dev": true, "dependencies": { - "to-space-case": "^1.0.0" + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tcomb": { + "version": "3.2.29", + "resolved": "https://registry.npmjs.org/tcomb/-/tcomb-3.2.29.tgz", + "integrity": "sha512-di2Hd1DB2Zfw6StGv861JoAF5h/uQVu/QJp2g8KVbtfKnoHdBQl5M32YWq6mnSYBQ1vFFrns5B1haWJL7rKaOQ==", + "dev": true + }, + "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, + "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, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6236,248 +3459,46 @@ "node": ">=8.0" } }, - "node_modules/to-regex-range/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==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/to-space-case": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-space-case/-/to-space-case-1.0.0.tgz", - "integrity": "sha512-rLdvwXZ39VOn1IxGL3V6ZstoTbwLRckQmn/U8ZDLuWwIXNpuZDhQ3AiRUlhTbOXFVE9C+dR51wM0CBDhk31VcA==", - "dev": true, - "dependencies": { - "to-no-case": "^1.0.0" - } - }, - "node_modules/totalist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", - "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "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, - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "devOptional": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" - }, - "node_modules/ufo": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.1.tgz", - "integrity": "sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==", + "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 }, - "node_modules/unconfig": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.11.tgz", - "integrity": "sha512-bV/nqePAKv71v3HdVUn6UefbsDKQWRX+bJIkiSm0+twIds6WiD2bJLWWT3i214+J/B4edufZpG2w7Y63Vbwxow==", + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "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==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "dependencies": { - "@antfu/utils": "^0.7.6", - "defu": "^6.1.2", - "jiti": "^1.20.0", - "mlly": "^1.4.2" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "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==", - "devOptional": true - }, - "node_modules/unescape-js": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/unescape-js/-/unescape-js-1.1.4.tgz", - "integrity": "sha512-42SD8NOQEhdYntEiUQdYq/1V/YHwr1HLwlHuTJB5InVVdOSbgI6xu8jK5q65yIzuFCfczzyDF/7hbGzVbyCw0g==", - "dev": true, - "dependencies": { - "string.fromcodepoint": "^0.2.1" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unocss": { - "version": "0.57.1", - "resolved": "https://registry.npmjs.org/unocss/-/unocss-0.57.1.tgz", - "integrity": "sha512-xLsyJ8+T1/Ux93yrqOvuQy268wF5rSzydlsbqZ5EVfi01PxYyydez3nycPqbyPZientkJ0Yohzd5aBqmZgku3A==", - "dev": true, - "dependencies": { - "@unocss/astro": "0.57.1", - "@unocss/cli": "0.57.1", - "@unocss/core": "0.57.1", - "@unocss/extractor-arbitrary-variants": "0.57.1", - "@unocss/postcss": "0.57.1", - "@unocss/preset-attributify": "0.57.1", - "@unocss/preset-icons": "0.57.1", - "@unocss/preset-mini": "0.57.1", - "@unocss/preset-tagify": "0.57.1", - "@unocss/preset-typography": "0.57.1", - "@unocss/preset-uno": "0.57.1", - "@unocss/preset-web-fonts": "0.57.1", - "@unocss/preset-wind": "0.57.1", - "@unocss/reset": "0.57.1", - "@unocss/transformer-attributify-jsx": "0.57.1", - "@unocss/transformer-attributify-jsx-babel": "0.57.1", - "@unocss/transformer-compile-class": "0.57.1", - "@unocss/transformer-directives": "0.57.1", - "@unocss/transformer-variant-group": "0.57.1", - "@unocss/vite": "0.57.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "bin": { + "update-browserslist-db": "cli.js" }, "peerDependencies": { - "@unocss/webpack": "0.57.1", - "vite": "^2.9.0 || ^3.0.0-0 || ^4.0.0" - }, - "peerDependenciesMeta": { - "@unocss/webpack": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" + "browserslist": ">= 4.21.0" } }, "node_modules/util-deprecate": { @@ -6486,40 +3507,11 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", - "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", - "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/version-selector-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/version-selector-type/-/version-selector-type-3.0.0.tgz", - "integrity": "sha512-PSvMIZS7C1MuVNBXl/CDG2pZq8EXy/NW2dHIdm3bVP5N0PC8utDK8ttXLXj44Gn3J0lQE3U7Mpm1estAOd+eiA==", - "dev": true, - "dependencies": { - "semver": "^7.3.2" - }, - "engines": { - "node": ">=10.13" - } - }, "node_modules/vite": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, "dependencies": { "esbuild": "^0.18.10", "postcss": "^8.4.27", @@ -6570,342 +3562,14 @@ } } }, - "node_modules/vite-node": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", - "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", - "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/vite-plugin-compression2": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/vite-plugin-compression2/-/vite-plugin-compression2-0.11.0.tgz", - "integrity": "sha512-U6oEyRXZD26BynOgD/tStNTbQOLPt96aQNj/gdJTicKVYCQCdlV7QdmSF7VEhSyjiS59pQRhiMBu/uajprxWLA==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vite-plugin-full-reload/-/vite-plugin-full-reload-1.1.0.tgz", + "integrity": "sha512-3cObNDzX6DdfhD9E7kf6w2mNunFpD7drxyNgHLw+XwIYAgb+Xt16SEXo0Up4VH+TMf3n+DSVJZtW2POBGcBYAA==", "dev": true, "dependencies": { "picocolors": "^1.0.0", "picomatch": "^2.3.1" - }, - "peerDependencies": { - "vite": "^2 || ^3 || ^4" - } - }, - "node_modules/vitest": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", - "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", - "dev": true, - "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.6", - "@vitest/runner": "0.34.6", - "@vitest/snapshot": "0.34.6", - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.10", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.6", - "why-is-node-running": "^2.2.2" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true - } - } - }, - "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/vlq": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz", - "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow==", - "dev": true - }, - "node_modules/vue": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.7.tgz", - "integrity": "sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==", - "dependencies": { - "@vue/compiler-dom": "3.3.7", - "@vue/compiler-sfc": "3.3.7", - "@vue/runtime-dom": "3.3.7", - "@vue/server-renderer": "3.3.7", - "@vue/shared": "3.3.7" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "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" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-router": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", - "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", - "dependencies": { - "@vue/devtools-api": "^6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, - "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==" - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", - "dev": true, - "optional": true, - "dependencies": { - "defaults": "^1.0.3" - } - }, - "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, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", - "dev": true, - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "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, - "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/wrap-ansi-cjs/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 - }, - "node_modules/wrap-ansi-cjs/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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -6914,61 +3578,13 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "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/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", "dev": true, "engines": { - "node": ">=12" - } - }, - "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/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zod": { - "version": "3.22.4", - "resolved": "https://registry.npmjs.org/zod/-/zod-3.22.4.tgz", - "integrity": "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - }, - "node_modules/zod-validation-error": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-1.5.0.tgz", - "integrity": "sha512-/7eFkAI4qV0tcxMBB/3+d2c1P6jzzZYdYSlBuAklzMuCrJu5bzJfHS0yVAS87dRHVlhftd6RFJDIvv03JgkSbw==", - "dev": true, - "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "zod": "^3.18.0" + "node": ">= 14" } } } diff --git a/package.json b/package.json index bd014a0..981634d 100644 --- a/package.json +++ b/package.json @@ -1,53 +1,17 @@ { "private": true, + "type": "module", "scripts": { "dev": "vite", - "build": "vite build", - "lint": "eslint \"**/*.{js,jsx,.vue}\" --ignore-path .gitignore", - "format": "prettier . --write", - "test": "vitest", - "knip": "knip", - "ls-lint": "npx @ls-lint/ls-lint" + "build": "vite build" }, "devDependencies": { - "@ls-lint/ls-lint": "^2.2.2", - "@typescript-eslint/eslint-plugin": "^6.9.1", - "@typescript-eslint/parser": "^6.9.1", - "eslint": "^8.52.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-jsdoc": "^46.6.0", - "eslint-plugin-vue": "^9.18.1", - "knip": "^2.38.6", + "autoprefixer": "^10.4.16", + "axios": "^1.6.1", "laravel-vite-plugin": "^0.8.0", - "lodash": "^4.17.19", - "postcss": "^8.4.27", - "prettier": "3.0.3", - "rollup-plugin-analyzer": "^4.0.0", - "ts-node": "^10.9.1", - "typescript": "^5.0.4", - "unocss": "^0.57.1", - "vite": "^4.4.7", - "vite-plugin-compression2": "^0.11.0", - "vitest": "^0.34.3" - }, - "dependencies": { - "@tiptap/extension-highlight": "^2.1.8", - "@tiptap/extension-image": "^2.0.3", - "@tiptap/extension-link": "^2.0.3", - "@tiptap/extension-subscript": "^2.0.3", - "@tiptap/extension-superscript": "^2.1.8", - "@tiptap/extension-text-align": "^2.0.3", - "@tiptap/extension-underline": "^2.0.3", - "@tiptap/pm": "^2.0.3", - "@tiptap/starter-kit": "^2.1.8", - "@tiptap/vue-3": "^2.0.3", - "@vitejs/plugin-vue": "^4.4.0", - "dompurify": "^3.0.4", - "dotenv": "^16.0.3", - "pinia": "^2.0.28", - "pinia-plugin-persistedstate": "^3.2.0", - "sass": "^1.69.5", - "vue": "^3.3.7", - "vue-router": "^4.2.2" + "postcss": "^8.4.31", + "precss": "^4.0.0", + "tailwindcss": "^3.3.5", + "vite": "^4.0.0" } } diff --git a/phpunit.xml b/phpunit.xml index 8df6492..5dfc079 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -24,7 +24,7 @@ - ./app + app diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..e1bdf18 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + precss: {}, + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/images/android-chrome-192x192.png b/public/images/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..2085bddabe5a0c2785ddc13a624a076984ab0f28 GIT binary patch literal 20338 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Λps4wd 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 OK{TGOelF{r5}E*ly5V~O literal 0 HcmV?d00001 diff --git a/public/images/favicon-16x16.png b/public/images/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..2a25ed2454912b85876d8be0b54a32ae34db222b GIT binary patch literal 683 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&Rm5z$EJF;uvBf zn4BO{^5Fmf|2@Z!9b0pPFE}9Jfx|Q9%`+Wk0s{k`)55~`Z@c$W^m?BCi{Q&wvMUOn ze>=H7KmLArU|?c>*3>;SeXqV)-Z6*Qe1GqL`Rm-rUdQjh_m}q)x0%E33rfc>+*vrY zxi|9p*T2SluCKcvdG6%d)aviw&W5fsn#9=GnGPepFcleNP6;* z$NJ&?F|5)bUjBV;{eFFH#g{J!ZS6EQ+f~_$cf+ISKP1v_cbukQ*lz` zL;2J1-_P$6GWDN%vhHTV-}mx-qIH3Bw%)nfZTi#uY%0o2UWHDG6BA%$eim=HKJEAJ zyDw!o&u;&5*M8rtkLf8}m;N(+Q~7E7`^i5&*PZ;HZ@9euR*fl z`~UiXul*zaIQLk6xcaDf+nK*R)p)|^8yeXBKd19K`ul3z%{TPh>iH%0>l1$HGF(2) zksPsUgUQkVKZDPnIPu}Xy-9)OKjx*9jW!AllLg-WKYT{#`1F52lX->Os~v?-d`w74 zXj+kyV8Q-Go~>v{gVoQ*HwFrArwsQoZd}Na$Kb=@wwg)Opf$_DQOD#CL%^zv?qvrg zI{S6L^Lon2u`w|*aoyivf8A-);gcz8X>~u}-rm01Li9o?6T`f%r+02_?+6AZ6i-(_ Jmvv4FO#nj!FcJU& literal 0 HcmV?d00001 diff --git a/public/images/favicon-32x32.png b/public/images/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..4f2893cc2bfd2ebb7bc6be37fa7ff1fbdff02990 GIT binary patch literal 1587 zcmV-32F&@1P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91AfN*P1ONa40RR91AOHXW0IY^$^8f$^ok>JNR9Fe^R((uUR}??5Eq#Ro zrBKWG&oD+#AZgbg~!Dy%AAk*P8oq|f{ zbW8AKv%vf);s;m}u(d!-X>0B0-Mw|MgM!2mvSbM-Il1SZd(Sz)d)_(cJ%CA?%)tL4 z17&4p+^noD5kiO>3-9dNv!{=>Kib}?4x^%?#5$cWYk7VV<)oZTRNdVLK~u#1maCT) zI&I%-jYf0B(^-6E{It6%(k8$Ae}1BE`AtUlC6fFQk%+c6Hy`cuJU`+&F)>jn3=*9Z z28zzoG~N99HwVy_8%osHHRxt}TQ`~+mv|>PH@AX}8-#7U$%`R7nJA`}^SP zl}4yPaSSe;JA?A1D@8}D4|Z8BmS)EG<>0^_E2eud4!w2)?&-|jIWPI{_V-Ws>kbO4 z2w43ZPas{IY6%HlKP6*X1WTc{KY60O$JlZhp{AzB6crQKdR^X_a`D{BMoo7|nnABO z$NIMm+f-~l#h;dGHk)T$Z;{us*=!wSM^;38C-mw~;OEPS%>Ispd-v8F3ku4tQW`zx zo&I@hg9U-tqHKyQ3NA*y>Y|0W!$QuVukI(d!)hQfFt8BcEELzk86J;^SRBp|3BktX zySEicgQC-HHk(Eu5cul#dLuC=#OLz``K#V&Nk~feI=HXW_UK_pve9T9%v<(m?5Z`Z z8$v_H)S3F<;bD&kYLyzK?@%7oHSS;a%-RD0QId+UE-%+{oK7E~v<#@+FN5t{Hp8Il zDX=-NSIgMCR_)_1*!0RRF!JJ|zFh)VyThgT_lbZ-xr-nnF&c{YErHUw9dPW(DcQWt zoDDMByEeuNixHSrB9X8noK89xD{MA9Yt#auLTy1g09YshM~bp%n<;H@*hG${ywvMl&zP3J@g^G z_x?sO^s5^zgZ(qC25pL^@8+)iZ8tuBHCp95eosxoQ^T;BzL%w|gB603;x^w&P*9f&`3)lAmRaM2?x^}HG1#s7~SWmGEIgpcPvw`Js;=Uyo z4i+9D6zK^-l+&f7@XI6}Na4|jYrAVdHF002ovPDHLkV1iX`*d71? literal 0 HcmV?d00001 diff --git a/public/images/favicon.ico b/public/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..45023b3453e7e3fe2874adeb9f142b5ccde2a7be GIT binary patch literal 15406 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 Yy9e4m(C&eD543xr-2?3&XbTVg4@8qP#{d8T literal 0 HcmV?d00001 diff --git a/public/images/hero.webp b/public/images/hero.webp new file mode 100644 index 0000000000000000000000000000000000000000..72bd4599b449ba66ecec73425e86d32b214a40ed GIT binary patch literal 146254 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 literal 0 HcmV?d00001 diff --git a/public/images/logo-copy.svg b/public/images/logo-copy.svg new file mode 100644 index 0000000..b4250e5 --- /dev/null +++ b/public/images/logo-copy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/logo-old.svg b/public/images/logo-old.svg new file mode 100644 index 0000000..da85e65 --- /dev/null +++ b/public/images/logo-old.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/logo.svg b/public/images/logo.svg new file mode 100644 index 0000000..782ab49 --- /dev/null +++ b/public/images/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/images/minecraft-icon.png b/public/images/minecraft-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ec991a2363931827fb6960a541c6d85bd6abf490 GIT binary patch literal 24536 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 { + setTimeout(function () { + window.stemmech.cleanupBackLinks(); + window.stemmech.inputErrorListener(); + window.stemmech.formSubmitListener(); + window.stemmech.formChangeListener(); + }, 1); + + window.SVGInject(document.querySelectorAll("img.injectable")); +}); diff --git a/resources/js/stemmech.ts b/resources/js/stemmech.ts new file mode 100644 index 0000000..ac3f8d7 --- /dev/null +++ b/resources/js/stemmech.ts @@ -0,0 +1,302 @@ +export interface StemmechStatic { + hasUnsavedChanges: number; + unsavedChangesMessageStack: string[]; + ready(callback: () => void): void; + getAllSiblings( + elem: HTMLElement, + filter?: (elem: HTMLElement) => boolean + ): HTMLElement[]; + getQueryParam(param: string, defaultValue: string | null): string | null; + cleanupBackLinks(): void; + inputErrorListener(): void; + formSubmitListener(): void; + formChangeListener(): void; + formBusy(message: string): void; + formIdle(popMessage: boolean): void; +} + +const stemmech: StemmechStatic = { + hasUnsavedChanges: 0, + unsavedChangesMessageStack: ['You have unsaved changes. Are you sure you want to leave this page?'], + + /** + * Executes the provided callback function when the DOM is fully loaded. + * + * @param {function} callback - The function to be executed when the DOM is ready. + */ + ready: function (callback) { + document.addEventListener("DOMContentLoaded", function () { + if (typeof callback === "function") { + callback(); + } + }); + }, + + /** + * Get all siblings of an element. + * + * @param {HTMLElement} elem - The element to find siblings for. + * @param {function} [filter] - A filter function to apply to the siblings. + * @returns {HTMLElement[]} An array of sibling elements. + */ + getAllSiblings: function (elem, filter) { + const sibs: HTMLElement[] = []; + elem = elem.parentNode?.firstChild as HTMLElement; + do { + if (elem?.nodeType === 3) continue; + if (!filter || (filter && filter(elem))) sibs.push(elem); + } while ((elem = elem.nextSibling as HTMLElement)); + return sibs; + }, + + /** + * Get a query parameter from the current URL. + * + * @param {string} param - The query parameter to retrieve. + * @param {*} [defaultValue=null] - The default value if the parameter is not found. + * @returns {*} The value of the query parameter or the default value. + */ + getQueryParam: function (param, defaultValue = null) { + const urlSearchParams = new URLSearchParams(window.location.search); + const paramValue = urlSearchParams.get(param); + return paramValue !== null ? paramValue : defaultValue; + }, + + /** + * Cleans up back links in the document by replacing links with "javascript:history.back()" href attributes + * with the actual document.referrer value. + */ + cleanupBackLinks: function () { + var links = document.getElementsByTagName("a"); + + for (var i = 0; i < links.length; i++) { + if (links[i].getAttribute("href") === "javascript:history.back()") { + links[i].setAttribute("href", document.referrer); + } + } + }, + + /** + * Listens for input events on input elements with error-related siblings and removes the error + * siblings when input occurs. + */ + inputErrorListener: function () { + function handleRemoveErrorSiblings(event: Event) { + const element = event.currentTarget as HTMLInputElement; + const siblings = window.stemmech.getAllSiblings(element, (e) => { + return ( + e.nodeName.toUpperCase() === "P" && + e.classList.contains("error") + ); + }); + + siblings.forEach((item) => { + if (item.parentNode) item.parentNode.removeChild(item); + }); + + element.removeEventListener("input", handleRemoveErrorSiblings); + } + + // Attach event listener only to those inputs that have a following p.error sibling + document.querySelectorAll("input").forEach(function (input) { + const hasErrorSiblings = stemmech.getAllSiblings(input, (e) => { + return ( + e.nodeName.toUpperCase() === "P" && + e.classList.contains("error") + ); + }); + + if (hasErrorSiblings.length > 0) { + input.addEventListener("input", handleRemoveErrorSiblings); + } + }); + }, + + /** + * Handle the form submission by disabling input elements and showing a spinner. + */ + formSubmitListener: function () { + function handleFormSubmit(event: Event) { + const element = event.currentTarget as HTMLElement; + + // Find the submit button in the form + var submitButtons = element.querySelectorAll( + 'input[type="submit"], button[type="submit"]' + ); + + submitButtons.forEach((button) => { + var style = window.getComputedStyle(button); + + (button as HTMLElement).style.width = style.width; + (button as HTMLElement).style.height = style.height; + // Change the HTML of the submit button + button.innerHTML = + ''; + }); + + element + .querySelectorAll('input:not([type="submit"]), textarea') + .forEach(function (item) { + (item as HTMLInputElement).readOnly = true; + }); + element + .querySelectorAll('input[type="submit"], button') + .forEach(function (item) { + (item as HTMLInputElement).disabled = true; + }); + } + + var form = document.querySelector("form"); + if (form) { + form.addEventListener("submit", handleFormSubmit); + } + }, + + formChangeListener: function() { + const forms = document.querySelectorAll('form'); + + if (forms.length > 0) { + forms.forEach(form => { + form.addEventListener('input', () => { + this.hasUnsavedChanges++; + }, { once: true }); + }); + + window.addEventListener('beforeunload', (event) => { + if (this.hasUnsavedChanges) { + event.preventDefault(); + event.returnValue = this.unsavedChangesMessageStack[this.unsavedChangesMessageStack.length - 1]; + return event.returnValue; + } + }); + } + }, + + formBusy: function (message: string = "") { + this.hasUnsavedChanges++; + if (message != "") { + this.unsavedChangesMessageStack.push(message); + } + }, + + formIdle: function (popMessage: boolean = false) { + this.hasUnsavedChanges--; + if (popMessage) { + this.unsavedChangesMessageStack.pop(); + } + }, + + + + + + function uploadFilesWithFeedback(files: FileList, url: string, formElement: HTMLFormElement, containerElement: HTMLElement, allowedExtensions: string[]): Promise { + // Disable all submit buttons in the form + const submitButtons = formElement.querySelectorAll('input[type="submit"], button[type="submit"]'); + submitButtons.forEach((button) => { + button.disabled = true; + }); + + // Create an array to store promises for each file upload + const uploadPromises: Promise[] = []; + + // Iterate through the files in the FileList + for (let i = 0; i < files.length; i++) { + const file = files[i]; + + // Check if the file has an allowed extension + const fileExtension = file.name.split('.').pop()?.toLowerCase(); + if (!fileExtension || !allowedExtensions.includes(fileExtension)) { + // Skip this file if the extension is not allowed + console.warn(`Skipping file "${file.name}" due to an invalid extension.`); + continue; + } + + // Create a promise for each file upload + const uploadPromise = new Promise((resolve, reject) => { + // Create a FormData object to send the file + const formData = new FormData(); + formData.append('file', file); + + // Create a new DIV element for feedback + const feedbackDiv = document.createElement('div'); + feedbackDiv.classList.add('upload-feedback'); + + // Set the background image of the feedback DIV + const backgroundUrl = `/public/file_icons/${fileExtension}.png`; + feedbackDiv.style.backgroundImage = `url(${backgroundUrl}), url('data:image/svg+xml;utf8,')`; + + // Create a spinner icon + const spinnerIcon = document.createElement('i'); + spinnerIcon.classList.add('fas', 'fa-spinner', 'fa-spin'); + + // Append the spinner icon to the feedback DIV + feedbackDiv.appendChild(spinnerIcon); + + // Append the feedback DIV to the container element + containerElement.appendChild(feedbackDiv); + + // Perform the POST request + fetch(url, { + method: 'POST', + body: formData, + }) + .then((response) => { + if (response.ok) { + // Remove spinner and add a tick icon for success + feedbackDiv.innerHTML = ''; + resolve(); + } else { + // Remove spinner and add an error icon for errors + feedbackDiv.innerHTML = ''; + console.error('File upload failed:', response.statusText); + reject(response.statusText); + } + }) + .catch((error) => { + // Handle network errors + feedbackDiv.innerHTML = ''; + console.error('File upload error:', error); + reject(error); + }); + }); + + // Add the upload promise to the array + uploadPromises.push(uploadPromise); + } + + // Return a promise that resolves when all uploads are complete (success or error) + return Promise.all(uploadPromises) + .finally(() => { + // Enable all submit buttons in the form when all uploads are complete + submitButtons.forEach((button) => { + button.disabled = false; + }); + }); +} + +// Example usage: +const fileInput = document.getElementById('file-input') as HTMLInputElement; +const form = document.getElementById('my-form') as HTMLFormElement; +const container = document.getElementById('feedback-container'); +const allowedExtensions = ['jpg', 'jpeg', 'png', 'gif']; // Replace with your allowed extensions + +fileInput.addEventListener('change', () => { + const files = fileInput.files; + if (files.length > 0) { + uploadFilesWithFeedback(files, '/upload-url', form, container, allowedExtensions) + .then(() => { + console.log('All files uploaded successfully.'); + }) + .catch((error) => { + console.error('Error uploading files:', error); + }); + } +}); + + + + +}; + +export default stemmech; diff --git a/resources/views/account/index.blade.php b/resources/views/account/index.blade.php new file mode 100644 index 0000000..5eed7f3 --- /dev/null +++ b/resources/views/account/index.blade.php @@ -0,0 +1,40 @@ + + + +

+ + +

My Details

+
+ + + +

Users

+
+ + + +

Media

+
+ + + +

Posts

+
+ + + +

Workshops

+
+ + + +

Quotes

+
+ + + +

Invoices

+
+
+ diff --git a/resources/views/account/users-index.blade.php b/resources/views/account/users-index.blade.php new file mode 100644 index 0000000..643bebf --- /dev/null +++ b/resources/views/account/users-index.blade.php @@ -0,0 +1,54 @@ +@props(['users']) + + + + +
+
+ + + + + + + + + + + + + @unless (count($users) == 0) + + @foreach ($users as $user) + + + + + + + + + @endforeach + @else + + + + @endunless + +
 UsernameEmailActions
{{ $user->username }}{{ $user->email }} + + +
No users found
+
+
+
+ + +
+ +
+ {{ $users->links() }} +
+ +
diff --git a/resources/views/account/users-show.blade.php b/resources/views/account/users-show.blade.php new file mode 100644 index 0000000..d3a3fc1 --- /dev/null +++ b/resources/views/account/users-show.blade.php @@ -0,0 +1,35 @@ +@props(['user']) + + + + +
+
+
+ + +
+ @error('username') +

{{ $message }}

+ @enderror + +
+ + +
+ @error('email') +

{{ $message }}

+ @enderror + +
+ +
+ +
+ +
+
+
+
diff --git a/resources/views/components/banner.blade.php b/resources/views/components/banner.blade.php new file mode 100644 index 0000000..a82a0fb --- /dev/null +++ b/resources/views/components/banner.blade.php @@ -0,0 +1,23 @@ +@props(['heading', 'back']) + +@php + $backTitle = ''; + if (isset($back)) { + $parts = explode('.', $back); + if (count($parts) > 1) { + $backTitle = ucwords($parts[count($parts) - 2]); + } else { + $backTitle = ucwords($parts[0]); + } + } +@endphp + +
diff --git a/resources/views/components/card.blade.php b/resources/views/components/card.blade.php new file mode 100644 index 0000000..1493075 --- /dev/null +++ b/resources/views/components/card.blade.php @@ -0,0 +1,10 @@ +@if (isset($href)) + merge(['class' => 'bg-gray-50 border border-gray-300 rounded-lg p-6']) }}> + {{ $slot }} + +@else +
merge(['class' => 'bg-gray-50 border border-gray-300 rounded-lg p-6']) }}> + {{ $slot }} +
+@endif diff --git a/resources/views/components/flash-message.blade.php b/resources/views/components/flash-message.blade.php new file mode 100644 index 0000000..e1f432a --- /dev/null +++ b/resources/views/components/flash-message.blade.php @@ -0,0 +1,25 @@ +@if (session()->has('message')) + @php + $messageType = session('message-type', 'primary'); // Default to 'primary' if 'message_type' is not set + $messageClasses = [ + 'primary' => 'border-blue bg-blue-lighter text-blue-dark', + 'success' => 'border-green bg-green-lighter text-green-dark', + 'danger' => 'border-red bg-red-lighter text-red-dark', + 'warning' => 'border-yellow bg-yellow-lighter text-yellow-dark', + ]; + @endphp + +
+

+ {{ session('message') }} +

+
+@endif diff --git a/resources/views/components/layout.blade.php b/resources/views/components/layout.blade.php new file mode 100644 index 0000000..593d54c --- /dev/null +++ b/resources/views/components/layout.blade.php @@ -0,0 +1,34 @@ + + + + + + + + + + + + + @vite(['resources/css/app.css', 'resources/js/app.ts']) + STEMMechanics + + + + @include('partials.nav') +
merge(['class' => 'grow']) }}> + {{ $slot }} +
+ + @include('partials.footer') + + @stack('scripts') + + + diff --git a/resources/views/components/workshop-card.blade.php b/resources/views/components/workshop-card.blade.php new file mode 100644 index 0000000..6a828ea --- /dev/null +++ b/resources/views/components/workshop-card.blade.php @@ -0,0 +1,10 @@ +@props(['workshop']) + + +
+

{{ $workshop->title }}

+

{{ Str::limit(strip_tags($workshop->content), 200, '...') }}

+ + View +
+
diff --git a/resources/views/emails/users/email-verify-plain.blade.php b/resources/views/emails/users/email-verify-plain.blade.php new file mode 100644 index 0000000..f21452b --- /dev/null +++ b/resources/views/emails/users/email-verify-plain.blade.php @@ -0,0 +1,18 @@ +Welcome {{ $user?->username }}, + +We've heard you would like to try out our workshops and courses! +Before we can let you loose on our website, we need to make sure you are a real person and not a pesky robot or cat. + +Enter the following URL in your browser: + +https://www.stemmechanics.com.au/verify + +and when asked, use the confirm code: {{ $code }} + +Need help or got feedback? Contact us at https://www.stemmechanics.com.au/contact or touch base on twitter at +@stemmechanics + +-- +Sent by STEMMechanics +https://www.stemmechanics.com.au/ +PO Box 36, Edmonton, QLD 4869, Australia diff --git a/resources/views/emails/users/email-verify.blade.php b/resources/views/emails/users/email-verify.blade.php new file mode 100644 index 0000000..7f5ffc0 --- /dev/null +++ b/resources/views/emails/users/email-verify.blade.php @@ -0,0 +1,114 @@ + + + + + + + + STEMMechanics - Forgot Password + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + STEMMechanics Logo + +
+

Welcome {{ $user?->username }},

+
+ We've heard you would like to try out our workshops and courses! +
+ Before we can let you loose on our website, we need to make sure you are a real person and not a + pesky robot or cat. Click this link stemmechanics.com.au/verify + and if you are asked, use the confirm code: +
+ {{ $code }} +
+ But if you didn't ask to reset your password, you can delete + this email and your password will remain the same. +
+ Need help or got feedback? + Contact us + or touch base at + @stemmechanics. +
+ Sent by STEMMechanics · + Visit our Website + · + @stemmechanics
PO Box 36, Edmonton, QLD 4869, + Australia +
+ + + diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 0000000..4cb4d6c --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,18 @@ +@props(['workshops']) + + + @include('partials.hero') + +

Upcoming Workshops

+
+ @unless (count($workshops) == 0) + @foreach ($workshops as $workshop) + + @endforeach + @else +

No workshops found

+ @endunless +
+ + +
diff --git a/resources/views/partials/email-verify.blade.php b/resources/views/partials/email-verify.blade.php new file mode 100644 index 0000000..782dbfd --- /dev/null +++ b/resources/views/partials/email-verify.blade.php @@ -0,0 +1,55 @@ +@props(['resend']) + +

+ Enter the verification code you received

+ +
+ + + @error('code') +

{{ $message }}

+ @enderror +
+ +@if (isset($resend)) +
+
+ +
+
+ +
+ @else +
+ +
+@endif + +@push('scripts') + +@endpush diff --git a/resources/views/partials/footer.blade.php b/resources/views/partials/footer.blade.php new file mode 100644 index 0000000..c33e0f0 --- /dev/null +++ b/resources/views/partials/footer.blade.php @@ -0,0 +1,43 @@ +
+
+
+

STEMMechanics Australia acknowledges the Traditional Owners of Country throughout Australia and the + continuing connection to land, cultures and communities. We pay our respect to Aboriginal and Torres + Strait Islander cultures; and to Elders both past, present and emerging.

+
+
+

Community

+
    +
  • + + + +
  • +
  • + + + +
  • +
+
+ +
+
+
+ +
+
+ Made with ❤️ © 2023 STEMMechanics +
+
+
diff --git a/resources/views/partials/hero.blade.php b/resources/views/partials/hero.blade.php new file mode 100644 index 0000000..2407725 --- /dev/null +++ b/resources/views/partials/hero.blade.php @@ -0,0 +1,9 @@ +
+

Join the fun!

+

To keep up with our ever-changing world, it's important to encourage and support a + new generation of curious minds who love science, engineering, art, and leadership.

+

Our fun and exciting workshops can unlock countless opportunities for new ideas and + improvements, giving kids the skills and tools they need to solve any problem that comes their way.

+
diff --git a/resources/views/partials/nav.blade.php b/resources/views/partials/nav.blade.php new file mode 100644 index 0000000..bff5dde --- /dev/null +++ b/resources/views/partials/nav.blade.php @@ -0,0 +1,77 @@ + diff --git a/resources/views/partials/search.blade.php b/resources/views/partials/search.blade.php new file mode 100644 index 0000000..08ba7fe --- /dev/null +++ b/resources/views/partials/search.blade.php @@ -0,0 +1,15 @@ +
+
+
+ +
+ +
+ +
+
+
diff --git a/resources/views/users/login.blade.php b/resources/views/users/login.blade.php new file mode 100644 index 0000000..82eb942 --- /dev/null +++ b/resources/views/users/login.blade.php @@ -0,0 +1,43 @@ + + +
+

Log in to STEMMechanics

+
+ +
+ @csrf + +
+ + + + @error('username') +

{{ $message }}

+ @enderror +
+ +
+ + + @error('password') +

{{ $message }}

+ @enderror +

+ Forgot Password

+
+ +
+

Need an account? + + Register +

+ +
+
+
+
diff --git a/resources/views/users/register.blade.php b/resources/views/users/register.blade.php new file mode 100644 index 0000000..7d0fc32 --- /dev/null +++ b/resources/views/users/register.blade.php @@ -0,0 +1,104 @@ + + +
+

Sign up to STEMMechanics

+ +
+ +
+ + @csrf + + @switch($form->currentStep()) + @case(1) +
+ + + @error('username') +

{{ $errors->first('username') }}

+ @enderror +
+ +
+ + + @error('password') +

{{ $errors->first('password') }}

+ @enderror +

Required to be at least 8 characters and include a + number

+
+ @break + + @case(2) +

Are you over or under 14 years old?

+ + + + + @break + + @case(3) + @if ($form->getValue('age') == 'over') +

Please enter your email address so we can verify your account

+ @else +

Please find a parent or guardian's email address, and we can verify your account

+ @endif + +
+ + @if ($form->getValue('age') == 'over') + + @else + + @endif + @error('email') +

{{ $message }}

+ @enderror +
+ @break + + @case(4) + @include('partials.email-verify', ['resend' => true]) + @break + + @endswitch + + @if ($form->currentStep() < 4) +
+ @if ($form->currentStep() == 1) + Already have an account? Login + @elseif ($form->currentStep() < 4) + + Back + @endif + + @if ($form->currentStep() == 1) + + @elseif ($form->currentStep() == 3) + + @endif +
+ @endif + + {{ $form->getValue('error') }} +
+
+
diff --git a/resources/views/users/verify.blade.php b/resources/views/users/verify.blade.php new file mode 100644 index 0000000..3ebb235 --- /dev/null +++ b/resources/views/users/verify.blade.php @@ -0,0 +1,13 @@ + + +
+

Sign up to STEMMechanics

+
+ +
+ @csrf + @include('partials.email-verify') + +
+
+
diff --git a/resources/views/vendor/pagination/bootstrap-4.blade.php b/resources/views/vendor/pagination/bootstrap-4.blade.php new file mode 100644 index 0000000..63c6f56 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-4.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/bootstrap-5.blade.php b/resources/views/vendor/pagination/bootstrap-5.blade.php new file mode 100644 index 0000000..a1795a4 --- /dev/null +++ b/resources/views/vendor/pagination/bootstrap-5.blade.php @@ -0,0 +1,88 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/default.blade.php b/resources/views/vendor/pagination/default.blade.php new file mode 100644 index 0000000..0db70b5 --- /dev/null +++ b/resources/views/vendor/pagination/default.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/semantic-ui.blade.php b/resources/views/vendor/pagination/semantic-ui.blade.php new file mode 100644 index 0000000..ef0dbb1 --- /dev/null +++ b/resources/views/vendor/pagination/semantic-ui.blade.php @@ -0,0 +1,36 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-4.blade.php b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php new file mode 100644 index 0000000..4bb4917 --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-4.blade.php @@ -0,0 +1,27 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-bootstrap-5.blade.php b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php new file mode 100644 index 0000000..a89005e --- /dev/null +++ b/resources/views/vendor/pagination/simple-bootstrap-5.blade.php @@ -0,0 +1,29 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-default.blade.php b/resources/views/vendor/pagination/simple-default.blade.php new file mode 100644 index 0000000..36bdbc1 --- /dev/null +++ b/resources/views/vendor/pagination/simple-default.blade.php @@ -0,0 +1,19 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/simple-tailwind.blade.php b/resources/views/vendor/pagination/simple-tailwind.blade.php new file mode 100644 index 0000000..f9828df --- /dev/null +++ b/resources/views/vendor/pagination/simple-tailwind.blade.php @@ -0,0 +1,29 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/vendor/pagination/tailwind.blade.php b/resources/views/vendor/pagination/tailwind.blade.php new file mode 100644 index 0000000..fad6dba --- /dev/null +++ b/resources/views/vendor/pagination/tailwind.blade.php @@ -0,0 +1,46 @@ +@if ($paginator->hasPages()) + +@endif diff --git a/resources/views/workshops/index.blade.php b/resources/views/workshops/index.blade.php new file mode 100644 index 0000000..5a9562f --- /dev/null +++ b/resources/views/workshops/index.blade.php @@ -0,0 +1,20 @@ + + @include('partials.search') + +
+ + @unless (count($workshops) == 0) + + @foreach ($workshops as $workshop) + + @endforeach + @else +

No workshops found

+ @endunless + +
+ +
+ {{ $workshops->links() }} +
+
diff --git a/routes/web.php b/routes/web.php index b9aedb5..cf127ec 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,10 @@ where('any', '.*'); +Route::get('/', [HomeController::class, 'index'])->name('home'); + +Route::match(['get', 'post'], '/register', [UserController::class, 'register'])->name('register'); +Route::get('/login', [UserController::class, 'login'])->name('login'); +Route::post('/login', [UserController::class, 'authenticate']); +Route::get('/logout', [UserController::class, 'logout'])->name('logout')->middleware('auth'); +Route::get('/verify', [UserController::class, 'verify'])->name('verify'); +Route::post('/verify', [UserController::class, 'verify_store'])->name('verify.store'); + +Route::get('/account', [AccountController::class, 'index'])->name('account.index'); +Route::get('/account/users', [AccountController::class, 'users_index'])->name('account.users.index'); +Route::get('/account/users/{user}', [AccountController::class, 'users_show'])->name('account.users.show'); +Route::put('/account/users/{user}', [AccountController::class, 'users_show'])->name('account.users.show'); +Route::get('/workshops', [WorkshopController::class, 'index'])->name('workshop.show'); \ No newline at end of file diff --git a/scripts/keras.py b/scripts/keras.py deleted file mode 100644 index bebd26c..0000000 --- a/scripts/keras.py +++ /dev/null @@ -1,13 +0,0 @@ -import sys -import urllib.parse -import numpy as np -import keras_ocr - -if len(sys.argv) > 1: - url = urllib.parse.unquote(sys.argv[1]) - image = keras_ocr.tools.read(url) - pipeline = keras_ocr.pipeline.Pipeline() - prediction = pipeline.recognize([image]) - print("----------START----------") - for text, box in prediction [0]: - print(text) diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..0380560 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,49 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: ["./resources/**/*.blade.php", "./resources/**/*.js"], + theme: { + extend: { + colors: { + "blue-lighter": "#cce5ff", + "blue-light": "#33ccff", + blue: "#00a5f1", + "blue-dark": "#007bb4", + + "red-lighter": "#f8d7da", + "red-light": "#ff6666", + red: "#e00000", + "red-dark": "#cc0000", + + "green-lighter": "#d4edda", + "green-light": "#35D100", + green: "#21af00", + "green-dark": "#188300", + + "orange-light": "#ffcc33", + orange: "#f89e00", + "orange-dark": "#ba7600", + + "yellow-lighter": "#f8d7da", + "yellow-light": "#ffea66", + yellow: "#ffdb05", + "yellow-dark": "#cc9900", + + "pink-light": "#ff33cc", + pink: "#ff02ad", + "pink-dark": "#cc0099", + }, + transitionDuration: { + DEFAULT: "50ms", + }, + fontFamily: { + sans: "Poppins,Roboto,Open Sans,ui-sans-serif,system-ui,sans-serif", + }, + }, + }, + variants: { + extend: { + backgroundColor: ["disabled"], + textColor: ["disabled"], + }, + }, +}; diff --git a/tsconfig.json b/tsconfig.json index b48fd4e..3351c9a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,6 +8,6 @@ "skipLibCheck": true, "forceConsistentCasingInFileNames": true }, - "include": ["resources/**/*"], + "include": ["resources/js/**/*"], "exclude": ["node_modules", "dist"] } diff --git a/vite.config.ts b/vite.config.ts index 6de0114..0dfdf9c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,52 +1,11 @@ -import vue from "@vitejs/plugin-vue"; -import laravel from "laravel-vite-plugin"; -import analyzer from "rollup-plugin-analyzer"; -import { compression } from "vite-plugin-compression2"; import { defineConfig } from "vite"; -import Unocss from "unocss/vite"; +import laravel from "laravel-vite-plugin"; export default defineConfig({ plugins: [ - vue({ - template: { - compilerOptions: { - isCustomElement: (tag) => ["ion-icon"].includes(tag), - }, - transformAssetUrls: { - base: null, - includeAbsolute: false, - }, - }, - }), - Unocss({}), laravel({ - input: ["resources/css/app.scss", "resources/js/main.js"], + input: ["resources/css/app.css", "resources/js/app.ts"], refresh: true, }), - analyzer({ summaryOnly: true }), - compression({ - include: [/\.(js)$/, /\.(css)$/], - // deleteOriginalAssets: true, - }), ], - css: { - preprocessorOptions: { - scss: { - // additionalData: `@import "./resources/css/variables.scss";`, - }, - }, - }, - envPrefix: ["VITE_", "APP_URL"], - resolve: { - alias: { - vue: "vue/dist/vue.esm-bundler.js", - }, - }, - build: { - chunkSizeWarningLimit: 500, - rollupOptions: { - output: {}, - }, - }, - base: "", });